Meteorでアプリケーションを作ってリリースしたので、その過程で出てきた良い点と悪い点をまとめておく。
Pros
1.インストールするだけで環境構築されている。一瞬でコードを書ける。(普通はDB、BE、FEそれぞれ構築しないといけないがその作業が皆無)
2.miniMongoと呼ばれるシステムがフロントで走っているのでサーバのMongoからとってきたデータをそのままフロントに呼び出せる。APIを叩く必要もない。全部Meteorがやってくれる。
3.ログイン処理がパッケージ化されていて、1行でログイン処理を実装できる。これはなんの誇張でもない。
4.Facebookログインだって5行くらい。
5.MVCではないのでテンプレート(いわゆるモジュール)毎にファイルを作ることが出来て管理しやすい。
6.デフォルトのフォルダ構成が明快でYomanいらず。(/client, /lib, /server, /publicなどなど)
7.Lessとかcoffeeの導入も簡単でpackageを追加するだけ。もちろんMeteorが分割して書いたLessファイルを1つにまとめてくれたりcoffeeのコンパイルもしてくれる。
8.それなりにリッチなUIも作れそう。
Cons
1.フルスタックということは何もかもMeteorに依存してしまう。(これはProsでもあるのだけど)
2.Mongo以外の選択肢が基本的にない。
3.ルーティングの時にURLのパスを使ってDBの処理をかけたい場合(タグの名前やIDがURLに含まれてて、それでDBに検索をかける場合とか)その辺りの処理をルーターに書かないといけない。いわゆるControllerの一部がRouter内に入り込んでしまう。これはIron-Routerの問題か。
4.画像や動画を動的に同一プロダクト内に追加できない。やりたければcollectionFSを使うかMongoにそのままつっこむかどっちか。developmentの段階ではpublic以下に画像なりをnodeのAPIで書き込んでそこからデータを取り出せたのでよかったが、デプロイしちゃうとそれができなくなる。Meteorが内部でシンボリックリンクを作っているため。このせいでAWS S3デビューすることに。(これがつらかった)
5.デプロイするにはプロジェクト全体をパッケージ化しないといけない。フロントのCSSだけ変えるとかHTML1行追加するだけでもデプロイ作業が必要。
6.FacebookのOGPタグに対応してない?おそらく。
7.miniMongoはあくまでminiなので、mongoで使えるのにminiでは使えないコマンドがある。例えばdistinct()。
##結論
リリースが前提のプロダクトには二度と使わない。
最初はオールインワンのフルスタック型に魅力を感じていたが、あまりにMeteorに依存していて拡張性がない。
ただHackDayとかリリースしないものにはうってつけなフレームワーク。
Meteorが持つサーバにデプロイもできるし。URLはxxx.meteor.comとなる。CNAMEの設定で独自ドメインにも変更可能。これはすごい。
今後を考えてExpressで書き換えようか悩み中。