パイプラインの最適化に役立つ CI/CD ベストプラクティス
エンジニアリング チームにとって、開発サイクルを最適化するための鍵は CI/CD です。 CircleCI では、みなさまがパイプラインの最適化を進め、本番環境へのデリバリーの効率を向上できるように全力でサポートしています。
本記事では、市場投入のスピードアップを重視されているみなさま向けに、5 つのベストプラクティスをご紹介します。 開発サイクルの時間短縮や CI/CD プロセスの効率化でお悩みであれば、ぜひ CircleCI オススメのこれらのベストプラクティスをお試しください。
目次
CI/CD のベストプラクティス 1: CI/CD はノベルティではなく、あらゆる開発チームに不可欠な要素
現在、コード開発の質向上のためには開発サイクルが重要であるという認識が広まっています。 先日公開の『2022 年版ソフトウェア デリバリーに関する現状調査レポート』(日本語版近日公開) によると、業界内の他組織に比べて、高い成功率で素早く、かつ大規模にビルドを行えている組織の存在が明らかになりました。 分析から、このように優れたパフォーマンスを発揮している組織は共通して、4 つの主要ベンチマークの評価が高いという特徴が見られました。
CI/CD のベストプラクティス 2: 開発者の貴重な時間をムダにしない
ベンチマーク指標に基づいてパイプラインを最適化する方法を身につけている方には、”開発者の貴重な時間を最大効率で活用する” ことをオススメします。 そのための主な方法は次のとおりです。
- 設定ファイルを再利用する
- キャッシュ戦略を導入する
- テスト分割を実装する
設定ファイルを再利用する
パイプライン最適化への近道は、同じ設定ファイルを繰り返し書かないようにすることです。 YAML 形式の設定ファイルを再利用可能な形でパッケージ化した CircleCI Orb を利用すれば、反復的なプロセスを自動化してプロジェクトのセットアップ時間を短縮できます。
また、プライベート Orb を利用すれば、組織内に限定してプロジェクト間で設定を共有できます。
他にも、以下に示す多数のオープンソース Orb が利用可能です。
- Developer Hub - 再利用可能な構成パッケージであるオープンソース Orb が公開されているレジストリです。繰り返しの多いプロセスの自動化や、プロジェクトのセットアップにかかる時間の短縮に役立つ Orb をこちらから入手できます。
- Orb 開発キット - 独自の Orb を作りたい方向けの、Orb のオーサリング プロセス全体の効率化ツールです。 CircleCI CLI を使用することで、全面的な機能を備えたサンプル Orb を作成することもできます。
キャッシュ戦略を導入する
プロジェクトのビルドとワークフローを最適化する近道は、過去のビルドやワークフローで生成されたデータを再利用できる具体的なキャッシュ戦略を導入することです。 キャッシュはジョブの高速化手段として効率性に非常に優れており、その管理はパッケージ管理アプリケーションにまかせることも、手作業で行うことも可能です。
キャッシュを利用してビルドとワークフローを最適化する具体的な方法については、こちらのドキュメントをご覧ください。
テスト分割を実装する
最後のポイントとして、テスト分割によりプロジェクトのビルドを高速化しましょう。 一連のテストを分割し、同一のジョブを処理する複数のインスタンス (より正確には、並列実行されるテスト環境) に割り当てる自動テスト分割なら、フィードバック ループを短縮できます。
こちらで、アプリケーションの要件に合わせてテスト時間を劇的に短縮する方法をご覧ください。
CI/CD のベストプラクティス 3: パイプラインを保護する
パイプラインを保護するうえでは、セキュリティ対策を計画的に実施するだけでなく、セキュリティの業界基準に適合した CI/CD プラットフォームを導入することも重要です。 このベストプラクティスの要点は、CircleCI プラットフォームならではのプロダクト セキュリティ機能でパイプラインを保護することに尽きます。具体的な機能は以下のとおりです。
プライベート環境変数
プライベート環境変数を使用することで、プロジェクトがパブリックの場合でもシークレットを安全に格納できます。 シークレット マスキング機能により、ジョブの出力にはプロジェクトやコンテキストの環境変数が表示されなくなるので、セキュリティを高められます。
1 つのワークフローに複数設定可能なコンテキスト
ワークフローにコンテキストを複数設定し、ワークフロー単位ではなくドメイン単位で環境変数の値を入力することで、環境変数へのアクセスを厳しく制限できます。 これにより、ワークフロー内の特定のコンテキストにアクセスする際にも綿密な管理が可能となり、組織のセキュリティを向上させられます。
柔軟性に優れた管理者の制御性
管理者の制御性が柔軟なので、複数のプロジェクトにまたがってユーザーのアクセス権を管理できます。 CI プラットフォームへのアクセスと使用方法を標準化すれば、アプリケーションのセキュリティ維持にもつながります。 パイプラインを保護することは、ワークフローの迅速化と並んで重要です。
CircleCI 製品ならではのアプリケーション セキュリティ関連機能に興味がある方は、ブログ記事「CI/CD のセキュリティと DevSecOps の完全ガイド」(英語) をご覧ください。
CI/CD のベストプラクティス 4: パイプラインにまたがってテスト カバレッジを管理する
CircleCI では、当社パートナー製の Orb を使うことで、トップクラスの開発ツールを組み込むことができます。
Orb は再利用可能な設定パッケージであり、プロジェクトのセットアップ時間の短縮に役立ちます。 コード分析からデプロイに至るまでさまざまな Orb が CircleCI パートナーから提供されていますが、ここでは、複数のパイプラインにまたがってテスト カバレッジを維持できる Orb を取り上げます。
ぜひ、CircleCI ユーザーに人気のある以下のパートナー製 Orb を開発サイクルに組み込んでみてください。
- Codecov: 複雑な構成要らずで、カバレッジ レポートを Codecov にアップロードできます。 アプリケーションのカバレッジの結果がすぐに手に入るので、安心してコードをコミットできます。
- Cypress: Cypress ダッシュボードへのテスト結果の記録と、並列モードでの負荷分散テストを行えます。 また、CircleCI の構成に時間をかけることなく、ブラウザーで E2E (エンドツーエンド) テストを実行できます。
- Sonarcloud: 問題発生前に、リポジトリに潜むバグや脆弱性を検出できます。
- Coveralls: テスト スイートの LCOV カバレッジ データを coveralls.io に送信して、分析や変更追跡、通知を行えます。 プルリクエスト (PR) ビルドで実行すれば、マージした場合にカバレッジに及ぶ影響の情報付きでコメントが PR に追加されます。
- Snyk: アプリケーションの依存関係や Docker イメージに含まれる既知の脆弱性を検出、修正、監視できます。
CI/CD のベストプラクティス 5: CircleCI オススメの Orb を活用する
本記事を結ぶにあたって、CircleCI オススメの Orb をご紹介します。 CI/CD 戦略を強化したいとお考えの方は、ぜひ以下の Orb を取り入れてみてください。
- Node: Node.js とパッケージ マネージャー (npm、yarn) を簡単にインストールできます。 キャッシュがデフォルトで有効になっているパッケージをインストールできる点が特長です。
- Slack: すべての CI/CD パイプラインにイベントベースの通知を実装できます。 組み込みのメッセージ テンプレートか Slack ビジュアル形式のビルド ツールである Block Kit を使用して、組織のニーズに合わせて通知を作成およびカスタマイズできます。 フィードバック ループを高速化することで、バグをすばやく修正してデリバリーを速められます。
- AWS-CLI: AWS コマンドライン インターフェイス (awscli) をインストールし、設定します。
- Python: プログラミング言語 “Python” でよく使われる CircleCI タスクを提供します。
- Ruby: RubyGems のキャッシュを簡単に作成して自動でインストールしたり、RSpec テストを並列実行したり、Ruby のインストールを行えます。
本記事のベストプラクティスは、『2022 年版ソフトウェア デリバリーに関する現状調査レポート』(日本語版近日公開) に基づいています。このレポートでは、世界中のソフトウェア、ヘルスケア、小売、金融、不動産、メディア業界における 50,000 以上の組織について分析し、優秀なソフトウェア開発チームを結成するためのベストプラクティスを詳しく紹介しています。ぜひ本記事とあわせてご覧ください。