iOSのCI/CD: 継続的インテグレーションと継続的デリバリーの解説

継続的インテグレーション(CI)と継続的デリバリー(CD)は、オープンソースコミュニティを含む開発チームで広く使われています。これにより、手動作業の難しさなしで、1日に何度もコードをテストし、デプロイする持続可能な方法が提供されます。

このガイドでは、iOSのCI/CDを始めるための基礎を学びます。取り上げる内容は以下です。

  1. iOS開発者にとってのCI/CDの重要性
  2. iOS CI/CDの原則
  3. iOSのCI/CDの主要な利点
  4. iOS CI/CDにおけるベストプラクティス
  5. iOS CI/CDワークフローの例
  6. iOSのCI/CDを始めるために
  7. 適切なiOS CI/CDプラットフォームの選び方

この記事を読み終えたときには、現在のワークフローを評価し、最適なCI/CDのベストプラクティスを採用し、iOSアプリケーションをより素早くリリースすることができるようになっているでしょう。

iOS開発者にとってのCI/CDの重要性

iOS用のCI/CDは、アプリ提出の準備、重大なバグの修正、App Storeへのスクリーンショットのアップロードにかかる日数を節約してくれます。これらのプロセスを自動化することで、チームのどのメンバーもバグ修正やアップデートをリリース可能になります。

CI/CDによって、チームメンバー全員がソースコードのチェックインとチェックアウトを行えます。これによりコミュニケーションが向上し、アプリ開発の品質が高まり、リリースが頻繁になります。

DevOpsの役割

DevOpsは、運用チームと開発チームが力を合わせて高品質のソフトウェアを継続的にデリバリーする組織文化の変化です。

DevOps理念を採用しているチームは、ユーザーにできるだけ迅速かつ効率的に価値を届けることにフォーカスしているため、継続的インテグレーションとデリバリーは自然と彼らの運営に組み込まれます。

最終目的は、iOS開発者が高速でアプリを構築しリリースできるようにするためのプロセスを定義することです。

iOS CI/CDの原則

iOSのCI/CDを実装するにあたって最も重要な側面の一つは、現在のワークフローに価値をもたらすことができる原則について学ぶことです:

静的コード解析を利用する

ビルドが早い段階で失敗すること(深刻なコーディングエラーがある場合)を避けるために、静的コード解析はビルドプロセスの最初のステップであるべきです。サーバーが検出した問題は、発見次第修正できます。

コードをデプロイ可能に保つ

linterのステップが終われば、ソースコードのビルドやコンパイルに移ることができます。アプリビルドプロセスの最終ステップは、iTunes Connectに提出するアーカイブを生成することです。iOSの場合は、IPAファイルです。

チームに通知する

どの開発者も、ボタン一つでどのバージョンのアプリをどの環境にもデプロイできます。ビルド完了後、他の開発者にビルドの状態を通知することが重要です。これはメール、Slackメッセージ、または類似の通知サービスで行うことができます。iOSのCI/CDパイプラインは、ビルドの終了時にこの通知をトリガーします。

反復リリースのために設計する

自動化されたデリバリーに焦点を当てた、よく定義されたパイプラインを持ってください。ソースコードに静的解析を実行することで、発行やクラッシュを検知できます(本番環境でさえも)。

iOSのCI/CDの主要な利点

以前のiOS開発プロセスをより効率的にするだけでなく、CI/CDパイプラインの実装はあなたのチームが以下を達成するのを助けます:

1. より速くビルドする

継続的で自動化された開発サイクルは、モバイル開発チームが高価値のリリースをより速く行うのを助けます。

2. 早期に問題を検出する

継続的インテグレーションパイプラインは全てのコード変更ごとにテストスイートを実行することができるため、問題は本番に到達する前に見つかる可能性があります。

3. 効果的なフィードバックを提供する

継続的インテグレーションワークフローにおいて、全チームがソースコード活動を見て、モニターできます。新しい問題が発生したとき、失敗を導入したチームメンバーに自動的に通知されます。

4. テストプロセスを自動化する

iOSアプリをシミュレーターや複数のデバイスで手動テストするのは時間がかかります。CI/CDワークフローでは、このプロセスは自動で簡単です。サーバーワークフローにデバイスやシミュレーターを設定し、パイプラインに作業を任せましょう。

5. デプロイメントログを構築する

CI/CDパイプラインでは、全てのビルドデプロイメントはログされます。このことは、いつでもアプリが失敗した正確なポイントを特定できることを意味します。

iOS CI/CDのベストプラクティスを覚えておくべきこと

iOS開発のCI/CDワークフローを実装する際には、標準のベストプラクティスに沿って行うことが重要です。なぜか? 以下のガイドラインは、あなたがリリースごとに高品質のコードをプッシュできるよう手助けするために設計されているからです。

1. パイプラインを迅速に保つ

その設定を検証し、ビルド時間を改善することで常にパイプラインの品質を向上させます。不要なコードやアセットを削除し、適切な環境を設定し、デプロイプロセスに問題を引き起こすボトルネックを取り除きます。

2. 早期にコード解析を実行する

早く失敗すること:パイプラインの早い段階でユニットテストとリンターを含めることです。

3. ビルド設定を分離する

プロファイルを使用してビルド設定を分離します。内部使用およびテストビルドは、ユーザー向けビルドと異なります。デフォルトで、iOSアプリにはDebugとReleaseのビルド設定が含まれています。Test、Staging、Productionビルドを追加するのが理にかなっています。

4. ビルドを自動化する

iOSアプリのコンパイルとビルドには時間がかかります。CI/CDワークフローを使えば、このプロセスを自動化して時間を節約できます。

5. パイプラインを通じてのみデプロイする

パイプラインはあなたの開発サイクルのCI/CDのベストプラクティスを助け、実施させるように設定されています。手動でのデプロイは絶対に避けてください。

コードがパイプラインを通過するようにすることで、各変更がコード基準とスタイルに従っていることが要求されます。このメカニズムにより、信頼できないコードからコードベースを守ります。

6. 環境を類似させて維持する

可能であれば、すべての環境で類似のパイプラインを維持するようにしてください。一つの環境の要件をパスした変更は、他の環境でもパスするべきです。これには機能ブランチも含まれます。

7. パイプラインをモニタリングする

アプリは予測不可能です。どんなにクールだと思っているコードでも、多くの理由でアプリは失敗する可能性があります。したがって、パイプライン全体にわたってデプロイを積極的に監視し、App Storeに到達する前に問題を捉える必要があります。

iOS CI/CDワークフローの例

iOSのCI/CD原則を理解し、採用した後、次のステップはパイプラインを設定することです。iOS開発で苦労するパートの一つは反復リリースです。それは面倒で時間がかかります。CI/CDの役割は、これら全てのステップを自動化することです。

CI/CDを実装する前の、App Storeへの典型的なリリースプロセスは以下のように見えます:

  1. いくつかのリモートリポジトリ(GitHub、Bitbucket、GitLabなど)からソースコードをチェックアウトする。
  2. 例えばSwiftLintを使ってコードの静的解析を行う。
  3. すべてが期待通りに動作しているかを確認するために、シミュレーターやデバイスでiOSアプリをコンパイルしてビルドする。
  4. ユニットテスト、UIテスト、その他の種類のテストを実行する。
  5. アプリのコード署名をしてアーカイブする。
  6. iTunes Connectにアプリを提出する。
  7. リリースについてユーザーに通知する。

このプロセスはエラーが発生しやすく、マージコンフリクトやバージョン管理が適切でない可能性があります(これは開発者の一人ひとりが手動で行っています)。

幸いなことに、私たちは自動化でこれを改善できます。iOSのCI/CDパイプラインを使うと、私たちのワークフローはこのようになります:

  1. Xcodeを使ってアプリケーションの変更をコードする。
  2. コードが統合の準備ができたら、自動的にGitリポジトリにプッシュされる。
  3. 次に、CIがリリースにコードが準備されていることを確認するテストケースの実行をトリガーする。
  4. 最後に、CIステージで生成されたアーカイブをデプロイするリリースパイプラインがトリガーされ、TestFlightでリリースされるビルドがリリースされる。

CI/CDを使うと、iOS開発者はずっと少ない作業で済むのがどんなものか、その素晴らしさです。

iOSのCI/CDを始めるために

iOS開発プロセスにCI/CDを統合するためには、まずチームの仕事をより簡単にすることができるものについて調査してください。現在のワークフローについて理解し、情報を収集し、パイプラインのプロセスを定義するまでチームにフィードバックを提供し続ける必要があります。

この情報を使用して、チームは現在のワークフローを自動化する方法を評価し、定義することができます。これは開発ライフサイクルをより良いものにするために、現在のプロセスを最適化し、自動化するための優先事項になるべきです。

結局のところ、このアプローチはあなたのチーム全体の透明性を高めます。iOS CI/CDパイプラインが設定されれば、全チームはビルドがどうなっているかを知り、最新のテスト結果を受け取るでしょう。これにより、新しい問題の解決に移ることができ

こちらの記事はdev.toの良い記事を日本人向けに翻訳しています。
https://dev.to/semaphore/ios-ci-cd-continuous-integration-and-continuous-delivery-explained-17lf