Apache Cordovaはオープンソースのフレームワークで、HTML、CSS、JavaScriptを使用してデバイスのネイティブ機能にアクセスできるモバイルアプリケーションを作成できます。PhoneGapやIonicを含む多くのハイブリッドプラットフォームの基盤として機能します。Apache Software Foundation、2025年のデータによると、CordovaはGoogle PlayおよびApp Storeで何千ものアプリケーションで使用されています。WebViewはフレームワークの主要コンポーネントであり、モバイルアプリケーション内でWebインターフェースを表示する役割を担います。
主要ポイント
Apache Cordovaはオープンソースのプラットフォームで、Webアプリケーションをネイティブコンテナにラップし、モバイルデバイスのハードウェア機能にアクセスするためのJavaScript APIを提供します。このプロジェクトは元々PhoneGapと呼ばれ、2009年にNitobi Softwareによって作成されました。
2011年、AdobeがNitobiを買収し、PhoneGapのソースコードをApache Software Foundationに寄贈しました。そこでプロジェクトはApache Cordovaと改名されました。Adobeは追加サービスを備えたCordovaのディストリビューションとしてPhoneGapをリリースし続け、フレームワーク自体はApacheの管理下で独立したプロジェクトになりました。
Apache Cordova Project Statistics(2024年)によると、このフレームワークはiOS、Android、Windows、macOS、Electronを含む10のモバイルプラットフォームをサポートしています。主要プラットフォームはAndroidとiOSであり、全Cordovaプロジェクトの95%以上を占めています。
Apache Cordovaのアーキテクチャは4つの層で構成されています:Webアプリケーション、WebView、プラグインブリッジ、ネイティブプラグインです。各層は分離されており、システムの他の部分を変更せずにコンポーネントを交換できます。
CordovaのWebViewは、Webページをネイティブアプリケーションの一部として表示するOSシステムコンポーネントです。iOSではWKWebView(iOS 9以降)、AndroidではAndroid System WebView(Android 5以降)を使用します。フレームワークは、すべてのアプリケーションリソースを含むindex.htmlエントリポイントをWebViewにロードします。
WebKit Team(2024年)によると、WKWebViewのメモリ消費量は、Cordovaの初期バージョンで使用されていたUIWebViewと比較して50%少なくなっています。これはRAMが限られたモバイルデバイスにとって重要です。
ブリッジはCordovaの主要な仕組みであり、JavaScriptコードがネイティブ関数を呼び出すことを可能にします。アプリケーションがプラグインを呼び出すと、CordovaはリクエストをJSONにシリアライズし、WebViewのURLプロトコル(カスタムスキームでlocation.hrefを変更)を介して送信します。ネイティブ側がこのリクエストをインターセプトし、必要な操作を実行して結果を返します。
この仕組みは非同期で動作します:プラグイン呼び出しはPromiseを返し、ネイティブ操作の完了後に解決されます。IBM Research(2023年)のテストによると、ブリッジのレイテンシは単純な操作で2〜5ミリ秒、I/O操作で最大50ミリ秒です。
各Cordovaプラグインは、JavaScriptインターフェースと各プラットフォーム向けのネイティブ実装を備えたパッケージです。iOSではプラグインはObjective-CまたはSwiftで記述され、AndroidではJavaまたはKotlinで記述されます。プラグインのJavaScript部分は開発者にPromiseベースのAPIを提供し、ネイティブ部分がシステムコールを実行します。
標準セットには30以上のプラグインが含まれています:Battery Status、Camera、Contacts、Device Motion、File、Geolocation、InAppBrowser、Media、Network Information、Splashscreen、Statusbar、Vibrationなど。
Cordova CLIコマンドラインは、プロジェクトの作成、ビルド、管理のための主要なツールです。統一されたインターフェースを介して、プロジェクトの初期化、プラットフォームの追加、プラグインのインストールのためのコマンドを提供します。
ワークフローには3つの基本コマンドが含まれます:プロジェクト作成のcordova create、ターゲットプラットフォーム追加のcordova platform add ios/android、npmレジストリからのプラグインインストールのcordova plugin addです。
すべてのプロジェクト設定はルートディレクトリのconfig.xmlファイルに保存されます。アプリケーション名、パッケージ識別子、サポートされる画面の向き、アイコン、インストール済みプラグインのリストが指定されます。このファイルはW3C Widget Package XML形式を使用しており、JenkinsやGitHub ActionsのCI/CDシステムを含むあらゆるビルドツールと統合できます。
カメラと位置情報をサポートするCordovaプロジェクトのconfig.xml設定ファイルの例を見てみましょう。
<?xml version='1.0' encoding='utf-8'?>
<widget id='com.example.app'
version='1.0.0'
xmlns='http://www.w3.org/ns/widgets'
xmlns:cdv='http://cordova.apache.org/ns/1.0'>
<name>MyApp</name>
<description>
Cordovaアプリケーションの例
</description>
<plugin name='cordova-plugin-camera' />
<plugin name='cordova-plugin-geolocation' />
<allow-intent href='http://*/*' />
<allow-intent href='https://*/*' />
</widget>
このconfig.xmlはカメラと位置情報のプラグインを宣言し、サーバーからデータをロードするためのHTTP/HTTPS接続を許可します。Cordovaはビルド時に自動的にそれらを接続し、グローバルオブジェクトnavigator.cameraおよびnavigator.geolocationを介してアクセス可能にします。
アプリケーションのJavaScriptコードからカメラプラグインを呼び出す例:
function capturePhoto() {
navigator.camera.getPicture(
function(imageData) {
const img = document.getElementById('myImage');
img.src = 'data:image/jpeg;base64,' + imageData;
},
function(error) {
console.error('Camera error:' + error);
},
{ quality: 50, destinationType: 0 }
);
}
capturePhoto関数はcordova-plugin-cameraプラグインを介してネイティブカメラを呼び出します。成功コールバックはbase64形式で画像を受け取り、ページに表示されます。エラー処理は必須です — ユーザーがカメラアクセス要求を拒否する可能性があります。
その人気にもかかわらず、Apache Cordovaにはいくつかの制限があり、Ionicチームによる代替品Capacitorの登場につながりました。主な問題は、ブリッジのパフォーマンス、最新のWeb標準への対応、デバッグの複雑さに関連しています。
WebViewのURLプロトコルを介したブリッジは、Capacitorの直接JavaScriptブリッジよりも低速です。リアルタイムでのカメラ操作など、ネイティブAPIを頻繁に呼び出す場合、この差は顕著になります。また、Cordovaは追加のプラグインなしでは最新のWebView機能を完全にはサポートしていません。
もう1つの制限は、サードパーティツールなしではデバイス上でのLive Reloadの組み込みサポートがないことです。Cordovaでの開発では、コード変更のたびにプロジェクトを再ビルドする必要があり、CapacitorやReact Nativeと比較して開発サイクルが遅くなります。
Ionic Team(2024年)によると、新しいハイブリッドプロジェクトの60%以上がCordovaではなくCapacitorを選択しています。ただし、既存のCordovaプロジェクトは引き続き機能します — フレームワークはApache Software Foundationからセキュリティアップデートを受け取り続けています。
Apache Cordovaは、その機能を拡張し追加の開発ツールを提供するいくつかの商用プラットフォームとサービスの基盤となっています。AdobeのPhoneGapは、Cordovaの最初で最も有名なディストリビューションでした。
PhoneGapはPhoneGap Buildクラウドサービスを追加し、XcodeやAndroid Studioをインストールせずにアプリケーションをコンパイルできます。開発者はソースコードをAdobeサーバーにアップロードし、完成したAPKおよびIPAファイルを受け取ります。これは特にMacインフラストラクチャを持たないチームにとって便利でした。
Cordovaベースの他のプラットフォームには、Monaca(クラウドIDE)やFramework7があります。Monacaはブラウザ内でデバイスシミュレーターとCordovaプラグイン統合を備えた完全な開発環境を提供します。Framework7はレンダリングのバックエンドとしてCordovaを使用し、独自のUIコンポーネントセットを提供します。
FlutterやReact Nativeのリリース後にCordovaの人気は低下しましたが、エコシステムはレガシープロジェクトの保守や、Web開発者にとっての参入の容易さが重要なニッチなシナリオで依然として関連性があります。ハードウェアアクセスに非典型的な要件を持つエンタープライズアプリケーションは、実績のあるプラグインの広範なライブラリのためにCordovaに留まることがよくあります。
CordovaからCapacitorへの移行については、Ionic Teamによるステップバイステップガイドがあり、index.htmlの初期化スクリプトの置き換えや設定の更新が含まれます。主な課題は、新しいCapacitorブリッジアーキテクチャとのカスタムCordovaプラグインの互換性を確認することです。
よくある質問
PhoneGapはAdobeによるApache Cordovaの商用ディストリビューションで、PhoneGap Buildクラウドビルドサービスを追加します。フレームワーク自体は完全にCordovaコードに基づいており、すべてのプラグインとAPIは同一です。違いはAdobeの追加サービスのみです。
はい、Cordovaは単一のコードベースから両方のプラットフォームをサポートします。cordova platform add ios && cordova platform add androidコマンドで両方のターゲットプラットフォームを追加できます。すべてのJavaScriptコードとHTMLテンプレートは共有され、プラグインのネイティブ部分は各OS用に個別に実装されます。
ネイティブ機能へのアクセスはプラグインシステムを通じて行われます。cordova-plugin-cameraプラグインはnavigator.camera.getPicture JavaScript APIを提供し、Objective-CまたはJavaでネイティブカメラコードを呼び出します。位置情報プラグインもnavigator.geolocationを介して同様に動作します。
新しいプロジェクトには、より優れたパフォーマンス、組み込みのLive Reload、PWAサポートを備えたIonicチームのより最新の代替品であるCapacitorをお勧めします。Cordovaはレガシープロジェクトの保守、またはチームがすでにCordovaのインフラストラクチャを持っている場合にのみ正当化されます。
最も使用されているプラグインは、cordova-plugin-camera(カメラアクセス)、cordova-plugin-geolocation(GPS)、cordova-plugin-file(ファイルシステム)、cordova-plugin-inappbrowser(アプリ内ブラウザ)、cordova-plugin-splashscreen(スプラッシュ画面)です。これらのプラグインは典型的なタスクの80%をカバーしています。
まとめ
ターンキー方式のモバイルアプリケーションを開発します
IT Sectrは2017年からスタートアップや企業向けにiOS・Androidアプリケーションを開発しています。私たちがご相談に乗り、最適なソリューションをご提案します。