not good but great

プログラミング、アート、映画・本の感想について書きます。

TitaniumでCommonJS仕様に乗っ取って、ファイルをincludeする

前回のエントリの最後で外部ファイルの読み込みをどうすれば良いのだろうかというのを書きました。調べてみて書き方が少しわかったので、記録しておこうと思います。
・前回エントリ
TitaniumのYQLで複数フィード読み込み、Backボタンの文字色を変える - not good but great

CommonJSってなに?

CommonJSが生まれた背景

近年、Javascript利用者が増えています。理由は簡単に書けるからでしょうか?人気の原因は置いといて、本来ブラウザで処理を行うJSをサーバサイドで扱えないものかという声が出てきました。しかしサーバサイドで扱えるように汎用的に設計されていないJSはにはAPIが定義されていませんでした。そこでエンジニアたちは独自拡張したRuntimeを公開し始めました。それらは使用が統一されていなかったので、互換性はありませんでした。
ランタイムとは 【 runtime 】 〔 実行時 〕 - 意味/解説/説明/定義 : IT用語辞典

CommonJSは仕様のこと指す

そこで偉い人が「サーバサイドJSの標準仕様を決めようぜ」と叫びました。そこでできたのがCommonJSです。CommonJSは仕様のことを指します。特定のライブラリではないです。

このスライドにざっと解説が載っていたので参考にしました。
CommonJSの話
Modules/1.0 - CommonJS Spec Wiki

CommonJSで確定していること

標準仕様はまだまだ協議中のようで、確定しているものは少ないです。主に「パッケージ定義」「include機構」「標準入出力」が決まっています。

CommonJSにおけるincludeのやり方

Titaniumで使う場合を考えます。

exportsにセット

test.js

exports.hello = function(){
	Ti.API.info("hello");
};

test.jsというファイルを作成し、Resourcesディレクトリに配置します(app.jsと同じ階層)。次にexportsオブジェクトに関数をセットします。

モジュールを読み込む

app.js

//モジュールを読み込む
var greeting = require("test");

greeting.hello();//hello

requireで拡張子を抜いたファイル名を指定して、モジュールを読み込みます。それでtest.jsで定義した関数が使えるようになります。

・参考
小さな Titanium Mobile の読み物 | The Little Book on Titanium (Appcelerator Titanium)
[Titanium勉強日記 6] CommonJSモジュールとrequireについて調べた | taichino.com

2つの設計方法

マルチコンテキスト

windowのurlに外部ファイルを指定する方法のことです。ドットインストールの外部ファイル読み込みではこれが出てきましたが、現在のTitaniumでは非推奨となっています。これはコンテキストが違うため、変数がごちゃごちゃになってわかりにくからだと思います。

シングルコンテキスト

CommonJSに乗っ取った書き方で、上で説明したようにexportsとrequireを使うやり方です。

[Titanium][JavaScript]コンテキストとグローバル関数らへんについて - for geek suit

空のグローバルオブジェクトを作って、即時関数を作るやり方も紹介されていましたが、よくわかりません・・・・。
Titanium Mobileでアプリ開発: シングルコンテキストでの設計方法(1)

今後の展望

Titanium Classicを今使っていますが、Alloyというもののほうが書きやすいらしいです。そのあたりのことがよくわかっていないので、調べてみたいです。フィード読み込みくらいなら、Titanium Classicのみでできそうな気もします。

includeの方法がわかったので今作成中のニュースアプリの書き方を変えて、扱いやすくしようと思います。