Cordova の CLI をインストールして使ってみる.md
僕はネイティヴアプリというものを作ったことがない。フロントエンドアプリ開発についても趣味レベル止まり。前から作りたいと思っていた。
主な仕事はサーバ運用、バックエンドプログラム開発(それも Hadoop を用いた集計基盤開発。最もフロントエンド開発から遠い。)であった。
ネイティヴアプリを作るきっかけが欲しい。と思っていた。
どうせなら、今後流行りそうなハイブリッドアプリ開発フレームワークを利用して作ってみようと思い立った。
そこで出会ったのが Cordova。
早速やってみることにした。
日本語の書籍もいくつかあるらしいが、僕はまずは本家を参考にするという鉄則があるので、以下のドキュメントを実践し、Cordova の世界に足を踏み入れようと思う。
http://cordova.apache.org/docs/en/5.0.0/guide_cli_index.md.html#The%20Command-Line%20Interface
上記のガイドは、Cordova を用いたアプリケーションの作成方法とデプロイ方法を説明したもの。
これを実践してみる。 cordova command-line interface(CLI) を用いる。
5.0.0 が最新っぽかった(2015/08/14現在)ので、Cordova 5.0.0 を対象とする。
このドキュメントは、フロントエンド、アプリ開発の知識がない僕が Cordova を使ってアプリを作っていく日記のようなもの。
間違っている点があればご指摘お願いいたします。
Cordova とは
オープンソースなハイブリッドモバイルアプリフレームワーク。
Apache Software Foundation のトップレベルプロジェクトである。
開発者は HTML5、CSS3、JS を用いてアプリを開発し、Cordova を用いてそのアプリを様々なプラットフォーム(iphone、android、windows phone、etc...)向けのアプリへビルドする。
メリット
- プラットフォーム固有の開発言語(iOS なら C#, Android なら java?)に縛られることなく、モバイルアプリの開発ができる。
- プラットフォームがインストールされているデバイスへのアクセスが可能。
Basic Components
config.xml
アプリ、アプリで利用するパラメタを記述するファイル。
このファイルは W3C の Packaged Web App specification を参考に作られている。
Packaged Web App specification
http://www.w3.org/TR/widgets/
アプリケーション
Cordova において、アプリは web page である。
つまり、アプリは HTML、CSS、JS により作成される。
各プラットフォームにおいて、アプリは WebView として実行される。
プラグイン
Cordova に対するプラグインの作成が可能である。
プラグインは、アプリの JS から、ネイティブコードの実行を可能とするプログラムである。
プラグインレジストリから、サードパーティ製のプラグインを探すことが可能。
プラグインレジストリ
http://plugins.cordova.io/#/
早速使ってみる
まずはじめに、nodejs をインストールする必要がある。
というのも Cordova は nodejs 製のソフトウェアである。
この点はラッキーだ。
僕は以前から nodejs を用いたアプリ開発を趣味レベルで実践していたし、javascript は好きな言語だ(この辺りは、仕事で Perl を使っている影響が大きい気がする。Perl と javascript は「自由」という点で何か似ている。)
僕の環境は OS X 10.10.4 Yosemite x86_64
である。
https://nodejs.org/download/
より Mac 向けの pkg をダウンロードし、インストールする。
Cordova のインストール
次に、git client をインストールする。
https://git-scm.com/book/ja/v1/%E4%BD%BF%E3%81%84%E5%A7%8B%E3%82%81%E3%82%8B-Git%E3%81%AE%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB
を参考にした。
Cordova 自体は nodejs 製のソフトウェアである。
ゆえに、nodejs の package management system である npm を通してインストールする。
npm install -g cordova
ここまでは詰まることなくできた。
SDK のインストール
次に、対象となるプラットフォームの SDK をインストールする必要がある。
これが面倒臭そうだ。。。。
僕はネイティヴアプリを作ったことがない。
ゆえに、SDK もインストールしたことがない。
iOS
どんな SDK をインストールすれば良いか?はこちら。
http://cordova.apache.org/docs/en/5.0.0/guide_platforms_index.md.html#Platform%20Guides
今回試すプラットフォームは iOS とする。
以下のドキュメントに SDK のセットアップ方法が書かれている。
http://cordova.apache.org/docs/en/5.0.0/guide_platforms_ios_index.md.html#iOS%20Platform%20Guide
Create the App
アプリを作成する。
cordova create hello com.example.hello HelloWorld
create
はサブコマンド名
hello
はディレクトリ
com.example.hello
はアプリ識別子(逆ドメイン表現)
HelloWorld
はアプリのディスプレイのタイトル
コマンド実行後、hello ディレクトリができている。
% ls -r hello/*
hello/config.xml
hello/www:
js index.html img css
hello/plugins:
hello/platforms:
hello/hooks:
README.md
Add Platforms
コマンドは hello ディレクトリ上にて実行する必要があるので、ディレクトリを移動する。
cd hello
プラットフォーム ios を追加する。
cordova platform add ios
追加できたらしい
% cordova platform add ios
Adding ios project...
iOS project created with cordova-ios@3.9.1
Discovered plugin "cordova-plugin-whitelist" in config.xml. Installing to the project
Fetching plugin "cordova-plugin-whitelist@1" via npm
Installing "cordova-plugin-whitelist" for ios
追加できたことを確認してみる。
% cordova platforms ls
Installed platforms: ios 3.9.1
Available platforms: amazon-fireos, android, blackberry10, browser, firefoxos, webos
できた。
同時に、platforms ディレクトリが作成されていた。
% ls www
css img index.html js
% ls platforms/ios/www
cordova-js-src css js
cordova.js img plugins
cordova_plugins.js index.html
www ディレクトリ上のファイルをソースとして、platforms/ios/www 上に対して、プラットフォーム向けのファイルが再作成されるという仕組みである。
当然、www ディレクトリ上のファイルだけを修正すべきである。platforms 上のファイルは編集すべきではない。
バージョン管理システムにおいても、www ディレクトリ上のファイルと merges ディレクトリ上のファイルだけを管理すべきである。
platforms 上のファイルは編集もすべきではない。と書かれている。
はい。絶対に編集しません!触らぬ神に祟りなしである。
Build the App
cordova build
あっさりビルドできた。
% cordova build
Running command: ....
...
** BUILD SUCCEEDED **
** BUILD SUCCEEDED **
これで、platforms ディレクトリ上に、プラットフォーム向けのコードが生成された。
ios だけを対象としてビルドしたい場合、以下のコマンドを叩く。
cordova build ios
Test the App on an Emulator or Device
SDK と一緒に配布されるエミュレータを用いてプラットフォーム向けのコードを実行する。
これを以下のコマンドを用いて実行する。
cordova emulate ios
ここでエラー。
% cordova emulate ios
Running command: /Users/***/git/git/hello/platforms/ios/cordova/run --emulator
ios-sim was not found. Please download, build and install version 3.0.0 or greater from https://github.com/phonegap/ios-sim into your path, or do 'npm install -g ios-sim'
Error: /Users/***/git/git/hello/platforms/ios/cordova/run: Command failed with exit code 2
at ChildProcess.whenDone (/usr/local/lib/node_modules/cordova/node_modules/cordova-lib/src/cordova/superspawn.js:139:23)
at ChildProcess.emit (events.js:110:17)
at maybeClose (child_process.js:1015:16)
at Process.ChildProcess._handle.onexit (child_process.js:1087:5)
ios にてコマンドラインからエミュレータを実行する場合、ios-sim という npm のパッケージが必要となるらしい。これをインストールする。
sudo npm install ios-sim -g
インストールできた。
再度、エミュレータを起動する。
% cordova emulate ios
Running command: ...
...
** BUILD SUCCEEDED **
No target specified for emulator. Deploying to iPhone-6 simulator
com.example.hello: 1811
** RUN SUCCEEDED **
できた。すんなり。感動した。
すんなりできる。
開発者にとってこれ以上の感動はない。
感想
所感としては、何だかんだ言って、プラットフォームの SDK に対する勉強はする必要がありそう。
故に、プラットフォーム向けアプリ開発の知識は不可欠であると思われる。
Cordova を使えばプラットフォーム向けのアプリを作れる。
が、その主目的は開発工数を減らすためであると思う。
Web の知識だけでアプリを作れるというのは幻想である気がする。
(Chef とかもそうだよね。開発者は横着して良いけど、勉強するという姿勢は忘れてはダメ。)
次は、アプリをデバイスへデプロイするまでをやってみよう。