BT

最新技術を追い求めるデベロッパのための情報コミュニティ

寄稿

Topics

地域を選ぶ

InfoQ ホームページ ニュース Capacitor 1.0がリリース、目標はハイブリッド、Web、ネイティブのアプリ開発の改善

Capacitor 1.0がリリース、目標はハイブリッド、Web、ネイティブのアプリ開発の改善

原文(投稿日:2019/05/27)へのリンク

JavaScriptによるiOS、Android、およびWeb用アプリケーションの開発を目的とした、Ionicの新しいネイティブAPIコンテナのCapacitorが、 バージョン1.0に到達した。ネイティブ機能にアクセスするクロスプラットフォームアプリケーションの開発において、新たな方法を試みるものだ。

Cordovaと同じように、Capacitorの目標は、プラットフォーム固有のコードを記述することなく、アプリケーションの基盤となるOSのネイティブ機能にアクセスできるようにすることだ。これが実現すれば、iOS、Android、Electronの各アプリで、例えばデバイスのカメラを同じコードで使用できるようになる。ただしCapacitorでは、アプリで使用可能なネイティブ機能を統一インターフェース経由で公開し、HTML/CSS/JavaScriptアプリをコンテナ化してネイティブなWebビューで実行するという、まったく異なるアプローチを採用している。

Cordovaとの大きな違いのひとつは、通常とは逆に、開発するネイティブアプリケーションプロジェクト(Ionicアプリケーションが実行されるWebビューを含む)を、Capacitorのコンポーネントとして扱うように要求している点だ。このアプローチにより、iOS上においてAppDelegateの調整を必要とするような外部SDKとの統合が容易になると同時に、ネイティブ機能のIonicアプリへの統合が、Cordovaの場合のように特別なプラグインを記述しなくても可能になった。

Capacitorのもうひとつのメリットは、devicereadyイベントをリスンする必要がない点だ。Ionicアプリがロードされる前に、Capacitorがすべてのプラグインをロードすることによって、これが可能になっている。さらに、Capacitorプラグインが呼び出し可能なメソッドを公開しているため、 execを使用する必要もない。例として下記に示したのは、iOS用の非常に単純なCapacitorプラグインで、CAPPluginを拡張したSwiftクラスだ。

import Capacitor

@objc(MyPlugin)
public class MyPlugin: CAPPlugin {
  @objc func echo(_ call: CAPPluginCall) {
    let value = call.getString("value") ?? ""
    call.resolve([
        "value": value
    ])
  }
}

プラグインのechoメソッドをCapacitor Webランタイムから直接利用できるようにするには、それを.mファイルに登録する必要がある。

#import <Capacitor/Capacitor.h>

CAP_PLUGIN(MyPlugin, "MyPlugin",
  CAP_PLUGIN_METHOD(echo, CAPPluginReturnPromise);
)

Capacitorでは、プラグインやプラットフォームなどの依存関係の管理にnpmを使用している。そのため、プラグインを使用する必要がある場合は、通常どおりJavaScriptプロジェクトに対してnpm installを実行するだけでよい。Cordovaではこれと違い、 ”cordova plugin add ...”コマンドを使用する必要がある。さらなる単純化の例として、Capacitorでは、iOSプラグインのネイティブコンポーネントをCocoaPodにして、Android用のスタンドアロンライブラリとしてパッケージ化するように求めている。

最後に注意すべき点として、最終的にはCapacitorがCordovaに取って代わり、Ionicアプリをコンテナ化して、ネイティブ機能にクロスプラットフォームでアクセスできるようにするが、Cordovaについても今後、長くサポートが行われる予定である。

この記事に星をつける

おすすめ度
スタイル

BT