living on the edgeって~~辛い~~楽しいですね。北村聡士 @satooshi_jp です。

去年、ニュースを見たときに何だこれ?と思ったまま、全然使ってみる機会が無かったのでずっと知りませんでしたが、Meteorすごいです!(今更)

公式ドキュメントが若干分かりづらいので、やり始めは結構苦労します。で、まだpreview版なので、この先どうなるのか分かりません。

実際に試してみて、クライアント側・サーバー側でコードの共有ができるのはやっぱり強力だなと。さらにリアルタイムでデータが共有されるというのがすごいところ。ちょっと前のリリースで、データのアクセス権を設定できるようになったみたいです。

以下、ちょっとハマったところ。

Smart Package

meteor add packageでパッケージが追加できますが、これ全然少ないんですよね。meteoriteを入れると、外部のsmart packageというのが利用可能になります。むしろこれをドキュメントに書いてほしい。。

MVCのCはrouterで

必須だと思ったのはrouterパッケージ。この中でpage.jsというのを使ってるみたいです。URLに応じて、includeするテンプレートを変更したりroute callbackが書けるようになります(最近のマイクロフレームワークが持ってそうなアレ)。ルーティング + ページ遷移 + アクションコントローラーの機能を持っていると考えるといいかもしれない。

Meteorテンプレート(というかHandlebars)の書き方だと、<body>タグのなかでincludeするテンプレートを指定することになりますが、これをURL毎に変更したい場合、とてもめんどくさいんですよね。routerパッケージを入れましょう。と書くだけで、中身が切り替わるようになります。

ユーザー管理とか、いわゆるAuth

  • accounts-ui
  • accounts-password

をmeteor addすると使えるようになります。AccountsとかPasswordsのAPIですね。ログイン / ログアウト / ユーザー登録 / パスワード変更 / パスワードリセットなどなど。

3つのファイルはシンプルなんだが

リリースした時は違ったのか、どうもcss、html、jsだけで書いてあるサンプルが多いですよね。僕が試した0.5.4では普通にファイルを分割してOKです。ディレクトリ構成に応じて、クライアント側だけで実行されるファイルとか、サーバー側だけで実行されるファイルなどに分割できます。この当たりの事情はgihyoの連載に詳しく書いてありました。

サンプルを作ったときの構成はこんな感じ。機能毎、と書いてあるのは、いわゆるSymfony2のbundleの事。html以下にviewとなるテンプレートファイルを配置してますけど、これはclientに入れた方がいいのかもしれない、とか、機能毎にViewとかViewModelとかディレクトリ作った方が良いのか?と書いてて思ったりした。routingを一カ所に集める理由も無ければ、SF2のbundleと同じ感じの構成でいいかもね。

  • client : クライアント側だけのコード

    • Helper.coffee : テンプレートヘルパー
    • Init.coffee : startup用コード
    • Routing.coffee : ルーティング
    • ViewModel
      • Login : 機能毎
        • Login.coffee : eventやら変数のバインド
  • common

    • Lib
      • XxxUtil.coffee
  • css : ここのcssは一つにマージされる

  • html

    • Login : 機能毎
      • Login.html
  • public : ここはマージされない静的ファイル置き場

  • server : サーバー側だけのコード。構成はclientと同じ感じ

Reference

Meteor関連

MongoDB

CoffeeScript

なんか見つけたww すげーwwww