CodemagicとBitriseはどちらも、モバイルアプリを構築するためのクラウドベースの継続的インテグレーションおよび継続的デリバリーツールです。 Android、iOS、Flutter、React Native、Cordova、Ionicなどの一般的なモバイルフレームワークのほとんどをサポートします。 これら2つのプラットフォームのどちらかを選択するのは難しいかもしれませんが、ご心配なく。私たちは、個々のニーズまたはチームのニーズに最適なCI/CDサービスを決定するお手伝いをします。 この記事では、CodemagicとBitriseを直接比較し、各サービスの長所と短所について説明します。
著作:Souvik Biswas
オンボーディング
Codemagicのオンボーディング
GitHub、BitbucketまたはGitLabアカウントを使用して、CodemagicとBitriseの両方にログインできます。
CodemagicはGitHubアプリ統合を使用してGitHubに接続するため、読み取りアクセスを提供する必要があります。 OAuthを使用して、BitbucketまたはGitLabアカウントに接続します。 この場合、読み取りと書き取りアクセスの両方を提供する必要があります。 Codemagicは、ログインに使用したバージョン管理アカウントに存在するすべてのアプリケーションを自動的にプルします。
したがって、プロジェクトのいずれかをビルドする場合は、左側のメニューから アプリページに移動し、ワークフローを構成してビルドを開始するだけです。また、Codemagicを複数のクラウドベースのバージョン管理サービスに一度に接続すると、すべてのアプリがアプリページの1か所に表示されます。
Bitriseオンボーディング
Bitriseについては、SSHを使用して、バージョン管理アカウントのいずれかでログインするか、読み取り/書き込みアクセスを直接提供するか、SSOログインすることから開始できます。 アカウントに接続した後、アプリをビルドするには、そのアカウントをBitriseに追加し、初期構成手順を完了する必要があります。プロジェクトタイプを検出した後、Bitriseは事前設定されたワークフローで初期ビルドを開始します。
これで、ワークフローを構成し、Bitriseを使用して新しいビルドを開始するためのアクセス権を取得できます。 Bitriseの欠点の1つは、プラットフォームに新しいアプリを追加するたびに、プロジェクトを構成してビルドを開始する前に初期セットアッププロセスを実行する必要があることです。これは構築するリポジトリへのアクセスのみを許可するためプライバシーに関して真に懸念している場合はこのアプローチが有利な場合があります。さらに、SSHキーを使用するオプションがあります。
Codemagicは、バージョン管理アカウントに追加されたプロジェクトを自動的に取得し、ワークフローを構成してビルドを開始する準備ができています。GitHubアプリ統合を使用する場合、GitHubアカウントへの読み取りアクセスのみが必要です。これは、特定のリポジトリに制限することもできます。
ワークフローエディター
Codemagicワークフローエディター
CodemagicはFlutterアプリ専用のワークフローエディターを提供し、UIは非常に直感的で初心者に優しくできています。各ステップの前のカスタムスクリプトのサポートなど、ワークフローエディターを使用して広範なカスタマイズを行うこともできます。
codemagic.yaml
ファイルを使用して、ワークフローを定義し、他のフレームワークのビルドを実行できます。これについては、次のセクションで詳しく説明します。
Bitriseワークフローエディター
Bitriseは、すべてのタイプのモバイルフレームワーク用のワークフローエディターを提供しますが、エディターが各ステップで多くのカスタマイズオプションを事前に提供しようとするため、初めてのユーザーは少し圧倒されるかもしれません。任意の2つのステップの間にあるプラス (+)ボタンをクリックしてワークフローにステップを追加し、そこに新しいステップを挿入できます。ただし、正しいフレームワークに対して正しいステップを選択していることを確認する必要があります。AndroidステップをiOSワークフローに追加すると、ビルドが失敗する可能性があります。)
YAML構成
Codemagic YAML構成
Codemagic は、ビルド構成をcodemagic.yaml
ファイルに保存します。このファイルは、リポジトリ内のプロジェクトのルートディレクトリに保存されます。 ビルドを開始すると、リポジトリから自動的に読み取られます。ワークフローエディターで定義された構成(Flutterにのみ適用可能)を使用するか、プロジェクトリポジトリに存在するYAMLファイルを使用するかを選択できます。
Bitrise YAML構成
Bitriseはビルド構成をbitrise.ymlファイルに保存します。デフォルトでは、このファイルはbitrise.ioによって管理されますが、Gitによって管理されているアプリのリポジトリに構成ファイルを保存することを選択できます。 YAMLファイルをリポジトリに保存すると、オンラインワークフローエディターで構成を変更できなくなります。
codemagic.yaml
ファイルとbitrise.ymlファイルを比較すると、BitriseのYAML構成が長いだけでなく、非常に複雑で、まったく同じワークフローで理解し変更するのが難しいことがわかります。 これは、Bitriseがコマンドの一部をStepsと呼ばれる事前定義されたスクリプトに保存するためです。これらは持っていて便利ですが、YAMLファイルで定義するには、それぞれの構文について事前に知っておく必要があります。
flutter_counter_app プロジェクトをビルドするためのbitrise.ymlファイルの例を次に示します:
format_version: '8'
default_step_lib_source: https://github.com/bitrise-io/bitrise-steplib.git
project_type: flutter
trigger_map:
- push_branch: "*"
workflow: primary
- pull_request_source_branch: "*"
workflow: primary
workflows:
deploy:
steps:
- activate-ssh-key@4:
run_if: '{{getenv "SSH_RSA_PRIVATE_KEY" | ne ""}}'
- git-clone@4: {}
- script@1:
title: Do anything with Script step
- certificate-and-profile-installer@1: {}
- flutter-installer@0:
inputs:
- is_update: 'false'
- cache-pull@2: {}
- flutter-analyze@0:
inputs:
- project_location: "$BITRISE_FLUTTER_PROJECT_LOCATION"
- flutter-test@0:
inputs:
- project_location: "$BITRISE_FLUTTER_PROJECT_LOCATION"
- flutter-build@0:
inputs:
- project_location: "$BITRISE_FLUTTER_PROJECT_LOCATION"
- platform: both
- xcode-archive@3:
inputs:
- project_path: "$BITRISE_PROJECT_PATH"
- scheme: "$BITRISE_SCHEME"
- export_method: "$BITRISE_EXPORT_METHOD"
- configuration: Release
- deploy-to-bitrise-io@1: {}
- cache-push@2: {}
primary:
steps:
- activate-ssh-key@4:
run_if: '{{getenv "SSH_RSA_PRIVATE_KEY" | ne ""}}'
- git-clone@4: {}
- script@1:
title: Do anything with Script step
- flutter-installer@0:
inputs:
- version: 2.0.4
- is_update: 'false'
- cache-pull@2: {}
- flutter-test@0:
inputs:
- project_location: "$BITRISE_FLUTTER_PROJECT_LOCATION"
- flutter-build@0: {}
- deploy-to-bitrise-io@1:
inputs:
- notify_email_list: ''
- cache-push@2: {}
app:
envs:
- opts:
is_expand: false
BITRISE_FLUTTER_PROJECT_LOCATION: "."
- opts:
is_expand: false
BITRISE_PROJECT_PATH: ios/Runner.xcworkspace
- opts:
is_expand: false
BITRISE_SCHEME: Runner
- opts:
is_expand: false
BITRISE_EXPORT_METHOD: development
一方、codemagic.yaml
ファイルでは、スクリプトで通常のCLIコマンドを直接定義できます。 これにより、ローカルでビルドするときに使用するのと同じコマンドを使用する必要があるため、理解と保守がはるかに簡単になります。
これは、非常によく似たワークフローで同じflutter_counter_appプロジェクトをビルドするためのcodemagic.yaml
ファイルの例です。
workflows:
default-workflow:
name: Default Workflow
max_build_duration: 60
environment:
flutter: stable
xcode: latest
cocoapods: default
scripts:
- |
# set up debug keystore
rm -f ~/.android/debug.keystore
keytool -genkeypair \
-alias androiddebugkey \
-keypass android \
-keystore ~/.android/debug.keystore \
-storepass android \
-dname 'CN=Android Debug,O=Android,C=US' \
-keyalg 'RSA' \
-keysize 2048 \
-validity 10000
- |
# set up local properties
echo "flutter.sdk=$HOME/programs/flutter" > "$CM_BUILD_DIR/android/local.properties"
- cd . && flutter packages pub get
- cd . && flutter test
- cd . && flutter build apk --debug
- find . -name "Podfile" -execdir pod install \;
- cd . && flutter build ios --debug --no-codesign
artifacts:
- build/**/outputs/**/*.apk
- build/**/outputs/**/*.aab
- build/**/outputs/**/mapping.txt
- build/ios/ipa/*.ipa
- /tmp/xcodebuild_logs/*.log
- flutter_drive.log
publishing:
email:
recipients:
- sbis1999@gmail.com
詳細については、Codemagic YAMLチートシートを確認してください。
プラットフォームを構築する
Codemagic:プラットフォームを構築する
Codemagicでは、クロスプラットフォームフレームワークを使用している場合、さまざまなプラットフォームのアーティファクトを生成できます。 Flutterの場合と同様に、Android、iOS、web、macOSおよびLinux用のアーティファクトを生成できます。
Bitrise:プラットフォームを構築する
Bitriseは、アプリを構築するためのAndroidおよびiOSプラットフォームのみに制限されています。 そのため、Flutterのようなクロスプラットフォームフレームワークを使用している場合でも、AndroidとiOSのアーティファクトしか生成できません。
ビルド時間:BitriseとCodemagicの比較
アプリのビルド時間は、CI/CDサービスを選択する際に考慮すべき最も重要な要素です。そこで、さまざまなフレームワークを使用したさまざまなビルドを簡単に比較します。 プラットフォームで使用される計画に沿ってビルドが実行されるマシンの仕様は次のとおりです。
Bitrise
- **計画:**ホビーティア(無料)
- **マシンタイプ:**標準(macOS VM)
- **プロセッサ:**2.7GHzデュアルコア
- **ラム:**4GB
Codemagic
- 計画 無料
- マシンタイプ: macOSスタンダードVM
- **プロセッサ:**2.3GHzクアッドコア
- **ラム:**8 GB
iOSアプリケーション
次の結果は、コード署名なしで同じiOSアプリを構築することによって生成されました。これはいくつかの単体テストで構成され、同様のワークフローがありました:
Bitriseはアプリの構築に4分42秒かかりました。 Codemagicはアプリの構築に3分8秒かかりました。
これは、CodemagicでのiOSビルドがBitriseでのビルドよりも約40%高速だったことを意味します。
Androidアプリケーション
次の結果は、コード署名なしで同じAndroidアプリを構築することによって生成されました。これはいくつかの単体テストで構成され、同様のワークフローがありました:
Bitriseはアプリの構築に6分55秒かかりました。
Codemagicはアプリの構築に6分35秒かかりました
Androidのビルドには、BitriseとCodemagicで同様の時間がかかりました。 Codemagicがトップになりましたが、さまざまな要因により、ビルド時間がこのわずかな量だけ変動した可能性があります。
Flutterアプリケーション
次の結果は、同じFlutterアプリ(AndroidおよびiOSプラットフォーム用)を構築することによって生成されました。これはいくつかの単体テストで構成され、同様のワークフローがありました:
Bitriseはアプリの構築に11分22秒かかりました。
Codemagicはアプリの構築に7分22秒かかりました。
従って、CodemagicでのFlutterビルドは、Bitriseでのビルドよりも約40%高速でした。
出版
CodemagicとBitriseはどちらも、AndroidとiOSのビルドアーティファクトをそれぞれGoogle Play StoreとApple App Storeに公開できます。 また、アーティファクトのコード署名もサポートしています(これは、アーティファクトが公開の対象となるために必要です)。
最も苦痛な部分はiOSコード署名ですが、どちらのプラットフォームも、プロセスをはるかに簡単かつ高速にするための何らかの自動化をサポートしています。
Bitrise は、iOSコード署名プロセスの自動化に役立つcodesigndocと呼ばれるCLIツールを提供します。
Codemagicは、Apple Developer Portalアカウントに接続することにより、iOSプロジェクトの自動コード署名のオプションを提供します。 Codemagic CLIツール には、ビルドを簡素化するためのさまざまなユーティリティツールが含まれています
さらに、Codemagicはweb用のクロスプラットフォームアプリの構築もサポートしているため、を使用してWebアプリを無料でホストできます。
リモートアクセス
アプリがテストおよびビルドされているビルドマシンにリモートアクセスできます。どちらのプラットフォームでも、ユーザーはビルドマシンにアクセスできます
Bitrise
Bitriseは、次の2つの方法でビルドマシンへのリモートアクセスを提供します:
- **SSH:**Linux / DockerベースのマシンとmacOSマシンの両方で利用できます。
- 画面共有 macOSマシンでのみ使用できます。 ビルドマシンは、ビルド中およびビルド終了後10分間アクセスできます。
Codemagic
Codemagicは、次の2つの方法でビルドマシンへのリモートアクセスを提供します:
- **SSHアクセス:**ターミナルを介してビルドマシンにアクセスし、そこでコマンドを実行することのみが許可されます。
- VNCクライアント: リモートビルドマシンにグラフィカルにアクセスできます。
SSHまたはVNCセッションは、すべてのビルドステップが完了した後、または最大ビルド期間の制限に達するまでのいずれか早い方まで、最大20分間アクティブのままになります。
Codemagicでのリモートアクセスについて詳しくは、こちらをご覧ください.
統合
両方のプラットフォームでさまざまなサードパーティ統合を使用できます。
Bitrise
Bitrise統合は、プラットフォームにスクリプトとして保存され、ステップとしてビルドワークフローに挿入できます。 統合のさまざまなカテゴリには、OpenVPN、AppCenter、Huawei App Gallery、Firebase App Distribution、Slack、Microsoft Teams、Telegram、Amazon Device Farmなどを含めたさまざまなコード署名統合などがあります。
Codemagic
Codemagic統合は、codemagic.yaml
ファイルで定義することで使用できます。
Codemagicでサポートされている統合には、Codecov、Docker、fastlane、Firebase App Distribution、Jira、Trello、Slack、SonarQube、Firebase Test Lab、AWS Device Farmなどがあります。
価格設定
これら2つのプラットフォームが提供する料金プランを見てみましょう。
Bitrise価格設定
Bitriseは、パブリッククラウドプランを提供しています。これには、固定の月額プランと年額プランが10%割引で含まれています。 また、大規模なチーム向けに、カスタム価格設定のプライベートクラウドプランもあります。 また、以下を提供する無料プラン(ホビーティア)も提供しています。
- 1か月あたり200ビルド
- 10分のビルドタイムアウト
- 1つの同時ビルド
- 2チームメンバー
Codemagic価格設定
Codemagicは無料で開始でき、その後は従量制プランを選択できます。 無料プランは以下の内容を提供します:
- 1か月あたり500ビルド分(macOS標準VM)
- 120分のビルドタイムアウト
- 1つの同時ビルド
- 1メンバー
同時ビルドとチームメンバーの数は、従量制プランを選択することで増やすことができます。
Codemagicは大規模なチームを持つ企業向けの月額プランを提供します。
Codemagicの料金プランについて詳しくは、こちらをご覧ください.
結論
CodemagicとBitriseを比較すると、これらのプラットフォームはどちらも非常によく似ており、モバイルアプリの開発に重点を置いていることがわかります。 しかし、Bitriseと比較して追加機能を提供することでCodemagicがトップに立つ特定の領域があります。Codemagicが提供する無料プランは非常に堅牢で、従量制プランにいつでもアップグレードできます。Codemagicを使用すると、構成やアーティファクトを(有料プランで)保存するために料金を支払う必要がなく、ビルドの実行に対してのみ課金されます。これは、何があっても支払う必要があるBitriseに比べて大きな利点です。この記事が、あなたやあなたのチームに最適なCI/CDサービスを選択するのに役立つことを願っています。
参考文献
Souvik Biswasは、情熱的なモバイルアプリ開発者(AndroidおよびFlutter)です。彼はこれまで多くのモバイルアプリに取り組んできました。 GitHub. でのオープンソースの貢献が大好きです。彼は現在、インド情報技術研究所カリヤニでコンピューターサイエンスとエンジニアリングのB.Techの学位取得に励んでいます。また、彼はMedium - Flutter Communityに関するFlutterの記事を書いています。