Edited at

フルスタックJSフレームワークMeteorのメリット&デメリット

More than 3 years have passed since last update.

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で書き換えようか悩み中。