先日、ng-Japanがあり、Angular2のセッションが多く行われたからか、Angular2が盛り上がってきているのを感じますね。Angular2のハンズオン企画は参加者枠がわずか2時間で埋まったりと、むしろAngular2バブルかもしれない(笑)
Angular2のUIフレームワークである「Ionic2」(※現在、β版)も、ng-japanで紹介されて、これから使いはじめるという方も今後増えていくと思いますので、はじめるにあたっての注意点を簡単にまとめておきます。
このまとめは、2016年4月7日現在(現行beta.3)です。
Angular2本家更新の反映は早くない
Ionic2のはじめかたを見ていただければわかるのですが、Ionic2はグローバルにIonic CLIをインストールして、このCLIでプロジェクトを操作するやり方が推奨されています。
これ自体は、UIフレームワークだし、簡単にはじめることができるので歓迎すべきことなのですが、このCLIはIonic2(厳密にいうと、ionic-angular)というnpmパッケージに相当依存しています。簡単にいうと、Angular2は、Ionic2を通して実行するイメージです。
で、その結果、何が起きるかといいますと、Angular2本家がバグを解消してバージョンをあげても、Ionic2がそれに対応しなければプロジェクト内のAngular2のバージョンをあげることができません(ionic-angularのpackage.jsonのpeerDependenciesに明記されてますしね)
現行、Ionic2 beta.3なわけですが、対応しているAngular2はbeta.6です。ちなみに、Angular2の最新バージョンはbeta.13。これぐらいの遅れが発生します。
ES6ではじめると、Angular2のドキュメントが使えない
Ionic2をデフォルトではじめると、ES6のファイル群がインストールされます。
まぁ、将来的にはES6になるんだろうなぁと思いつつ、Ionic2のES6はなかなかに不便です。Ionic2 α版時代はそうではなかったのですが、Ionic2がβ版にあがってからコンパイラの変更がありまして、ES6でのconstructorの書き方が変わりました。
α版時代であったり、Angular2は
constructor(platform: Platform) { platform.ready().then(() => { } }
という形で書いていたのですが、β版になってからES6では
static get parameters() { return [[Platform]]; } constructor(platform) { platform.ready().then(() => { } }
と書くようになりました。get parametersの挙動をちゃんと調べきれていないのですが、ionic-angularのメソッドは NavController → nav などと勝手にリネームされてて、自作のService(DI)はリネームされないなどとぶっちゃけよくわからない状態です。Ionicサイドはどうしていくんだろう・・・。
なので、未来を見据えて、ES6ではじめようと思うと、相当な破壊的変更への覚悟が必要になります。
なので、ES6じゃなくて、TypeScriptモードで書き始めよう
なぜか、Ionic2のdocsには載っていないのですが、Ionic CLIには、TypeScriptモードではじめるモードがあります。
$ionic start cutePuppyPics --v2 --ts
と引数をつけてください。そしたら、引数をつけないとES6ではじまるものが全てtsファイルの状態ではじめることができます。
私自身、プロジェクト初期にはES6にいったり、typescriptにいったりと右往左往していたのですが、Angular2のドキュメンテーションをそのまま使えるので、typescriptで書く方がおすすめです。
RoutingでURLを使うかどうか先に決めよう
Ionic2はデフォルトでプロジェクトをはじめると、routerがURL書き換えをしない状態で入ります。
スマホアプリを作る時などは、URLを持たない方が(直接URLを叩かれることがないため)都合がいいのですが、単にSPAを作りたい、とかとなるとURL共有ができないのは不便です。
ちょっと私は試していないのですが、ionic2のtestをみてると、angular2の機能を使ったroutingもできるっぽいので、最初に確認しておいた方がいいかと思います。
https://github.com/driftyco/ionic/blob/2.0/ionic/components/nav/test/routing/index.ts#L47
当分は保守します
また、バージョンが変わったり、自分が躓いたところを思い出したりした時に、この記事はアップグレードしようと思っています。
それでは、また。