JavaScript で UI を書くことについて思ってることを書く

最近ギョームでジャバスクリッ書いてる。というか CoffeeScript 書いてる。

そんな中で、ある程度以上複雑なUIを動的型付け言語で書くのは狂気の沙汰だという気持ちがある。

サーバーサイドは結構論理的にきれいな設計にできることが多く、そんなに複雑なオブジェクトコンポジションが生まれないように思う。まあ多分これは HTTP がそもそもステートレスなプロトコルなので、複数の操作に対して状態を保持する方法がセッションとかcookie以外にないというところによるのかもしれない。

一方、UIを書くというのは「論理的に整理された世界」と「人間の感覚」の間をつなぐ部分を書くということでもあり、なかなか論理的にきれいな設計にできないことが多い。UI自体の設計をがんばるときれいになるみたいなのもあるとは思うけど。まあ、そうであっても、UIの部分はどうしても状態をたくさん持つ。それをきれいに設計しようとすると、サーバーサイドよりもオブジェクトコンポジションを多用することになる、というのがわたしの感覚だ。

で、そのときに情報として重要になるのが、あるクラスのインスタンスがどのクラスのインスタンスを保持する、しうるのか、というものになると思う。たとえば ViewControllerA は ViewControllerB の死活監視に責任を持っていて〜、こいつはどのModelを保持していて〜、とかそういう部分。

で、こういうのは、静的型付けで書くとコード自体に書かれた型情報がドキュメントとして振る舞ってくれたりするのでうれしいんだけど、CoffeeScript とか JavaScript とかだと型の情報がコード中に出てこない(出てきにくい)ので、読むのがつらい〜〜保守するのがつらい〜〜〜という感じになる。

そのため、わたしは最近「期待する型はこれだよ〜」とか「この型の値を保持することを期待されているよ〜」的な情報をコメントに残すようにしているのだけれど、そもそもいちいちコメントにそういうの書くくらいならコンパイルの時点でそれを静的にチェックしてほしいしそうしてくれないとコメントをメンテするみたいな必要が出てきてだるい。

というあたりの事情で、わたしは現在乱立する AltJS の中では TypeScript 推しではあるのだけれど、CoffeeScript ほど JS の BadParts を解決してくれる感じがしないのがつらいのと、自分ひとりで書くならともかく仕事で書くものに現段階で TypeScript を選択するのはけっこう大きな賭けだよなという意識があり、結局 CoffeeScript 使ってる。

という感じで、id:mizchi さんが作ってる TypedCoffeeScript はかなりソリューションな感じしていて、注目しているのだった(なんだこの結論)。