Ionic2(Angular2 UIフレームワーク)をはじめるにあたっての注意点まとめ

2016年4月7日

スクリーンショット 2016-04-07 16.29.30

先日、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

当分は保守します

また、バージョンが変わったり、自分が躓いたところを思い出したりした時に、この記事はアップグレードしようと思っています。

それでは、また。

Foundation-siteのハンズオンやります。

3月13日(日)に、十三コワーキングでLec Café #11 SassではじめるCSSフレームワーク Foundation入門やります。Sassに興味はあるけどはじめれていない方、グロースハックを実現するためのモジュールデザインに興味がある方、ぜひお越しください!