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

Capacitor がプラットフォームの違いに対応する方法

iOSとAndroidの単一のコードベースで、モバイルアプリ開発におけるプラットフォーム間の差異を効果的に管理する方法を学びましょう。

Capacitor によるプラットフォーム差異への対応 Capgo ブログ用イラスト

Capacitor プラットフォーム固有の違いに対応しつつ、同じコードベースでiOS/Android向けアプリをビルドできるよう開発者を支援します。ネイティブ機能の統合を簡素化し、各プラットフォームのガイドラインへの準拠を確保し、パフォーマンスを最適化します。主なポイント:

  • プラットフォーム検出: 使用する Capacitor.getPlatform() プラットフォーム固有のcodeを適用するため。
  • 組み込みプラグイン:カメラ、ストレージ、位置情報などの機能向けの統一API。
  • カスタムプラグイン:独自の要件に合わせてネイティブのcodeを追加。
  • UIの調整:iOSのデザインルール(例: SF Symbols、角丸ボタン)やAndroid(例: Material Icons、左揃えのボタン)に従う。
  • 設定:設定を調整します capacitor.config.json 両方のプラットフォームで。
  • Live Updates を利用した Capgo: App Storeの審査を待たずに即座にアップデートを配信し、24時間以内に最大95%のユーザー採用率を実現。

簡単比較

機能 iOSと Androidでは
ナビゲーション ボトムタブバー、戻るボタンは左 トップナビゲーションドロワー、ボトムナビ
タイポグラフィ San Franciscoフォント Robotoフォント
プラグイン(例:カメラ) AVFoundation Camera2 API
ビルド出力 .ipa ファイル .aab または .apk ファイル

CapacitorはWeb開発とネイティブアプリ開発のギャップを埋め、プラットフォーム固有の最適化を維持しながらクロスプラットフォームアプリの作成を容易にします。

クロスプラットフォーム開発:CapacitorJSと…を探る

Capacitor Capacitor はプラットフォームのCodeをどのように処理するか

Capacitor フレームワーク ドキュメントサイト

Capacitorは、プラットフォーム固有のcodeを管理するためのツールを提供し、開発者が単一のAPIでiOSとAndroid向けにカスタマイズされた体験を作成できるようにします。

Code でのプラットフォーム検知

Capacitorの組み込みプラットフォームAPIにより、現在のプラットフォームの検出は簡単です。 Capacitor.getPlatform() メソッドは実行環境を識別し、条件付きロジックの適用を容易にします:

import { Capacitor } from '@capacitor/core';

const platform = Capacitor.getPlatform();
if (platform === 'ios') {
  // Code specific to iOS
} else if (platform === 'android') {
  // Code specific to Android
}

このアプローチは、次のような機能に特に便利です 生体認証、iOSでは Face ID 、Androidでは指紋認証に依存します。プラットフォーム検出と併せて、Capacitorの組み込みプラグインがネイティブ統合を簡素化します。

組み込みのプラットフォーム機能

Capacitorには、プラットフォーム固有の差異をシームレスに処理するコアプラグインのセットが同梱されています。これらのプラグインはネイティブ実装の複雑さを管理しつつ、一貫したJavaScriptインターフェースを提供します:

プラグイン iOSでの実装 Androidでの実装
カメラ AVFoundation Camera2 API
ストレージ UserDefaults SharedPreferences
位置情報 CoreLocation LocationManager

各プラグインは自動的にプラットフォームのネイティブAPIを使用するため、スムーズなパフォーマンスと機能性を確保できます。

カスタムプラットフォームプラグインの作成

組み込みプラグインで要件を満たせない場合は、特定のネイティブAPIにアクセスするためのカスタムプラグインを作成できます。手順は以下の通りです:

  1. プラグインの定義

    @Plugin({
      name: 'CustomFeature',
      platforms: ['ios', 'android']
    })
  2. ネイティブ Code の追加

    @PluginMethod()
    async customFunction(): Promise<void> {
      if (Capacitor.getPlatform() === 'ios') {
        // Add iOS-specific code
      } else {
        // Add Android-specific code
      }
    }
  3. プラットフォームハンドラーの実装

    • iOS (Swift):

      @objc func customFunction(_ call: CAPPluginCall) {
        // Add native iOS functionality
      }
    • Android (Kotlin):

      @PluginMethod
      fun customFunction(call: PluginCall) {
        // Add native Android functionality
      }

カスタムプラグインを使えば、API を一貫性があり使いやすい状態に保ちながら、ネイティブ機能にアクセスできます。開発プロセスを複雑にせず、パフォーマンスと機能性を確保できます。

プラットフォーム別のUIガイドライン

iOS と Android のデザインルール

iOSとAndroid向けに設計する際は、各プラットフォームのネイティブデザインパターンに従うことが重要です。ナビゲーション、タイポグラフィ、ボタン、ヘッダー、アイコンなど、ユーザーの期待はプラットフォームごとに異なります。主な違いは次のとおりです:

デザイン要素 iOSと Androidでは
ナビゲーション ボトムタブバー、左側の戻るボタン 上部ナビゲーションドロワー、ボトムナビゲーション
タイポグラフィ San Franciscoフォント Robotoフォント
ボタン 角丸長方形、中央揃えテキスト Material Designボタン、左揃えテキスト
ヘッダー 大きなタイトル、中央揃え アプリバー、左揃え
アイコン SF Symbols Material Icons

クロスプラットフォームのデザイン標準

各プラットフォームには独自のルールがありますが、両方で一貫したブランドアイデンティティを維持することが重要です。一貫性を確保するための方法をご紹介します。

const sharedStyles = {
  primaryColor: '#007AFF', // iOS blue
  androidPrimaryColor: '#6200EE', // Material Design purple
  borderRadius: Capacitor.getPlatform() === 'ios' ? '10px' : '4px'
};

:root {
  --app-header-height: var(--platform-header-height, 56px);
  --app-safe-area-top: var(--platform-safe-area-top, 0px);
}

Capacitor を使用すると、プラットフォーム固有の UI コンポーネントを統合しながら、機能の一貫性を保つことができます。ダークモードやダイナミックタイプなどのシステム全体の設定の管理にも役立ちます。プロセスを完了するには、プラットフォーム固有のビルド設定がこれらのガイドラインと整合していることを確認してください。

プラットフォームのセットアップと設定

プラットフォームの code を管理した後、アプリが iOS と Android の両方でスムーズに動作するように、適切な設定が不可欠です。

のプラットフォーム設定 capacitor.config.json

以下の capacitor.config.json ファイルで、重要なプラットフォーム固有の設定を定義します。

{
  "appId": "com.example.app",
  "appName": "MyApp",
  "ios": {
    "contentInset": "always",
    "backgroundColor": "#ffffff",
    "scheme": "myapp",
    "preferredContentMode": "mobile"
  },
  "android": {
    "backgroundColor": "#FFFFFF",
    "allowMixedContent": true,
    "captureInput": true,
    "webContentsDebuggingEnabled": true
  }
}

検討すべき設定オプションをいくつかご紹介します。

オプション iOSと Androidでは
ディープリンク scheme プロパティ androidScheme プロパティ
ステータスバー statusBar.style statusBar.backgroundColor
キーボード keyboard.resize keyboard.resize, keyboard.style
スプラッシュスクリーン splashScreen.launchShowDuration splashScreen.layoutName

ランタイム設定が完了したら、各プラットフォームのパフォーマンスを向上させるためにビルド設定を調整しましょう。

プラットフォーム別のビルド設定

iOSとAndroid向けにアプリを最適化するため、ビルド設定を微調整します。

iOSの場合は、 Info.plist ファイル内で参照します:

<key>NSCameraUsageDescription</key>
<string>Required for document scanning</string>
<key>NSLocationWhenInUseUsageDescription</key>
<string>Required for store locator</string>

Androidの場合は、次を変更してください: android/app/build.gradle:

android {
    defaultConfig {
        minSdkVersion 21
        targetSdkVersion 33
        versionCode 1
        versionName "1.0"
    }
    buildTypes {
        release {
            minifyEnabled true
            proguardFiles getDefaultProguardFile('proguard-android.txt')
        }
    }
}

ビルド時の主な注意点は次のとおりです:

項目 iOSと Androidでは
権限 にエントリを追加 Info.plist で定義 AndroidManifest.xml
アイコン 20pxから1024pxまでのサイズ mdpiからxxxhdpiまでの密度
スプラッシュスクリーン Storyboardベース Layout XMLベース
ビルド出力 .ipa ファイル .aab または .apk ファイル

アプリの更新 Capgo

Capgo Live Update ダッシュボードインターフェース

維持 Capacitor アプリ iOS と Android の両方で効率的に最新状態を維持することは重要です。Capgo は、両プラットフォームのガイドラインに準拠した live update システムを提供します。

Capgo の機能

機能 説明 プラットフォームのメリット
Live Update App Storeの審査なしで即時デプロイ iOSとAndroidで統一された体験を実現
エンドツーエンド暗号化 アップデート配信の安全性を確保 両プラットフォームのセキュリティ要件に準拠
チャネルシステム 特定のユーザー層をターゲットに設定 ベータテストや段階的なロールアウトに対応
差分アップデート 変更されたコンテンツのみをダウンロード 帯域幅を節約し、アップデートを高速化

Capgo は2,350万件のアップデートを配信し、24時間以内のアクティブユーザー更新率95%を達成しました [1]. これらの機能により、 アップデート管理 プラットフォーム間での動作がよりスムーズかつ効率的になります。

Capgo プラットフォーム管理

Capgo のチャネルシステムにより、アップデート管理が容易になります。開発者は、iOS固有の機能をベータユーザーでテストしたり、Androidのアップデートを段階的にリリースしたり、パフォーマンスメトリクスをシームレスに追跡したりできます。

このプラットフォームは、AppleとGoogleのOTAアップデート要件に準拠しています。 [1].

現在、750の本番アプリが Capgo を利用しており、グローバルで82%のアップデート成功率を維持しています。 [1]. CI/CDとの統合によりデプロイが簡素化され、ロールバック機能を使えば、問題が発生した際に開発者は即座に以前のバージョンに戻せます。リアルタイム分析により、アップデートのパフォーマンスに関するインサイトが得られ、アプリの安定性維持に役立ちます。

まとめ

プラットフォーム管理のメリット

Capacitor でプラットフォーム間の差異を効果的に管理することで、クロスプラットフォーム開発が強化されます。プラットフォーム検出と設定のための組み込みツールにより、各プラットフォーム固有の設計基準や機能を尊重しながら、iOSとAndroidの両方でスムーズな体験を提供できます。

適切なプラットフォーム管理に注力することで、開発チームはより迅速にアップデートをリリースし、ユーザー満足度を向上させることができます。Capgo のようなツールは、一貫したプラットフォーム対応が高いアップデート成功率と優れたユーザー体験につながることを示しています。 [1].

「私たちはアジャイル開発を実践しており、ユーザーへ継続的に届けるうえで @Capgo は極めて重要です!」
– Rodrigo Mantica [1]

これらの知見は、実用的な改善を行う際の指針となります。

次のステップ

これらのメリットを最大限に引き出すには、以下の戦略の導入を検討してください:

アクションアイテム メリット
プラットフォーム検知の有効化 iOSとAndroidの要件に自動調整
Live Updatesの導入 緊急修正時のApp Storeの遅延を回避
アナリティクスの設定 各プラットフォームのパフォーマンス指標を追跡
ロールバック対応を有効化 プラットフォーム固有の問題を迅速に解決

ワークフローの改善を目指す開発者には、Capgo のようなツールがプロセスを簡素化します。エンドツーエンド暗号化や CI/CD 統合などの機能により、チームは一貫性を保ちながら効率的にアップデートをデプロイできます。

プラットフォーム管理の成功は、適切なツールの活用とプラットフォーム固有のガイドラインの遵守に依存します。堅牢な検出と管理戦略に焦点を当てることで、開発者は iOS と Android の両方でアプリがシームレスに動作することを確保できます。

「Capacitor がプラットフォームの違いをどう扱うか」の続きから

使用している場合 Capacitor がプラットフォームの違いに対応する方法 ネイティブメディアとインターフェースの挙動を計画するには、次と連携させてください @capgo/capacitor-live-activities の使用 @capgo/capacitor-live-activities の使用におけるネイティブ機能については、 @capgo/capacitor-live-activities @capgo/capacitor-live-activities の実装の詳細については、 @capgo/capacitor-video-playerの使用方法 @capgo/capacitor-video-player の使い方におけるネイティブ機能については、 @capgo/capacitor-video-player @capgo/capacitor-video-player の実装の詳細、および @capgo/capacitor-native-navigation の活用 @capgo/capacitor-native-navigation. の使い方におけるネイティブ機能については

Capacitor アプリ向けの Live Updates

Web レイヤーのバグが本番で発生したら、App Store の審査を何日も待たずに Capgo で修正を配信しましょう。ネイティブの変更は通常の審査フローに残したまま、ユーザーはバックグラウンドでアップデートを受け取れます。

最新のブログ記事

Capgoは、真にプロフェッショナルなモバイルアプリを作るために必要な最高のインサイトを提供します。