2012年6月6日水曜日

lego.js をリリースしました

本当は5月下旬に Github に公開してたんですが、ドキュメントを書くのにだいぶ時間がかかってしまって、不完全ながらも一応かたちになったので今回ご紹介させていただきます。

lego.js - a lightweight module loader for client-side JavaScript


lego.js?なにそれ?おいしいの?
lego.js は CommonJS Modules や RequireJS にインスパイアされた、JavaScript でモジュラープログラミングを可能にする軽量モジュールローダーです。
JavaScript ソースを機能ごとに分割してモジュール化し、それらを任意のタイミングでロードすることができます。
元々はサーバサイド JavaScript の共通仕様である CommonJS (その一部である Modules) をクライアントサイド (Web ブラウザ) に実装することを目標にしていましたが、Node.js の作者による 「CommonJS オワコン発言」を知ったこともあり、途中から AMD (Asynchronous Module Definition) Loader で有名な RequireJS の影響を多分に受け、CommonJS に準拠しながら AMD ライクなフォーマットを採用しています。

開発の経緯
HTML5 + JavaScript で Webアプリを作ると JavaScript のコーディング量が結構なボリュームになりますよね。特に何も考えず script タグなんかを使ってロードしてくると顕著に動作が重くなったりしませんか? スペックが貧弱なスマートフォンなんかで特に。
(セミシングルページとでもいうのでしょうか) ページ遷移を極力しないで Ajax やハッシュフラグメントによって表示内容を切り替えるような方式にしても、最初のページ起動時に JavaScript を一括でロードしてくると、今度は起動がやたら遅いアプリになってしまったり。

これは私自身が Web アプリの習作を作っているときに直面した悩みでもあるのですが、この問題の改善策として、起動時には必要最低限のスクリプトだけをロードしてきて、あとは場面の展開に応じて必要なスクリプトを追加ロードしてくるような仕組みがあれば良いのではないかと考え、あれこれ試行錯誤していくうちに lego.js が生まれました。

そういうの、もうあるよね
指摘される前に書いてしまいますが、lego.js のようなモジュールローダーは既にいくつか公開されています。上に書いた RequireJS や、curl、yabble.js なんかが有名です。
正直に書くと、lego.js を開発する前は RequireJS は名前しか知らず、それを使うと何がうれしいのか良く分かっていませんでした。そうして開発を進めていくうちに次第に RequireJS が分かり始め、自分のやっていることが「車輪の再発明なんじゃね?」と気づき愕然とするも、後学のためと言い聞かせ最後までやり切ることにしました (自己満とも言う)。

とりあえず
lego.js を使って Web アプリを作るとこうなる! という実装サンプルがまだないので、まずはそれを準備せねば。あとは書きかけになっているドキュメントかな。。

もし lego.js に興味を持たれた奇特な方がいましたら使ってみてください。
pullrequest も大歓迎です。

0 件のコメント:

コメントを投稿