0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

はじめに

AWS CDK の公式の案内では、AWS CDK の TypeScript プロジェクトを作るとき、 npm install -g aws-cdk をするように書いてあります。

私は、 npm install -g aws-cdk はしたくありませんでした。

グローバル環境に何が入ったのかわからなくなるのを避けたかったためです。

今回は Dev Containers 内で、npm install -g aws-cdk なしに CDK TypeScript プロジェクトを作りました。

この記事で書きたいことは次の2つです。

  • npm install -g aws-cdk なしでも npx aws-cdk init app --language typescript で始められる
  • cdk init は実行ディレクトリ名をもとに名前を付ける

Dev Container

Dockerfile は次のようにしました。

FROM mcr.microsoft.com/devcontainers/typescript-node:24-bookworm

RUN apt-get update \
    && apt-get install -y --no-install-recommends \
        ca-certificates \
        curl \
        libasound2 \
        libatk-bridge2.0-0 \
        libatk1.0-0 \
        libcups2 \
        libdbus-1-3 \
        libdrm2 \
        libgbm1 \
        libgtk-3-0 \
        libnss3 \
        libx11-xcb1 \
        libxcomposite1 \
        libxdamage1 \
        libxext6 \
        libxfixes3 \
        libxrandr2 \
        libxss1 \
        libxtst6 \
        xdg-utils \
    && rm -rf /var/lib/apt/lists/*

RUN curl -fsSL https://github.com/AikidoSec/safe-chain/releases/latest/download/install-safe-chain.sh \
        | sh -s -- --ci --install-dir /usr/local/.safe-chain \
    && chown -R node:node /usr/local/.safe-chain \
    && chmod -R u+rwX,go+rX /usr/local/.safe-chain

ENV PATH="/usr/local/.safe-chain/shims:/usr/local/.safe-chain/bin:${PATH}"

AikidoSec/safe-chain を利用しています。

devcontainer.json は次のようにしました。

{
  "name": "Awesome Project",
  "build": {
    "dockerfile": "Dockerfile"
  },
  "workspaceFolder": "/workspace",
  "workspaceMount": "source=${localWorkspaceFolder},target=/workspace,type=bind,consistency=cached",
  "forwardPorts": [
    5173
  ],
  "customizations": {
    "vscode": {
      "extensions": [
        "dbaeumer.vscode-eslint",
        "esbenp.prettier-vscode"
      ]
    }
  },
  "remoteUser": "node",
  "postCreateCommand": "npm config list"
}

.npmrc は次のようにしました。

engine-strict=true
ignore-scripts=true
audit=true
min-release-age=7
registry=https://npm.flatt.tech

Takumi Guard も使っています。

npm install -g aws-cdk はしない

空のディレクトリを作って、その中で cdk init を実行します。

npx aws-cdk init app --language typescript

これで、aws-cdk をグローバルインストールせずに CDK TypeScript プロジェクトを作れました。

ディレクトリ名が使われる

ここで知ったことがあります。

cdk init は、実行したディレクトリ名をもとに名前を付けます。

今回、Dev Container 内で実行しました。

"workspaceFolder": "/workspace" を指定していたため、cdk init は /workspace というディレクトリ名をもとに生成名を付けました。

すると、生成されるファイル名やクラス名にも、そのディレクトリ名をもとにした名前が使われます。

実は、cdk init --help を確認すると、任意のプロジェクト名を指定するための --project-name (-n) オプションが定義されています。

  --project-name, -n                The name of the new project         [string]

しかし、手元のバージョンでは --project-name が表示されるものの、期待どおりには反映されませんでした。ソースを見ると projectName: args.name となっており、 args.projectName を参照していないように見えます。

そのため、初期化時にプロジェクト名を指定する手段は実質的に機能しておらず、やはり最初のディレクトリ名は意外と大事です。

まとめ

  • npm install -g aws-cdk なしでも npx aws-cdk init app --language typescript で始められる
  • cdk init は実行ディレクトリ名をもとに名前を付ける
  • 初期化時にプロジェクト名を指定する --project-name オプションはあるが、動作しないようにみえる(?)

地味ですが、CDK プロジェクトを作り始める前に知っておくとよさそうです。

追記

その後、cdk init --project-name が期待どおり反映されない件について、AWS CDK CLI に Pull Request を送り、マージされました。

aws-cdk@2.1128.1 以降では、次のように実行ディレクトリ名とは別のプロジェクト名を指定できます。

npx aws-cdk@latest init app --language typescript --project-name awesome-cdk

詳しくは次の記事に書きました。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?