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

自動化→部品化すると社内開発は楽しくなる

 自動化→部品化すると社内開発は楽しくなる

2023/09/13開催のnew relic FUTURE STACK 2023 Tokyoでお話した際のスライドです。
Joy, Inc.(ジョイ・インク)の「自動ユニットテストフレームワークの実行に15分以上かかるような週があったら、次 の週、必ず1ペア4時間分を、テストの性能改善に割り当てるのだ。テストが15分以 下で終わるようになるまで、この割り当ては継続する。」から、CI (継続的インテグレーション)の取り組みとして、テストをどう自動化するか? に加え、CircleCI の並列実行機能+テストの過去実行実績をもとにした所要時間均等分割機能のご紹介をご紹介しています。

デモはこちらのYouTube動画「CircleCIでGitHubプロジェクトをビルド&テストする」をご覧ください: https://youtu.be/44BhdCb8J9Y?si=MGVI0pQNWhrq3orL

Masahiko Funaki(舟木 将彦)

September 13, 2023
Tweet

More Decks by Masahiko Funaki(舟木 将彦)

Other Decks in Programming

Transcript

  1. 1
    ⾃動化→部品化すると
    社内開発は楽しくなる
    new relic FUTURE STACK 2023 Tokyo
    Masahiko Funaki (舟木将彦) @mfunaki
    Principal Developer Advocate

    View full-size slide

  2. 2
    Agenda
    社内開発をもっと楽しく
    テスト実⾏をもっと速く
    未知/既知の問題からもっとセキュアに
    1
    2
    3

    View full-size slide

  3. 3
    1. 社内開発をもっと楽しく

    View full-size slide

  4. 4
    楽しい会社では⾃動テストは15分以内に終えている
    遅いユニットテストのせいでチームの機能開発時間がどれだけ失われているか調べて
    もらった。この情報があれば、テストの速度問題が顧客の重要視している要素、機能
    開発にどう影響しているか、顧客にも理解できるようになる。
    (中略)
    ⾃動ユニットテストフレームワークの実⾏に15分以上かかるような週があったら、次
    の週、必ず1ペア4時間分を、テストの性能改善に割り当てるのだ。テストが15分以
    下で終わるようになるまで、この割り当ては継続する。
    〜リチャード・シェリダン『ジョイ・インク』
    第4章 会話、儀式、道具 セクション4 会話が関係を作り 関係が価値を作る

    View full-size slide

  5. 5
    ソフトウェアデリバリーに関わる4つの主要な指標
    4つの指標
    ⽇本のCircleCIユーザー
    平均値(2022)
    CircleCIが考える
    ⽬標値
    スループット
    (ワークフロー実⾏回数)
    1.0回/⽇ 必要なだけ
    実⾏時間
    (ワークフロー実⾏時間)
    3.54分 10分以内
    平均リカバリ所要時間 68.5分 60分以内
    ワークフロー成功率 デフォルトブランチで75%
    デフォルトブランチで
    90%以上
    ⼿動・⾃動を問わず
    現時点の値を踏まえた上で
    世の中の平均にまずは
    近い⽬標として到達し、
    あるべき姿(⽬標値)を
    実現を⽬指す取り組みを推進

    View full-size slide

  6. 6
    そのプロセス、⼈じゃなきゃいけないのはどこ?
    プラン コード ビルド テスト
    リリー

    デプ
    ロイ
    運用 監視
    継続的インテグレーション
    (CI)
    継続的
    デプロイ
    (CD)
    自動化できない
    非正常系は
    自動化できない
    自動化できる
    コード追加・修正時は
    常にビルド・テスト
    (最後にまとめてやら
    ない→早く失敗すれば
    早く品質が安定する)
    サービス停止せず常に
    リリース/デプロイ
    (失敗時にはクイック
    に修正 / 前バージョ
    ンに戻せる)しくみ
    共有
    リポジトリ
    上で
    常に作業
    運用・監視しやすい
    品質をコードに反映
    (必要なデータの取得、
    スケーラビリティの
    確保)
    + メトリクスを自動取得するための自動化

    View full-size slide

  7. 7
    評価ポイント1: スループット
    評価ポイント3: 復旧時間
    評価ポイント2: 実⾏時間
    評価ポイント4: 成功率
    メトリクスを⾃動取得するための⾃動化

    View full-size slide

  8. 8
    2. テスト実⾏をもっと速く

    View full-size slide

  9. 9
    テスト⾃動化に取り掛かろう
    「Java(Maven)プロジェクトのビルドをCircleCI+Orbsで⾃動化」
    https://qiita.com/mfunaki/items/b393a531e4b04a224368

    View full-size slide

  10. 10
    ⾃動化設定ファイルを部品化して再利⽤する: Orb
    ● プログラミング⾔語やフレームワーク、デプロイ先が同じであれば、
    設定ファイルは使い回しがきく(ほとんど同じで、少しだけ違う)
    ● 「少しだけ違う」部分をパラメーターとして切り出すことで、
    設定ファイルを部品化可能
    ● 単に設定ファイル全体を共有してコピーするのと違い、
    全体を理解しなくても使⽤可能で、
    問題(バグ)があっても部品を修正すれば全体に反映可能

    View full-size slide

  11. 11
    テストを並⾏実⾏して完了時間を短縮〜概要
    時間は1/3、
    費⽤はほとんど変わらない
    100秒かかるテストケースを
    ⾒直さないと、
    並列数を増やしても、
    これ以上の短縮は⾒込めない。

    View full-size slide

  12. 12
    テストを並⾏実⾏して完了時間を短縮〜⽅法
    並列実⾏時の割り振り⽅
    •ファイル名のアルファベット順
    •過去のテスト実⾏時の所要時間
    ベースで均等割(timings)
    •ファイルサイズで均等割
    (filesize)
    •マニュアル指定

    View full-size slide

  13. 13
    CircleCI Orb レジストリ
    ● 公開された Orb の⼀覧
    https://circleci.com/developer/orbs
    ● 命名規約
    組織名/Orb名@バージョン番号
    ● ⾃組織にのみ公開することも可能
    (プライベート Orb)

    View full-size slide

  14. 14
    Orbを活⽤して量(効率)だけでなく、質の向上をしっかり盛り込む

    View full-size slide

  15. 15
    3. 未知/既知の問題から
    もっとセキュアに

    View full-size slide

  16. 16
    セキュリティ問題を回避する(既知の問題)
    ● セキュアなソフトウェアを提供する上で、2つのアプローチ(既知/未知)が
    重要
    1. 既知の問題を回避する (DevSecOps)
    ■ SAST (静的解析): ソースコードやライブラリの脆弱性を検出
    ■ DAST (動的解析): アプリ/サービスの実⾏時脆弱性を検出

    View full-size slide

  17. 17
    未知のセキュリティリスクを最⼩化する
    ● セキュアなソフトウェアを提供する上で、2つのアプローチが重要
    2. 未知のリスクを最⼩化する (守るべきポリシーの策定/適⽤)
    ■ ポリシー違反があればCI/CDを実⾏させない
    CircleCIが⽤意している組み込み機能(⼀般的なユースケースで使⽤)
    ● 使⽤可能なOrb / 使⽤してはいけないOrb (Orb名, バージョン)
    ● 使⽤可能なリソースクラス (Linux, Windows, macOS, GPU…)
    ● プロジェクト名やブランチ名ごとに使⽤可能なコンテクスト
    (例: 指定可能なデプロイ先定義など)

    View full-size slide

  18. 18
    よりフレキシブルなポリシー設定
    ● Open Policy Agent (OPA) に基づく意思決定エンジンを使⽤
    https://www.openpolicyagent.org/
    ● Rego⾔語を使って記述
    (条件を満たす組み合わせを
    検証する)
    ● ポリシーはCircleCIプロジェクトと
    してVCSで管理し、
    変更時にCircleCIが⾃動実⾏、
    差分を通知可能
    ● 右例はDockerイメージを
    CircleCI提供のみに限定する定義

    View full-size slide

  19. 19
    4. まとめ

    View full-size slide

  20. CircleCIを使って開発プロセスを
    1) ⾃動化 2) ⾼速化 3) セキュアに
    することで開発をもっと楽しく

    View full-size slide

  21. 21
    ソフトウェアデリバリーに関する現状調査(⽇本版)
    https://circleci.com/ja/resources/2023-state-of-software-delivery/
    CircleCI ブースでも
    印刷した紙のレポートを
    お配りしています!

    View full-size slide

  22. CircleCIをもっと知りたい!なら
    最新の情報なら
    @CircleCIJapan をフォロー!
    #CircleCIJp タグつけて情報共有!
    イベント、セミナー、勉強会の情報なら
    connpassのCircleCIグループから!
    https://circleci.connpass.com/
    動画でCircleCIについて学ぶなら
    CircleCIチャンネルを登録!
    (⽇本語プレイリストもあり)

    View full-size slide

  23. 23
    テストや品質、セキュリティ
    +⾃動化についてもっと知りたい

    View full-size slide

  24. 24
    関連リソース (ブログ)
    ● ブログ
    ○ テスト分割と並列実⾏ - 実⾏時間を短縮する
    (https://circleci.com/ja/blog/parallelism-faster-tests/)
    ○ 失敗したテストを再実⾏する
    (https://circleci.com/ja/blog/rerun-failed-flaky-tests/)
    ○ ビルドしたコンテナのセキュリティチェック - Snykとの連携
    (https://circleci.com/ja/blog/container-scan-with-snyk/)

    View full-size slide

  25. 25
    関連リソース (ビデオ)
    ● ビデオ
    ○ CI/CD定義の部品化でより早く、組織ポリシーの設定でより安全に〜事業会
    社(⾮IT企業)でもDevOpsでアプリ/サービスを早く安全にお届け
    (https://youtu.be/aNp7kIl7WTU)
    ○ CircleCIを使ってCI/CDでもモジュール化+再利⽤度を⾼めよう
    (https://youtu.be/T9mr3LudDdQ)
    ○ CircleCIで失敗したテストを再実⾏する
    (https://youtu.be/mbScCnUqv-Q)
    ○ CircleCI 公式 VSCode Extension を活⽤する
    (https://youtu.be/HZdOoUYaZ6o)

    View full-size slide

  26. 26
    CircleCI公式 VSCode Extension
    https://marketplace.visualstudio.com/items?
    itemName=circleci.circleci

    View full-size slide

  27. Thank you.
    27

    View full-size slide