Written by Souvik Biswas
数多くあるCI/CDサービスの中から、1つのサービスを選ぶのはとても難しいことです。正しい決断をするには、様々な要素を考慮する必要があります。最終的には、最適な選択は、チームの好みや取り組んでいるプロジェクトの種類によっても異なります。
そのご判断を少しでもシンプルにするために、本記事では、お取り組みのプロジェクトに適したCI/CDを選択する際に、考慮すべきいくつかの重要な要素に基づいて、CodemagicとCircleCI社のサービスを比較してみます。
なお、CircleCI社のサービスは主に*継続的インテグレーション(CI)のプラットフォームであり、継続的デリバリーや継続的デプロイ(CD)*にはあまり重点を置いていないことにご留意ください。
概要
継続的インテグレーション(CI)と継続的デリバリー(CD)のサービスは、大きく2つのタイプに分類されます。
- クラウドベース
- セルフホスティング
CodemagicとCircleCI社はどちらも、クラウドベースのCI/CDサービスを提供しています。自社インフラを利用したい人向けに、CircleCI社ではセルフホスティングサービスを利用するオプションを用意しています。
CircleCIは一般的なCI/CDソリューションで、あらゆるタイプのプロジェクトの構築に使用できます。一方、**Codemagic**は、よりモバイルに重点を置いたCI/CDソリューションをご提供しており、コード署名やデプロイプロセスがより簡単になっております。これは、Android、iOS、Flutter、React Native、Cordova、Ionicなど、一般的なフレームワークのほとんどに対応しております。
オンボーディング
まず、両プラットフォームのオンボーディングプロセスを見てみましょう。
Codemagicのオンボーディング
Codemagicへのサインアップ(新規ご登録)は、GitHub、Bitbucket、GitLabのいずれかのアカウントをご使用いただくか、メールで行っていただくことも可能です。Codemagicのサインアップページにアクセスして、ご開始いただけます。
Codemagicは、GitHubとの接続にはGitHubアプリ統合を、BitbucketやGitLabアカウントとの接続にはOAuthを使用しております。
Codemagicのサインアッププロセスについての詳細はこちらをご覧いただくか、ぜひサインアップしてください:
認証プロセスの後、Codemagicアプリケーションのページに移動いたします。
Codemagicを複数のバージョンコントロールサービスに同時に接続することが可能で、アプリはすべて1つの場所、アプリケーションページに表示されます。
CircleCIのオンボーディング
CircleCIの利用を開始するには、まずサインアップページにアクセスします。
ここで、GitHubでサインアップまたはBitbucketでサインアップのいずれかでCircleCIを認証し、プロジェクトへのアクセスを許可します。GitHubを使用している場合、CircleCIではプライベートリポジトリへのアクセスを防ぐことができます。
認証プロセスが完了すると、CircleCIダッシュボードに移動します。
プロジェクトの追加
ビルドプロセスを開始する前に、ビルドしたいプロジェクトをCI/CDプラットフォームに追加する必要があります。ここで、両プラットフォームのプロジェクト追加プロセスをご紹介いたします。
Codemagicへのプロジェクトの追加
Codemagicのアプリケーション(Applications)ページには、アプリケーションの追加(Add application)ボタンがございます。そちらをクリックします。
Gitプロバイダーを選択するか、URLを使ってリポジトリを追加します。
追加したいリポジトリを選択し、プロジェクトタイプを選択します。
そうすると、先ほど追加されたリポジトリのプロジェクト設定ページが表示されます。
CircleCIへのプロジェクトの追加
プロジェクトをCircleCIに追加するには、ダッシュボードページのプロジェクトの追加ボタンをクリックするか(初めてプロジェクトを追加する場合)、画面左側のメニューからプロジェクトを選択して、プロジェクトページに移動する必要があります。
追加したいプロジェクトを検索して、「プロジェクトの設定」をクリックします。
ダイアログボックスが表示されます。もし、.circleci/config.yml
がすでにリポジトリにある場合は、ブランチ名を入力するだけです。そうでなければ、最初の config.yml
ファイルを書き始めることができます。そして、「Let’s Go」をクリックします。
CircleCIビルド用の
config.yml
ファイルの定義方法を、次のセクションで見てみましょう。
これによりプロジェクトが追加され、そのプロジェクトの情報ページが表示されます。
ビルドの実行方法については、ビルドの実行セクションで詳しく説明しています。
ワークフローの構成
Codemagic:ワークフローの構成
Codemagicでは、‘codemagic.yaml’ ファイルを使用してビルドワークフローを構成できます。このファイルは、リポジトリのルートディレクトリに格納する必要があります。また、Flutterプロジェクトを扱っている場合、[ワークフローエディタ]を使ってワークフローを構成することもできます(https://docs.codemagic.io/flutter/flutter-projects/)。
codemagic.yaml
ファイルの詳細については、こちらをご覧ください。
ワークフローの構成を始めるには、プロジェクトの設定に進みます。Flutterプロジェクトであれば、デフォルトでワークフローエディタタブが選択されます。それ以外の場合は、codemagic.yamlタブが選択されます。
ワークフローエディタは、Codemagicウェブアプリ上で直接ビルドワークフローを定義し、カスタマイズできます。構成が完了したら、「変更を保存」をクリックして保存することをお忘れにならないでください。
codemagic.yaml
を使うには、このファイルをプロジェクトのルートディレクトリに置き、バージョンコントロールサーバーにコミットします。ここで、codemagic.yamlタブに移動すると、YAMLファイルの内容が表示されます。
ここでは、Androidプラットフォームのみを対象としたFlutterプロジェクトをビルドしてテストし、ビルド成果物を生成するためのcodemagic.yaml
ファイルの例を示します。
workflows:
default-workflow:
name: Default Workflow
max_build_duration: 60
environment:
flutter: stable
scripts:
- name: Get Flutter packages
script: flutter packages pub get
- name: Flutter test
script: flutter test
- name: Build Android
script: flutter build appbundle --debug
artifacts:
- build/**/outputs/bundle/**/*.aab
publishing:
email:
recipients:
- sbis1999@gmail.com
CircleCI:ワークフローの構成
CircleCIのビルドパイプラインの構成は、.circleci/config.yml
ファイルを使用します。このフォルダは、プロジェクトのルートディレクトリに格納する必要があります。ローカルでconfig.yml
ファイルを編集するか、CircleCIウェブアプリにあるエディタを使って編集することができます。
新しいプロジェクトを設定する際に、config.yml
ファイルが含まれていない場合は、エディタが表示されます。そこで、様々なテンプレートから選択したり、修正できます。テンプレートの修正が完了したら、「コミットして実行」をクリックします。これにより、ファイルが新しいブランチにコミットされ、最初のビルドが開始されます。
すでにプロジェクトが設定されている場合は、プロジェクトページにアクセスして、config.yml
ファイルを編集することができます。構成ファイルのあるブランチを選択して、「構成の編集」をクリックします。これにより、CircleCIウェブアプリのエディタに移動します。
ここでは、Androidプラットフォームのみを対象としたFlutterプロジェクトをビルドしてテストし、ビルド成果物を生成するための.circleci/config.yml
ファイルの例を示します。
version: 2.1
executors:
flutter:
docker:
- image: cirrusci/flutter
jobs:
test:
executor: flutter
steps:
- checkout
- run:
name: Get Flutter packages
command: flutter packages pub get
- run:
name: Flutter test
command: flutter test
build:
executor: flutter
steps:
- checkout
- run:
name: Build Android
command: flutter build appbundle --debug
- store_artifacts:
path: build/app/outputs/bundle/debug
workflows:
version: 2
flutter-build:
jobs:
- test
- build:
requires:
- test
CircleCIでは、Orbという興味深いコンセプトを提供しています。Orbは基本的に再利用可能な、あらかじめ書かれた構成要素のことで、たった1行のコードで使用することができます。
ビルドプラットフォーム
Codemagic対応プラットフォーム
Codemagicは、ビルドパイプラインを実行するためのmacOSおよびLinux用のVM(仮想マシン)をご提供しております。Windowsマシンへの対応は、Codemagicで近日中に予定されております。
Codemagicがご提供するビルドマシンの種類については、こちらをご覧ください。
Linuxマシンは、課金を有効にされているチームとユーザーのお客様のみご利用いただけます。
CircleCI対応プラットフォーム
CircleCIではワークフローを定義する際に、ビルドのエクゼキュータタイプを選択することができます。CircleCIでは主に、macOS、Linux、WindowsのVMを提供しています。
CircleCIのmacOSマシンは、有料プランの一部です。CircleCI社の各プランについては、後のセクションで詳しく説明いたします。
デプロイ
ビルド成果物のコード署名は、アプリストアで公開する前に完了しなければならない重要なステップです。これらのプラットフォームが、コード署名や成果物のデプロイをどのように処理するのかを見てみましょう。
Codemagic:デプロイ
Codemagicは、コード署名付きのビルド成果物をプラットフォーム上でネイティブに生成するための直接的なサポートをご提供いたします。
Flutterプロジェクトでは、ワークフローエディタかcodemagic.yaml
ファイルを使ってコード署名し、ビルド成果物をGoogle Play Store、Apple App Store、Firebase App Distributionにデプロイできます。
それ以外のプロジェクトでは、codemagic.yaml
ファイルを使ってデプロイを構成する必要があります。
以下のリンクから、コード署名と公開についての説明をご覧いただけます。
- Androidコード署名
- iOSコード署名
- macOSコード署名
- Google Play Storeへの公開
- App Store Connectへの公開
- Firebase App Distributionへの公開
CircleCI:デプロイ
継続的インテグレーション(CI)ツールであるCircleCIは、プラットフォーム上でコード署名やデプロイを直接サポートしていません。一方で、デプロイを支援するいくつかのサードパーティツールとの統合を提供しており、推奨されているのがfastlaneです。
リモートアクセス
ビルドマシンへのリモートアクセスは、プラットフォーム上で実行中のビルドをデバッグするのに役立ちます。CodemagicとCircleCIはどちらもビルドシステムへのリモートアクセスが可能です。
Codemagicでは、SSHかVNCクライアントを使用してビルドマシンにリモートアクセスすることができます。ビルドの実行中に、プロジェクトのビルドページに移動します。そこで、リモートアクセスの認証情報を含むタブが表示されます。
Codemagicのリモートアクセスについての詳細はこちらをご覧ください。
CircleCIには、通常のビルドに対するSSHアクセスは含まれません。SSHアクセスを取得するには、ダッシュボードの「ワークフローの再実行」ドロップダウンメニューから「SSHでジョブを再実行」オプションを選択する必要があります。
インテグレーション
Codemagic
Codemagicは、プラットフォーム上でご使用いただけるインテグレーションが驚くほど充実しております。これらは、通常のCLIコマンドとして、scripts
セクションの下にあるcodemagic.yaml
ファイルに簡単に追加することができます。
以下は、codemagic.yaml
ファイルにCodecov統合を追加した例です。
- name: Coverage Test
script: |
#!/bin/bash
flutter test --coverage
bash <(curl -s https://codecov.io/bash) -t $CODECOV_TOKEN
CircleCI
一般的なCIプラットフォームであるCircleCIには、様々なサービスとの統合が数多くあります。それらの統合は、.circleci/config.yml
ファイルに追加できるOrbの形でアクセスできます。
以下は、config.yml
ファイルにCodecov orbを追加した例です:
version: '2.1'
orbs:
codecov: codecov/codecov@1.2.4
workflows:
upload-to-codecov:
jobs:
- checkout
- codecov/upload
価格
この2つのプラットフォームが提供する料金プランを見てみましょう。 この2つのプラットフォームの違いの1つは、CircleCIの有料プランはプリペイド(前払い)で、Codemagicの有料プランはポストペイド(後払い)である点です。
Codemagicの価格
Codemagicは無料で開始でき、その後は**従量課金(pay-as-you-go)**プラン(後払い)をお選びいただけます。
Codemagicの無料プランでは、以下の各種機能をご提供しております:
- 毎月500分のビルド時間
- 120分のビルドタイムアウト
- 1つのコンカレントビルド
- 1人のメンバー
- ビルドプラットフォーム:
- macOS標準VM (2.3 GHz Quad Core/8 GB)
コンカレント(同時)ビルド数やチームメンバー数は、従量制プランをご選択いただくことで増やすことができます。
Codemagicは、大規模なチームを有する法人の皆様用に月額プランをご用意しております。
Codemagicの価格オプションについてはこちらをご覧ください。
CircleCIの価格
CircleCIも無料プランで開始できます。クラウドホストのCI/CDサービスでは、さらに2つのプラン(前払い)、パフォーマンスとスケールを提供しています。また、CircleCIでは、自社のインフラでCI/CDサービスを運用する、セルフホスティングソリューションも提供しています。
CircleCIの無料プランでは、以下の機能を提供しています:
- 2500無料クレジット/週
- 1つのコンカレントビルド
- 1人のメンバー
- ビルドプラットフォーム:
- Linux VM (Dual Core/7.5 GB) -10クレジット/分
- Windows VM (Quad Core/15 GB)-40クレジット/分
APIアクセス
APIにアクセスすることで、有用なビルド情報の取得、プロジェクトの管理、プラットフォームでのビルドの実行/停止などが、APIコールだけで可能になります。また、CI/CDプラットフォームを他のツールと簡単に統合することができます。
どちらのプラットフォームもAPIアクセスが可能です。それぞれのAPIについては、以下のリンクから詳細をご覧いただけます:
- CircleCI API v2
- Codemagic REST API
結論
Codemagicは、モバイルに重点を置いた継続的インテグレーション(CI)および継続的デプロイ(CD)プラットフォームであるため、コード署名やビルド成果物の公開という点で、CircleCIよりも優れております。Codemagicは、Google Play StoreやApple App Storeなどの主要なプラットフォームへのデプロイをネイティブ対応しております。Codemagicのもう一つの特長は、macOSビルドプラットフォームを無料プランの一部としてご提供している点で、お使いいただくとiOSとmacOSアプリを簡単にコード署名して公開することができます。Mac ProのPremium VMは有料機能で、[従量課金](Pay as you go)(https://codemagic.io/pricing/)プランでご利用いただけます。
参照
Souvik Biswasは、情熱的なモバイルアプリ開発者です(AndroidとFlutter)。彼はこれまでの歩みの中で、数多くのモバイルアプリを手がけてまいりました。GitHubでのオープンソース貢献が大好きです。彼は現在、Indian Institute of Information Technology Kalyaniでコンピューターサイエンスとエンジニアリングの技術学士号の取得を目指しています。また、Medium-FlutterコミュニティでFlutterの記事を書いております。