継続的インテグレーションの基本

継続的インテグレーション(CI)は、デベロッパーがコードの変更を頻繁に中央リポジトリに統合した後、ビルドとテストを自動化するソフトウェア開発手法です。

基本的な CI システムを設定すると、マージ後にビルドの互換性を損なう新しい変更を防ぐことができます。アプリを自動的にテストし、API レベル、画面サイズ、プラットフォームなどのさまざまな環境で想定どおりに動作することを確認するように、より高度な CI システムをプログラムできます。

複数の開発者がコード変更をリクエストする仕組みと、メインコード リポジトリにマージされる前に CI システムでその変更がどのようにチェックされるかを示す図。
図 1. CI システムは、マージ前にチェックを実行することで、コード リポジトリを健全に保ちます。

このドキュメントでは、デベロッパーが Android プロジェクトに効果的な CI システムを設定する際に使用する一般的な戦略について説明します。このガイドラインは一般的なものであり、ソリューションの大部分に適用されます。

典型的な例

一般的な CI システムは、次のようなワークフローまたはパイプラインに従います。

  1. CI システムは、通常、デベロッパーが pull リクエスト(「変更リスト」または「マージ リクエスト」)を作成する際にコードの変更を検出します。
  2. ワークフローを実行するサーバーをプロビジョニングして初期化します。
  3. コードと、必要に応じて Android SDK やエミュレータ イメージなどのツールを取得します。
  4. 特定のコマンド(/gradlew build など)を実行してプロジェクトをビルドします。
  5. /gradlew test などの特定のコマンドを実行して、ローカルテストを実行します。
  6. エミュレータを起動し、インストルメンテーション テストを実行します。
  7. テスト結果や APK などのアーティファクトをアップロードします。
基本的な CI ワークフローを示す図
図 2. 基本的な CI ワークフロー

CI のメリット

CI のメリットは次のとおりです。

  • ソフトウェアの品質の向上: CI は、問題を早期に特定して修正することで、ソフトウェアの品質向上に役立ちます。これにより、ソフトウェア リリースのバグの数が減り、全体的なユーザー エクスペリエンスが向上します。
  • ビルドの破損のリスクを軽減: CI でビルドプロセスを自動化すると、プロセスの早い段階で問題を解決できるため、ビルドの不具合をより適切に回避できます。
  • リリースの信頼性の向上: CI は、各リリースが安定し、本番環境で使用できる状態であることを確認します。自動テストを実行することで、CI は潜在的な問題を一般公開する前に特定できます。
  • コミュニケーションとコラボレーションの改善: CI は、デベロッパーがコードとテスト結果を一元管理できる場所を提供することで、デベロッパーや他のチームメンバーが共同作業を行い、進捗状況を追跡することを容易にします。
  • 生産性の向上: CI は、時間がかかり、エラーが発生しやすいタスクを自動化することで、デベロッパーの生産性の向上に役立ちます。

参考資料

定数統合を使用してアプリの開発を改善する方法について詳しくは、以下のページをご覧ください。