Hatena::ブログ(Diary)

モトクロスとプログラムと粉砕骨折と RSSフィード Twitter

2014-12-10

Titanium Alloy で 量産アプリを作る場合のソース管理

久しぶりに自分のブログをみたら、最後の投稿が昨年の Titanium Advent Calendar でビビった @sngmr です。やぁ、1年ぶりだね。そして今回も Titanium Advent Calendar で投稿するよ。僕の担当は10日目です。


今回はちょっと特殊なケースでのノウハウというか、こういう風にやっているよというのをご紹介したいと思います。どんなケースかというと、ずばり「量産アプリ」の開発です。共通部分と個別部分をこんな感じで分けてソース管理してるよ!といったことをご紹介します。

まず僕が関わっている「量産アプリ」ですが、現在ストアに15アプリ程度並んでいます。小さなSNSのような機能を提供するアプリです。基本機能はどれも同じですが、アプリの見た目やコンポーネント化された機能の利用有無などが異なっています。

さてこのアプリは Alloy 製です。そしてソース管理には Git を使っています。それではどんな風にこのアプリを開発しているか、順を追って説明してみましょう。


f:id:sngmr:20141210140119p:image:w260:right

まずこのアプリの内部、各アプリで違う「個別」部分と、全てのアプリで共通となる「コア」に分かれています。「コア」はAlloy 製アプリの肝である「app/」ディレクトリで、その部分のみ Gitサブモジュール にして管理しています。

新たなアプリの発注があると、Titanium プロジェクトを作成して Alloy 化したのちに Gitリポジトリを作成、コミット後に「app/」ディレクトリ内部を全て消してしまい、その中に Gitサブモジュール として「コア」を取り込みます。当然「コア」は、「app/」ディレクトリに適した形( controller/ や models/ など)になっています。



f:id:sngmr:20141210140120p:image:w360:right

そしてこのコアである「app/」内に色々と工夫を凝らします。

一番の肝はタスクランナーである「alloy.jmk」です。"pre:load"のタイミング、つまりコンパイル前、且つ「Resources/」フォルダへ各リソースがコピーされる前に、プロジェクトルートディレクトリの決められたフォルダ(今回は「shop/」)の内容をそっくり「app/」以下へコピーしてしまっています。

コピーされる「shop/」フォルダには、あらかじめ「assets/」フォルダと「themes/myapp」フォルダが配置されています。その中にはアプリの動作や見た目を制御するJavaScriptファイルや、各アプリで違う利用規約ファイル、またアイコンやスプラッシュスクリーンなどが含まれます。(config.jsonでthemeはmyappを利用するよう定義)

これにより、コンパイル前にそれぞれのアプリで違う部分が「shop/」ディレクトリから「app/」ディレクトリへコピーされ、コアの動作を上書きすることにより、それぞれのアプリが各自決められた見た目・動作をするようになっています。

ただ、Gitサブモジュールとして登録されている「コア」のファイルを上書きしてしまうと、Gitの管理上都合がよくありません。そのため、「shop/」ディレクトリからコピーされる各種定義ファイルと「themes/myapp」は、Gitサブモジュール内の「.gitignore」でバージョン管理除外として登録されています。


いかがだったでしょうか?

「分かりにくい?」えぇ。僕もそう思います。「そんな複雑なことしないといけないの?}えぇ。もしかしたらもっと簡単な方法あったかもしれませんが、コアと個別の両方をきっちりバージョン管理しようと思う、こんな風になりました。

とまぁ。あまり汎用性もなく僕自身もこれから使うかどうか微妙な、Titanium で 量産アプリ のお話でした!


明日はhoyoさんでーす。

スパム対策のためのダミーです。もし見えても何も入力しないでください
ゲスト


画像認証

トラックバック - http://d.hatena.ne.jp/sngmr/20141210/1418188161