no-construct-in-public-property-of-construct
✅ recommended を使用した場合、このルールが有効になります。
このルールは、CDK Construct の public プロパティに、読み取り専用リソースのための interface (例: IBucket) を指定することを強制します。
AWS リソースを表す Construct (例: Bucket) が、読み取り専用リソースのための interface (例: IBucket) を implements している場合、Construct の public プロパティには、読み取り専用リソースのための interface (例: IBucket) を指定することが推奨されます。
これにより、意図しないリソースの変更を防ぐことができます。
(このルールは Construct または Stack から派生したクラスにのみ適用されます)
🔧 使用方法
js
// eslint.config.mjs
export default defineConfig([
{
// ... some configs
rules: {
"cdk/no-construct-in-public-property-of-construct": "error",
},
},
]);✅ 正しい例
ts
import { Construct } from "constructs";
import { IBucket } from "aws-cdk-lib/aws-s3";
import { DockerImageAsset } from "aws-cdk-lib/aws-ecr-assets";
import { MetricFilter } from "aws-cdk-lib/aws-logs";
class MyConstruct extends Construct {
// ✅ 読み取り専用リソースのための interface (`IBucket` など) は使用できます
public readonly bucket: IBucket;
// ✅ AWS リソースを表す Construct でない Construct (`DockerImageAsset` など) は使用できます
public readonly asset: DockerImageAsset;
// ✅ 読み取り専用リソースのための interface が存在しない場合、 Construct 型 (`MetricFilter` など) は使用できます
public readonly metricFilter: MetricFilter;
}❌ 不正な例
ts
import { Construct } from "constructs";
import { Bucket } from "aws-cdk-lib/aws-s3";
class MyConstruct extends Construct {
// ❌ 読み取り専用リソースのための interface が存在する場合、 Construct 型 (`Bucket` など) は使用すべきではありません
public readonly bucket: Bucket;
}