Codemagic vs Bitrise: 詳細な比較



CodemagicとBitriseはどちらも、モバイルアプリを構築するためのクラウドベースの継続的インテグレーションおよび継続的デリバリーツールです。 Android、iOS、Flutter、React Native、Cordova、Ionicなどの一般的なモバイルフレームワークのほとんどをサポートします。
これら2つのプラットフォームのどちらかを選択するのは難しいかもしれませんが、ご心配なく。私たちは、個々のニーズまたはチームのニーズに最適なCI/CDサービスを決定するお手伝いをします。
この記事では、CodemagicとBitriseを直接比較し、各サービスの長所と短所について説明します。


## オンボーディング

### Codemagicのオンボーディング
GitHub、BitbucketまたはGitLabアカウントを使用して、CodemagicとBitriseの両方にログインできます。

![](https://blog.codemagic.io/uploads/2021/08/codemagic_login.png)

CodemagicはGitHubアプリ統合を使用してGitHubに接続するため、読み取りアクセスを提供する必要があります。 OAuthを使用して、BitbucketまたはGitLabアカウントに接続します。 この場合、読み取りと書き取りアクセスの両方を提供する必要があります。 Codemagicは、ログインに使用したバージョン管理アカウントに存在するすべてのアプリケーションを自動的にプルします。 

![](https://blog.codemagic.io/uploads/2021/08/codemagic_apps.png)

したがって、プロジェクトのいずれかをビルドする場合は、左側のメニューから アプリページに移動し、ワークフローを構成してビルドを開始するだけです。また、Codemagicを複数のクラウドベースのバージョン管理サービスに一度に接続すると、すべてのアプリがアプリページの1か所に表示されます。

### Bitriseオンボーディング 

![](https://blog.codemagic.io/uploads/2021/04/bitrise_login.png)

Bitriseについては、SSHを使用して、バージョン管理アカウントのいずれかでログインするか、読み取り/書き込みアクセスを直接提供するか、SSOログインすることから開始できます。 アカウントに接続した後、アプリをビルドするには、そのアカウントをBitriseに追加し、初期構成手順を完了する必要があります。プロジェクトタイプを検出した後、Bitriseは事前設定されたワークフローで初期ビルドを開始します。

<img src="https://blog.codemagic.io/uploads/2021/04/bitrise_initial_config.png" width="500" alt="Bitrise onboarding">


これで、ワークフローを構成し、Bitriseを使用して新しいビルドを開始するためのアクセス権を取得できます。
Bitriseの欠点の1つは、プラットフォームに新しいアプリを追加するたびに、プロジェクトを構成してビルドを開始する前に初期セットアッププロセスを実行する必要があることです。これは構築するリポジトリへのアクセスのみを許可するためプライバシーに関して真に懸念している場合はこのアプローチが有利な場合があります。さらに、SSHキーを使用するオプションがあります。

Codemagicは、バージョン管理アカウントに追加されたプロジェクトを自動的に取得し、ワークフローを構成してビルドを開始する準備ができています。GitHubアプリ統合を使用する場合、GitHubアカウントへの読み取りアクセスのみが必要です。これは、特定のリポジトリに制限することもできます。

## ワークフローエディター

### Codemagicワークフローエディター


CodemagicはFlutterアプリ専用のワークフローエディターを提供し、UIは非常に直感的で初心者に優しくできています。各ステップの前のカスタムスクリプトのサポートなど、ワークフローエディターを使用して広範なカスタマイズを行うこともできます。

![Codemagicエディター](https://blog.codemagic.io/uploads/2021/08/app_settings_workflow_editor.png 'codemagic vs bitrise')

`codemagic.yaml`ファイルを使用して、ワークフローを定義し、他のフレームワークのビルドを実行できます。これについては、次のセクションで詳しく説明します。

### Bitriseワークフローエディター

Bitriseは、すべてのタイプのモバイルフレームワーク用のワークフローエディターを提供しますが、エディターが各ステップで多くのカスタマイズオプションを事前に提供しようとするため、初めてのユーザーは少し圧倒されるかもしれません。任意の2つのステップの間にあるプラス (+）ボタンをクリックしてワークフローにステップを追加し、そこに新しいステップを挿入できます。ただし、正しいフレームワークに対して正しいステップを選択していることを確認する必要があります。AndroidステップをiOSワークフローに追加すると、ビルドが失敗する可能性があります。）

![Bitriseエディター](https://blog.codemagic.io/uploads/2021/04/bitrise_editor.png 'codemagic vs bitrise')

## YAML構成 

### Codemagic YAML構成


Codemagic は、ビルド構成を`codemagic.yaml`ファイルに保存します。このファイルは、リポジトリ内のプロジェクトのルートディレクトリに保存されます。 ビルドを開始すると、リポジトリから自動的に読み取られます。ワークフローエディターで定義された構成（Flutterにのみ適用可能）を使用するか、プロジェクトリポジトリに存在するYAMLファイルを使用するかを選択できます。

![Codemagic](https://blog.codemagic.io/uploads/2021/08/codemagic_yaml.png 'codemagic vs bitrise')

### Bitrise YAML構成

Bitriseはビルド構成をbitrise.ymlファイルに保存します。デフォルトでは、このファイルはbitrise.ioによって管理されますが、Gitによって管理されているアプリのリポジトリに構成ファイルを保存することを選択できます。 YAMLファイルをリポジトリに保存すると、オンラインワークフローエディターで構成を変更できなくなります。

![Bitrise](https://blog.codemagic.io/uploads/2021/04/bitrise_yml.png 'codemagic vs bitrise')

`codemagic.yaml`ファイルとbitrise.ymlファイルを比較すると、BitriseのYAML構成が長いだけでなく、非常に複雑で、まったく同じワークフローで理解し変更するのが難しいことがわかります。 これは、Bitriseがコマンドの一部をStepsと呼ばれる事前定義されたスクリプトに保存するためです。これらは持っていて便利ですが、YAMLファイルで定義するには、それぞれの構文について事前に知っておく必要があります。

[flutter_counter_app](https://github.com/sbis04/flutter_counter_app) プロジェクトをビルドするためのbitrise.ymlファイルの例を次に示します:

```yaml
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](https://github.com/sbis04/flutter_counter_app)プロジェクトをビルドするための`codemagic.yaml`ファイルの例です。


```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" > "$FCI_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](https://blog.codemagic.io/codemagic-yaml-cheatsheet/)チートシートを確認してください。

## プラットフォームを構築する
### 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 – iOSビルド](https://blog.codemagic.io/uploads/2021/04/bitrise_ios.png)

<img src="https://blog.codemagic.io/uploads/2021/04/codemagic_ios.png" width="500" alt="Codemagic – iOS build"><figcaption>Codemagic – iOSビルド</figcaption>

Bitriseはアプリの構築に**4分42秒**かかりました。 
Codemagicはアプリの構築に**3分8秒**かかりました。

>> これは、CodemagicでのiOSビルドがBitriseでのビルドよりも約**40%高速**だったことを意味します。

### Androidアプリケーション

次の結果は、コード署名なしで同じAndroidアプリを構築することによって生成されました。これはいくつかの単体テストで構成され、同様のワークフローがありました:

![Bitrise – Androidビルド](https://blog.codemagic.io/uploads/2021/04/bitrise_android.png 'codemagic vs bitrise')

<img src="https://blog.codemagic.io/uploads/2021/04/codemagic_android.png" width="500" alt="Codemagic – Android build"><figcaption>Androidビルド</figcaption>


Bitriseはアプリの構築に**6分55秒**かかりました。 

Codemagicはアプリの構築に**6分35秒**かかりました

Androidのビルドには、BitriseとCodemagicで同様の時間がかかりました。 Codemagicがトップになりましたが、さまざまな要因により、ビルド時間がこのわずかな量だけ変動した可能性があります。

### Flutterアプリケーション

次の結果は、同じFlutterアプリ（AndroidおよびiOSプラットフォーム用）を構築することによって生成されました。これはいくつかの単体テストで構成され、同様のワークフローがありました：

![Bitrise – Flutterビルド](https://blog.codemagic.io/uploads/2021/04/bitrise_flutter.png 'codemagic vs bitrise')

<img src="https://blog.codemagic.io/uploads/2021/04/codemagic_flutter.png" width="500" alt="Codemagic – Flutter build"><figcaption>Codemagic – Flutterビルド</figcaption>

Bitriseはアプリの構築に**11分22秒**かかりました。

Codemagicはアプリの構築に**7分22秒**かかりました。

>> 従って、CodemagicでのFlutterビルドは、Bitriseでのビルドよりも約**40%高**速でした。

![BitriseとCodemagicの比較 – ビルド時間](https://blog.codemagic.io/uploads/2021/04/build_times_bitrise_vs_codemagic.png)


## 出版

CodemagicとBitriseはどちらも、AndroidとiOSのビルドアーティファクトをそれぞれGoogle Play StoreとApple App Storeに公開できます。 また、アーティファクトのコード署名もサポートしています（これは、アーティファクトが公開の対象となるために必要です）。

最も苦痛な部分はiOSコード署名ですが、どちらのプラットフォームも、プロセスをはるかに簡単かつ高速にするための何らかの自動化をサポートしています。

Bitrise は、iOSコード署名プロセスの自動化に役立つcodesigndocと呼ばれるCLIツールを提供します。

Codemagicは、Apple Developer Portalアカウントに接続することにより、iOSプロジェクトの自動コード署名のオプションを提供します。 [Codemagic CLIツール]((https://github.com/codemagic-ci-cd/cli-tools)) には、ビルドを簡素化するためのさまざまなユーティリティツールが含まれています

さらに、Codemagicはweb用のクロスプラットフォームアプリの構築もサポートしているため、[を使用してWebアプリを](https://docs.codemagic.io/publishing/publishing-to-codemagic-static-pages/)無料でホストできます。

{{< getting-started-flutter-banner >}}

## リモートアクセス

アプリがテストおよびビルドされているビルドマシンにリモートアクセスできます。どちらのプラットフォームでも、ユーザーはビルドマシンにアクセスできます


### Bitrise

Bitriseは、次の2つの方法でビルドマシンへのリモートアクセスを提供します：
- **SSH：**Linux / DockerベースのマシンとmacOSマシンの両方で利用できます。
- **画面共有** macOSマシンでのみ使用できます。
ビルドマシンは、ビルド中およびビルド終了後10分間アクセスできます。


### Codemagic

Codemagicは、次の2つの方法でビルドマシンへのリモートアクセスを提供します：
- **SSHアクセス：**ターミナルを介してビルドマシンにアクセスし、そこでコマンドを実行することのみが許可されます。
- **VNCクライアント:** リモートビルドマシンにグラフィカルにアクセスできます。

> SSHまたはVNCセッションは、すべてのビルドステップが完了した後、または最大ビルド期間の制限に達するまでのいずれか早い方まで、最大20分間アクティブのままになります。


>  Codemagicでのリモートアクセスについて詳しくは、[こちらをご覧ください](https://docs.codemagic.io/troubleshooting/accessing-builder-machine-via-ssh/).

## 統合

両方のプラットフォームでさまざまなサードパーティ統合を使用できます。


### Bitrise

Bitrise統合は、プラットフォームにスクリプトとして保存され、ステップとしてビルドワークフローに挿入できます。
統合のさまざまなカテゴリには、OpenVPN、AppCenter、Huawei App Gallery、Firebase App Distribution、Slack、Microsoft Teams、Telegram、Amazon Device Farmなどを含めたさまざまなコード署名統合などがあります。

![Bitriseの統合](https://blog.codemagic.io/uploads/2021/04/bitrise_integrations.png 'codemagic vs bitrise')

### Codemagic

Codemagic統合は、`codemagic.yaml`ファイルで定義することで使用できます。 
Codemagicでサポートされている統合には、Codecov、Docker、fastlane、Firebase App Distribution、Jira、Trello、Slack、SonarQube、Firebase Test Lab、AWS Device Farmなどがあります。

> [Codemagicの統合を探る](https://codemagic.io/integrations/)

![Codemagicの統合](https://blog.codemagic.io/uploads/2021/04/codemagic_integrations.png 'codemagic vs bitrise')

## 価格設定

これら2つのプラットフォームが提供する料金プランを見てみましょう。

### Bitrise価格設定

![Bitrise価格設定](https://blog.codemagic.io/uploads/2021/08/bitrise_pricing.png 'codemagic vs bitrise')

Bitriseは、パブリッククラウドプランを提供しています。これには、固定の月額プランと年額プランが10％割引で含まれています。 また、大規模なチーム向けに、カスタム価格設定のプライベートクラウドプランもあります。
また、以下を提供する無料プラン（ホビーティア）も提供しています。
- 1か月あたり200ビルド
- 10分のビルドタイムアウト
- 1つの同時ビルド
- 2チームメンバー


### Codemagic価格設定

![Codemagic価格設定](https://blog.codemagic.io/uploads/2021/08/codemagic_pricing.png 'codemagic vs bitrise')

Codemagicは無料で開始でき、その後は従量制プランを選択できます。 
無料プランは以下の内容を提供します：
- 1か月あたり500ビルド分（macOS標準VM）
- 120分のビルドタイムアウト
- 1つの同時ビルド
- 1メンバー

同時ビルドとチームメンバーの数は、従量制プランを選択することで増やすことができます。

> Codemagicは大規模なチームを持つ企業向けの月額プランを提供します。

> Codemagicの料金プランについて詳しくは、[こちらをご覧ください](https://codemagic.io/pricing/).

## 結論
CodemagicとBitriseを比較すると、これらのプラットフォームはどちらも非常によく似ており、モバイルアプリの開発に重点を置いていることがわかります。 しかし、Bitriseと比較して追加機能を提供することでCodemagicがトップに立つ特定の領域があります。Codemagicが提供する無料プランは非常に堅牢で、従量制プランにいつでもアップグレードできます。Codemagicを使用すると、構成やアーティファクトを（有料プランで）保存するために料金を支払う必要がなく、ビルドの実行に対してのみ課金されます。これは、何があっても支払う必要があるBitriseに比べて大きな利点です。この記事が、あなたやあなたのチームに最適なCI/CDサービスを選択するのに役立つことを願っています。