読者です 読者をやめる 読者になる 読者になる
月 の 上

Mithril本読んだ

土日Mithril触ってて、ドキュメント読むの面倒!と思ってたところ、オライリーから日本語の本が発売されたと聞いたので早速買って読んでみた

http://www.oreilly.co.jp/books/9784873117447/

本について

Mithril自体についての解説 + Mithrilでなんか作るサンプル という構成。

  • Mithrilの解説

  • なんか作るサンプル

    • Bootstrapと組み合わせるサンプル (§5)
    • mocha + power-assert + JSDOM でテスト (§8)
    • Promiseの解説 (§10)
    • TypeScriptで書いてみるサンプル (§12)

JSのMVCフレームワークとか触ったことない人でも読めるようにはなっているな?

↓その他↓

  • 「Router」は「ラウター」と発音する

    • 「root」と混同しないよう、英語圏のエンジニアも「ラウター」って発音する風潮らしい
    • なるほどのー
  • MVCアーキテクチャの説明がわかりやすい

    • 1章で MVC, Model2, MVP, MVVM の変遷がわかりやすく解説されている
    • 1.6の表、Reactはラウター持たないのでは?

Mithrilについての感想

ミニマルで良い

mithrilは16個のメソッドしか無い。

個人的には

  • Promise関連明らかに要らないので -2個
  • startComputation, endComputation も使いたくないので -2個
  • withAttrも使いたくないので -1 個
  • 常に m.route 使えば m.mount, m.render要らないので -2個

ということで9個のメソッドしか使わないで済みそう :punch:

startComputation, endComputation むずい

Mithril は Model の更新そのものではなく、更新を起こす処理の開始と終了を監視して View に反映する。 非同期処理など Mithril が自動的に監視できないケースでは、ユーザ側で m.startComputation() / m.endComputation() とすることで、処理の開始/終了を伝え、View に反映させることができる。

m.startComputation() を呼んだ後は必ず m.endComputation() しないといけない。 もし分岐やエラーで m.endComputation() をスルーしてしまうと、その後 View は更新されなくなってしまう。

start する度に Mithril 内部のカウンタを +1 し、endで -1 して カウンタが0になれば更新、という方式なので、他の処理で m.endComputation() が呼ばれてもダメだ。

むずすぎるので僕は m.redraw() しか使わないかな―

Viewもっと書きやすくしてくれ

ReactでJSXに慣れてしまった身体には、Mithrilのviewの書き方は結構ダルい。 こういうやつ↓

view : function (vm) {
  return m('.Timer', [
    m('.Timer__BPM', vm.bpm()),
    m('.Timer__Interval', vm.interval()),
    m('.Timer__TapButton', {
      onclick: ::vm.onClick
    }),
  ]);
}

一応 MSX ってのがあるけどあんまり使われて無さそう。

正直パフォーマンスで困ることあんまり無いので、MithrilからVirtualDOM機能ぬいた「ミニマルなラウター付きMVCフレームワーク」として使いたいという気持ちがある。

まとめ

「Mithril試したいけどドキュメント読むのしんどい」という人にオススメ。

Mithrilのドキュメント、詳しいんだけど、めっちゃ長いから読む気なくすんだよね……
参考画像↓

f:id:amagitakayosi:20150805144317j:plain

追記

ドキュメント日本語訳あるそうです
もっと詳しく知りたいとなったらドキュメント読むと良さそう

http://mithril-ja.js.org/