8
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

CDKコントリビューション 初心者向けTIPS

Last updated at Posted at 2025-03-25

はじめに

最近、aws-cdkリポジトリへのOSSコントリビューションを始めました。その際に知っておくと便利なTIPSをいくつか紹介します。

取り組むIssueの探し方

OSSコントリビューションをやるにあたって自分はここが一番鬼門でした。aws-cdkリポジトリには大量のIssueが存在するため、上から順にチェックしていくのは非現実的です。探し方のポイントがいくつかあります。

ラベルでフィルタリング

まずはラベルで絞り込んで探すとよいでしょう。

  • good first issue
    • 名前の通り初心者向けのIssue
  • effort/small
    • 対応量が少なめと見積もられているIssue
  • p2, p3
    • 優先度が高くないIssue
    • effort/smallと一緒に付けられていることが多いかも

VPC Interface Endpointの定数追加

aws-cdkではvpc-endpoint.tsというファイルでVPC Interface Endpointを定義しています。中身は定数の羅列になっており、各エンドポイントに対して1対1で定数が定義されています。

例:Amazon Athenaのエンドポイントに対する定数定義
  public static readonly ATHENA = new InterfaceVpcEndpointAwsService('athena');

AWSのサービスアップデートで新サービスが発表されると、対応する定数を追加する必要があります。例えば2024年12月に発表されたAmazon Bedrock Data Automation(プレビュー版)に対して、以下のように定数を追加する必要があります。
https://aws.amazon.com/about-aws/whats-new/2024/12/amazon-bedrock-data-automation-available-preview/

  public static readonly BEDROCK_AGENT = new InterfaceVpcEndpointAwsService('bedrock-agent');
  public static readonly BEDROCK_AGENT_RUNTIME = new InterfaceVpcEndpointAwsService('bedrock-agent-runtime');
  public static readonly BEDROCK_RUNTIME = new InterfaceVpcEndpointAwsService('bedrock-runtime');
+  public static readonly BEDROCK_DATA_AUTOMATION = new InterfaceVpcEndpointAwsService('bedrock-data-automation');
+  public static readonly BEDROCK_DATA_AUTOMATION_FIPS = new InterfaceVpcEndpointAwsService('bedrock-data-automation-fips');
+  public static readonly BEDROCK_DATA_AUTOMATION_RUNTIME = new InterfaceVpcEndpointAwsService('bedrock-data-automation-runtime');
+  public static readonly BEDROCK_DATA_AUTOMATION_RUNTIME_FIPS = new InterfaceVpcEndpointAwsService('bedrock-data-automation-runtime-fips');
  public static readonly BILLING = new InterfaceVpcEndpointAwsService('billing');

この4行を追加するだけでPRを作成することが可能です。
参考PR:https://github.com/aws/aws-cdk/pull/33674

未対応のVPC Interface Endpointの一覧を自動集計するツールを @badmintoncryer さんが作成してくださっているため、ここから未対応のものを確認してPR作成するだけで簡単にコントリビューションすることが可能です!

参考ポスト:https://x.com/nixieminton/status/1896404099148726340

Errorをスローしている箇所をValidationError/UnscopedValidationErrorに置換する

aws-cdkではthrow new Errorと記載している箇所をthrow new ValidationError or thorw new UnscopedValidationErrorにリファクタリングする方針があります。ValidationErrorUnscopedValidationErrorはCDKリポジトリ内で定義されたカスタム例外クラスです。

参考情報:

参考PR

ビルド

aws-cdkリポジトリのビルドは以下コマンドで実行可能です。

# packages/aws-cdk-libディレクトリに範囲を絞って実行
npx lerna run build --scope=aws-cdk-lib

aws-cdkリポジトリは巨大なコードベースであるため、リポジトリ全体のビルドを実施すると20分近くかかってしまうようです。そのため、--scope=aws-cdk-libオプションでビルド対象を区切って実行するのが一般的です。
実行時にnode.jsのメモリ不足エラーが発生する場合、export NODE_OPTIONS="--max-old-space-size=8192"を実行してメモリ領域をあらかじめ拡張しておくとよいです。
※参考:M2 MacBook Air メモリ8Gだと上記コマンドがないとメモリ不足になりました

差分ビルド

yarn watchコマンドを実行することで、ファイルが保存されるたびに差分ビルドを実施することができます。

$ cd packages/aws-cdk-lib
$ yarn watch

5:52:22 PM - Starting compilation in watch mode...

中止するときはCtrl+Cで抜けます

フォーク元の差分を自身のリポジトリに適用

フォークしたリポジトリと本家のリポジトリに差分が発生した場合、フォークしたリポジトリに差分を適用する必要があります。ブラウザのGitHubのUIからSync forkを毎度実行するのは手間なので、ローカルのCLI環境から実行するとよいです。

# フォーク元のaws-cdkリポジトリをupstreamという名前で登録
git remote add upstream https://github.com/aws/aws-cdk.git

# 本家の差分をローカルに取り込む
git switch main
git fetch upstream
git merge upstream/main

# 本家の差分をリモートリポジトリの自分のブランチへPUSH
git push

さいごに

以上です!他にも思いついたら追記します。

8
3
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
8
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?