CDK コントリビュートデビューしてからの8ヶ月弱を振り返る
本記事は AWS CDK Advent Calendar 2024 の 24日目の記事です。
CDK コントリビュートを始めてから約8ヶ月経ちました。
年末ということもありこの機会に振り返ってみたいと思います(技術的な内容はほぼ無いです)。
目次
コントリビュート開始から現在までの時系列
ゴールデンウィークにコントリビュートを始める(2024/4/30)
GWまとまった時間が取れそうだったので、前からやってみようと思っていたコントリビュートにチャレンジしてみることにしました。
CDKをForkして環境整えて、ガイドざっと見るところまではきた。
— mazyu36 | Matsuda (@mazyu36) 2024年4月30日
あとはやるだけ…
初コントリビュートした時の記事↓。
そうしたところどハマりして、日々コントリビュートするようになりました。
3ヶ月後に50コントリビュート(2024/7/30)
CDKコントリビュートにはマージされたPR数でバッジが付くゲーミング要素があります。以下の記事に記載がある通り、特にメリットがあるわけではなくお楽しみ要素ですね。
最上位は 50件以上マージの distinguished-contributor で、こちらは約3ヶ月ほどで達成しました。
CDK 50コントリビュート!
— mazyu36 | Matsuda (@mazyu36) 2024年7月30日
引き続きやっていきます pic.twitter.com/0HM1exy4vp
4ヶ月~5ヶ月後に Top Contributor & Community Reviewer 認定(2024/9)
9月に入ったあたりで Top Contributor とレビュアーの認定をいただきました。レビュアーの方は目標にしていたのと、貢献できる方法が増えたので嬉しかったですね(もっとレビュー頑張らねば...)
あら!mazyuさんと合わせてCDKのTop contributorになってた!!うれしい!!
— badmintoncryer (@nixieminton) 2024年9月5日
結局PR65個ぐらい必要でした..https://t.co/wj8ilo29y9
CDKのCommunity Reviewerに @mazyu36 さんと @nixieminton さんが認定されました!お二人とも70以上のPRがマージされており、経験豊富なレビュアーとして活躍していただけると信じています。これからもよろしくお願いします🙌https://t.co/1yoMowU8Ni
— Kenji Kono (@konokenj) 2024年9月20日
6ヶ月後に100コントリビュート(2024/11/1)
約半年で100コントリビュートになりました。
CDK 100コントリビュート pic.twitter.com/sHJg4uCvkq
— mazyu36 | Matsuda (@mazyu36) 2024年10月31日
執筆時点(2024/12/24)
記事執筆時点では全体で20番目のコントリビュート数でした。

過去1年間で人間界では一番コントリビュートしていたようです。

PRを集計してみる
さまざまな軸で起票したPRを集計してみたいと思います。執筆時点では未マージのPRも含んでいます。
月ごとの集計
| 月 | カウント |
|---|---|
| 2024-05 | 31 |
| 2024-06 | 25 |
| 2024-07 | 11 |
| 2024-08 | 11 |
| 2024-09 | 19 |
| 2024-10 | 12 |
| 2024-11 | 10 |
| 2024-12 | 13 |
| 合計 | 132 |
どハマりしたためか最初の2ヶ月はPR起票しまくってますね。
PRの種類ごとの集計
| PRの種類 | カウント |
|---|---|
| feat | 66 |
| chore | 46 |
| docs | 10 |
| fix | 9 |
| refactor | 1 |
| 合計 | 132 |
ちょうど半分が feat(機能追加)でした。enum追加なども結構やっているため chore も多いです。
バグ修正は難易度が個人的にも難易度が高いと思っており、そこまでできていませんね。今後は増やしていきたい。
サービスごとの集計
| サービス | カウント |
|---|---|
| rds | 19 |
| bedrock | 11 |
| ec2 | 8 |
| apprunner | 7 |
| location | 7 |
| stepfunctions-tasks | 6 |
| cognito | 5 |
| elasticloadbalancingv2 | 5 |
| synthetics | 5 |
| opensearch | 5 |
| その他 | 4 |
| ecs | 3 |
| glue | 3 |
| ivs | 3 |
| lambda | 3 |
| pipes-enrichments | 3 |
| codebuild | 3 |
| appsync | 2 |
| amplify | 2 |
| config | 2 |
| dynamodb | 2 |
| fsx | 2 |
| neptune | 2 |
| ses | 2 |
| events | 2 |
| custom-resource | 1 |
| docdb | 1 |
| appconfig | 1 |
| cloudfront | 1 |
| kinesis | 1 |
| kinesisanalytics-flink | 1 |
| kms | 1 |
| logs | 1 |
| pipelines | 1 |
| redshift | 1 |
| route53 | 1 |
| scheduler | 1 |
| sns | 1 |
| stepfunctions | 1 |
| events-target | 1 |
| batch | 1 |
| 合計 | 132 |
RDSはエンジンバージョンのenum追加、Bedrockは基盤モデルのenum追加、EC2はVPCエンドポイントのenum追加が多かったため上位に来ています。
feat(機能追加)が多かったのは、App Runner, Location, Step Functions, Cognito, ALB/NLB あたりです。この辺りはユーザーとして利用することが多かったのもあり、それが傾向として現れていますね。
印象に残っているPR
一番大変だったのは ALB の mTLS 対応でした。以下記事にも書いていますが、integ-test 走行で工夫が必要で苦労しました。 ただ使いたかった機能なので辛さは特になかったです。
難産だったのは以下の Step Functions で Bedrock の Invoke に Guardrail 対応を追加するPRです。Construct のデザインでメンテナーの方とのやりとりが続きレビューが長引きました。ただ最終的には良い形にまとまったのでやって良かったとは思います。
Step Functions は特に tasks の方は無限にコントリビュートチャンスがあるのですが、デザインが複雑で難易度が高めです。
最近のPRで印象に残っているのは AppSync Events のL2対応です。起票したところ並行して AppSyncチーム(中の方々)も実装していたらしく、声をかけてもらいお互いの実装を合わせる形で協力させてもらいました。
執筆時点では未マージのため、マージされたらまた別途記事にします(このL2をAdvent Calendarネタにしようと思っていましたが、マージが間に合わず...)
○元のPR github.com
○AppSyncチームに起票してもらったPR github.com
番外:open-constructs
新規L2作成としてコミュニティ駆動の Open Constructs にもチャレンジしました。
初手としてはやりやすそう、かつ少し触っていた Redshift Serverless をやってみました。
後は自分も欲しい、かつそこそこ需要がありそうな ElastiCache Serverless も実装しています。こちらは執筆時点では未マージのため、マージされたら別途記事にします。
CDKコントリビュートをやってみての変化
1. Construct や test の実装スキルが向上する
コントリビュートを通して以下について習熟することができ、CDKを利用するユーザー視点でもメリットがあると思います。
- Construct のデザイン、実装方法(特にL2)
- unit test の実装テクニック。
test.eachで複数のテストをまとめる、バリデーションのテスト方法など。 - integ testの実装方法
また内部実装がわかることでバグっぽい挙動をした時に、実装を調査できるようになったことも大きいです。
2. AWS サービスの仕様(API)の理解が進む
コントリビュートする際は、各サービスの仕様を踏まえた実装、制約を踏まえたバリデーションを行う必要があります。そのため対象サービスの仕様やAPIに関する理解が深まります。
そのため自分が全く使わない / 興味がないサービスだと苦しいかもしれません。 実装する上でドキュメントだけではよく分からず実際に動かしながら試す、デプロイでエラーになるため制約を確認してバリデーションを追加する、など試行錯誤をしながら進めることが多いので、モチベーションがあるサービスのコントリビュートにチャレンジするのが良いと思います。
3. AWS アップデートに敏感になる
コントリビュートネタ探しを目的に、以前よりも日々のAWS アップデートを追うようになりました。新機能のコントリビュートを行うとメリット2と合わせて仕様も把握することができて一石二鳥です。
ただし CFn のアップデートが追いついていないことも多いので、その場合は対応されるまで待つ必要があります。
今後どうする
コントリビュートに慣れてきたのもあり、小規模な機能追加等は卒なくこなせるようになってきました。そのため欲しい機能の実装をしつつ、今後は以下の比率を上げていきたいと思います。
1. Coreモジュールや CLIへのコントリビュート
今までのコントリビュートは全て aws-cdk-lib (各サービスのConstruct)であり、CDK自体のCoreの部分やCLIはまだ経験できていません。
更なるCDKスキル向上のためにこの辺りもチャレンジしていきたいと思います。
2. Community Review
PRのコミュニティレビューも今後は積極的にやっていきたいと思います。特に自分が手を出さないようなPRをレビューすることで、そこから得られることも多いと感じています。
※最近はコミュニティレビューが済んだものは、メンテナーレビューまでのリードタイムが短くなってきているため、コミュニティレビューの重要性が増してきているというのも理由としてはあります
3. 大きめの機能追加や新規L2にチャレンジ
欲しいと思いつつも実装量が多くて手を出せていない機能追加やL2追加があるのでやっていこうと思います。Open Constructsへのコントリビュートももっとやっていきたいですね。
おわりに
CDK自体はOSSの中でもコントリビュートしやすくハードルは低いと思います(私もCDKが初のOSSコントリビュート)。
興味がある方はぜひチャレンジしてみてください!