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

Capacitor プラグインに依存関係を追加する方法

実践的な手順とベストプラクティスで、Capacitor プラグインのプラットフォーム横断の依存関係管理を効率化する方法を学びましょう。

Capacitor Plugins での依存関係の追加方法 Capgo blog illustration

依存関係の追加 Capacitor プラグインへの依存関係の追加は複雑に感じられるかもしれませんが、手順を明確に分ければ簡単になります。以下に重要なポイントをまとめました:

  1. ツールの理解:

    • JavaScript: 使用する npm 依存関係を管理するために。
    • iOSと: 使用する CocoaPods または Swift Package Manager (SPM)。
    • Android: 使用する Gradle 依存関係の管理に。
  2. 開発環境をセットアップする:

  3. まず、 Capacitor プラグインプロジェクトを:

    • 使用する npm init @capacitor/plugin 作成して、新しいプラグインを構築します。
  4. JavaScript の依存関係を追加します:

    • 使用する npm install 本番環境および開発環境用の依存関係として。
    • アップデート package.json 次のようなpeer dependenciesを含めるには: @capacitor/core.
  5. プラットフォーム固有の依存関係の管理:

    • iOSとCocoaPodsまたはSPMの設定(以下のライブラリなど): Alamofire または SwiftyJSON.
    • AndroidGradleを使用して、GsonやAppCompatなどの依存関係を追加します。
  6. パフォーマンスの最適化:

    • バージョンを固定し、依存関係を監査して競合を解決することで、安定性を確保します。
  7. デバッグには、 Capgo Live Updates用:

    • App Storeの審査なしで、即座にアップデートを配信。

ツールの比較:

プラットフォーム ツール 依存関係の例
JavaScript npm npm install lodash --save
iOSと CocoaPods/SPM pod 'Alamofire', '~> 5.6.4'
Android Gradle implementation 'com.google.code.gson:gson:2.10.1'

なぜ重要か: 依存関係を効果的に管理することで、プラグインがプラットフォーム間でシームレスに動作し、時間を節約でき、エラーも回避できます。それでは手順を詳しく見ていきましょう。

〜の作成方法 Capacitor iOS/Android向けプラグイン

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

開発環境のセットアップ

必要なツールを揃えて環境を整えましょう。 Capacitor プラグイン 依存関係を効果的に扱いましょう。

必要な開発ツール

必要なツールは次のとおりです:

ツール バージョン 目的
Node.js 16.0.0+ JavaScript実行環境
npm 8.0.0+ パッケージ管理
iOSプロファイリング 14.0+ iOS開発(Macのみ)
デバッグ Electric Eel+ Android開発
CocoaPods 1.11.0+ iOSの依存関係管理
JDK 11+ Androidビルドツール

新規プラグインの作成

Capacitor CLI を使用して、プラグインプロジェクトを開始します。これには、プラットフォームのセットアップや、リバースドメイン形式(例: com.mycompany.plugin):

  1. 次のコマンドを実行してください:
    npm init @capacitor/plugin
  2. ターゲットとなるプラットフォーム(iOS/Android)を選択します。
  3. プラグインにリバースドメイン形式の名前を割り当てます。

プロジェクトのセットアップ手順

  1. アップデート package.json

    以下の内容を含めるように package.json を修正してください:

    {
      "capacitor": {
        "ios": {
          "src": "ios"
        },
        "android": {
          "src": "android"
        }
      },
      "peerDependencies": {
        "@capacitor/core": "^5.0.0"
      }
    }
  2. プラットフォーム別の設定

    • 以下の iOSと、Podfileに以下が含まれていることを確認してください:

      platform :ios, '13.0'
      use_frameworks!
    • 以下の Android、対象の build.gradle contains:

      android {
          compileSdkVersion 33
          defaultConfig {
              minSdkVersion 22
          }
      }
  3. 環境変数のセットアップ

    開発ツール用に、以下の環境変数を設定してください:

    変数 目的 設定値の例
    ANDROID_HOME Android SDK の場所 /Users/username/Library/Android/sdk
    JAVA_HOME JDKのインストールパス /Library/Java/JavaVirtualMachines/jdk-11.0.12.jdk/Contents/Home
    XCODE_SELECT Xcode コマンドラインツール /Applications/Xcode.app/Contents/Developer

プロジェクトのセットアップが完了したら、次はJavaScriptの依存関係の管理に進みましょう。

JavaScriptの依存関係

JavaScriptの依存関係を適切に管理することは、プラグインのパフォーマンスを安定させる鍵となります。

npm パッケージのインストール

npm

依存関係をインストールするには、以下のコマンドを使用してください:

# Add a production dependency
npm install lodash --save

# Add a development dependency
npm install @types/lodash --save-dev

peer dependenciesは必ず手動で package.json ファイルに含めてください。Webとネイティブの両方で互換性があるか、すべての依存関係をテストしてください。

package.jsonの管理

以下に例を示します package.json 設定:

{
  "name": "my-capacitor-plugin",
  "version": "1.0.0",
  "dependencies": {
    "lodash": "^4.17.21"
  },
  "devDependencies": {
    "@types/lodash": "^4.14.195",
    "@capacitor/core": "^5.0.0"
  },
  "peerDependencies": {
    "@capacitor/core": "^5.0.0"
  }
}

一貫性を保つため、依存関係のバージョンを適切に固定してください:

制約の種類 例 ユースケース
Exact (完全一致) “5.0.0” 特定のバージョンが必要な重要な依存関係に
Caret (^) “^5.0.0” マイナーアップデートとパッチを許可
Tilde (~) “~5.0.0” パッチのみにアップデートを制限

JavaScriptライブラリの使用

ライブラリをインポートする際は、bundle sizeの削減を意識しましょう:

// Import only the required function
import { isEqual } from 'lodash';

export class MyPlugin {
  async compare(options: { value1: any, value2: any }): Promise<boolean> {
    return isEqual(options.value1, options.value2);
  }
}

また、適切なエラーハンドリングと型チェックも忘れずに行ってください:

import { Plugin } from '@capacitor/core';
import { validate } from 'your-validation-library';

@Plugin({
  name: 'MyPlugin',
  platforms: ['web', 'ios', 'android']
})
export class MyPlugin {
  async validateData(data: unknown): Promise<void> {
    try {
      if (!validate(data)) {
        throw new Error('Invalid data format');
      }
      // Continue processing if valid
    } catch (error) {
      throw new Error(`Validation failed: ${error.message}`);
    }
  }
}

次は、iOS向けのプラットフォーム固有の依存関係の管理方法について解説します。

iOSの依存関係

このセクションでは、iOSのNative Build依存関係の管理方法について説明します。 Capacitor プラグインネイティブiOSの依存関係の管理方法について説明します。JavaScriptの依存関係の設定が完了したら、次はネイティブiOSの依存関係の処理に進みます。

CocoaPods セットアップ

CocoaPods

まず、iOSディレクトリ内でCocoaPodsを初期化します:

cd ios
pod init

次に、以下を更新します: Plugin.podspec 以下の設定を含むファイル:

Pod::Spec.new do |s|
  s.name = 'MyCapacitorPlugin'
  s.version = '1.0.0'
  s.summary = 'Your plugin description'
  s.platform = :ios, '13.0'
  s.dependency 'Capacitor'
  # Include your iOS dependencies here
  s.dependency 'Alamofire', '~> 5.6.4'
end

Podfileの設定

CocoaPodsの初期化後、Capacitor とその他のサードパーティ製ライブラリを含めるようにPodfileを設定します:

platform :ios, '13.0'
use_frameworks!

def capacitor_pods
  pod 'Capacitor', :path => '../../node_modules/@capacitor/ios'
  pod 'CapacitorCordova', :path => '../../node_modules/@capacitor/ios'
end

target 'Plugin' do
  capacitor_pods
  # Add third-party dependencies
  pod 'KeychainAccess', '~> 4.2.2'
  pod 'SwiftyJSON', '~> 5.0.1'
end

target 'PluginTests' do
  capacitor_pods
end

一般的な依存関係の設定パターンは以下の通りです:

制約の種類 例 ユースケース
バージョン固定 pod 'KeychainAccess', '4.2.2' セキュリティコンポーネントなど、厳密な制御が必要な場合
マイナーバージョン pod 'Alamofire', '~> 5.6' パッチアップデートが適用される可能性がある安定したAPIの場合
メジャーバージョン pod 'SwiftyJSON', '> 5.0' アップデート間の柔軟性を許容できる場合

Swift Packageの依存関係

CocoaPodsを使いたくない場合は、Swift Package Manager (SPM) が良い代替手段です。Xcodeで直接、次の設定を使ってSPMの依存関係を追加します。 Package.swift ファイル内で参照します:

// Package.swift
dependencies: [
    .package(url: "https://github.com/Alamofire/Alamofire.git", .upToNextMajor(from: "5.6.4")),
    .package(url: "https://github.com/SwiftyJSON/SwiftyJSON.git", from: "5.0.1")
]

プラグイン code でSPMの依存関係を使うには、importして必要に応じて統合してください。例:

import Capacitor
import Alamofire

@objc(MyPlugin)
public class MyPlugin: CAPPlugin {
    @objc func makeRequest(_ call: CAPPluginCall) {
        AF.request("https://api.example.com/data").response { response in
            // Process the response
            call.resolve([
                "data": response.data
            ])
        }
    }
}

この方法なら、プロジェクトの要件に応じてCocoaPodsとSwift Package Managerを選択できます。

Androidの依存関係

Androidの依存関係を設定して、ネイティブ統合をスムーズにします。Capacitor プラグインの依存関係を管理する方法は次のとおりです。

Gradle 依存関係

Gradle Build Tool インターフェース

以下の設定を追加してください: build.gradle ファイル内で参照します:

android {
    defaultConfig {
        minSdkVersion 22
        targetSdkVersion 33
    }
}

dependencies {
    implementation "androidx.appcompat:appcompat:1.6.1"
    implementation "com.google.code.gson:gson:2.10.1"
    implementation "org.jetbrains.kotlin:kotlin-stdlib:1.8.20"
    implementation project(':capacitor-android')
}

追加のバージョンは次の buildscript ブロックで定義します:

buildscript {
    ext {
        androidxCoreVersion = '1.10.1'
        kotlinVersion = '1.8.20'
    }
}

依存関係の設定が完了したら、必要なリポジトリも必ず設定してください。

リポジトリの設定

プロジェクトレベルの build.gradleに、必要なMavenリポジトリを含めます:

allprojects {
    repositories {
        google()
        mavenCentral()
        maven { url "https://jitpack.io" }
    }
}

カスタムまたはプライベートのMavenリポジトリを使用する場合は、次のように認証情報を追加します:

maven {
    url "https://maven.example.com/releases"
    credentials {
        username = project.findProperty("mavenUsername") ?: System.getenv("MAVEN_USERNAME")
        password = project.findProperty("mavenPassword") ?: System.getenv("MAVEN_PASSWORD")
    }
}

リポジトリの設定が終わったら、発生する可能性のある依存関係の競合に対処します。

互換性の問題を解決する

依存関係の競合に対処するには、次の場所でバージョン解決を適用します: build.gradle:

configurations.all {
    resolutionStrategy {
        force "org.jetbrains.kotlin:kotlin-stdlib:1.8.20"
        force "androidx.core:core-ktx:1.10.1"
    }
}

一般的な依存関係の問題を解決するための戦略は次のとおりです:

問題の種類 戦略 例
バージョンの競合 特定のバージョンを強制する force 'com.google.code.gson:gson:2.10.1'
複数バージョンの混在 モジュールを除外する exclude group: 'org.json', module: 'json'
間接的な依存関係の問題 厳密なバージョン指定を使用する strictly 'androidx.core:core-ktx:1.10.1'

例えば、以下のように競合するモジュールを除外できます:

dependencies {
    implementation('library:name:1.0.0') {
        exclude group: 'com.conflicting.dependency'
    }
}

最後に、キャッシュと並列実行を有効にしてビルドプロセスを最適化しましょう。 gradle.properties:

org.gradle.caching=true
org.gradle.parallel=true
org.gradle.jvmargs=-Xmx2048m

Capgo 連携

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

ネイティブおよびJavaScriptの依存関係管理とCapgoを併用すると、プラグインの更新がより速く簡単になります。

Capgoについて

Capgoは、Capacitorのプラグインとアプリ向けに設計されたlive updateプラットフォームです。750のプロダクションアプリで2,350万回以上のアップデートを配信しており、 [1]Capgoを使えば、依存関係やcodeのアップデートをアプリストアの審査なしで即座にプッシュできます。アップデートはエンドツーエンド暗号化で保護され、AppleとAndroidの両方のコンプライアンス基準を満たしています。

Capgo のアップデート機能

Capgoでは、次の機能でプラグインの依存関係管理を簡単に行えます:

機能 機能 主要指標
Live Update 数分でアップデートを配信 24時間以内に95%のユーザーが更新
差分アップデート 変更されたファイルのみをダウンロード API の平均レスポンス時間は434ms
バージョン管理 複数バージョンを管理 グローバル成功率82%
チャネルシステム 特定のユーザーグループをターゲットに設定 複数のデプロイチャネルに対応

出典: [1]

Capgo は GitHub Actions、GitLab CI、Jenkins などの CI/CD ツールとシームレスに連携し、依存関係の更新を自動化してプラグインのバージョンの一貫性を保ちます。これらのツールを使用することで、Capgo をワークフローに簡単に組み込むことができます。

Capgo のセットアップ

Capgo をプロジェクトに導入するには、以下の手順に従ってください:

  1. Capgo CLI をインストール

    ターミナルで次のコマンドを実行します:

    npx @capgo/cli init
  2. アップデート設定の構成

    Capgo ダッシュボードを使用して、デプロイチャネルと設定を行います。クラウドホスト型とセルフホスト型の両方の構成をサポートしています。

  3. アップデートロジックの追加

    アップデートを有効にするには、メインのプラグインファイルにこの code を追加してください:

    import { Capgo } from '@capgo/capacitor-updater';
    
    // Initialize Capgo
    const capgo = new Capgo({
      appId: 'YOUR_APP_ID',
      channel: 'production'
    });
    
    // Check for updates
    await capgo.checkForUpdate();

「私たちはアジャイル開発を実践しており、ユーザーへ継続的にデリバリーする上で @Capgo はミッションクリティカルです!」 - Rodrigo Mantica

Capgo は、アップデートの成功率やユーザーアクティビティをリアルタイムで把握できる分析ダッシュボードも提供します。ワンクリックでのロールバックやエラー追跡などの機能により、問題を迅速に解決し、プラグインのアップデートをスムーズに継続できます。

まとめ

プロセスの概要

Capacitor プラグインの依存関係を管理するには、ネイティブコンポーネント(iOSおよびAndroid)とJavaScript側を同期させ、スムーズな統合を実現する必要があります。このプロセスには、プラットフォーム固有の設定や、最高のパフォーマンスを引き出すためのJavaScriptパッケージの管理が含まれます。以下の手順に従うことで、プラグインの機能を安定かつ効率的に維持できます。

ベストプラクティス

依存関係を効果的に管理するためのベストプラクティス:

実践 メリット 実装方法
バージョンの固定 予期せぬ問題の回避 特定のバージョンを使用 package.json
プラットフォームの分離 競合を最小限に抑制 ネイティブ依存関係の分離
定期的なアップデート セキュリティの向上 重要なパッチを迅速に適用
依存関係の監査 リスクの検知 実行 npm audit 頻繁に

Capgo のような live update ツールを活用すれば、リアルタイムアップデートを可能にし、こうした取り組みをさらに簡素化・改善できます。

Capgo のメリット

Capgo は、高いパフォーマンスを発揮しながら依存関係の管理プロセスを簡素化します。そして、目覚ましい 24時間以内に95%のユーザーがアップデート また、API のグローバルなレスポンスタイムは 434ms [1]を維持しています。エンドツーエンドの暗号化により、AppleとAndroidの両方のガイドラインに準拠した安全なアップデートを実現します。複数のプラグインバージョンを管理するチーム向けに、Capgo のチャンネルシステムは、特定のユーザーグループへのターゲットデプロイを可能にします。

Capgo のパフォーマンスは以下の通りです:

メトリクス 値
API グローバルレスポンスタイム 434ms
Update成功率 82%
ユーザーアップデート率 (24時間) 95%

Capacitor Plugins での依存関係の追加方法へ戻る

使用している場合 Capacitor プラグインに依存関係を追加する方法 ネイティブプラグインの作業を計画するには、次と連携してください: Capgo プラグインディレクトリ Capgo プラグインディレクトリのプロダクトワークフローについては、 Capgo による Capacitor プラグイン Capgo による Capacitor プラグインの実装詳細については、 プラグインの追加または更新 プラグインの追加または更新に関する実装詳細については、 Ionic Enterprise プラグインの代替案 Ionic Enterprise Plugin Alternatives のプロダクトワークフロー、および Capgo Native Build Capgo Native Builds のプロダクトワークフローについては、

Capacitor アプリ向けの Live Updates

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

最新のブログ記事

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