JavaScript Url DispatcherとかRouterについて調べた

あるいは kanazawa.js v1.0.1 勉強会 : ATND に参加してきた。(前回と同じパターンの使い回し)

なぜdispatcher(あるいは router)か

実はピンときてなかったけど、なんかこういう手法があるっぽいということだけ知ってた。

pixiv Tech MeetingでpixivのJSの話をしました

から辿れるスライドを見てなるほどなと思った。自分がいちばんなるほどと思ったのは

WAFの不自由さ

というか layout ファイルの <script> を可変にできるように仕組み用意していちいちそこに何か文字送ったりするのってめんどくさいよねというか、要するに

script loading も DRY に

ってことじゃないかな。もっかい整理すると

  • layout ファイルで JavaScript のライブラリの読み込みは共通にできる
  • でも layout ファイルの中に手を出せるのはサーバサイドだけだし、一部でだけ共通な JS ファイルの読み込みは面倒
  • 集中管理できないし、分業してると何かと面倒

という問題を解消するために dispatcher(あるいは router)が有用だよってことだね。なるほどなぁ。

いくつか見つけた

日本語で読めるものもいくつか。kayac と pixiv は手作りで、ライブラリ側にこの機能が統合されているものはまだあまり見かけない。もしかして uupaa が初めて?

kayac バージョン

pixiv バージョン

先ほどの納得のいった資料の元ですな。

uupaa バージョン

uupaa-js - Project Hosting on Google Code

jsdo.it にサンプルが載ってる。

uu.ready("href:URL Dispatcher", callback…) test code - jsdo.it - Share JavaScript, HTML5 and CSS

jDispatcher(ちょっと意図と違う)

みんな大好き jQuery の plugin であったら便利じゃねーのと思ったので探したんだけど、これは Ajax Request を飛ばすのが目的のものなので除外。

dispatch | jQuery Plugins

jQuery Router

こっちが今回の目的に合致する jQuery plugin.

複数ページの window.onload をまとめて書ける jQuery プラグインを書きました | Tanablog

jQuery Router を試す

全部のコードを晒すのもアレなので一部だけ。Ruby の WAF だとだいたいこんな感じでまとめられるはず。実際に以下のコードは Sinatra 上で動かして確認した。

これで application.js だけで必要な script の読み込みを制御できるので、サーバサイドの処理には手を加える必要がないし、分業している場合はサーバサイドの人に処理の追加を頼む必要がない。

楽ちん。

ちなみに $LAB.script() は LABjs のメソッド。

感想

個人的にはもっと Sinatra ライクな rouing ができると嬉しいと思う。正規表現のみの routing は罠にハマりやすいんじゃないかな。まぁテスト書けってことなんだろうけど、このままだとテストも書きにくい(というか書ける?)。

制御したい URL のパターンが増えたらテスト書ける router を別に探した方がいいのかもしれない。routing が一カ所に集まっていれば差し替えも楽だし。

※ 今回紹介した中では pixiv バージョンにはテストがついてる。

LABjsはこの辺参照

Loading And Blocking JavaScript だそうで。

非同期 load、同期 load を自在に設定できる便利ライブラリ。JavaScript を細かく分割して必要なものだけロードしたいなら持ってこい。つまり dispatcher, router と相性がよい。はず。

まとめ

kanazawa.js 超かっこよくてオサレなのでみんな来ればいいよ!(えー

LABjs と Sinatra で別エントリ書くと思う。

おまけ

git の bundle ファイル を上げてみた。fetch してから1 git clone するとどんな風に作業進めたか見れるよ。

  1. bundle ファイルをただ上げただけなので直接 clone できません。 

マジか < /.編集者otsune

「かぁさん。赤飯を炊いてくれ」 (Masafumi Otsuneの日記)

精力的だなぁ。

そうか結城さんが Ruby 本書く、のか?

いや知らないけどね。もしそうならかなり喜ばしい話だ。

rubyco(るびこ)の日記

この日記がスタートして3週間ほどで Ruby 版 Tropy が公開されている。その後、Rails のネタが本家の日記に載る。着実に進んでいる雰囲気。

というか、自分が興味を持つ順番と丸っきり違うな、この日記。面白い。

テンプレートを調査

あれこれ考えると現状では PEAR の Template_Flexy がよさげな雰囲気。ドキュメントも揃ってるし。PHPOOT はもう少し様子見が必要かな。 あとは PEAR の取り回しですな。

cocot

cocot - COde COnverter on Tty

Windows をログオフしたら cygwin 上の ssh セッションが切れるとか cygwin 上で長時間動いているプロセスがぶち切れるという問題の解決策を求めて 2ch にダイブして見つけた。

Windows で日本語ファイル名や Windows 標準のコマンドの出力を拾うために rxvt を sjis で起こしておいて、remote の Un*x で euc を使うって芸当が可能に! いい!

しかしこれ以外に有用な情報はなかった。。。

Interview with Larry Wall @/.-j

Perl っぽい文脈で @ を使うとなんか気を使いますね ;-)

次は Ruby のまつもとさんか?

ですって。来るもの拒まずか?

About

例によって個人のなんちゃらです