CircleCIは、iOSおよびAndroid向けモバイルアプリケーションを含むソフトウェアのビルド、テスト、デプロイを自動化するクラウドCI/CDプラットフォームです。CircleCI、2024によると、このプラットフォームは月間3000万以上のビルドを処理し、Orb(人気ツール向けの既成設定パッケージ)に基づく独自のアーキテクチャを提供しています。
重要ポイント
CircleCIは、2011年に設立されたクラウドCI/CDプラットフォームです。このシステムでは、YAMLファイル.circleci/config.ymlでパイプラインを記述し、隔離されたコンテナまたは仮想マシンで実行できます。CircleCIは、Android、iOS、Flutter、React Nativeを含むすべての主要言語とプラットフォームをサポートしています。
モバイル開発向けに、CircleCIはXcodeがプリインストールされたmacOS Executor(iOSビルド用)、Android SDKを備えたLinux Executor、さらにGradleおよびCocoaPodsのキャッシングを提供します。主要な機能はOrbで、1行(orb: android、orb: ios、orb: flutter)で既成設定をプラグインできます。CircleCIはリポジトリの初回接続時にプロジェクトタイプを自動検出し、テンプレート設定を提案します。
プラットフォームはデバッグ用に実行中のコンテナへのSSHアクセスをサポートしています — 失敗したビルドのトラブルシューティングに役立つ機能です。CircleCI CLIを使用すると、設定のローカル検証と実行、Orbの管理、ログの表示が可能です。プラットフォームはWebhookシステムを介してGitHub、GitHub Enterprise、Bitbucket、GitLabと統合します。
CircleCIのアーキテクチャは3つのレベルで構成されています:Pipeline、Workflow、Job。Pipelineはコミットでトリガーされるルートプロセスです。PipelineはWorkflows(順次または並列に実行できるJobのグラフ)で構成されます。各JobはExecutor(特定のイメージを持つ環境)で実行されます。Workflowには承認ゲート(デプロイ前の手動確認)を含めることができます。
Orbは、CircleCI Orb Registryを通じて配布される再利用可能なYAML設定パッケージです。Orbには、jobs、commands、executors、サンプルを含めることができます。人気のOrb:android、ios、flutter、firebase、slack。たとえば、android Orbを追加すると、50行以上の設定が1行に置き換わります。CircleCI CLIを使用すると、組織全体でパイプラインを標準化するための独自のOrbを作成、テスト、公開できます。
| Executor | 対象 | ビルド環境 |
|---|---|---|
| Docker | Android、Backend | Linuxコンテナ |
| macOS | iOS、macOS | Xcode搭載macOS VM |
| Machine | Docker-in-Docker | Ubuntu VM |
| Windows | .NET、WinUI | Windows Server |
Contextsは、組織レベルで利用可能な名前付き環境変数セットです。たとえば、app-store-credentialsコンテキストには、App Storeに公開するためのApple IDとパスワードが含まれます。これにより、プロジェクト間でのシークレット管理が重複なく簡素化されます。
Androidプロジェクトの場合、CircleCIはAndroid SDKを備えたcibuilds/android Dockerイメージを使用します。典型的なワークフローには、チェックアウト、JDKのインストール、Gradleのキャッシング、ビルド、テストの実行が含まれます。iOSの場合は、Xcodeとコードサイニング設定を備えたmacOS Executorが必要です。初回接続時に、CircleCIはプロジェクトタイプを自動検出し、推奨設定で基本構成を生成します。
Flutterプロジェクトの場合、CircleCIはcircleci/flutter Orbを提供します。これには、LinuxおよびmacOS用のFlutter SDKがプリインストールされたExecutorが含まれます。Orbは両プラットフォームのビルド、pub-cacheのキャッシング、テストの実行をサポートします。セットアップは、Flutterのバージョンとビルドコマンドを指定するだけです。カスタムのFlutterまたはDartバージョンには、必要なSDKを備えたDockerイメージを使用できます。Flutter Orbは高度なオプションもサポートしています — たとえば、ビルド前のdart analyzeによるコード分析などです。
CircleCIのAndroid Orbは、build-and-test、deploy-to-play-storeなどの既成のJobを提供します。Orbは自動的に環境、キャッシング、署名を設定します。Orbを追加したら、SDKのバージョンとビルドコマンドを指定するだけです。
iOSビルドの場合、ExecutorはXcodeバージョンとともにmacosに設定されます。CircleCIはXcode 14、15、16のイメージを提供します。チェックアウト後、コードはxcodebuildを介してコンパイルされ、テストはシミュレーターで実行されます。コードサイニングはfastlane matchまたは手動の証明書インストールによって設定されます。
キャッシングはCircleCIのパフォーマンスにおける重要な要素です。キャッシュメカニズムは、キーを使用してワークフロー実行間でディレクトリを保存します。Gradleの場合は~/.gradle、CocoaPodsの場合はPods/、npm/SPMの場合はnode_modules/.buildがキャッシュされます。ロックファイルが変更されると、キャッシュは自動的に更新されます。CircleCIは個別のポリシーをサポートしています:save_cacheは遅延可能(when: always)ですが、restore_cacheは必須です。
並列処理とresource classを組み合わせることで、ビルドパフォーマンスを微調整できます。Resource classはコンテナのCPUとRAMを決定します:small(1 CPU、2 GB)、medium(2 CPU、4 GB)、medium+(3 CPU、5 GB)、large(4 CPU、8 GB)。Xcodeを使用したiOSビルドでは、medium以上のresource classのmacOS Executorを使用することをお勧めします — Swiftコードのコンパイルにはかなりのリソースが必要です。
並列処理はテストを複数のコンテナに分割し、実行時間を短縮します。たとえば:parallelism: 4は4つの並列コンテナでテストを実行します。CircleCIは自動的にテストファイルをコンテナ間で分散します。circleci tests globコマンドはテストリストを収集し、circleci tests splitはそれらを均等に分散します。
- restore_cache:
keys:
- v1-gradle-{{ checksum "build.gradle" }}
- v1-gradle-
- run: ./gradlew assembleDebug
- save_cache:
key: v1-gradle-{{ checksum "build.gradle" }}
paths:
- ~/.gradle/caches
- ~/.gradle/wrapper
buildとtestの2つのJobを持つAndroidプロジェクト向けの完全なCircleCI設定を見てみましょう。設定にはAndroid SDKを備えたDocker Executor、Gradleのキャッシング、並列テスト実行が含まれます。アーティファクトはダウンロード用に保存されます。build-and-testワークフローは、メインブランチへのプッシュのたびに両方のJobを実行します。
version: 2.1
orbs:
android: circleci/android@2.5.0
jobs:
build:
executor: android/default
steps:
- checkout
- android/restore-gradle-cache
- run: ./gradlew assembleRelease
- android/save-gradle-cache
- store_artifacts:
path: app/build/outputs/apk/release
- store_test_results:
path: app/build/reports/tests
test:
executor: android/default
parallelism: 4
steps:
- checkout
- android/restore-gradle-cache
- run:
command: |
cd app
./gradlew test
workflows:
version: 2
build-and-test:
jobs:
- build
- test
CircleCIと代替案の選択について — チームがGitHubを使用している場合、GitHub Actionsの方がシンプルな選択肢かもしれません。CircleCIは、柔軟な並列テスト実行、カスタムExecutor環境設定、詳細なビルド統計を必要とするチームに適しています。CircleCI Insightsは、パイプラインのパフォーマンスメトリクス(平均ビルド時間、トレンド、ボトルネック)を提供するダッシュボードを提供します。Insightsは長時間実行されるJobを特定し、最適化するのに役立ちます。CircleCI APIを使用すると、プログラムでパイプラインを管理し、ビルドをトリガーし、メトリクスを取得できます。
安全なシークレット管理のために、CircleCIはContexts — 組織レベルでの名前付き環境変数セット — をサポートしています。Contextsはロールベースのアクセスによって保護されています:特定のチームのみが特定のコンテキストを使用できます。たとえば、production-deployコンテキストにはApp Store Connectのキーが含まれており、リード開発者のみがアクセスできます。承認ゲートと組み合わせることで、包括的なCI/CDセキュリティシステムを形成します。
CircleCI Orb Registryには、さまざまなCI/CDタスク向けの数百の既成パッケージが含まれています。モバイル開発向けの主要なOrbには、circleci/android、circleci/ios、circleci/flutter、laurencerussell/firebase-app-distributionがあります。各Orbはバージョン管理され、ドキュメント化されています。Orbは公開(誰でも利用可能)または非公開(組織のみ)にできます。
Orbを使用すると、設定が5〜10分の1に削減されます。たとえば、circleci/android Orbは、プリインストールされたSDKとrestore-gradle-cache、save-gradle-cacheコマンドを備えたandroid/default Executorを提供します。circleci/ios Orbには、Xcodeを備えたExecutorとfastlaneを介したコードサイニングのコマンドが含まれています。Orbは簡単に組み合わせることができます:ビルド用にandroid Orb、通知用にslack Orbを追加します。
CircleCIにはテストレポートの組み込みサポートもあります。Store_test_resultsは、JUnit、XCTestなどの形式からテスト結果を自動的に解析して可視化します。モバイルプロジェクトの場合、これは失敗したテスト、実行時間のトレンド、ビルド安定性の履歴を一元表示し、コード品質の維持を簡素化します。
orbs:
ios: circleci/ios@2.0.0
jobs:
build-and-test:
executor: ios/default
steps:
- checkout
- ios/install-dependencies
- ios/build-and-test
カスタムOrbの公開はCircleCI CLIから利用できます。circleci orb createおよびcircleci orb publishコマンドでOrbをレジストリにアップロードします。これは組織内のCI/CDを標準化するのに役立ちます — 一度作成すれば、すべてのプロジェクトで使用できます。
よくある質問
CircleCIは無料プランを提供しており、1コンテナあたり月額6000分が含まれます。Performance Plan(月額$30)には10の並列Jobと14,000分が含まれます。Scale Planは、無制限の並列処理を備えたカスタム価格です。
Orbは、公式レジストリを通じて配布される再利用可能なYAML設定パッケージです。人気のツールやプラットフォーム向けの既成のjobs、commands、executorsが含まれています。
はい、CircleCIはXcode(バージョン14、15、16)がプリインストールされたmacOS Executorをサポートしています。iOS 17および18、watchOS、tvOSのイメージが利用可能です。コードサイニングはfastlane matchまたは手動で設定します。
Jobでparallelism: Nを指定すると — CircleCIはテストをN個のコンテナに分割します。circleci tests splitコマンドがテストを均等に分散します。テストは並列に実行され、コンテナ数に比例して総時間が短縮されます。
CircleCIはより柔軟なExecutor(Docker、macOS、Machine、Windows)、高度なOrbシステム、組み込みの並列テスト分割、詳細なビルドアーティファクトを提供します。GitHub ActionsはGitHub統合とシンプルさに優れています。
まとめ
ターンキー方式のモバイルアプリケーションを開発します
IT Sectrは2017年からスタートアップや企業向けにiOS・Androidアプリケーションを開発しています。私たちがご相談に乗り、最適なソリューションをご提案します。