Skip to main content

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

 目次

  1. 結論を先に

  2. CDK と Projen の概要

  3. やったこと(検証)

  4. パターン A:CDK CLI ― 全手順

  5. パターン B:Projen ― 全手順

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

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

  8. まとめ

 

 1.結論を先に

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

 

観点

CDK 単体

Projen

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

10 回

7 回

手書き設定ファイル

6 件

4 件

CI YAML 手書き行数

約 100 行

0 行(自動生成)

向く場面

単発 PoC・自由度優先

チーム運用・品質担保

 

Projen の魅力(要点)


  • ESLint・Jest・GitHub 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:lint→test→build→synth→deploy

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

 

2.CDK と Projen の概要

ツール

ひと言で

主な特徴

AWS CDK

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

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

Projen

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

.projenrc.ts → npx projen が ESLint/Jest/CI を生成し、projen build で lint→test→synth を一括実行

 

3.やったこと(検証)

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

 

4.パターン A:CDK 単体 ― 全手順

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 synth 7. cdk bootstrap 8. 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.パターン B:Projen ― 全手順

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(ESLint/Jest/CI 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. ESLint・Jest・CI を 0 手作業で生成

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

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

デメリット

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

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

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

 

8.まとめ

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