© 2021, Amazon Web Services, Inc. or its affiliates. All rights reserved.
© 2021, Amazon Web Services, Inc. or its affiliates. All rights reserved.
© 2021, Amazon Web Services, Inc. or its affiliates. All rights reserved.
画面に映る資料の撮影などによる本セッション資料の転用を禁止しております
サーバーレスで
「使いやすい」APIを公開する
〜作る側・使う側の双方にCircleCIが提供できる価値
舟木 将彦
CircleCI合同会社
Developer Advocate
P A R - 2 4
本日のアジェンダ
⚫
ソフトウェア開発において
継続的であるとは?
⚫
デモ
CircleCIのある開発プロセス
⚫
作りやすさ・使いやすさを
拡げよう!
© 2021, Amazon Web Services, Inc. or its affiliates. All rights reserved.
ソフトウェア開発において
継続的であるとは?
© 2021, Amazon Web Services, Inc. or its affiliates. All rights reserved.
6
継続
するビジネスと開発・運用の
継続
をつなげる
プラン
コード
ビルド
テスト
リリー
ス
デプ
ロイ
運用
監視
継続
的インテグレーション(CI)
デプロイ
継続
的
(CD)
自動化できない
継続的
であるために
自動化・省力化
すべき
自動化できない
非正常系は
ビジネスが
継続
する限り、プロジェクトは続く
共有
リポジトリ
上で
常に作業
コード追加・修正時は
常にビルド・テスト
(最後にまとめてやら
ない→早く失敗すれば
早く品質が安定する)
サービス停止せず常時
リリース/デプロイ
(失敗時にはクイック
に修正 / 前バージョ
ンに戻せる)しくみ
運用・監視しやすい
品質をコードに反映
(必要なデータの取得、
スケーラビリティの
確保)
継続的ではない:
「それ、手元の
コードでは
もう直したんです
けど」
継続的である:
●
お願いドリブンで
ないこと
●
遠慮なしに依頼可
能な状態
●
依頼しなくても
左から右に
(自動的に)流れる
状態
継続
性にディレイを
生じさせない!
今どき、人手でやってません?
© 2021, Amazon Web Services, Inc. or its affiliates. All rights reserved.
デモ: CircleCIのある
開発プロセス
開発するもの: 通貨変換APIをサーバーレスで実装
APIエンドポイント
http://サーバーのアドレス/currency/command=<コマンド>...
GETリクエスト
コマンド
パラメータ
説明
list
(なし)
変換可能な通貨(unit)と変換レート(rate)を
格納した配列をJSON形式で通知
convert
unit=通貨短縮形(英字3文字)
value=変換元金額
通貨短縮形(unit)が示す通貨で設定した金額
(value)を日本円に変換した結果(amount)を
JSON形式で通知
※ AWS サーバーレスアプリケーションモデル(SAM, Serverless Application Model)
https://aws.amazon.com/jp/serverless/sam/
© 2021, Amazon Web Services, Inc. or its affiliates. All rights reserved.
10
開発プロセス: コード
プラン
コード
ビルド
テスト
リリー
ス
デプ
ロイ
運用
監視
継続
的インテグレーション(CI)
デプロイ
継続
的
(CD)
人が作業
CircleCI
コンフィグに
ジョブ定義
仕様策定
app.js
test-handler.
js
build_api
ジョブ
test_api
ジョブ
deploy_api
ジョブ
CircleCI
コンテクストで
共有
awsコンテクスト(aws-dev, aws-deploy…)
AWS_ACCESS_KEY_ID, AWS_REGION,
AWS_SECRET_ACCESS_KEY
コード: app.js
通貨変換テーブル currencyArray を
用意しておき
API呼び出し時に指定した
commandがconvertで
パラメータ unit(通貨短縮形)が
通貨変換テーブルに該当ありなら
パラメータ value(日本円での金額)に
rate(変換レート)をかけた値を
amountとしてJSON形式で通知
© 2021, Amazon Web Services, Inc. or its affiliates. All rights reserved.
12
開発プロセス: ビルド〜デプロイ
プラン
コード
ビルド
テスト
リリー
ス
デプ
ロイ
運用
監視
継続
的インテグレーション(CI)
デプロイ
継続
的
(CD)
人が作業
CircleCI
コンフィグに
ジョブ定義
仕様策定
app.js
test-handler.
js
build_api
ジョブ
test_api
ジョブ
deploy_api
ジョブ
CircleCI
コンテクストで
共有
awsコンテクスト(aws-dev, aws-deploy…)
AWS_ACCESS_KEY_ID, AWS_REGION,
AWS_SECRET_ACCESS_KEY
コンテクスト
ログインシークレット(ID, パスワードなど)や、
各種設定(リージョンなど)を複数のプロジェクト間で共有可能。
開発用コンテクスト(aws-dev)と本番用コンテクスト(aws-deploy)の
ように使い分けることも効率的
(各種設置値は異なるが手順が同じ場合)
© 2021, Amazon Web Services, Inc. or its affiliates. All rights reserved.
14
開発プロセス: ビルド
プラン
コード
ビルド
テスト
リリー
ス
デプ
ロイ
運用
監視
継続
的インテグレーション(CI)
デプロイ
継続
的
(CD)
人が作業
CircleCI
コンフィグに
ジョブ定義
仕様策定
app.js
test-handler.
js
build_api
ジョブ
test_api
ジョブ
deploy_api
ジョブ
CircleCI
コンテクストで
共有
awsコンテクスト(aws-dev, aws-deploy…)
AWS_ACCESS_KEY_ID, AWS_REGION,
AWS_SECRET_ACCESS_KEY
ビルド: build_apiジョブをコンフィグ(config.yml)に定義
executor(ビルド作業環境)では
AWSが提供する SAM CLIを使用
GitHubからソースコードを取り出し(checkout)
ビルド作業環境にSAM CLIをインストールし
コードをビルドする(sam build)
ビルド結果(+必要なライブラリ等)は
.aws-sam ディレクトリに格納されているので
「テスト」「デプロイ」時にも使うため
workspaceという場所に保存しておく
© 2021, Amazon Web Services, Inc. or its affiliates. All rights reserved.
16
開発プロセス: テスト
プラン
コード
ビルド
テスト
リリー
ス
デプ
ロイ
運用
監視
継続
的インテグレーション(CI)
デプロイ
継続
的
(CD)
人が作業
CircleCI
コンフィグに
ジョブ定義
仕様策定
app.js
test-handler.
js
build_api
ジョブ
test_api
ジョブ
deploy_api
ジョブ
CircleCI
コンテクストで
共有
awsコンテクスト(aws-dev, aws-deploy…)
AWS_ACCESS_KEY_ID, AWS_REGION,
AWS_SECRET_ACCESS_KEY
テストコード: test-handler.js
パラメータ(command=convert&
unit=USD&value=2)を用意し
Currency APIを呼び出す
その結果(result)、
実行結果(statusCode)が
正常終了(200)で、
返答(response)が
amount: 208.98 ならテストにパス
同様に USD 10 に対して、
変換結果 JPY 1044.90(1044.9)が
返ってくればテストにパス
© 2021, Amazon Web Services, Inc. or its affiliates. All rights reserved.
18
テスト: test_apiジョブをコンフィグ(config.yml)に定義
executor(テスト作業環境)では
AWSが提供する SAM CLIを使用
GitHubからソースコードを取り出し(checkout)
Workspaceに保存しておいた
ビルド結果(+必要なライブラリ等)を
.aws-sam ディレクトリに格納しなおし
テスト作業環境にSAM CLIをインストールし
テスト(npm test)する
開発プロセス: リリース〜デプロイ
プラン
コード
ビルド
テスト
リリー
ス
デプ
ロイ
運用
監視
継続
的インテグレーション(CI)
継続
デプロイ
的
(CD)
人が作業
CircleCI
コンフィグに
ジョブ定義
仕様策定
app.js
test-handler.
js
build_api
ジョブ
test_api
ジョブ
deploy_api
ジョブ
CircleCI
コンテクストで
共有
awsコンテクスト(aws-dev, aws-deploy…)
AWS_ACCESS_KEY_ID, AWS_REGION,
AWS_SECRET_ACCESS_KEY
© 2021, Amazon Web Services, Inc. or its affiliates. All rights reserved.
20
デプロイ: deploy_apiジョブをコンフィグ(config.yml)に定義
executor(デプロイ作業環境)では
AWSが提供する SAM CLIを使用
GitHubからソースコードを取り出し(checkout)
Workspaceに保存しておいた
ビルド結果(+必要なライブラリ等)を
.aws-sam ディレクトリに格納しなおし
デプロイ作業環境にSAM CLIをインストールし
デプロイ(sam deploy)する
(ただし変更箇所がなくても失敗にしない)
ワークフローとコンテクスト
awsコンテクスト(aws-dev, aws-deploy…)
AWS_ACCESS_KEY_ID, AWS_REGION,
AWS_SECRET_ACCESS_KEY
build_apiジョブをawsコンテクストで実行する
build_apiジョブが正常終了していれば(requires)、
test_apiジョブをawsコンテクストで実行する
test_apiジョブが正常終了していれば(requires)、
deploy_apiジョブをawsコンテクストで実行する
© 2021, Amazon Web Services, Inc. or its affiliates. All rights reserved.
22
CircleCIにはワークフローの [実行] ボタンはありません
作りやすさ・使いやすさを
拡げよう!
© 2021, Amazon Web Services, Inc. or its affiliates. All rights reserved.
エンジニアの生産性を高めるのは何?
速いCPU、リッチなメモリ、広い画面?
肩こりや腰痛と無縁になれる椅子?
実データから見る自動化(CI/CD)
調査期間
2020/08/01~30
(2019年版は90日間)
調査対象
44,000組織
160,000プロジェクト
200万ジョブ/日
https://circleci.com/ja/resources/2020-state-of-software-delivery/
© 2021, Amazon Web Services, Inc. or its affiliates. All rights reserved.
28
CircleCIユーザーの
中央値(2020/08)
ベンチマーク目標値
スループット
ワークフローの実行数
0.7回/日
いつでも(遠慮せずに)ビルド可能
プルリクエストのマージごと
実行時間
ワークフローの実行時間
4分以内
自動化可能なことは全て任せる
5~10分
復旧時間
ワークフローの失敗〜成功の時間
56分以内
60分以内
大きな失敗を最後にではなく、す
ぐに復旧できる失敗を早期に
成功率
ワークフローの成功数/実行数
デフォルトブランチで80%
デフォルトブランチで90%以上
自動化における4つの評価ポイント
ここの数値に「近い目標」として
まずは追いつき
ここの数値を「あるべき姿」として
目指す
現時点での数値を「課題」として
把握した上で
評価ポイント1: スループット
評価ポイント3: 復旧時間
評価ポイント2: 実行時間
© 2021, Amazon Web Services, Inc. or its affiliates. All rights reserved.
30
お客様にとっての使いやすさも拡げよう!
➢
貴社のAPIが世の中に普及するには、
➢
マーケティングや営業も大事です
➢
APIドキュメントの整備は当然必要でしょう
➢
それに加えて、サンプル+テストが、(技術的素養が深くなく
ても)すぐに試しに動かしてみることができることが
重要
➢
具体的にはクラウドベースのCI/CDを使ったサンプル
→PC上に開発環境をセットアップしなくても、
クラウド上でビルド
して、結果がすぐに見れる!
CircleCIをもっと知りたい!人に...
最新の情報なら
@CircleCIJapan をフォロー!
#CircleCIJp タグつけて情報共有!
イベント、セミナー、勉強会の情報なら
connpassのCircleCIグループから!
https://circleci.connpass.com/
動画でCircleCIについて学ぶなら
CircleCIチャンネルを登録!
(日本語プレイリストもあり)
© 2021, Amazon Web Services, Inc. or its affiliates. All rights reserved.
Thank you!
© 2021, Amazon Web Services, Inc. or its affiliates. All rights reserved.