Skip to content

no-construct-stack-suffix

recommended を使用した場合、このルールが有効になります。

このルールは Construct ID および Stack ID に、 "Construct" または "Stack" という文字列を含めることを禁止します。

Construct ID に "Construct" という文字列が含まれていると、CDK の世界で止めるべき問題が CloudFormation テンプレートおよび AWS の世界に漏れてしまうため、好ましくありません。(Stack ID についても同様です)


🔧 使用方法

ts
// eslint.config.mjs
export default defineConfig([
  {
    // ... some configs
    rules: {
      "awscdk/no-construct-stack-suffix": "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);

    // ✅ "Construct" および "Stack" 文字列が含まれていない
    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);

    // ❌ "Construct" 文字列が含まれている
    const bucket = new Bucket(this, "BucketConstruct");

    // ❌ "Stack" 文字列が含まれている
    new Stack(this, "MyStack");
  }
}

オプション

ts
type Options = {
  disallowedSuffixes: Array<"Construct" | "Stack">;
};

const defaultOptions: Options = {
  disallowedSuffixes: ["Construct", "Stack"],
};

disallowedSuffixes

禁止する suffix の配列。"Construct"、"Stack"、または両方を含めることができます。

{ disallowedSuffixes: ["Construct"] } とした場合

✅ 適切な例

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);

    // ✅ "Construct" 文字列が含まれていない
    new Stack(this, "MyStack");
  }
}

❌ 不適切な例

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

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

    // ❌ "Construct" 文字列が含まれている
    const bucket = new Bucket(this, "BucketConstruct");
  }
}