Upgrade to Pro — share decks privately, control downloads, hide ads and more …

自動化と並列化と高速化 〜 日本の私たちがチーム開発する際に必要なこと

自動化と並列化と高速化 〜 日本の私たちがチーム開発する際に必要なこと

2022年7月21日にオンライン開催された Developer Summit 2022 Summer でのCircleCI Principal Developer Advocateとしての発表「自動化と並列化と高速化 〜 日本の私たちがチーム開発する際に必要なこと」で使用したスライドです。

https://event.shoeisha.jp/devsumi/20220721

More Decks by Masahiko Funaki(舟木 将彦)

Other Decks in Technology

Transcript

  1. 2 舟木 将彦(@mfunaki) CircleCI合同会社 Principal Developer Advocate ビジネスを支えるソフトウェアが お客様やマーケットに合わせて 継続して進化していくために不可欠な

    ・CI(継続的インテグレーション) ・CD(継続的デリバリ/デプロイ) の意義や価値、進め方を 技術、ビジネス、経営の言葉で お届けしています。 2000~ ◦ AppleのSiriの前身となるDejima社にて 特許出願を含む製品開発 (車載、家電での音声対話操作) 2003~ ◦ データベースベンダー(Sybase)による買収に伴い 自然言語でのデータベース検索や モバイル環境での対話型検索の開発 2013~ ◦ ERPベンダー(SAP)による買収に伴い ERPのモバイル対応や、 自動車関連業界(電装パーツ、タイヤ、自動車、 再生可能エネルギー)でのイノベーション促進 2018~ ◦ 自動車や小売り、製造、金融といった業界に 対して、 アイデア~コード~プロト~製品/サービス 間の時間差を最小限に 2020~ • アイデア~エンジニアによる実装~アプリやサービス の間を自動化で結び、フィードバックループを高速に 回すため、CircleCI にて Developer Advocate に 自己紹介
  2. 8 State of DevOps Reportとは? – ヒアリングが元 2014年以来、Puppet社で毎年まとめられて いる「DevOpsの現況に関するレポート」。 2014~17年のレポートをまとめ、

    解説を加えたものが 『LeanとDevOpsの科学』として 日本語に翻訳もされている。 2020, 21年のレポートの日本語版は CircleCIから公開されている。 (https://www2.circleci.com/jp-puppet-2021-state-of-devops.html)
  3. 9 State of Software Delivery Reportとは? – 実データが元 2019年以来、CircleCIで毎年まとめている 「エンジニアチームの成長の指標の

     ベンチマークと  目指すべきソフトウェアデリバリーの  パフォーマンスに関するレポート」。 2022年までのレポートの英語版は公開済み。 2021年レポートまでは日本語版あり。 (https://www2.circleci.com/JPThe2020StateofDeliveryReport_LP.html) 2022年のレポートは近日公開予定→本日はこちらの元となったデータからご紹介
  4. CircleCIってどんな会社 • 世界最大規模のクラウドCI/CD(継続的インテグレーション/継続的デプロイ)サービス ◦ 22,000以上の組織の 100万以上の開発者が実行する 毎月7億以上のジョブを支えるサービス • ミッション: Manage

    change So software teams can innovate faster • 2011年設立、サンフランシスコに本社 2021/05/11 にSeries Fで1億ドルを調達 (これまでに$315Mの投資、$1.7Bの企業価値) • 600+人の社員 (米国、日本、英国、オランダ、フランス+  リモートワーク)
  5. 11 CircleCIを使って自動化できるのはどこか? プラン コード ビルド テスト リリース デプ ロイ 運用

    監視 継続的インテグレーション(CI) 継続的 デプロイ (CD) 自動化できない 非正常系は 自動化できない 自動化できる→継続的であるために自動化すべき やることは増える、人は増えないのであれば自動化が必要 コード追加・修正時は 常にビルド・テスト (最後にまとめてやらな い→早く失敗すれば 早く品質が安定する) サービス停止せず常に リリース/デプロイ (失敗時にはクイックに 修正 / 前バージョンに 戻せる)しくみ 人にしかできない ことは、 細分化した上で できる人が 手を挙げてやる →誰でも見える、  参加できる状態 共有 リポジトリ上 で 常に作業 自動化できる ことは 作業手順の 定義を行い 自動実行させる →依頼しない、 抜け漏れしない 運用・監視しやすい 品質をコードに反映 (必要なデータの取得、 スケーラビリティの 確保)
  6. 12 ワークフロー実行回数順位 (CircleCIクラウド版) グローバル 1 米国 2 英国 3 日本

    4 ドイツ 5 カナダ 6 オーストラリア 7 フランス 8 スウェーデン 9 ブラジル 10 イスラエル アジア・太平洋地域 1 日本 2 オーストラリア 3 シンガポール 4 香港 5 ニュージーランド 6 インド 7 韓国 8 マレーシア 9 タイ 10 インドネシア 2010/10~2011/09までの12か月にCircleCIクラウド版で実行されたワークフローより。 ただしサンプルやチュートリアルの実行等は除外している(カウントしていない)。
  7. 16 ソフトウェアデリバリーに関わる4つの主要な指標 4つの指標 グローバルの CircleCIユーザー平均値 CircleCIが考える 目標値* スループット (ワークフロー実行回数) 1.43回/日

    ビジネス上の必要性に沿って (← プルリクエストの数) 実行時間 (ワークフロー実行時間) 3.7分 10分 (← 5~10分) 平均リカバリ所要時間 73.6分 1時間以内 ワークフロー成功率 デフォルトブランチで77% デフォルトブランチで90%以上
  8. 17 国別に見た4つの指標 4つの指標 グローバル 平均 日本 米国 ドイツ スループット (ワークフロー実行回数)

    1.43回/日 1.00回/日 1.67回/日 1.2回/日 実行時間 (ワークフロー実行時間) 3.7分 3.59分 3.82分 3.17分 平均リカバリ所要時間 73.6分 67.73分 80.01分 130.00分 ワークフロー成功率 (デフォルトブランチでの) 77% 84.24% 76.90% 82.14%
  9. 18 ソフトウェアデリバリーに関わる4つの主要な指標 4つの指標 グローバルの CircleCIユーザー平均値 CircleCIが考える 目標値* スループット (ワークフロー実行回数) 1.43回/日

    ビジネス上の必要性に沿って (← プルリクエストの数) 実行時間 (ワークフロー実行時間) 3.7分 10分 (← 5~10分) 平均リカバリ所要時間 73.6分 1時間以内 ワークフロー成功率 デフォルトブランチで77% デフォルトブランチで90%以上
  10. 19 1. スループット スループット(ワークフロー実行回数)とは エンジニアチーム目線  ・ソースコードがどれだけ追加・変更され、VCS上にCommitされているか?  ・新規の脆弱性スキャンなど定期実行(追加・変更を起点としない)が適切に   実行されているか アプリやサービスの利用者目線  ・不具合の修正や機能の追加がどれだけ頻繁に行われているか?

    時系列で見る指標  ・平均リカバリ所要時間   ソフトウェアの成熟に伴い、スループットは増加(これ自体は悪くない)。   ただし、平均リカバリ所要時間も合わせて増加だと、チームメンバーは   機能の追加・修正と、それに伴う不具合の修正で「燃え尽きて」しまう。
  11. 20 ソフトウェアデリバリーに関わる4つの主要な指標 4つの指標 グローバルの CircleCIユーザー平均値 CircleCIが考える 目標値* スループット (ワークフロー実行回数) 1.43回/日

    ビジネス上の必要性に沿って (← プルリクエストの数) 実行時間 (ワークフロー実行時間) 3.7分 10分 (← 5~10分) 平均リカバリ所要時間 73.6分 1時間以内 ワークフロー成功率 デフォルトブランチで77% デフォルトブランチで90%以上
  12. 22 2. 実行時間 実行時間(ワークフロー実行時間)とは 適切な長さ(10分)であることは、競合に追いつき、競合を引き離す力の源泉 実行時間を短くするには  ・縦に伸ばす(スペックを上げる)か、横に伸ばす(並列化する)  ・時間がかかっているテストや結果が不安定な(Flakyな)テストに対応する   (並列化しやすいようにする、不安定要因を取り除くなど) 実行時間を長くするには

     ・品質や信頼性の向上に関わる取り組みを自動化した上で加える   例)Lint(保守性の向上)、コードカバレッジ(未テスト部分はどこか)、     セキュリティスキャン(リポジトリの更新がなくても定期的に)、     別OSや別バージョンの環境でのテスト等
  13. 23 縦に伸ばす(自動化実行環境のスペックを上げる) リソースクラスと消費クレジット Docker Executor クラス vCPUs RAM クレジット small

    1 2GB 5クレジット/分 medium 2 4GB 10クレジット/分 medium+ 3 6GB 15クレジット/分 large 4 8GB 20クレジット/分 Freeプランでは30,000クレジット/月が無料で付与 (smallクラスなら6000分=100時間に相当) ※月20日換算で一日あたりのジョブ実行時間5.0時間
  14. 28 ソフトウェアデリバリーに関わる4つの主要な指標 4つの指標 グローバルの CircleCIユーザー平均値 CircleCIが考える 目標値* スループット (ワークフロー実行回数) 1.43回/日

    ビジネス上の必要性に沿って (← プルリクエストの数) 実行時間 (ワークフロー実行時間) 3.7分 10分 (← 5~10分) 平均リカバリ所要時間 73.6分 1時間以内 ワークフロー成功率 デフォルトブランチで77% デフォルトブランチで90%以上
  15. 29 3. 平均リカバリ所要時間 平均リカバリ所要時間(MTTR: Mean Time To Recovery)とは エンジニアチーム目線  ・ビルド、テスト、リリース、デプロイといった自動化作業が失敗してから、

      成功するようになるまでの時間  ・修正や変更を加えることで成功する場合もあれば、   失敗の原因となった修正や変更を元に戻す(revertする)ことで成功する場合もある  →ソースコードを修正する方法、フィーチャーフラグをON/OFFする方法 アプリやサービスの利用者目線  ・アプリケーションやサービスが使いたい時にちゃんと使えるか?   (サービス停止時間やタイミングはどの程度か)
  16. 30 ソフトウェアデリバリーに関わる4つの主要な指標 4つの指標 グローバルの CircleCIユーザー平均値 CircleCIが考える 目標値* スループット (ワークフロー実行回数) 1.43回/日

    ビジネス上の必要性に沿って (← プルリクエストの数) 実行時間 (ワークフロー実行時間) 3.7分 10分 (← 5~10分) 平均リカバリ所要時間 73.6分 1時間以内 ワークフロー成功率 デフォルトブランチで77% デフォルトブランチで90%以上
  17. 32 実プロジェクトにおける各指標(OSSでの例) The Big Give Donate Frontend (thebiggive/ donate-frontend) Bolt

    Checkout Plugin for Magento 2 (BoltApp/ bolt-magento2) Armada (G-Research/armada) スループット 2.4回/日 38.9回/日 2.9回/日 実行時間 10分44秒 10分23秒 10分49秒 平均リカバリ所要時間 28分31秒 47分20秒 29分8秒 ワークフローに関して Slack OrbとJira Orbを 使用 プロジェクト中の変更箇 所に応じて、 実行するテストを選択 独自の(軽量な+必要な ツールがインストール済 みの)Goイメージを使用
  18. 34 CircleCIで実行されたワークフローでの使用言語 2019 2020 2021 JavaScript JavaScript TypeScript Ruby TypeScript

    JavaScript TypeScript Ruby Ruby Python Python Python PHP Go Go Go PHP Java Java Java PHP HTML Kotlin Kotlin Kotlin HTML HCL Swift Swift HTML Shell HCL Swift HCL Shell Shell Vue Vue Scala Scala Scala Vue Elixir Jupyter Notebook Elixir Jupyter Notebook Elixir Jupyter Notebook CSS C# C# C++ Clojure C++ Clojure C++ Gherkin C# CSS Clojure Objective-C Gherkin CSS TSQL C Apex C Apex Dockerfile Groovy Objective-C Rust Rust Groovy C トップ10 11~25位
  19. 35 インダストリー別に見た4指標 実行時間 インダストリー P50 ヘルスケア 4.46 ホテル・レストラン・レ ジャー 3.96

    プロフェッショナルサー ビス 3.88 インターネットソフト・ サービス 3.80 不動産 3.72 一般消費財 3.66 ファイナンス 3.55 メディア 3.21 平均リカバリ所要時間 インダストリー P50 ホテル・レストラン・レ ジャー 60.4 インターネットソフト・ サービス 72.1 ファイナンス 73.2 メディア 84.0 プロフェッショナルサー ビス 85.0 ヘルスケア 99.5 一般消費財 273 不動産 318 スループット インダストリー P50 ヘルスケア 1.68 ホテル・レストラン・レ ジャー 1.68 不動産 1.68 一般消費財 1.61 ファイナンス 1.61 インターネットソフト・ サービス 1.46 プロフェッショナルサー ビス 1.04 メディア 1.00 ワークフロー成功率 インダストリー 平均 メディア 71.9% 一般消費財 70.1% 不動産 69.9% インターネットソフト・ サービス 69.0% プロフェッショナル サービス 68.5% ファイナンス 68.0% ヘルスケア 66.5% ホテル・レストラン・レ ジャー 61.1%