メインコンテンツにスキップ

CapacitorとElectronアプリ用の継続的インテグレーション設定

CapacitorJSとElectronアプリ用の継続的インテグレーション設定をマスターする。パイプライン設定、署名、アーティファクト管理、Capgoライブアップデートを学びましょう。

マーティン・ドナディュー

マーティン・ドナディュー

コンテンツマーケター

CapacitorとElectronアプリ用の継続的インテグレーション設定

ハイブリッドアプリチームがビルドプロセスを超えている場合、通常はそのことを知ることができます。誰かがMacにログインし、Xcodeをクリックして、Androidアーティファクトをエクスポートし、Electronパッケージを手動で署名し、そしてアップロードされたビルドのブランチを思い出すために試行錯誤する人を探します。リリースは成功しますが、ただし、1人または2人の人がすべてのステップを心に留めておくことでしか成功しません。それがスケールすることはありません。そうした人々が忙しくなるとすぐに止まります。

適切な 継続的インテグレーション設定 脆弱な儀式を繰り返す可視化されたパイプラインに置き換えます。マーティン・フォラーウェラーのCI定義は、チームメンバーが少なくとも毎日共有コードベースに変更をマージし、自動ビルドによって各インテグレーションが検証されるため、エラーが迅速に表面化します。 フォラーウェラーのオリジナル継続的インテグレーションエッセイ Capacitor と Electron アプリでは、1 つのビルドが Web アセット、ネイティブラッパー、署名資格情報、ライブアップデートの公開を同じ実行でタッチするため、その規範はより重要です。

目次

CapacitorとElectronアプリのために、CIパイプラインが必要な理由

通常の開始点は、開発者がローカルでWebビルドを実行し、Capacitorを同期し、XcodeまたはAndroid Studioを開き、署名されたバイナリをエクスポートし、共有ドライブまたはチャットスレッドにパッケージを投入することです。最初のビルドが1台のマシンでしか動作しない、証明書が期限切れになることなど、最初の障害が発生すると、効率的と思われていたプロセスが崩壊します。

痛みは、速度だけではなく、繰り返し性です

Fowlerの基準は、プロセスが崩壊する理由を説明しています。信頼できるCI設定では、すべてのファイルをバージョン管理下に置き、ビルドを自動化し、ビルドを自己テスト化し、メインラインにプッシュされるたびにトリガーし、直ちに破損したビルドを修正し、ビルドを高速化します。 FowlerのCIガイドラインそれは、リリース作業を視覚化し、面白く、間違いを犯すのが難しいものにすることです。

実用的なルール: リリースが、誰かがローカルコマンドを思い出す必要がある場合、それはまだパイプラインではありません。

Capacitorチームは、3つの場所で破損を感じます。ネイティブプロジェクトファイルはWebアプリから離れ、署名資格は部族の知識になり、更新パスは汚れやすくなります。Electronチームは、パッケージングがローカルOSの状態、ネイティブ依存関係、または開発者のアドホック署名設定に依存する壁に当たることがあります。

実際のパイプラインは、共有された真実の元となる共有ソースを提供します。同じチェックを実行し、クリーンなランナーで実行し、変更されたものを示すアーティファクトとログを残します。 ‘私たちはそれを作りました’ と ‘私たちは確かにどのように作ったかを証明することができます’ という違いです。

ライブアップデートワークフローは自然にここに収まります

パイプラインが再現可能になるので、ライブアップデートの公開はリリースの同一の規範になります。

hybridチームにとって、それは重要です。ウェブアセット、JavaScript修正、構成変更は、フルアプリストアサイクルを待たずに実行できます。構造化されたCIフローにより、1度だけビルドし、1度だけ検証し、同じ出力を正しいチャネルにプッシュし、追跡性を維持できます。 CapgoのCI利点の概要 CIプロバイダーの選択はhybridアプリの場合に、純ウェブワークの場合よりも重要です。Linuxランナーしか必要としないパイプラインは、

macOSのiOS署名、DockerのElectronパッケージング、ログに漏れないように秘密を保持する必要があるパイプラインは、より厳密なランナーコントロール、明確な隔離、安全な許可モデルが必要です。

hybridアプリのCIプロバイダーの選択 npm install hybridアプリの場合、プロバイダーの選択は純ウェブワークの場合よりも重要です。Linuxランナーしか必要としないパイプラインは、macOSのiOS署名、DockerのElectronパッケージング、ログに漏れないように秘密を保持する必要があるパイプラインは、より厳密なランナーコントロール、明確な隔離、安全な許可モデルが必要です。

A good provider also has to fit the release path, not just the build step. Capacitor and Electron teams often end up dealing with native app signing, artifact promotion, and live update publishing in the same pipeline, so the CI system has to keep those steps separate without making the workflow hard to audit. If the runner model is weak, signing material gets copied around too freely. If artifact handling is sloppy, you lose confidence in what was shipped. That is the part generic CI guides usually skip.

GitHub Actions はすでに GitHub で活動しているチームに適している

GitHub Actions is the lowest-friction choice if your source already lives in GitHub. Workflows sit beside the app code, which makes review and ownership straightforward, and the platform supports Linux, Windows, and macOS runners in the source-control and runner model described in CI tool comparisons GitHub ActionsランナーモデルとSCMの結合. For hybrid teams, that matters because iOS builds need macOS, while Electron packaging often fits better on Linux or Windows jobs that can stay containerized. It is also easier to keep signing secrets scoped to the workflow that needs them.

GitHub のアクションは、すべてのジョブを同じように扱う場合に、ノイズが増える可能性があります。GitHub を既に使用しているチームにとっては、code のレビュー、ブランチ保護、リリース所有権のために機能します。ビルド、レジストリ、デプロイ制御が別の場所にあり、CI システムがリリースプロセスをより多く管理したい場合は、魅力が低くなります。多くのモバイルチームにとっては、コンビネンスが勝ちます。ワークフロー ファイルと code のレビューは同じ場所で発生します。

リポジトリと配信が同居する場合、GitLab CI は強力です。

GitLab CI は、リポジトリ、パイプライン、環境の追跡が 1 つの場所で行いたいチームに適しています。共有または自社管理のランナーをサポートし、プラットフォーム モデルにデプロイ ステージを含むため、ビルド、ステージング、リリース オーケストレーションを同じチームが所有する場合に実用的なのは、GitLab CI のプラットフォーム モデルです。 GitLab CI プラットフォーム モデルその設定は、署名、パッケージング、リリース承認を散在することなく、別のシステムに散らばる決定を分離する必要がある場合に役立ちます。

組織的なトレードオフが伴います。ソース コントロールとレジストリ ストレージを既に GitLab で使用しているチームにとって、パイプラインは統合され、監査が容易になります。そうでない場合は、セットアップコストがコンビネンスを上回る可能性があり、macOS ランナーを iOS の署名に使用したり、ライブ アップデートの公開を同じリリース プロセスと同期したりする場合に特にそうです。GitLab パターンをコンクリートにしたいチームにとっては Capgo の GitLab ビルドとリリース ガイド は、ビルドおよびリリースステップがパイプラインに手動チェックリストとして変換されないようにつながる方法を示すため、便利なリファレンスです。

CircleCIは、ホストされた柔軟性を求めるチーム向けです。

CircleCIは、パッケージングおよびビルド自動化の強力なエコシステムが存在する場合、チームが管理された実行を望む場合に適しています。クラウドエクゼキュータとセルフホストオプションにより、GitHub、GitLab、Bitbucketリポジトリを横断する柔軟性が得られ、クライアントまたはコードベースを移動するハイブリッドチームにとって、移行性が高まります。 CircleCIの実行モデル. CapacitorおよびElectronの利点は、プロバイダーの機能を使用してエクゼキュータの選択とジョブの分離を実現できるビルドロジックのコンパクト化です。

欠点は、複雑さが隠される可能性があることです。macOS署名、アーティファクトのプロモーション、および更新の公開を追加すると、依然として厳格なシークレットの管理と明確なジョブの境界が必要です。CircleCIは、ホストされたランナーを望み、プロバイダーの特定のワークフロー モデルを学習することに対して多少の理解を求めるチーム向けです。

基準 GitHubアクション GitLab CI CircleCI
Capacitor/Electronビルドサポート GitHub-ファーストチーム向け、macOS、Linux、Windowsランナーをサポート GitLab上で共有または自社管理のランナーを使用しているチーム向けに強力 複数のSCMに対応したホストサポート
設定の容易さ 既存のGitHubにcodeが既に存在する場合、低摩擦 プラットフォームとの緊密な統合はあるが、GitLab全体のスタックが存在する場合に最適 柔軟で、プロバイダーの特定の設定を学習する必要がある
無料枠の制限 GitLab上の公開GitHubリポジトリに最適、特に小規模プロジェクト GitLabが既存のシステムレコードの場合、最も価値のある選択 管理実行のために選択されることが多い、最小限の設定コストではなく

ハイブリッドアプリケーションを構築するGitHubアクション、GitLab CI、CircleCIの機能を比較するグラフ

正しい選択肢は、codeがすでに存在し、最も頻繁に必要なランナー種類によって決まることが多い。iOSのshipping圧力のあるCapacitorアプリは、macOSへのアクセスが容易になる。予測可能なパッケージングのElectron重視の製品は、Dockerフレンドリーなジョブとアーティファクトハンドリングを優先する。同一パイプラインからライブアップデートを公開する場合、リリースパーミッションと署名ステップを簡単に分離できるプロバイダを選択する

A useful way to compare them is to ask one question per platform. Can it run the native jobs you need without awkward workarounds, can it keep secrets controlled, and can your team read the config without opening a second wiki page?

パイプライン構成を構築する

A hybrid pipeline works best when cheap checks fail first and expensive runners stay out of the way until they are needed. Linting, unit tests, and web builds should finish before macOS starts compiling iOS or before Electron packaging produces a signed artifact. That order keeps broken changes from burning runner time and matches the CI pattern of fast checks early, heavier suites later, and building once before promoting the same artifact through later stages JetBrains CI/CDのベストプラクティス.

A GitHub Actions形状が実際に持ち上がる

A practical layout stays simple and predictable:

  1. チェックアウト
  2. 依存関係をインストール
  3. lintとユニットテスト
  4. ウェブアセットをビルド
  5. ネイティブプロジェクトを同期
  6. プラットフォームアーティファクトをパッケージ化
  7. アップロードアーティファクト

そのシーケンスは、費用がかかるネイティブジョブからcodeを遠ざけます。また、キャッシュの動作をより論理的に理解できるように、npm、Gradle、パッケージマネージャーのキャッシュは、依存関係グラフがすでに有効になっている場合にのみ重要になります。

コンパクトなGitHubアクションズジョブは、プロジェクトの詳細が変化しても、通常は次の構造をとります。

  • インストールするのは一度: ノードとパッケージキャッシュを復元する前に npm ci.
  • 早期に検証する: ネイティブビルド前にlintとユニットテストを実行する。
  • ウェブ出力のビルド: CapacitorとElectronが共有するアセットバンドルを作成する。
  • プラットフォームジョブに分岐する: iOS、Android、Electronパッケージングは、共有ステップが成功した後のみ実行されるようにする。
  • アーティファクトを公開する: 個別に署名された出力、ログ、メタデータをアップロードします。

共有チェックが通過するまで、ネイティブの作業を遅らせることで、失敗のコストが安くなります。

モバイルとデスクトップの両方のターゲットを出荷するチームにとって、その割合は通常、管理可能なパイプラインとノイズの多いパイプラインを分離します。 Xcode の失敗は、macOS の分数と開発者の注意を消費するため、非常に高価です。一方、Lint ジョブの失敗はほとんど無料です。すべてのジョブを 1 つの大きなジョブに保つと、ビルドが実際の署名、更新の公開、リリースの許可を処理するようになると、時とともに劣化します。

GitLab と CircleCI は同じ論理を反映できます。

GitLab CI は段階的なジョブにマップされ、CircleCI も同様です。シンタックスは異なりますが、ポイントは、同じパイプラインの形をすべての 3 つのツールで維持することです。1 つのソース ビルドはダウンストリーム ジョブにフィードされ、各ネイティブ パッケージング ステップは同じ code 状態を消費するのではなく、スクラッチから再構築するのではなく、同じ code 状態を消費します。

Docker を使用して Electron パッケージングを行う場合、環境を再現可能にするためにコンテナ イメージを固定します。iOS をビルドする場合、macOS ジョブを分離し、証明書ステップをコンパイルステップから分離して、失敗モードを明確にします。Android ビルドを実行する場合、Gradle キャッシュを安定させ、異なるパッケージ インストールを同一のシェル ステップに混ぜないようにします。

Capacitor に特化したその設定のバージョンについては Capgo のパイプライン設定ガイド は、有用なパートナーです。

GitHub Actions を使用して、Capacitor と Electron アプリケーションの 5 つのステップの連続的な統合パイプラインを示す図

Code サインとアーティファクト管理

サインは多くの良いパイプラインが失敗する場所です。ビルドが成功し、パッケージが存在し、リリースが失敗するのは、証明書が欠けている、キーチェーンがリリースされていない、またはアップロードされたアーティファクトが間違っているためです。解決策は、サインをパッケージングの副産物としてではなく、制御されたステージとして扱うことです。

iOS、Android、および Electron は異なるハンドリングが必要です。

iOS signing usually means certificates, provisioning profiles, and macOS runner state. Android needs keystore management and whatever your Play release path requires. Electron adds code signing certificates and, on macOS, notarization for distributable desktop builds. Each of those should be handled by the pipeline, not by a human copying files onto a runner.

iOS の場合、チームは多くの場合、fastlane match または macOS ランナーに証明書を手動でインストールします。重要なのは一貫性であり、特定のヘルパーではなくです。開発者がインタラクティブにキーチェーンにアクセスするワークフローに依存している場合、最悪のタイミングで破損することになります。

Android の場合、キーストアをリポジトリ外に保ち、ビルド時にシークレットとしてインジェクトしてください。Electron の場合、パッケージング ステップに近くしてサイン ステップを実行してください。そうしないと、間違ったアーティファクトを間違ってサインすることになります。

実用的なルール: リリースするアーティファクトの正確なものをサインし、サインしたアーティファクトを変更しないでください。

アーティファクト管理は追跡可能性を保つべきです

アーティファクト管理は単にストレージだけではありません。どのバイナリがどのコミットから来て、どのチャネルに送られたかを知ることができるようにすることが重要です。それがなぜフォウラーの古いガイドラインであるバージョン情報の可視化が、エンタープライズCIシステムでまだ重要であるかを理解することができるからです。ビルドID、デプロイメントメタデータ、リリーストレースビリティは、後でサポート質問に答えるためにチームに役立ちます。 フォウラーによるバージョン情報の可視化.

ロールバック、監査、サポートの再現のために署名された出力を長く保持する必要がありますが、古いリリースを無視しておくのは避けるべきです。クリーンな名前付けスキーム、コミットSHA、プラットフォームタグは、CIからインスペクトできるようにするためにアップロードステップを明示的にする必要があります。

Capgoの 証明書管理ガイドライン は、ネイティブ署名と更新の公開に共通する規範です。資格情報は安全に保存し、きれいにローテーションし、ログに反映させないようにする必要があります。

Capgo Live Updatesをパイプラインに自動化する

ビルドが安定したら、ライブアップデートの公開は、最も時間を節約できる部分です。ハイブリッドチームは、ストアのレビューを待たずにコピーを修正したり、Webのバグ修正を配信したり、フラグを切り替えたりする必要がありません。CIドライブのCapgoの公開ステップは、ネイティブのリリースプロセスをボトルネックにしないようにして、更新パスをビルドの制御と同じものに保つことができます。

チャンネルベースの公開はリリースを制御する

最も綺麗なパターンは、 ステージング 開発ブランチへのマージ時に プロダクション タグ付きリリースのみに公開することです。テスターは予測可能なチャンネルに留まり、プロダクションへのプッシュは意図的でレビュー可能になります。PipelineはCapgo APIキーを秘密として保存し、CLIをインストールし、最新のWebアセットをバンドルし、ジョブの一部としてアップデートを公開する必要があります。

実践では、単純なポリシーがうまく機能します:

  • 開発ブランチ: ステージングチャンネルにプッシュする
  • リリースタグ: プロダクションチャンネルにプッシュする
  • ホットフィックスブランチ: 確認が完了するまで、ロールアウトの意向を保証するために、独自の環境で保管してください。

CIとライブ更新は相互に補完し合うため、パイプラインはすでにビルドしているコミットを知っているためです。Capgoの公開ステップで、そのメタデータを使用して、更新履歴を読みやすく保ち、特に、特定のネイティブビルドに紐付いたウェブペイロードを特定する必要がある場合に、特にそうです。

差分更新とロールバックの動作は重要です。

Capgoの更新モデルは、変更されたファイルのみを送信し、破損した場合に安全にロールバックすることを目的としており、CI駆動型リリースフローに自然に合致するため、頻繁にリリースするチームにとっては、パイプラインがアセットを配信するだけでなく、そのアセットがアウディエンスやチャンネルを横断する方法を決定することも、より有用な制御となります。

https://capgo.appからスクリーンショット

主な間違いは、公開ステップを独立したタスクとして扱うことです。通常、これはパイプラインの目的を無効化し、トレース性を弱めることになります。CIに組み込んで、ブランチまたはタグのルールでゲートし、リリースメタデータをビルド出力に保管して、後でサポートが追跡できるようにしてください。

GitHubの正確なアクションズパターンは CapgoのGitHubアクションズ統合ガイド は正しい参照点です。

CIパイプラインを実際の脅威から保護する方法

A pipeline that builds successfully can still be unsafe. Government guidance from NSA and CISA treats CI/CD security as a first-class problem, with recommendations to integrate security scanning, keep audit logs, sign CI/CD configuration, use SBOM and SCA, protect secrets so they never pass in plaintext, and build for high availability with disaster-recovery testing NSA and CISA CI/CD hardening guidance. That framing is useful because it matches what goes wrong in real teams, leaked tokens, tampered configs, and overly broad deployment access.

Hardening the pipeline is different from hardening the app

A lot of guides talk about dependency scans, but ignore the CI system itself. That’s a mistake. If a compromised runner can print secrets, alter a signing step, or swap out an artifact before upload, the application code can be perfectly clean and still ship unsafe. Secure pipeline design means treating the runner, config, and credentials as production assets.

The practical controls are straightforward:

  • CI/CD設定ファイルを署名する 不正なワークフロー編集を明確にする
  • ログからシークレットを除外する シェル出力でクレデンシャルを明示的に渡さない
  • 展開権限を制限する 正しいブランチまたはタグのみがプロダクションに到達するようにする
  • 実行履歴の検査: __CAPGO_KEEP_0__で再構築できるログの詳細を十分に保存する。
  • ビルドイメージと依存関係のスキャン: 特にElectronジョブがコンテナ化されたパッケージングを使用する場合。

認証と環境隔離には規律が必要です。

OIDCベースのクラウド認証は、長期間の資格情報を使用する多くの現代のCI設定では、盗まれたトークンの爆発半径を狭めることができます。分離された環境アカウントと制限された生産アクセスも、誤ってプロモーションするリスクを減らします。 これらのパターンは、モバイルリリースパイプラインが時間の経過とともに意図しないほど多くの権限を蓄積する傾向があるため、ハイブリッドチームにとって特によく合致します。

CIパイプラインのセキュリティを確保するための4つのベストプラクティスを詳細に示すインフォグラフィック。

“実行中のパイプライン”は、簡単に改ざんできる場合でも、リスクとなります。セキュアなCIは、配布するアプリと同様の設計作業が必要であり、規制環境では必須です。

CIパイプラインの一般的なエラーと修正方法

Most CI failures in Capacitor and Electron projects are symptoms of a few repeat offenders. If npm install is flaky, the runner environment is usually drifting. If Xcode times out, the job is often doing too much before the native build even starts. If Gradle runs out of memory, the packaging step is probably trying to do too much in one executor.

症状に基づいて診断するのではなく、ツール名に基づいて

不連続的な依存関係のインストール 通常、キャッシュの不整合やアンストेबルなロックファイルのワークフローが原因です。修正するには、クリーンインストールコマンドに依存し、パッケージマネージャーのバージョンを固定し、キャッシュの復元と実際のインストールステップを分離してください。

Xcode ビルドエラー よくはランナー設定、シミュレーターの実行環境、または証明書の状態が原因です。macOS ジョブを環境検証から始め、署名ステップを分離して、コンパイル時または認証時でエラーが発生するかを判断できます。

Gradle メモリ問題 Android と Web タスクが同じジョブを共有する場合によく発生します。ジョブのオーバーラップを減らし、Android ビルドステージを集中させ、同じステップ内に無関係なシェルコマンドを埋め込まないようにしてください。

Electron パッケージングが破損する 通常、ネイティブモジュールの不一致またはパッケージング環境内にシステム依存関係が欠けていることが原因です。ビルドコンテナを固定し、ネイティブ依存関係のインストールを確認する前にパッケージングし、署名後にアーティファクトを再構築しないようにしてください。

迅速な修正は、英雄的なデバッグよりも優れています。

Capgo の公開エラーが表示された場合、最初に確認するのは、パイプラインが送信しているバンドルバージョンとチャンネル状態がパイプラインが認識しているものと一致しているかどうかです。マッチしないメタデータは、自動化されたライブアップデートフローにおける混乱の原因です。さらに、公開ステップをパイプラインの最後の方に置き、ビルドが最終アセットを生成した後で、部分的な出力をアップロードしないようにしてください。

時間を節約するには、以下の習慣を守りましょう:

  • 早く失敗する: Lint とユニットテストをネイティブパッケージングよりも優先してください。
  • 安全でなければならない場合に並列化: iOS、Android、Electronジョブは共有Webビルドに待たずに実行できる。
  • アーティファクトを表示する: 出力が確認できない場合、リリースを信頼できない。
  • 各ジョブをトリミング: 1つのジョブは1つのことをうまく行うようにする。

If your hybrid app pipeline is still held together by manual signing, ad-hoc uploads, and a few people who know the undocumented steps, it’s time to fix the process instead of just the builds. Capgo gives Capacitor and Electron teams a way to automate signed live updates, route releases through channels, and keep traceability inside the same workflow. Visit Capgoは__CAPGO_KEEP_1__とElectronチームに、署名されたライブアップデートを自動化、リリースをチャネルを通じてルーティング、同じワークフロー内でトレース性を維持する方法を与える。 https://__CAPGO_KEEP_0__

Capacitor アプリのリアルタイム更新

ウェブ層のバグが実行中の場合、Capgo を使用して修正を配信し、App Storeの承認待ちの日数を待たずに修正を配信する。ユーザーはバックグラウンドで更新を受け取り、ネイティブの変更は通常のレビュー経路に残る。

今すぐ始めましょう

ブログの最新記事

Capgo は、プロフェッショナルなモバイルアプリを作成するために必要な最良の洞察を提供します。