Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationEventAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
111
Help us understand the problem. What are the problem?

More than 5 years have passed since last update.

@ytakzk

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

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

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
111
Help us understand the problem. What are the problem?