見出し画像

フレームワークを最大限使うということ

バヅクリCTO合原です。


 当社サービス開発は、
サーバーサイドアプリケーションにRails,
フロントエンドアプリケーションに、Nextjs
を使っています。


昨年終わりあたりから新メンバーがjoinしましたが、一部のメンバーは、Rails自体初めて‥ということなので、少しばかり私なりのRailsの使い方、考え方をこの場を借りてまとめたいと思います🤓


MVCアーキテクチャ

Railsといえば、👇で有名なアーキテクチャですね。
さて、MVCそれぞれの役割は何でしょうか?

MVCは、アプリケーションの責務を分割して理解しやすくするデザインパターンです。Railsは、このデザインパターンに従う規約になっています。

https://railsguides.jp/getting_started.html#mvc%E3%82%92%E7%90%86%E8%A7%A3%E3%81%99%E3%82%8B


MVCそれぞれの詳細については、Railsガイドを参照。

その上で、


リクエストを、適切なリソース(URL)へ誘導するのがルーティングの責務とした場合、



コントローラ(C)の責務は、リクエストの交通整理です。



例1 
ルーティングから渡されたGETリクエストがDBデータを要求しているなら、適切なmodelへリクエストを投げてGETする。

例2
POSTリクエストが、新しいレコードの生成を要求しているなら、対象のmodelにcreateを要求する(POSTする)



つまり、コントローラで、過剰にデータの操作したり、
30行以上に渡る表示用データの生成処理をしたり、するべきではないのです。



ここで、modelの説明の前に、👆に出た表示‥viewについて。



View(V)の責務は出力

コントローラからモデルを経由して操作してきたデータをユーザーに見える形にしたり、使いたい形にして、出力すること。

画面描画に限らず、CSVダウンロード(出力)やjsonなどでの返却すべて、Railsでは、このviewにて担うのが本筋です。
たとえば、描画ではよく使いがちな、文字列データのFormat変換メソッドをhelperに用意すると、view でカジュアルに使えるようになるのは、Railsのお作法に則ったやり方の例です。


コントローラで、無理くりメソッドはやしている事例もありますが、本来的ではないのです。


view contextで使うべきものは、適切に配置すれば、簡単に呼び出せるようになっているのです。



さて、modelの役割は何でしょう?



巷の説明だと、データベースアクセス、操作と理解している方も少なくないかもしれません。
たしかに、RailsではActive Recordパターンをmodelに採用しているため、そう思う方もいるかもしれません。



先に結論から話をすると、


Model(M)が担うべき責務は、(C)にも、(V)にも、相当しない部分全て

です。(やや乱暴ではありますが😅)



つまり、データベース操作に限らないのです。
Railsの機能を、つかわずともmodels配下に作成したクラスは、どこからでも呼べるようになります。



さらに、1からrubyだけでクラスを作成して、エラー処理作らずとも、
Rails側で実装されているvalidatesやerrorsなどがincludeできるActiveModelを使用すれば、いとも簡単にActiveRecordライクなモデルも作成可能です。



つまり、Railsのいいとこ取りな独自クラスが簡単に作れるのです。



また、モデルが、一定のお作法に則って作れるということは、
テストしやすい、ということにも通ずる点です。



今回はそのメリットの詳細は割愛しますが、
このようにRailsのお作法に乗ると、スクラッチでゼロから作るよりもはるかに標準化しつつ、簡便にプロダクト開発ができます。




これがRailsの規約に従うことの真価かな、と私は考えています。



言い換えるならば、これが、
フレームワークを最大限使う
ということ。



本当は、デザインパターンの適用のしやすさなど、Railsだからこそ、
生まれるメリットはたくさんありますが、きりがないので、
この辺にしておきますw



まとめ

Railsをベースに話をしてきましたが、何もRailsに限った話ではなく、
各種フレームワークがどういった思想、設計で、何を目的に作られているのか、


そういった視点で検討し、ケースに応じて、導入すべきですし、
使う以上徹底的にフレームワークが、提供してくれている機能を有効利用するべき、
だと私は考えています。



なんとなく流行っているから、といった理由だけで技術選定、導入するのではなく、
目的に合わせて、フレームワークの選定をすると、強力な武器になります。



バヅクリでは、フレームワークだけでなく、新技術の導入を積極的に行っています。
昨年は、より柔軟なUI、UXの改善を目指して、社内管理サイトにNuxtjsを導入したり、法人管理画面にViteを導入したりと、チームで果敢に技術選定を行い、導入から本運用までを行っています。



プロダクト開発を通じての価値提供を最大化するために、イイモノは積極的に取り入れていくスタンスです😊📝



まだまだ、発展途上の当社では、
新しい技術を導入するだけでなく、
どういった視点で導入し、利用していくのか、
実際の業務を通じて、トライできる機会がたくさんあります!



そんな当社が気になる方は下記より、カジュ面でもいいですし、コメント頂けたら嬉しいです !
技術的な挑戦=会社の成長になる、ダイナミックな当社で力を発揮したい!エンジニアとして腕を上げたい方は一報お待ちしております!




この記事が気に入ったらサポートをしてみませんか?