WEBアプリケーションでMVCを選択する場面
プロダクトを作る時の技術選定は悩みますよね。
それはWEBアプリも例外ではありません。
昨今のWEBサービスはとてもリッチです。
ブラウザでできることがここ数年で一気に増えました。
ブラウザ上でWEBページを遷移することなく、
入力によって瞬時にコンテンツを切り替えたりすることも
ごく当たり前に見ます。
そんなモダンなサービスを作ろうとすると「API」と
「javascriptフレームワーク(もしくはライブラリ)」を
使用したコンテンツになるでしょう。
そうなると、WEBサーバーで利用するMVC(Model-View-Controller)は
もう古いと感じる方もいらっしゃいます。
しかし、今でもMVCを採用する場面はあると考えています。
それは、「Webアプリを初めて作る」ときです。
目次
javascriptが使いづらかった時代にMVCは活躍していた
MVCは2000年代には活躍していました。
その当時のjavascript事情は良い状況ではありませんでした。
- javascriptのコードがブラウザによって動かない
- 端末によってはCPUが貧弱でjavascriptが重い
2000年代はブラウザ間の差異がかなりあり、
すべてのブラウザで実行できるjavascriptのコードにすることは
とても労力が必要なことでした。
2010年代に入ってからもブラウザのシェア争いは熾烈でしたし、
CPUも今よりも性能はかなり悪かったです。
そして昨今、ブラウザによる差異とCPU性能が向上し、
API+javascriptで作るリッチなコンテンツをつくる土壌が整いました。
つまり何が言いたいかというと、
API+javascriptの組み合わせがでる前は、
長らくMVCでWEBアプリを作るということは
ごく普通のことだったということです。
javascriptを活躍させるには難しい状況は今でもあります。
少しネガティブな結論になりますけれども、
「Webアプリを作る経験に乏しい」こそ、MVCを採用する場面ではないでしょうか。
Webアプリを初めて作るときにAPI+javascriptを選択しない理由
API+javascriptフレームワークでWEBアプリを最初に作ろうとすると
情報量の多さから難易度が高めです。
Webアプリをつく経験自体がないのであれば、ブラウザ側の
- html
- javascript
- css
を学習しつつ、サーバー側の言語(java, ruby, php, etc.)
をコーディングしていくことになるので、単純に学習量が多いのです。
WEBアプリを作る経験が少ないのであれば、機能があるサーバー側に注力したほうが良いです。
というのも、見た目だけ良くてもバグだらけのプロダクトでは
公開までいかない可能性があります。
しかし、機能に重点をおけば、見た目や動きは貧相でも公開はできます。
また、WEBアプリをMVCに作ってしまえば後からAPIに変えることも可能です。
見た目がよく使いやすいコンテンツを作りこむのは、そこからでも遅くはないと思います。
API+javascriptフレームワークにつなげるにはMVC以外の層を用意しておく
MVCは一度作ってからjavascriptフレームワーク+APIに移行していくのは
難しいことではありません。
さらに移行を簡単にするためのコツがあります。
それはMVC以外にDBとの間に一層挟むことです。
名前は何でも良いのですが、ここではその層をServiceと呼びましょう。

目的はControllerの役割を薄くすることです。
具体的に言うとViewを表示するためだけ機能をメインにします。
エラーが無ければ通常のView
エラーが発生したならエラー用のViewを表示させます。
それ以外の「値をもとにDBにクエリ発行し・・・」のような機能はControllerに置かないのがポイントです。
そうすることでControllerとViewの部分をAPIとjavascriptフレームワークに
置き換えるだけで、労力が少なく済みます。

ControllerをAPIへの変更することは、
ModelをViewに渡す機能を、Modelをjsonやxmlにする機能に変えるだけになるでしょう。
あとはjavascriptフレームワークを使って、
リッチなコンテンツを作ることに集中するという算段になります。
全ページ一気に変更ではなくURL単位やController単位で変更ができるため、
変更リスクを小さくできるのもお勧めのポイントです。
まとめ
以上の内容をまとめますと
- Webアプリを作る経験が少ないならMVCを採用する選択はアリ
- 今後の拡張のためにMVC以外に一層作っておくと楽
WEBアプリをつくれるほとんどの開発言語ではMVCが使えるはずです。
最新の技術で作るのも挑戦という意味では悪くないですけども、
難しいと考えたならばMVCを採用することも検討してみてはいかがでしょうか。