Meteor0.5.4を使ってみた
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やら変数のバインド
- Login : 機能毎
common
- Lib
- XxxUtil.coffee
- Lib
css : ここのcssは一つにマージされる
html
- Login : 機能毎
- Login.html
- Login : 機能毎
public : ここはマージされない静的ファイル置き場
server : サーバー側だけのコード。構成はclientと同じ感じ
Reference
Meteor関連
MongoDB
CoffeeScript
なんか見つけたww すげーwwww