---
url: /ja/rules/no-parent-name-construct-id-match.md
---

# no-parent-name-construct-id-match

このルールでは、Construct ID に 親クラスの名前を指定することを禁止します。

Construct ID に、親クラス名と一致する (または含む) 文字列を指定すると、CloudFormation リソースの階層が不明瞭になるため推奨されません。

***

#### 🔧 使用方法

::: code-group

```ts [Oxlint]
// oxlint.config.ts
export default defineConfig({
  // ... some configs
  rules: {
    "awscdk/no-parent-name-construct-id-match": "error",
  },
});
```

```js [ESLint]
// eslint.config.mjs
export default defineConfig({
  // ... some configs
  rules: {
    "awscdk/no-parent-name-construct-id-match": "error",
  },
});
```

:::

#### ✅ 適切な例

```ts
import { Construct } from "constructs";
import { Bucket } from "aws-cdk-lib/aws-s3";

export class MyConstruct extends Construct {
  constructor(scope: Construct, id: string) {
    super(scope, id);

    // ✅ 親クラスと異なる名前を指定している
    const bucket = new Bucket(this, "MyBucket");

    // ✅ 親クラス名を含むコンストラクト ID を指定しているが、完全に一致していない
    const bucket = new Bucket(this, "MyConstructBucket");
  }
}
```

#### ❌ 不適切な例

```ts
import { Construct } from "constructs";
import { Bucket } from "aws-cdk-lib/aws-s3";

export class MyConstruct extends Construct {
  constructor(scope: Construct, id: string) {
    super(scope, id);

    // ❌ 親クラスと同じ名前を指定している
    const bucket = new Bucket(this, "MyConstruct");
  }
}
```

## オプション

```ts
type Options = {
  disallowContainingParentName: boolean;
};

const defaultOptions: Options = {
  disallowContainingParentName: false,
};
```

### `disallowContainingParentName`

`true` の場合、親クラス名を含むコンストラクト ID を使用することを禁止します。\
`false` の場合、親クラス名を含むコンストラクト ID の使用は許可されますが、親クラス名と完全に一致するコンストラクト ID の使用は禁止します。

`{ disallowContainingParentName: true }` とした場合

#### ✅ 適切な例

```ts
import { Construct } from "constructs";
import { Bucket } from "aws-cdk-lib/aws-s3";

export class MyConstruct extends Construct {
  constructor(scope: Construct, id: string) {
    super(scope, id);

    // ✅ 親クラスと異なる名前を指定している
    const bucket = new Bucket(this, "MyBucket");
  }
}
```

#### ❌ 不適切な例

```ts
import { Construct } from "constructs";
import { Bucket } from "aws-cdk-lib/aws-s3";

export class MyConstruct extends Construct {
  constructor(scope: Construct, id: string) {
    super(scope, id);

    // ❌ 親クラスと同じ名前を指定している
    const bucket = new Bucket(this, "MyConstruct");

    // ❌ 親クラス名を含む名前を指定している
    const bucket = new Bucket(this, "MyConstructBucket");
  }
}
```
