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

ビジネス拡大を支えるDigital - を支えるCI/CD

ビジネス拡大を支えるDigital - を支えるCI/CD

More Decks by Masahiko Funaki(舟木 将彦)

Other Decks in Technology

Transcript

  1. 2 舟木 将彦(@mfunaki) CircleCI合同会社 Principal Developer Advocate ビジネスを支えるソフトウェアの マーケット変化適応力を高める のに不可欠な

    CI(継続的インテグレーション ) CD(継続的デプロイメント) の意義や価値、進め方を 技術、ビジネス、経営の言葉で お届けしています 略歴 2000~ ◦ 日系OEMとシリコンバレーにて スタンフォード大学含め特許出願含む 共同R&D(言語処理, ドライバーセンシング) 2003~ ◦ Tiar 1サプライヤと組み込み環境での データベース+サービス実装 2013~ ◦ 日米欧OEM、メーカーと各種In-Carサービス+ AIを適用した電気/水素供給実装(ハノーバー メッセ出展) ◦ タイヤメーカー、Tier 1サプライヤとの各種 取り組み(DX) 2018~ ◦ Tier 1サプライヤとのCASEに向けた あらたな生産技術のコミュニケーション・ 情報共有、デジタル化支援 2020~ 自己紹介
  2. 6 LOOK をデジタルで記録することで 後工程が加速 1. ヒト・モノ・カネの流れ 2. ものづくりの流れ データの発生が紙→デジタルに 移ることで、売上や利益、コストを

    リアルタイムで把握 →THINK, DOまでのタイムラグ少なく 設計データが3D CAD化されることで、 3Dプリンタ出力や、モノなしでのテスト (シ ミュレーション)可能に →THINK, DOまでのタイムラグ少なく
  3. 7 ソフトウェア開発はどこまで加速しているか? 3. ソフト開発の流れ ・ソースコードはデジタル ・ハードウェアもIaC(Infrastructure as  Code)でデジタル(=クラウド) なのに ・プロジェクトファイルの管理

    ・コンパイル ・テスト ・リリース ・デプロイや配布 が手作業(=誤りや不正が混入しやすい ) →リアルタイム性に欠ける  (エンジニアが作る・タイミングと   アプリやサービスに反映される   タイミングが遠い) 優秀なエンジニアを抱えていても 、アプリやサービスに反 映されるまでが「リアルタイム」でなければ、 1) 業務遂行 や 2) カスタマーエンゲージメント で 行動(結果)は なかなか 変えられない。
  4. 10 ソフトウェアはモノからサービスに ビジネスの成長速度を支えるため、ソフトウェアも成長しつづける必要がある → かつて ソフトウェアはモノだったが、これからのソフトウェアはサービス • モノの品質(企業であれば5年償却) 買った時点が一番価値が高く、競合の出現や市場の進化により価値が低下 →

    モデルチェンジやバージョンアップ 開発手法:ウォーターフォール • サービスの品質 常に最高のサービスを使い続ける → 魅力的品質を高めつづける (ペルソナ像やジャーニーを常に見直し ) 開発手法:アジャイル(要件→設計→実装→テストを小さく回す)      ウォーターフォールが進化してもアジャイルにはならない
  5. 11 • 設計品質、製造品質、顧客品質 モノづくりのプロセス(ソフトウェアであればウォーターフォール) 需要予測 調達 アフター サービス 流通 販売

    企画 設計 生産準備 生産 エンジニアリングチェーン サプライ チェーン • 3D CAD • シミュレーション • フロントローディング • 品質の設計時作り込み • AIによる予測 • サブスク • 維持管理 (デジタル図面の活用 )
  6. イノベーション:内製化+パートナーシップが重要 内製化とは「自社である1つのことを何でもやることではない」  お客様との繋がり方を変える(Customer Engagement)+儲け方を変える (Business Model)  「早く進む人」と「遠くまで行ける人」という異種がコラボできるインフラが必要 クイックウィン コンセントの ある店を

    アプリで検索 課題 スマホを 充電したい 協業1+課題 カフェとコラボ →長居はイヤ 協業モデル2 +バッテリー 企業とコラボ 協業モデル3 再生可能エネを 販売 ベンチャー:早く行きたければ一人で進め 大企業:遠くまで行きたければみんなで進め 参入障壁 (マネしやすさ) ベンチャーも大企業が 重なり合う(協業)ことで 強みを高めながら顧客に価値をお届けする 店舗の住所・名称 を管理 バッテリーの 位置・残量を管理 発電効率・コスト・ 需給を管理 必要な データ管理 各種コラボ(優先表 示、クーポン等)
  7. 15 継続するビジネスを支えるソフトウェア開発を標準化 プラン コード ビルド テスト リリース デプ ロイ 運用

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

    ロイ 運用 監視 継続的インテグレーション (CI) 継続的 デプロイ (CD) 人が作業 CircleCI コンフィグに ジョブ定義 仕様策定 app.js app.test.js build_api ジョブ test_api ジョブ CircleCI ジョブ間で 情報共有 キャッシュ ワークスペース 環境変数(コンテクスト) release_api ジョブ deploy_api ジョブ Dockerfile (IaC, デプロイ 定義)
  9. 自動化における4つの評価ポイント CircleCIユーザーの 中央値 (2021) ベンチマーク目標値 スループット ワークフローの実行数 1.43回/日 プルリクエストのマージごと いつでも(遠慮せずに)ビルド可能

    実行時間 ワークフローの実行時間 3.7分以内 5~10分 自動化可能なことは全て任せる 復旧時間 ワークフローの失敗~成功の時間 73.6分以内 60分以内 大きな失敗を最後にではなく、すぐ に復旧できる失敗を早期に 成功率 ワークフローの成功数/実行数 デフォルトブランチで 77% デフォルトブランチで 90%以上 ここの数値に「近い目標」として まずは追いつき ここの数値を「あるべき姿」として 目指す 現時点での数値を「課題」として 把握した上で
  10. 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+人の社員 (米国、日本、英国、オランダ、フランス+  リモートワーク)
  11. 25 1. ビルドやテストを効率化する①〜無駄に待たない テストジョブの分析 ・過去100回のテストから、   成功率が低いテスト   実行時間が遅いテスト ・過去14日間のテストから   成功・失敗が不安定な   (Flakyな)5テスト

    ◎ ジョブ実行時のCPU/RAM   使用率をグラフ表示  (並列実行時はそれぞれに   ついて表示) Dockerコンテナの構築 ・開発環境や実行環境、  サーバレスなサービスなど  コンテナ構築が  CIのゴールに ・Dockerfile 作成のベスト  プラクティスを適用しても  まだ遅い(失敗はつらい) Docker レイヤー キャッシュで  変更箇所の前までは  3日間キャッシュ有効 ◎ npmやpip, Yarnなどの  ライブラリもキャッシュ   可能) テストの分割 ・ファイル名を元に  ファイルの数を均等に ・ファイルサイズを元に  ファイルの大きさを均等に ・タイミングデータを元に  処理時間を均等に →Freeプランでも  30並列まで  同時並行実行可能 30並列実行 キャッシュ活用 テスト結果の分析
  12. 28 1. ビルドやテストを効率化する①〜無駄に待たない テストジョブの分析 ・過去100回のテストから、   成功率が低いテスト   実行時間が遅いテスト ・過去14日間のテストから   成功・失敗が不安定な   (Flakyな)5テスト

    ◎ ジョブ実行時のCPU/RAM   使用率をグラフ表示  (並列実行時はそれぞれに   ついて表示) Dockerコンテナの構築 ・開発環境や実行環境、  サーバレスなサービスなど  コンテナ構築が  CIのゴールに ・Dockerfile 作成のベスト  プラクティスを適用しても  まだ遅い(失敗はつらい) Docker レイヤー キャッシュで  変更箇所の前までは  3日間キャッシュ有効 ◎ npmやpip, Yarnなどの  ライブラリもキャッシュ   可能) テストの分割 ・ファイル名を元に  ファイルの数を均等に ・ファイルサイズを元に  ファイルの大きさを均等に ・タイミングデータを元に  処理時間を均等に →Freeプランでも  30並列まで  同時並行実行可能 30並列実行 キャッシュ活用 テスト結果の分析
  13. 29 Dockerレイヤーキャッシュ (イメージビルドの高速化) Dockerレイヤーキャッシュ(DLC)は、CircleCI のジョブ中にビルドされた Docker イメージの 個々のレイヤーがキャッシュされます。その後で CircleCI を実行すると、イメージ全体が毎回

    リビルドされるのではなく、未変更のイメージ レイヤーが再利用されます。 つまり、コミット間で Dockerfile の変更が少ないほど、イメージ ビルド ステップが短時間で完了します。 https://youtu.be/ZqpIXKMn0G4
  14. 30 1. ビルドやテストを効率化する①〜無駄に待たない テストジョブの分析 ・過去100回のテストから、   成功率が低いテスト   実行時間が遅いテスト ・過去14日間のテストから   成功・失敗が不安定な   (Flakyな)5テスト

    ◎ ジョブ実行時のCPU/RAM   使用率をグラフ表示  (並列実行時はそれぞれに   ついて表示) Dockerコンテナの構築 ・開発環境や実行環境、  サーバレスなサービスなど  コンテナ構築が  CIのゴールに ・Dockerfile 作成のベスト  プラクティスを適用しても  まだ遅い(失敗はつらい) Docker レイヤー キャッシュで  変更箇所の前までは  3日間キャッシュ有効 ◎ npmやpip, Yarnなどの  ライブラリもキャッシュ   可能) テストの分割 ・ファイル名を元に  ファイルの数を均等に ・ファイルサイズを元に  ファイルの大きさを均等に ・タイミングデータを元に  処理時間を均等に →30並列まで  同時並行実行可能 30並列実行 キャッシュ活用 テスト結果の分析
  15. 31 • ワークフローのメトリクスをインテリジェントに収 集・可視化 ◦ ワークフローやジョブ別の内訳 ◦ どのプロジェクト、ワークフロー、ジョブが失 敗し、最もクレジットを消費しているのか ◦

    遅いテストワースト10 失敗するテストワースト10 ◦ 成功・失敗が不安定なテストはどれか ◦ テスト実行時のCPU/RAM使用推移 テスト インサイト
  16. 32 1. ビルドやテストを効率化する②〜無駄に待たない ジョブ実行環境 ・ビルドやテストに合わせた  適切なリソースを割り当て  可能 →中〜低スペックで  並列実行  VS

     (並列実行のメリット小  なら)  高スペックで単独実行 実行環境 リソースクラスと消費クレジット 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時間
  17. 33 2. 幅広いビルド環境をサポート 自分の用意した実行環境で CircleCIのジョブを実行 ・エージェントをインストー  ルすることで  CircleCIのジョブを実行 実行環境(サポート対象) ・Ubuntu

    18.04+(x86_64/ARM64) ・RHEL8 (x86_64/ARM64) ・Mac OS X 10.15+ (Intel) ・macOS 11.2+ (Apple M1) ・Docker (x86_64/ARM64) ・Kubernetes (x86_64) ・Windows Server 2019,2016 (x86_64) Dockerベースの実行環境 ・Linuxベースのコンテナを  実行可能 ・CircleCIからはCIに特化  した cimg/xxxxx イメージ  を提供 VMベースの実行環境 ・Linux(x86_64, aarch64) ・Windows ・macOS ・GPU(Linux/Windows with  Nvidia Tesla Tensor Core  GPU) Linux,Win,Mac ランナー x5
  18. 34 リソースクラス: マシンスペックのカスタマイズ • Small (1vCPU, 2 GB RAM) •

    Medium (2 vCPU, 4 GB RAM) • Medium+ (3 vCPU, 6 GB RAM) • Large (4 vCPU, 8 GB RAM) • X-large* (8 vCPU, 16 GB RAM) • 2 X-large* (16 vCPU, 32 GB RAM) • 2 X-large+* (20 vCPU, 40 GB RAM) Docker (Linux) Linux (Machine) macOS * 有償プランが必須 • medium (2 vCPU, 7.5 GB RAM) • large (4 vCPU, 15 GB RAM) • X-large* (8 vCPU, 32 GB RAM) • 2 X-large* (16 vCPU, 64 GB RAM) • GPU Small* (4 vCPU, 15 GB RAM, 1 GPU, Tesla P4, 8 GiB GPU RAM) • GPU Medium* (8 vCPU, 30 GB RAM, 1 GPU, Tesla T4, 16 GiB GPU RAM) • GPU Large* (8 vCPU, 30 GB RAM, Tesla V100, 1 GPU, 16 GiB GPU RAM) • Medium (4 vCPU 2.7GHz, 8 GB RAM) • Medium Gen2 (4 vCPU 3.2GHz, 8GB) • Large* (8 vCPU 2.7GHz, 16 GB RAM) • Metal* (12 vCPU 3.2GHz, 32GB RAM)
  19. 35 リソースクラス: マシンスペックのカスタマイズ • arm.medium (2 vCPU, 8 GB RAM)

    • arm.large (4 vCPU, 16 GB RAM) • Arm64 Linux Android + Emulator • Image for machine executor • Supports nested virtualization and x86 Android emulators • Also comes with Android SDK pre-installed Windows • Medium (4 vCPU, 15 GB RAM) • Large (8 vCPU, 30 GB RAM) • X-large (16 vCPU, 60 GB RAM) • 2 X-large* (32 vCPU, 128 GB RAM) • GPU Medium* (16 vCPU, 60 GB RAM, 1 GPU, 16 GiB GPU RAM)
  20. 36 2. 幅広いビルド環境をサポート 自分の用意した実行環境で CircleCIのジョブを実行 ・エージェントをインストー  ルすることで  CircleCIのジョブを実行 実行環境(サポート対象) ・Ubuntu

    18.04+(x86_64/ARM64) ・RHEL8 (x86_64/ARM64) ・Mac OS X 10.15+ (Intel) ・macOS 11.2+ (Apple M1) ・Docker (x86_64/ARM64) ・Kubernetes (x86_64) ・Windows Server 2019,2016 (x86_64) Dockerベースの実行環境 ・Linuxベースのコンテナを  実行可能 ・CircleCIからはCIに特化  した cimg/xxxxx イメージ  を提供 VMベースの実行環境 ・Linux(x86_64, aarch64) ・Windows ・macOS ・GPU(Linux/Windows with  Nvidia Tesla Tensor Core  GPU) Linux,Win,Mac ランナー x5 https://circleci.com/ja/blog/physical -computing-with-circleci-1/
  21. 37 3. チームでの開発生産性を高める セキュリティ認証 ・SOC 2 Type II 準拠 ・FedRAMP

    Tailored 認証 CircleCIの各種セキュリティに 関して https://circleci.com/ja/security/ Orb - 再利用可能な部品化 ・CircleCIでのCI/CDの定義は  コンフィグにYAML言語で  記述 ・コンフィグの一部分を切り  出し、他コンフィグで部品  と して使用可能(ノウハウ  共有) ・公開範囲はPublic(誰でも)  Private(組織内)を指定可能 誰もがプロジェクトに貢献 ・自分一人で始めることも、  組織のメンバーで始める  ことも、増減も自由 ・プロジェクトメンバー数に  上限はありません →アカウント共有のような  バッドノウハウ不要 ・OSSコミュニティには  毎月400,000クレジットを  無償付与 https://circleci.com/ja/open- source/ 無制限ユーザー 設定を社内共有 セキュアなCI/CD
  22. 38 3. チームでの開発生産性を高める セキュリティ認証 ・SOC 2 Type II 準拠 ・FedRAMP

    Tailored 認証 CircleCIの各種セキュリティに 関して https://circleci.com/ja/security/ Orb - 再利用可能な部品化 ・CircleCIでのCI/CDの定義は  コンフィグにYAML言語で  記述 ・コンフィグの一部分を切り  出し、他コンフィグで部品  と して使用可能(ノウハウ  共有) ・公開範囲はPublic(誰でも)  Private(組織内)を指定可能 誰もがプロジェクトに貢献 ・自分一人で始めることも、  組織のメンバーで始める  ことも、増減も自由 ・プロジェクトメンバー数に  上限はありません →アカウント共有のような  バッドノウハウ不要 ・OSSコミュニティには  毎月400,000クレジットを  無償付与 https://circleci.com/ja/open- source/ 無制限ユーザー 設定を社内共有 セキュアなCI/CD https://youtu.be/T9mr3LudDdQ
  23. 40 3. チームでの開発生産性を高める セキュリティ認証 ・SOC 2 Type II 準拠 ・FedRAMP

    Tailored 認証 CircleCIの各種セキュリティに 関して https://circleci.com/ja/security/ Orb - 再利用可能な部品化 ・CircleCIでのCI/CDの定義は  コンフィグにYAML言語で  記述 ・コンフィグの一部分を切り  出し、他コンフィグで部品  と して使用可能(ノウハウ  共有) ・公開範囲はPublic(誰でも)  Private(組織内)を指定可能 誰もがプロジェクトに貢献 ・自分一人で始めることも、  組織のメンバーで始める  ことも、増減も自由 ・プロジェクトメンバー数に  上限はありません →アカウント共有のような  バッドノウハウ不要 ・OSSコミュニティには  毎月400,000クレジットを  無償付与 https://circleci.com/ja/open- source/ 無制限ユーザー 設定を社内共有 セキュアなCI/CD
  24. 41 クラウドまたは専用環境のどちらかを選択可能 クラウド 開発者/ ユーザー VCS (GitHub.com または Bitbucket Cloud)

    データベース ビルドの
 フリート キャッシュ & 
 アーティファクト サーバー 顧客が管理するネットワーク内に 顧客専用のCircleCIをセットアップ 開発者/ ユーザー VCS (GitHub.com または GitHub Enterprise Server) データベース ビルドの フリート キャッシュ & アーティファ クト インスタンスのセットアップ、 セキュリティ、メンテナンスはすべて CircleCIが実施
  25. まとめ 内製化とは「自社である1つのことを何でもやることではない」  お客様との繋がり方を変える(Customer Engagement)+儲け方を変える (Business Model)  「早く進む人」と「遠くまで行ける人」という異種がコラボできるインフラが必要 クイックウィン コンセントの ある店を

    アプリで検索 課題 スマホを 充電したい 協業1+課題 カフェとコラボ →長居はイヤ 協業モデル2 +バッテリー 企業とコラボ 協業モデル3 再生可能エネを 販売 ベンチャー:早く行きたければ一人で進め 大企業:遠くまで行きたければみんなで進め 参入障壁 (マネしやすさ) ベンチャーも大企業が 重なり合う(協業)ことで 強みを高めながら顧客に価値をお届けする 店舗の住所・名称 を管理 バッテリーの 位置・残量を管理 発電効率・コスト・ 需給を管理 必要な データ管理 各種コラボ(優先表 示、クーポン等) 自動化ツール(CI/CD)を適用することで 働く人が能力を発揮できる時間を確保し、 ソフトウェアの品質を高め、 顧客が求める機能を、 早くお届けする(変わり続ける)ことで 「選ばれ続ける」サービスを実現