ここ最近はIonicを使ったハイブリッドアプリを開発してました(個人でなく、会社でのプロジェクトです)。
さて、こちらの記事の通り、Cordova Androidに脆弱性が見つかり、修正版がリリースされました。
IonicではCordovaのAPIを利用してネイティブの機能を使うので、今のプロジェクトでも「脆弱性の影響ないかな?」「そもそも、今のCordovaのバージョンなんだっけ?」と思ったのですが、調べていく過程で色々と混乱してしまっていたので、整理がてらまとめておきます。
Cordova iOS, Cordova Androidのバージョンを調べる
最初に結論なんですが、Ionic(Cordova)プロジェクト内のCordovaのバージョンを調べたい場合、プロジェクトの直下で
# cordova platform list
とすればよいです(Ionicの場合はionic platform list
でもOKですね)。
サンプル出力は以下。
Installed platforms: android 4.0.2, ios 3.8.0 Available platforms: amazon-fireos, blackberry10, browser, firefoxos
Cordova Androidが4.0.2、Cordova iOSが3.8.0であることが分かります。
紛らわしいなーと感じた点は、あるハイブリッドアプリについて、以下のバージョンがどれも違うところです(カッコ内は手元の環境におけるバージョンです)
- Cordova iOS (3.8.0)
- Cordova Android (4.0.0)
- Ionic (1.0.0)
- Ionic CLI (1.4.5)
- cordova-lib (5.0.0)
そのため、本エントリにおける以下の説明ではこれらは使い分けていきます。
ionicとionic-cliのバージョンは別物
バージョンを調べたい時は、慣れで
# ionic --version
としてしまいますが、ここで返ってくる結果はionicではなく、ionic-cliのバージョンです。
手元の環境だと1.4.5という結果が返ってきますが、Ionic自体はつい先日1.0がリリースされたばかりなので、Ionicが1.4.5というのはおかしいですしね。
ionicの諸々のバージョンを調べたい場合は、
# ionic info
とすると、以下のような結果が返ります。
Your system information: Cordova CLI: 5.0.0 Ionic Version: 1.0.0 Ionic CLI Version: 1.4.5 Ionic App Lib Version: 0.0.22 ios-deploy version: Not installed ios-sim version: Not installed OS: Mac OS X Mavericks Node Version: v0.12.4 Xcode version: Xcode 6.2 Build version 6C131e
通常、Ionicはグローバルにインストール( npm install -g ionic
)すると思いますが、これでインストールされるのは、正確にはionicではなくionic-cliのようです。
ionic-cliはその名の通りコマンドラインツールであり、ionic-cliにおけるモジュールの依存関係的には ionic-cli -> ionic-app-lib -> cordova-lib
となっていて、ionicには依存しません。
ionic-app-libはプロジェクトのジェネレータ、cordova-libはCordovaモジュールです。
というわけで、ionicとionic-cliは直接の依存関係はないし、cordova-libとCordova iOS/Cordova Androidにも直接の依存関係はない、ようです。
じゃあ、Ionicのバージョンはいつ、どこで決まってるのか?
…という疑問が湧いてきたので調べました。
どうやら、ionic start
を実行する時(=プロジェクトを作成する時)に決まり、{PROJECT_ROOT}/www/lib/ionic/version.json
で定義されるようです*1。
流れとして、Ionicプロジェクトを作る場合、ionic start
コマンドで雛形を生成することが多いと思いますが、プロジェクトのテンプレートに依らず、基底の雛形である ionic-app-baseというのがいて、その中でIonicのバージョンが指定されています。
つまり、ionic-cliをバージョンアップしなくても、ionic start
を実行した時点で最新のIonicに基づくプロジェクト雛形が生成される、ようです(試してないので確証はないですが…)
なお、既存のプロジェクトのIonicをバージョンアップしたい場合は、プロジェクトで
# ionic lib update
とします。この辺りを知っておけば、プロジェクト作成後もionicのバージョンを自分達で管理することができます。
Cordova iOS, Cordova Androidのインストール
各プラットフォーム(Cordova iOS, Cordova Android)は、
# cordova platform add ios # cordova platform add android
を実行することで、 platforms
の下に ios
, android
ディレクトリが作られ、インストールされます。
プロジェクトのプラットフォーム情報は、package.json
および platforms/platforms.json
に書き込まれます。
package.json
では以下のようにインストールされているプラットフォームが列挙されています(抜粋)。
"cordovaPlatforms": [ "ios", "android" ]
platforms/platforms.json
には以下のように、プラットフォームとバージョンが記載されています。
{ "ios" : "3.8.0", "android" : "4.0.0" }
自分達の環境では、IonicプロジェクトをGitでバージョン管理しているのですが、platforms
以下はダウンロードされている依存ライブラリということで .gitignore してます。
インストールするためには
# ionic state restore
とすると、package.json
の中身を見てプラットフォームやプラグインをよしなにインストールしてくれます。
バージョンを指定してCordova iOS, Cordova Androidをインストール
2015.5.30時点で、 ionic platform add android
を実行しても、Cordova Androidのバージョンとして(リリースされたばかりの)4.0.2ではなく4.0.0がインストールされていまいました…。
そこで、4.0.2をインストールするべく、明示的にバージョンを指定してインストールします。
なお、すでにプラットフォームがインストールされている場合は、一度削除してから追加した方が無難です。
# ionic platform rm android # ionic platform add android@4.0.2
これでめでたくCordova Android 4.0.2が入りました。package.json
は
"cordovaPlatforms": [ "ios", { "platform": "android", "version": "4.0.2", "locator": "android@4.0.2" } ]
となります(抜粋)。
まとめ
用途 | コマンド |
---|---|
ionic, ionic-cli, etcのバージョン確認*2 | ionic info |
Cordovaのバージョン確認 | ionic platform list |
ionicのバージョンアップ | ionic lib update |
Cordovaのバージョンアップ | ionic platform rm {ios|android} (インストール済の場合のみ)ionic platform add {ios|android}@{version} |