Titanium Alloy プロジェクトでの開発のお供、alloy-smelter のお誘い

  • 9
    いいね
  • 0
    コメント
この記事は最終更新日から1年以上が経過しています。

地味すぎて世間から忘れられてしまいそうな Titanium の布教も兼ねて、先日のもくもく会に参加もできず、存在自体地味なぼくもアピールしてみようかと投稿してみました。よろしくお願いします。

さて、突然のお誘いですが、お誘いというか、ぼくみたいな方にはお勧めですので是非どうぞ。

ぼくはどうも命名がふらふらしがちで、Alloy プロジェクトで $ alloy generate controller foo した後でも、やっぱり違うなーとコントローラ名をちょこちょこ変更しまくる癖があります。病気ですね。ただ、コントローラ名を変更すると言っても、変更するのはコントローラ、ビュー、スタイルの3つになります。毎度毎度こんなことをしていたらとても非効率ですよね。ということで、一括で簡単に変更したいなーという怠惰な理由でこのコマンドを作り始めました。普段から Titanium Studio ではなくて、コマンドラインで開発をする方にはピッタリです。

alloy-smelter は npm で提供されています。インストールは Node.jsと npm が必要ですが、Titanium をご利用な方はすでにセットアップ済みですよね。以下のコマンドでインストールすることができます。

$ npm install -g alloy-smelter

ファイル操作系

コントローラ・ビュー・スタイルを1セットに、一括で操作することができます。

コピー

$ smelter copy foo bar

もちろん深い階層のフォルダへコピーすることも可能です。

$ smelter copy foo bar/baz

移動(リネーム)

$ smelter move foo bar
$ smelter move foo bar/baz

削除

$ smelter remove foo
$ smelter remove bar/baz

生成

alloy コマンドへそのまま渡します(controller、view、style のみ)。

$ smelter generate controller foo

また、--template オプションを付けることにより、自身で用意したテンプレートでコントローラ・ビュー・スタイルを生成することができます。

$ smelter generate controller foo --template bar

テンプレートはホームディレクトリ直下に .smelter が作られていますので、そちらへ予め配置しておいてください。上記の例では bar というテンプレートが指定されていますので、以下の様な構成になります。

$HOME
  └ .smelter
    └ template
      └ bar
        ├ controller.js
        ├ view.xml
        └ style.tss

ビルド

titanium コマンドへそのまま渡します。--titanium オプションで渡したいオプションを指定してください。

$ smelter build --titanium '-p ios --retina --tall'

また、プリセットを用意すれば、頻繁に指定するようなオプションを予め指定することができます。プリセットは JSON で管理していますので、以下のコマンドで編集することができます。

$ smelter preset

ぼくは各シミュレータ毎に指定していたりします。最新の開発環境ではシミュレータも UDID 指定になったようで、これは是非指定しておくと良いかと思います。

{
  "iPhone5s": "-p ios -C XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX",
  "iPadAir": "-p ios -C XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX"
}

プリセットが用意できたら、ビルド時にプリセット名を指定してください。

$ smelter build iPhone5s

クリーン

titanium コマンドにもクリーンはありますが、こちらは build フォルダだけではなく Resources も削除します。Alloy プロジェクトではなく、クラシックなプロジェクトの場合は気をつけてください。

$ smelter clean

統計

Alloy プロジェクトの統計を出力します。

$ smelter stats
┌────────────────┬─────────────────────────────────────┐
│ Category       │ Summary                             │
├────────────────┼─────────────────────────────────────┤
│ File           │                    controllers:   1 │
│                │                          views:   3 │
│                │                         styles:   1 │
│                │                         models:   1 │
├────────────────┼─────────────────────────────────────┤
│ View node      │                          Label:   8 │
│                │                      TextField:   4 │
│                │                         Window:   3 │
│                │                       MenuItem:   3 │
│                │                           View:   3 │
│                │                     HeaderView:   2 │
│                │                       ListView:   2 │
│                │                      Templates:   2 │
│                │                   ItemTemplate:   2 │
│                │                    ListSection:   2 │
│                │                       ListItem:   2 │
│                │                           Menu:   1 │
│                │               NavigationWindow:   1 │
│                │                      TabbedBar:   1 │
│                │                         Labels:   1 │
├────────────────┼─────────────────────────────────────┤
│ Selector       │                        element:   9 │
│                │                             id:   7 │
│                │                          class:   2 │
├────────────────┼─────────────────────────────────────┤
│ Property       │                         height:   7 │
│                │                         bottom:   6 │
│                │                          width:   6 │
│                │                           left:   5 │
│                │                            top:   4 │
│                │                backgroundColor:   3 │
│                │                          title:   3 │
│                │                          right:   3 │
│                │                          color:   2 │
│                │                 separatorColor:   1 │
│                │            windowSoftInputMode:   1 │
│                │                   paddingRight:   1 │
│                │                 selectionStyle:   1 │
│                │                      textAlign:   1 │
│                │                  verticalAlign:   1 │
│                │                       editable:   1 │
│                │                          index:   1 │
│                │                       hintText:   1 │
├────────────────┼─────────────────────────────────────┤
│ Color          │                           #fff:   1 │
│                │                        #fcfcfc:   1 │
│                │                        #bcbac1:   1 │
│                │                        #f6f6f6:   1 │
│                │                           #333:   1 │
│                │                        #d9d9d9:   1 │
├────────────────┼─────────────────────────────────────┤
│ Event type     │                          click:   8 │
│                │                       dblclick:   2 │
│                │                          swipe:   2 │
│                │                         return:   2 │
├────────────────┼─────────────────────────────────────┤
│ Event listener │                    doToggleall:   2 │
│                │                       doToggle:   2 │
│                │                         doEdit:   2 │
│                │                       doDelete:   2 │
│                │                       doEdited:   2 │
│                │                          doAll:   1 │
│                │                       doActive:   1 │
│                │                    doCompleted:   1 │
│                │                          doTab:   1 │
└────────────────┴─────────────────────────────────────┘

さいごに

titanium コマンドの ti な様に smelter コマンドは sm がエイリアスとして登録されています。ちょっとアレな名前ですが、毎回 smelter と打つのもおっくうなので、こちらでどうぞ。

というわけで、これからもちょこちょこアップデートをしていきますので、なにか欲しい機能があれば GitHub でプルリクエストなり Issues で投げていただければと思います。