Skip to main content

CDK単体とProjen+CDKでどちらを採用するかの比較メモ

 目次

  1. 結論を先に

  2. CDK Projen の概要

  3. やったこと(検証)

  4. パターン ACDK CLI ― 全手順

  5. パターン BProjen ― 全手順

  6. 検証結果(項目別の詳細比較)

  7. Projen のメリット / デメリット

  8. まとめ

 

 1.結論を先に

Projenというのを知ったときにCDK単体とどれぐらい違うのかわからなかったので試してみました。

 

観点

CDK 単体

Projen

ターミナルで打つコマンド

10

7

手書き設定ファイル

6

4

CI YAML 手書き行数

100

0 (自動生成)

向く場面

単発 PoC・自由度優先

チーム運用・品質担保

 

Projen の魅力(要点)


  • ESLintJestGitHub Actions CI 0 手作業で生成

  • .projenrc.ts 1 枚で設定を IaC

  • projen upgrade で 依存更新 PR を自動生成

▸ ESLint・Jest・CI YAMLとは

ツール / ファイル

役割

Projen での扱い

ESLint

静的解析・コードスタイル統一

devDeps と .eslintrc.json を自動生成

Jest

ユニット/スナップショットテスト

jest.config.js と ts-jest を自動生成

CI YAML

GitHub Actions:linttestbuildsynthdeploy

100 行を自動生成(手書き不要)

 

2.CDK と Projen の概要

ツール

ひと言で

主な特徴

AWS CDK

コードで CloudFormation を書く IaC フレームワーク

TypeScript/Python でリソース定義 → cdk synth / deploy

Projen

設定を手書きしない プロジェクトジェネレーター

.projenrc.ts → npx projen ESLint/Jest/CI を生成し、projen build linttestsynth を一括実行

 

3.やったこと(検証)

項目 内容
目的 S3 バケット 1 個をデプロイ
ツール Node 20 / CDK 2.141.0 Projen 0.94
測定 ① コマンド数 ② 手書きファイル数

 

4.パターン ACDK 単体 ― 全手順

10 コマンド / 手書き 5 ファイル

  1. mkdir cdk-only && cd $_

  2. cdk init app --language typescript

  3. npm i aws-cdk-lib constructs

  4. lib/stack.ts にバケット実装

  5. npm run build 6. cdk synth7. cdk bootstrap8. cdk deploy

  6. ESLint 追加 → npm i -D eslint … + .eslintrc.js

  7. Jest 追加 → npm i -D jest … + jest.config.js, test/stack.test.ts

  8. npm test

  9. .github/workflows/ci.yml(約 100 行)手書き

 

5.パターン BProjen ― 全手順

7 コマンド / 手書き 4 ファイル

  1. mkdir projen-cdk && cd $_

  2. npx projen new awscdk-app-ts --pm npm

  3. mv src/main.ts bin/app.ts + lib/stack.ts 新規

  4. lib/stack.ts にバケット実装

  5. .projenrc.ts appEntrypoint: 'bin/app.ts' 追記

  6. npx projen(ESLintJestCI YAML 自動生成)

  7. npx projen build(lint npm test synth

  8. cdk bootstrap 9. npx projen deploy

 

6.検証結果(項目別の詳細比較)

指標

CDK 単体

Projen

コマンド数

10

7

手書き設定ファイル

5

4

 

長期メンテ対象ファイル(抜粋)

種別

CDK が保守

Projen が保守

App & Stack

bin/app.ts, lib/stack.ts

同左

ESLint / Jest / CI

手書き設定 + YAML

自動生成

プロジェクト設定

.projenrc.ts

 

7.Projen のメリット / デメリット

メリット

  1. ESLintJestCI 0 手作業で生成

  2. .projenrc.ts 1 枚で集中管理

  3. projen upgrade による 依存アップデート自動 PR

デメリット

  1. .projenrc.ts の DSL を覚える必要

  2. 生成物を直接編集しづらい(再生成で上書き)

  3. Node.js ランタイムが前提

 

8.まとめ

  • PoC・個人検証︎ CDK 単体で十分
  • チーム運用・品質担保︎ Projen を使うと
    ESLint
    JestCI YAML 0 手作業で揃い、設定は .projenrc.ts 1 枚に集約