継続的インテグレーションは、開発者の生産性を高め、開発チームに一貫したビルド、テスト、デプロイ環境を提供するために重要です。ですが、ユーザーが自分のプロジェクトに適したCI/CDソリューションを選択するのは非常に困難です。本記事では、モバイルアプリ開発者の視点から、Codemagicと人気の継続的インテグレーションサービスであるJenkinsを比較してみます。Codemagicは、Jenkinsの代わりとなる良質なツールなのかどうかを見てみましょう。
本記事はモバイルアプリ開発者のSouvik Biswasが執筆しております。
Jenkins は、Javaで書かれたオープンソースの継続的インテグレーションツールです。これはツール選択の自由度が高く、プラグインライブラリも充実しています。ですが、特定の分野(例えば、モバイルアプリ)に重点を置いている場合、Jenkinsは適切な選択肢ではないかもしれません。本記事では、それについて詳しくご説明いたします。
一方でCodemagic は、モバイルアプリに特化した継続的インテグレーションかつデリバリーのサービスです。これは、Android、iOS、Flutter、React Native、Cordova、Ionicなど、一般的なフレームワークのほとんどに対応しています。
本記事では、それぞれ8つの基準で比較してみます:
- セットアップ
- ビルドの実行
- コード署名
- 成果物のデプロイ
- インフラの維持
- 通知の統合
- チームコラボレーション
- コミュニティサポート
さて、基準をすべて定義したところで、各基準を詳細に検討し、特にモバイルアプリ開発者にとって、CodemagicがJenkinsに代わる最高のツールなのかどうかを調べてみましょう。
Jenkins vs Codemagic: セットアップ
まず、この2つのサービスのセットアップ方法を比較検討してみましょう。
Jenkins: セットアップ
Jenkinsはセルフホスト型の継続的インテグレーションツールです。そのため、始めるには、まずお使いのシステムにダウンロードする必要があります。
私の場合、macOSでbrewパッケージマネージャーを使ってダウンロードすることができます:
brew install jenkins-lts
ローカルサーバーとして実行します:
brew services start jenkins-lts
システム上で実行後、http://localhost:8080
に移動してアクセスできます。
初めて実行する場合は、管理者パスワードを入力する必要があります。
次に、Jenkinsをカスタマイズするためのオプションが表示されます。
「インストールするプラグインを選択してください」というオプションを選択すると、プラグインを選択するためのページが表示されます:
プラグインのインストールが完了するまで待ちます。
次に、**管理者ユーザー(Admin User)**を作成するように求められます。
このページからJenkinsのURLを設定・変更できます。
初期設定が完了すると、Jenkinsのホームページが表示されます。
Codemagic: セットアップ
Codemagicはクラウド型のCI/CDサービスです。そのため、お使いのシステムに追加ツールを何もインストールする必要はありません。Codemagicのセットアップは実に簡単です。
Codemagicのサインアップページにアクセスします。クラウドベースのGitリポジトリ(GitHub、Bitbucket、GitLab)を使って、Codemagicに接続してサインアップ(新規登録)が可能です。
Codemagicは、リポジトリにあるプロジェクトをすべて自動的にインポートし、それらに簡単にビルドアクセスできるようにします。リポジトリに接続すると、ダッシュボードが表示されます。
お気づきかもしれませんが、Codemagicの初期設定はかなり高速でユーザーフレンドリーです。Jenkinsの代わりのツールをお探しであれば、Codemagicはサインアップのしやすさという点で間違いなくポイントを獲得します。
Jenkins vs Codemagic:ビルドの実行
いずれのサービスでも、ビルドを実行するための前提条件として、プロジェクトがすでにクラウドリポジトリ(GitHubなど)にコミットされている必要があります。
Jenkins:ビルドの実行
Jenkinsでビルドを開始するには、新しいジョブを作成する必要があります。例として、私のGitHubアカウントにあるFlutterプロジェクトを構築し、テストすることにします。
まず、グローバル環境変数をいくつか設定する必要があります。
左側のメニューから「Jenkinsの管理(Manage Jenkins)」を選択します。
**システムの構成(Configure System)**を選択します。
Jenkinsでプロジェクトをビルドおよびテストするために必要なツールのパスを使用して、グローバル環境変数をいくつか追加します。**保存(Save)**をクリックします。
ここで、プロジェクトに向けてJenkinsの新しいジョブを設定する必要があります。
ホームページからジョブの作成(Create a job)をクリックします。
名前を入力し、フリースタイルプロジェクトを選択します。OKをクリックします。
ソースコード管理(Source Code Management) タブで Git を選択し、GitHubアカウントの認証情報を追加します。
ビルドセクションまで下にスクロールして、**ビルドステップの追加(Add build step)**をクリックし、**シェルを実行(Execute shell)**を選択します。
では、FlutterプロジェクトのAndroidデバッグビルド用に、非常にシンプルなビルドスクリプトを定義します。
左メニューの「コンソール出力(Console Output)」セクションに移動して、進捗状況を確認できます。
ビルドが完了したら、ダッシュボードに次のように表示されます:
Codemagic:ビルドの実行
Codemagicのビルドの実行はもっとシンプルです。CodemagicのUIははるかに優れており、Gitリポジトリに手動で接続する必要がありません。セットアップ中にご覧になったように、CodemagicはすでにGitリポジトリに接続しています。
ビルド用にプロジェクトを構成するには、アプリケーションダッシュボードでプロジェクトを検索します。ビルドの設定をクリックします。
ワークフローとして Flutterアプリ を選択します。
このページからビルドパイプラインを構成できます。そして、最初のビルドを開始するをクリックするだけです。
1つのプロジェクトに複数のワークフローがある場合、どのワークフローを構築するかを選択できます。次に、**新規ビルドを開始(Start new build)**をクリックします。
これでCodemagicのビルドが開始されます。完了するまで待ちます。
また、**ビルドの概要(Builds overview)**ページでは、以前のビルドと現在実行中のビルドも確認できます。
他のアプリのワークフロー(Android、React Nativeなど)を使ってビルドするには、codemagic.yamlファイルを使用する必要があります。
Jenkins vs Codemagic:コード署名
コード署名は、モバイルアプリ開発のワークフローにおいて重要なステップで、Google Play StoreやApple App Storeにアプリを公開する際に必要となります。
Jenkins:コード署名
AndroidとiOSの両方のプラットフォーム用に、ビルド成果物にコード署名を行うためのJenkinsプラグインがあります。
Androidのビルドにコード署名するには、Android署名プラグインを、iOSのビルドにはXcodeプラグインを使用できます。
Codemagic:コード署名
Codemagicは、開発者が使いやすいコード署名プロセスを提供しています。このプロセスは、プロジェクト設定のUIから、あるいはcodemagic.yaml
ファイルを使用して構成できます。
また、Codemagicは、iOSのコード署名をさらに容易にするために、Apple開発者ポータルとの統合を提供しています。
Jenkins vs Codemagic:成果物のデプロイ
ビルド成果物をGoogle Play StoreやApple App Storeにデプロイするのは面倒な作業なので、継続的インテグレーションサービスを使ってこのプロセスを管理・処理することをお勧めいたします。
Jenkins:成果物のデプロイ
ビルド成果物をデプロイするためのJenkinsプラグインが用意されています。Androidの成果物は、プラグインGoogle Play Android Publisherを使って、Google Play Storeにデプロイできます。iOSの成果物については、コード署名に使用できるのと同じXcodeプラグインを使っても、Apple App Storeにデプロイできます。
また、App Centerなどのサードパーティのサービスを利用して、ビルドの成果物を公開することもできます。JenkinsではApp Centerプラグインが利用できます。
Codemagic:成果物のデプロイ
プロジェクトの設定ページで、**公開(Publish)**セクションまで下にスクロールすると、さまざまなサービスを使って成果物を公開するためのオプションが表示されます。Codemagicは、Google Play StoreやApp Store Connectへの直接公開に対応しています。
ビルド成果物の公開についての詳細は、ドキュメントをご覧ください。
Jenkins vs Codemagic:インフラの維持
インフラ管理コストは、継続的インテグレーションサービスを選択する際に考慮すべき重要な意思決定要素です。
Jenkins:インフラの維持
Jenkinsのビルドはすべてセルフホスト型サーバーで実行されるため、自前のインフラでユーザーを管理したり、開発ツールをすべて最新の状態に維持したりする必要があり、オーバーヘッド(余分な負荷)が追加されます。ツールのメンテナンスが可能なサードパーティのクラウドベースのサーバーと統合することもできますが、その場合、追加の構成が必要となります。それによって、プロジェクトでCIを始めようとしている人にとっては気が引けるかもしれませんし、チームにDevOps担当者が必要になるかもしれません。
Codemagic:インフラの維持
Codemagicのビルドは、経験豊富なCodemagicチームが完全に管理するクラウドベースのサーバー上で実行されます。これにより、すべてのビルドツールを常に最新の状態に保つことができ、ユーザーはインフラ管理のオーバーヘッドを負担することなく、アプリ開発プロセスに専念できます。Codemagicのビルドシステムは事前インストール済みで、一般的なモバイルアプリ開発のワークフローに必要なツールがすべて備わっています。
Jenkins vs Codemagic:通知の統合
通知は、チームがアプリの開発に集中している間に、ビルドの状況を知らせるために必要です。
Jenkins:通知の統合
Jenkinsには、メールやSlack、Telegramなど、さまざまなプラットフォームでビルド通知を可能にするプラグインが多数あります。しかし、いずれもプロジェクトで有効にするには追加の構成が必要です。
Codemagic:通知の統合
Codemagicでは、ビルド状況や生成された成果物に関するメール通知がデフォルトで有効になっています。それに加えて、Codemagicは、SlackやMS Teamsなど様々なサードパーティのサービスとの統合を提供しています。
それらを有効にするための手順については、こちらをご覧ください。
Jenkins vs Codemagic:チームコラボレーション
継続的インテグレーションとデプロイのワークフローは、適切なチームコラボレーションの設定により、重要なバグが注目され、より早く修正されることで一層成功します。
Jenkins:チームコラボレーション
Jenkinsは、ワークフローで優れたチームコラボレーションを構築するためのツールを提供していません。これは、開発チームが整理して管理しなければなりません。
Codemagic:チームコラボレーション
Codemagicでは、チームアカウントを持つことができます。これにより、複数の開発者がプロジェクトに取り組む際に、良好な開発ワークフローを維持しやすくなります。
さらに、Codemagicはパブリックダッシュボードという素晴らしい機能を提供しています。これにより、チームはビルドのリスト、リリースノート、ビルドの成果物を、パブリックリンクを使ってCodemagicの外部の人々と共有することができます。
Jenkins vs Codemagic:コミュニティサポート
継続的インテグレーションサービスを選択する前に考慮すべきもう一つの点は、コミュニティのサポートとサービスに関連して作成されたドキュメントの品質です。
Jenkins:コミュニティサポート
Jenkinsは、最も古く、最も一般的な継続的インテグレーションサービスの1つであり、巨大なコミュニティベースを持っています。Jenkinsは、ドキュメントの更新や、膨大な数のプラグインを機能的に維持するためのメンテナンスを行っています。
Codemagic:コミュニティサポート
Codemagicは、一般公開されているSlackワークスペースを通じて、素晴らしいコミュニティサポートを提供しています。ここで、開発者はCodemagicの使用中に直面した問題について質問したり、機能改善をCodemagicチームに直接提案することもできます。
Codemagicには非常に詳細なオープンソースのドキュメントがあります。オープンソースなため、コミュニティの誰もが改良点を提案したり、[GitHubリポジトリ](https://github.com/codemagic-ci-cd/codemagic-docs)にプルリクエストを送信して貢献できます。
また、Codemagicはブログも運営しており、CIサービスに関する記事だけでなく、フレームワークの様々な機能や実装、テストのサポートなど、様々なトピックを掲載しています。
ぜひCodemagicのSlackワークスペースにこちらからご参加ください。
Jenkins vs Codemagic:結論
チームに適切な継続的インテグレーションとデリバリーのワークフローを選択して構築するのは難しいかもしれませんが、本記事では多少シンプルにご説明いたしました。ワークフローに最適なCI/CDソリューションをご選択いただくのにお役に立てますと嬉しいです。
Jenkinsはオープンソースで、セルフホスト型のサービスであるためコストはかかりませんが、その分、インフラの維持やツール一式を最新の状態に維持するなど、オーバーヘッドが大きくなります。様々なツールやサービスをワークフローに統合するためのプラグインは、豊富に用意されています。
**Codemagic**は、クラウドベースのソリューション(インフラ維持等のオーバーヘッドがありません)で、モバイルアプリ開発のワークフローに適した様々なツールが事前インストールされています。さらに、簡単なコード署名と主要サービスへのアプリのデプロイも提供します。また、多数のサードパーティの[統合](https://codemagic.io/integrations/)が可能で、ご愛用のツールを使ってワークフローをより生産的にすることができます。
簡潔に言うと、モバイルアプリに特化したCI/CDワークフローを構築するのであれば、主要なアプリ開発フレームワークやツールをすべてサポートしているCodemagicの方が、Jenkinsよりも適しているはずです。一方で、より柔軟性を求め、ワークフローで他のバックエンドのフレームワークのテストも(アプリ開発に加えて)行う場合は、Jenkinsの方が良いかもしれません。
参照
Souvik Biswasは、情熱的なモバイルアプリ開発者です(AndroidとFlutter)。彼はこれまでの歩みの中で、数多くのモバイルアプリを手がけてまいりました。また、GitHubでのオープンソース貢献が大好きです。彼は現在、Indian Institute of Information Technology Kalyaniでコンピューターサイエンスとエンジニアリングの技術学士号の取得を目指しています。また、Medium-FlutterコミュニティでFlutterの記事を書いております。