はじめに
最近、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で定数が定義されています。
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
にリファクタリングする方針があります。ValidationError
とUnscopedValidationError
は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
さいごに
以上です!他にも思いついたら追記します。