---
title: 最高の開発者体験を目指してAWS CDKによるCI/CDパイプラインを改善し続けている話
tags: 
author: [Takahiro Hatakeyama](https://www.docswell.com/user/keyamin)
site: [Docswell](https://www.docswell.com/)
thumbnail: https://bcdn.docswell.com/page/47ZMZXWGE3.jpg?width=480
description: CI/CD Conference 2023で登壇した際の資料です。
published: March 20, 23
canonical: https://www.docswell.com/s/keyamin/KQ889X-cicd-conference-2023
---
# Page. 1

![Page Image](https://bcdn.docswell.com/page/47ZMZXWGE3.jpg)

最高の開発者体験を目指して
AWS CDKによるCI/CDパイプラインを改善
し続けている話
AlphaDrive Web Application Engineer / 畠山 嵩広
2023.3.20@CI/CD Conference 2023 by CloudNative Days
1


# Page. 2

![Page Image](https://bcdn.docswell.com/page/YJ6NZ4GQJV.jpg)

00
自己紹介
畠山 嵩広
AlphaDrive Webアプリケーションエンジニア
keyamin_
あと1こ...
©Alphadrive Co.,Ltd. All Rights Reserved.
2


# Page. 3

![Page Image](https://bcdn.docswell.com/page/GJ55WQV2J4.jpg)

アジェンダ
1. AlphaDriveについて
2. 私達のCI/CDパイプライン
3. 最高だったポイント
4. CDKをどの言語で書くか
5. まとめ
©Alphadrive Co.,Ltd. All Rights Reserved.
3


# Page. 4

![Page Image](https://bcdn.docswell.com/page/9E2NQP317R.jpg)

アジェンダ
1. AlphaDriveについて
2. 私達のCI/CDパイプライン
3. 最高だったポイント
4. CDKをどの言語で書くか
5. まとめ
©Alphadrive Co.,Ltd. All Rights Reserved.
4


# Page. 5

![Page Image](https://bcdn.docswell.com/page/D7YPW5147M.jpg)

01
AlphaDriveについて
AlphaDriveは、
新規事業創出支援のプロフェッショナルカンパニーかつ、
エンジニア第一のテクノロジーカンパニーです。
and more…
©Alphadrive Co.,Ltd. All Rights Reserved.
5


# Page. 6

![Page Image](https://bcdn.docswell.com/page/VEN59N26J8.jpg)

サービス ｜ Incubation Suite(インキュベーション スイート)
新規事業開発に特化したクラウド型総合支援ツール
3,500社以上の新規事業開発を支援してきたAlphaDriveの知見を余すことなく注ぎ込んだソリューション。
新規事業制度を運営する事務局メンバーをサポートする管理機能から、起案者向け学習コンテンツ提供、
起案ブラッシュアップ機能まで。新規事業開発に必要なサポートを1つのプラットフォームで実現します。
ポイント
対象課題
新規事業開発 / 事業開発人材育成対応
事務局業務の効率化を実現
起案者の課題を先回りしたサ
ポート機能
対象部署
新規事業プログラム参加メンバーの
登録、研修 /イベントの告知、
事業アイデアの進捗管理、審査
フィードバックなど多岐にわたる事務
局業務に対応。
多忙な業務をサポートする機能を 1
つのツールに集約しました。
新規事業開発にあたって必要となる
事業フレーム、事業案の管理、アイ
デアを仮説検証した履歴を自動アー
カイブ、事業開発スキルの向上など
多様な機能を取り揃えており、新規
事業の推進・検討に専念することが
できます。
事業開発・新規事業 / R&amp;D・イノベーション
インキュベーション / 次世代事業開発
経営企画・総合計画 / 人事・人財開発
事業を前進させる
支援オプション
リクルートで社内事業開発プログラ
ムを立ち上げた麻生要一ら専門家
によるメンタリングや顧客ヒアリング
支援など人的なサポートも組み合わ
せることで、新規事業の進捗をバッ
クアップします。
対象領域
事業創出
組織変革
©Alphadrive Co.,Ltd. All Rights Reserved.
人材育成
導入企業
6


# Page. 7

![Page Image](https://bcdn.docswell.com/page/Y79Y2R1RE3.jpg)

サービス ｜ NewsPicks Enterprise
学びと対話の空間
NewsPicksを法人向けの人材及び組織開発ツールとしてカスタマイズすることで、
イノベーション人材を育て、組織の変革力を生み出す「人材と組織の成長プラットフォーム」です。
対象課題
VALUE 1
VALUE 2
VALUE 3
社員の
インプット向上
社員の
アウトプット向上
社員の
コミュニケーション
リレーション醸成
次世代型変革人材発掘 / 自律型人材育成 /
サイロ化打破 / エンゲージメント向上 /
ビジョン・理念浸透
対象部署
人事・人材育成 / 人財開発・組織開発
経営企画・総合計画 / 事業企画・経営管理 / 社内
VALUE 5
VALUE 4
社内変革に繋がる
アクション
イノベーション創出
イノベーション
人材開発・発掘
広報 / 組織風土改革 / 総務・福利厚生 / 労働組合
対象領域
導入企業
事業創出
組織変革
©Alphadrive Co.,Ltd. All Rights Reserved.
人材育成
7


# Page. 8

![Page Image](https://bcdn.docswell.com/page/G7865W4GJD.jpg)

技術スタック紹介
©Alphadrive Co.,Ltd. All Rights Reserved.
8


# Page. 9

![Page Image](https://bcdn.docswell.com/page/L7L9YN6XER.jpg)

ス
ー
タベ
フロ
ー
デ
ト
ン
Incubation Suite
TypeScript
デザ
イン
監視
バックエ
ンド
インフラ
Aurora - Postgres
Amazon CloudWatch
TypeScript
Amazon ECS /
Fargate
Express.js
AWS
CloudFormation
AWS CDK
9


# Page. 10

![Page Image](https://bcdn.docswell.com/page/4EMZNX537W.jpg)

ス
ー
タベ
フロ
ー
デ
ト
ン
開発中の新SaaS
TypeScript
デザ
イン
監視
バックエ
Chakra UI
ンド
インフラ
Aurora - Postgres
Storybook
Amazon CloudWatch
Go
Gin
OpenAPI
Amazon ECS /
Fargate
AWS
CloudFormation
AWS CDK
Gin-Gonic Framework Logo by Javier Provecho.
The Gopher character is based on the Go mascot designed by Renée French.
10


# Page. 11

![Page Image](https://bcdn.docswell.com/page/PER6DN3RJ9.jpg)

01
AlphaDriveのポリシー
私達AlphaDriveは組織の初期段階ではSREチームを組成せず、
プロダクト開発者全員がSREのスキルを持つことをポリシーに
25名規模の組織で複数のSaaS開発を進めています。
- 赤澤 剛 (AlphaDrive CTO/NewsPicks Fellow)
©Alphadrive Co.,Ltd. All Rights Reserved.
11


# Page. 12

![Page Image](https://bcdn.docswell.com/page/P7XM1N4YJX.jpg)

全員がSRE…？🤔
©Alphadrive Co.,Ltd. All Rights Reserved.
12


# Page. 13

![Page Image](https://bcdn.docswell.com/page/37KG2NZ4ED.jpg)

01
そもそもSREとは？
SREとは、ソフトウェアエンジニアに運用チームの設計を依頼したときに
できあがるものです。
- 『SRE サイトリライアビリティエンジニアリング』より
©Alphadrive Co.,Ltd. All Rights Reserved.
13


# Page. 14

![Page Image](https://bcdn.docswell.com/page/LJ3N4VDDJ5.jpg)

「プロダクト開発者全員がSRE」とは...
©Alphadrive Co.,Ltd. All Rights Reserved.
14


# Page. 15

![Page Image](https://bcdn.docswell.com/page/8JDWQ8P2EG.jpg)

SREを職種ではなく方法論や文化として捉え、
運用まで開発者全員に浸透させること！🙋
©Alphadrive Co.,Ltd. All Rights Reserved.
15


# Page. 16

![Page Image](https://bcdn.docswell.com/page/VEP9L8NL78.jpg)

01
AlphaDriveが目指す「プロダクト開発者全員がSRE」
自分が書いたコードは、
デプロイや運用まで自分で面倒を見る
それを実現できる仕組みを作る
🙅「運用担当者さん、アラート鳴ってるよ〜！」
そうは言っても、開発者全員にAWS(IAMポリシーの細かい書き
方...)やTerraform(HCLのややこしいDynamicBlock...)を完璧に
習得してもらうのは難しい
ではなく、開発者自身でソフトウェアエンジニアリングの知見を活
かして開発者体験を向上させる！
ただ開発者の負担が増えるだけでは、組織拡大の敷居も高くなる
→ 持続可能性が低い🙅
🙅「DevOpsエンジニアさん、パイプライン直して！」
©Alphadrive Co.,Ltd. All Rights Reserved.
16


# Page. 17

![Page Image](https://bcdn.docswell.com/page/27VMQNK67Q.jpg)

アジェンダ
1. AlphaDriveについて
2. 私達のCI/CDパイプライン
3. 最高だったポイント
4. CDKをどの言語で書くか
5. まとめ
©Alphadrive Co.,Ltd. All Rights Reserved.
17


# Page. 18

![Page Image](https://bcdn.docswell.com/page/5JGGWKQ2JL.jpg)

小規模開発チームで、全員がSREとして
最高の開発者体験を実現するには…？
©Alphadrive Co.,Ltd. All Rights Reserved.
18


# Page. 19

![Page Image](https://bcdn.docswell.com/page/47QX3NK9JP.jpg)

×
AWS CDK
©Alphadrive Co.,Ltd. All Rights Reserved.
×
TypeScript
StepFunctions
19


# Page. 20

![Page Image](https://bcdn.docswell.com/page/KE461GKRJ1.jpg)

01
ということで先に、今回のまとめ
●
インフラ専任がいないような小規模チームなら、 CDKを使いましょう！
○
●
チームにTypeScriptの知見があるなら、 CDK in TypeScriptを使いましょう！
○
●
そうでないチームでも、 CDKはおすすめです 💪
なくても、他の言語でも CDKできます👍
みんなStepFunctions使おうぜ！🔥
©Alphadrive Co.,Ltd. All Rights Reserved.
20


# Page. 21

![Page Image](https://bcdn.docswell.com/page/L71VGDXVJG.jpg)

つまり...
©Alphadrive Co.,Ltd. All Rights Reserved.
21


# Page. 22

![Page Image](https://bcdn.docswell.com/page/G7WLKYN3J2.jpg)

©Alphadrive Co.,Ltd. All Rights Reserved.
22


# Page. 23

![Page Image](https://bcdn.docswell.com/page/4JZMZX3G73.jpg)

01
「プロダクト開発者全員がSRE」実現のためのIaCツール
開発中のSaaSでは、IaCを実現するツールとしてAWS CDKを採用しています
AWS Cloud Development Kit
(AWS CDK)
●
馴染みのあるプログラミング言語を使いつつ、IaCのメリットを享受できる
●
L2 Constructなどによる抽象化で、直感的にインフラをコードで記述できる
●
内部でCloudFormationが使用されており、公式サービスならではの手厚いサポートや
豊富な機能提供を受けられる
この2行でEventBridgeの通知先となるSNSトピックを記述できる🥰
©Alphadrive Co.,Ltd. All Rights Reserved.
23


# Page. 24

![Page Image](https://bcdn.docswell.com/page/YE6NZ4XQEV.jpg)

02
大まかなアプリケーション構成
©Alphadrive Co.,Ltd. All Rights Reserved.
24


# Page. 25

![Page Image](https://bcdn.docswell.com/page/GE55WQX2E4.jpg)

02
大まかなアプリケーション構成
現在dev、demo(*)、production環
境がそれぞれ別の AWSアカウントに
存在する
(*)お客様が利用するデモプロジェクト用
©Alphadrive Co.,Ltd. All Rights Reserved.
25


# Page. 26

![Page Image](https://bcdn.docswell.com/page/972NQPX1JR.jpg)

02
大まかなアプリケーション構成
フロントエンド (Next.js)、バックエン
ド(Go)ともにAWS Fargate上で実
行されるWebアプリケーション
©Alphadrive Co.,Ltd. All Rights Reserved.
26


# Page. 27

![Page Image](https://bcdn.docswell.com/page/DJYPW584JM.jpg)

02
大まかなアプリケーション構成
getServerSidePropsでのデータ取得
や、クライアントサイドからの API
Routesを経由したリクエストは ALB経
由でバックエンドサーバーに到達
©Alphadrive Co.,Ltd. All Rights Reserved.
27


# Page. 28

![Page Image](https://bcdn.docswell.com/page/V7N59NQ6E8.jpg)

02
大まかなアプリケーション構成
ココ
©Alphadrive Co.,Ltd. All Rights Reserved.
28


# Page. 29

![Page Image](https://bcdn.docswell.com/page/YJ9Y2RDR73.jpg)

02
CI/CDパイプライン
©Alphadrive Co.,Ltd. All Rights Reserved.
29


# Page. 30

![Page Image](https://bcdn.docswell.com/page/GJ865W3GED.jpg)

02
CI/CDパイプライン
このワークフローが各環境の
フロントエンド、バックエンド用
に存在する
©Alphadrive Co.,Ltd. All Rights Reserved.
30


# Page. 31

![Page Image](https://bcdn.docswell.com/page/LJL9YNVX7R.jpg)

02
CI/CDパイプライン
Slackからデプロイ対象とブランチを指定し
てトリガー
©Alphadrive Co.,Ltd. All Rights Reserved.
31


# Page. 32

![Page Image](https://bcdn.docswell.com/page/47MZNXG3JW.jpg)

02
CI/CDパイプライン
dev環境ではソースステージのブランチ
を自由に選択したかったため、
CodePipelineではなくStepFunctions
を採用
©Alphadrive Co.,Ltd. All Rights Reserved.
32


# Page. 33

![Page Image](https://bcdn.docswell.com/page/P7R6DNZRE9.jpg)

02
CI/CDパイプライン
指定したブランチの最新のコミットで
Dockerイメージをビルドし、 ECRにプッ
シュ
©Alphadrive Co.,Ltd. All Rights Reserved.
33


# Page. 34

![Page Image](https://bcdn.docswell.com/page/PJXM1N9YEX.jpg)

02
CI/CDパイプライン
ECSから現在使用中のタスク定義を取
得し、Dockerイメージ参照先を書き換
える
©Alphadrive Co.,Ltd. All Rights Reserved.
34


# Page. 35

![Page Image](https://bcdn.docswell.com/page/3JKG2NP47D.jpg)

02
CI/CDパイプライン
CodeDeployからECSにBlue/Greenデ
プロイする
©Alphadrive Co.,Ltd. All Rights Reserved.
35


# Page. 36

![Page Image](https://bcdn.docswell.com/page/LE3N4VXDE5.jpg)

02
CI/CDパイプライン
AfterAllowTestTraﬃc Hookで
LambdaからCodeBuildを呼び出して
E2Eテストを行う。
E2Eテストに成功したらデプロイを行
い、結果をSlackに通知する。
©Alphadrive Co.,Ltd. All Rights Reserved.
36


# Page. 37

![Page Image](https://bcdn.docswell.com/page/8EDWQ8227G.jpg)

アジェンダ
1. AlphaDriveについて
2. 私達のCI/CDパイプライン
3. 最高だったポイント
4. CDKをどの言語で書くか
5. まとめ
©Alphadrive Co.,Ltd. All Rights Reserved.
37


# Page. 38

![Page Image](https://bcdn.docswell.com/page/V7P9L81LJ8.jpg)

①圧倒的に少ないコードで書けて最高🎉
©Alphadrive Co.,Ltd. All Rights Reserved.
38


# Page. 39

![Page Image](https://bcdn.docswell.com/page/2JVMQNY6JQ.jpg)

この1行で...
©Alphadrive Co.,Ltd. All Rights Reserved.
39


# Page. 40

![Page Image](https://bcdn.docswell.com/page/5EGGWK92EL.jpg)

これ全部できあがります🎉
↓diﬀ
©Alphadrive Co.,Ltd. All Rights Reserved.
40


# Page. 41

![Page Image](https://bcdn.docswell.com/page/4JQX3NW9EP.jpg)

Terraformとの比較
terraform-aws-modules/vpc(*1)を利用した場合
(*1)https://registry.terraform.io/modules/terraform-aws-modules/vpc/aws/latest
©Alphadrive Co.,Ltd. All Rights Reserved.
41


# Page. 42

![Page Image](https://bcdn.docswell.com/page/K7461G1RE1.jpg)

②Lambdaの開発体験が良くて最高🎉
©Alphadrive Co.,Ltd. All Rights Reserved.
42


# Page. 43

![Page Image](https://bcdn.docswell.com/page/LJ1VGDGVEG.jpg)

このようなディレクトリ構造の場合...
©Alphadrive Co.,Ltd. All Rights Reserved.
43


# Page. 44

![Page Image](https://bcdn.docswell.com/page/GJWLKYK3E2.jpg)

パスを渡すだけでLambdaをデプロイできる！🚀
※これだけでデプロイした場合、destroyしてもCloudWatchのロググループが残るので注意
©Alphadrive Co.,Ltd. All Rights Reserved.
44


# Page. 45

![Page Image](https://bcdn.docswell.com/page/4EZMZXZGJ3.jpg)

03
Lambdaの開発体験が良くて最高🎉
aws-cdk-lib.aws-lambda-nodejs.NodejsFunction(*1)を使うと、エントリーポイントやlockファイルのpathなどを
渡すだけでTypeScriptで書いたLambdaコードをいい感じにアップロードしてくれるので楽
●
アルファ版ですが、PythonやGo版もあります
●
Terraformだと、terraform_dataやnull_resourceを使うなどしてトランスパイル・ビルドを記述する
必要がある
(*1)https://docs.aws.amazon.com/cdk/api/v2/docs/aws-cdk-lib.aws_lambda_nodejs.NodejsFunction.html
©Alphadrive Co.,Ltd. All Rights Reserved.
45


# Page. 46

![Page Image](https://bcdn.docswell.com/page/Y76NZ4ZQ7V.jpg)

③CDKとStepFunctionsの相性が最高🎉
©Alphadrive Co.,Ltd. All Rights Reserved.
46


# Page. 47

![Page Image](https://bcdn.docswell.com/page/G755WQW274.jpg)

StepFunctions、GUIでワークフロー作るのは簡単だけど
IaCだとASL(*1)書くのが大変...🥲
(*1)Amazon States Language: https://docs.aws.amazon.com/step-functions/latest/dg/concepts-amazon-states-language.html
©Alphadrive Co.,Ltd. All Rights Reserved.
47


# Page. 48

![Page Image](https://bcdn.docswell.com/page/9J2NQPQ1ER.jpg)

CDKならTypeScriptで書けます！👍
©Alphadrive Co.,Ltd. All Rights Reserved.
48


# Page. 49

![Page Image](https://bcdn.docswell.com/page/DEYPW5W4EM.jpg)

作成されたStateMachine
©Alphadrive Co.,Ltd. All Rights Reserved.
49


# Page. 50

![Page Image](https://bcdn.docswell.com/page/VJN59N9678.jpg)

アジェンダ
1. AlphaDriveについて
2. 私達のCI/CDパイプライン
3. 最高だったポイント
4. CDKをどの言語で書くか
5. まとめ
©Alphadrive Co.,Ltd. All Rights Reserved.
50


# Page. 51

![Page Image](https://bcdn.docswell.com/page/YE9Y2R2RJ3.jpg)

Q. CDKはどの言語で書けばいいの？🤔
©Alphadrive Co.,Ltd. All Rights Reserved.
51


# Page. 52

![Page Image](https://bcdn.docswell.com/page/GE865W5G7D.jpg)

A. (チーム次第ですが)基本はTypeScriptにしとけ！
©Alphadrive Co.,Ltd. All Rights Reserved.
52


# Page. 53

![Page Image](https://bcdn.docswell.com/page/LEL9YNYXJR.jpg)

04
CDKはTypeScriptで書くのがおすすめという話
新規開発中のSaaSでは当初、CDKで使用する言語にGoを選択
●
バックエンドの開発言語に合わせるため
●
当時は社内のGoの知見が少なく、Goに慣れるための挑戦的な意味合いも
©Alphadrive Co.,Ltd. All Rights Reserved.
53


# Page. 54

![Page Image](https://bcdn.docswell.com/page/4JMZNXN3EW.jpg)

しかし、開発を進めていると
CDK in Goでは辛い部分が...🥲
©Alphadrive Co.,Ltd. All Rights Reserved.
54


# Page. 55

![Page Image](https://bcdn.docswell.com/page/PJR6DNDR79.jpg)

04
辛かった点① - ポインタへの変換が面倒
Goには言語仕様上Optionalを表す型がないため、ゼロ値と未指定を区別するためにポインタへの変換が必要にな
る。
Goに慣れていないメンバーからするとわかりにくい上、単純にコードの見通しが悪くなる...
左がTS、右がGoでバージョニング有効化したS3バケットを作成する例
©Alphadrive Co.,Ltd. All Rights Reserved.
55


# Page. 56

![Page Image](https://bcdn.docswell.com/page/PEXM1N1Y7X.jpg)

04
辛かった点② - Goらしくないコードがちらほら
CDK in Goでは内部でjsii経由でTypeScriptの実装を呼んでいるため、各コンストラクタからエラーの値が返らず、
実行時エラーはそのままpanicする。
また、同じ理由で時間の書き方がGoのtimeパッケージでの書き方と異なり、アプリケーションコードを書く場合と若
干勝手が変わってしまっていた。
panicのメッセージを読めばエラーの内容はわかるため、開発に大きな支障があるわけではない
©Alphadrive Co.,Ltd. All Rights Reserved.
56


# Page. 57

![Page Image](https://bcdn.docswell.com/page/3EKG2N24JD.jpg)

04
辛かった点③ - エスケープハッチに(実質)未対応
エスケープハッチ(*1)とは、抽象化により本来指定できないパラメータを指定できるようにすることでConstructを拡
張する方法のこと。
他の言語ではL2 Constructを抽象度の低いL1 Constructにキャストするなどで実現可能だが、CDK in Goではそ
の方法が使えない。
一応jsii.Get(*2)関数で実現可能だが、非推奨。
本来指定できないanalyticsConﬁgurationsをエスケープハッチにより指定している
(*1)https://docs.aws.amazon.com/cdk/v2/guide/cfn_layer.html
(*2)https://pkg.go.dev/github.com/aws/jsii-runtime-go#Get
©Alphadrive Co.,Ltd. All Rights Reserved.
57


# Page. 58

![Page Image](https://bcdn.docswell.com/page/L73N4V4D75.jpg)

04
ではどうしたか
CDK in TypeScriptに移行中(現在8割ほど移行完了)
●
ほぼGoをTSに書き直すだけで移行できた🎉
○
TS版を元にjsiiによって他言語版が展開されているためAPI構造がどの言語でも変わらず、書
き直しやすかった
●
ドキュメントがTSの方が見やすく、サンプルコードもほとんどTS版なので体験は良くなった
●
あくまでNot for usだっただけなので、CDKを書くメンバーのスキルセットなどと要相談
©Alphadrive Co.,Ltd. All Rights Reserved.
58


# Page. 59

![Page Image](https://bcdn.docswell.com/page/87DWQ8Q2JG.jpg)

アジェンダ
1. AlphaDriveについて
2. 私達のCI/CDパイプライン
3. 最高だったポイント
4. CDKをどの言語で書くか
5. まとめ
©Alphadrive Co.,Ltd. All Rights Reserved.
59


# Page. 60

![Page Image](https://bcdn.docswell.com/page/VJP9L8LLE8.jpg)

��
��
©Alphadrive Co.,Ltd. All Rights Reserved.
��
��
60


# Page. 61

![Page Image](https://bcdn.docswell.com/page/2EVMQNQ6EQ.jpg)

ご清聴ありがとうございました🎉
©Alphadrive Co.,Ltd. All Rights Reserved.
61


