更新日:
【Rails】 中級者へ!Railsアプリケーション設計チュートリアル
私はプログラミングスクール卒で5年目のWeb系エンジニアです。
現在はフリーランスのエンジニアとしてWeb系の上場企業に勤めています。(過去、社員数人しかいないWeb系のベンチャー企業経験あり)
いろんなプロダクトに関わる中で、どのようなディレクトリ設計をすれば『メンテナンスしやすく可読性の高いRailsアプリケーションになるのか』を知ることができました。
この本では、『メンテナンスしやすい・可読性の高い』Railsアプリケーションのディレクトリ設計方法を体系的に学べるようにポイントを絞ってまとめています。
独学でプログラミングを勉強している人、プログラミングスクールを受講している人にとっては
「メンテナンスしやすいディレクトリ設計」や「可読性の高さ」を意識してソースを書く機会は少ないのではないでしょうか?
またエンジニアとして働く中で、勤め先のプロダクトのコードが汚くて読みづらいという方もいるのではないでしょうか?
本書の内容は、このような悩みを持つ人たちには役立つと思うのでぜひ読んで頂きたいです。
プログラミングスクール卒業後にぶち当たった壁
プログラミングスクールを卒業したばかりの頃は、自分一人で一からオリジナルアプリケーションを作った経験もあって、ググれば作りたい機能は自分一人で作れると思ってました。
スクールの教材やUdemyで買った教材などで知識が増えて、実装できる機能もどんどん増え、プログラミングすることにハマっていました。
しかし、実際にエンジニアの現場で働きはじめると、自身のコードの問題点に気付きました。
問題点は次の通りです。
- ルーティング設計やコントローラーの作成を場当たり的に作成していた。
- ロジックをコントローラに書いてしまい、モデルはほとんど使っていなかった。
- 新しいページを作る度にSCSSファイルを自分の好きなように追加していた。
独学やスクール上がりの人がエンジニアとして働き始めてから、上記の問題点を感じる人も多いと考えてます。
なぜならプログラミングスクールのような初心者向けの教材は、まずWebアプリケーションの基本的な作り方を理解できるようになるために、簡単なウェブアプリを作ることに重点を置いた内容だからです。
そのためメンテナンスがしやすいアプリケーション設計の考え方までは、カバーし切れていない傾向にあります。
プログラミングスクールを卒業した私は、スクールが教えている内容が悪いと思っていません。(もちろんスクールによると思いますが)
初心者からプログラミングを覚えてウェブアプリケーションを作れるようになるには、プログラミングスクールに通うことも、エンジニアになるための近道の一つだと考えているからです。
しかし、スクールを卒業したばかりの頃の私は、勤め先で「ソースが汚い」だったり「プロダクトの設計に合わせてコードを追加して」とプルリクエストでレビューしてもらって、マージに時間がかかることが多くあり苦労しました。
つまり、「プログラミングスクールで学んだこと」 だけでは、知識が足りずエンジニアとして働くのに苦労したということです。
しかし以下の問題点を改善して
- ルーティング設計やコントローラーの作成を場当たり的に作成していた。
- ロジックをコントローラーに書いていて、モデルはほとんど使っていなかった。
- 新しいページを作る度にSCSSファイルを自分の好きなように追加していた。
以下の様にソースを書くようになってから
- メンテナンス性が高く、可読性の高いルーティングとコントローラーの設計
- スキニーコントローラー・ファットモデルを重視したロジック分離
- FLOCSSを利用したSCSSの設計
プルリクエストで「ソースが汚い」とレビューされることもなくなり、自分自身もコードのレベルが上がったと自覚できました。
私自身がこのような苦い経験をしたこともあって、ぜひ 「独学やプログラミングスクール上がりの人」 には、本書を読んで可読性の高い設計を考えながら、ソースを書けるようになって頂きたいです。
そして現在エンジニアとして働いている中で「勤め先のプロダクトのコードが汚い」と感じている人にも、本書を読んで是非勤め先のプロダクトのディレクトリ設計やソースコードを綺麗にする参考にして頂ければと思います。
次の章『はじめに』に本書の概要を書いているので、読んでみてください。
「Railsアプリケーション設計チュートリアル」で学ぶこと
「Railsアプリケーション設計チュートリアル」は適切に責務分けされたディレクトリの作り方を段階的に解説しています。
ですから、本書を読めば実際に開発現場で採用されているディレクトリ設計方法を理解して、誰もが使いやすいRailsアプリケーションをあなたは作成できるようになります。
Railsを使えばMVCの構成になるので、基本的にアプリケーション全体で統一感の取りやすいディレクトリ設計になっています。しかし、規模が大きくなったときに明確なディレクトリ設計のルールがなければ、ルーティングとコントローラにばらつきが生じ、メンテナンスし辛いRailsアプリケーションになります。
「Railsアプリケーション設計チュートリアル」では、以下の3つのステップでルーティング、コントローラ、モデル、SCSSのディレクトリ構造とソースコードが適切に責務分けされたRailsアプリケーションを作成できる様になります。
1. リソースベースなRailsアプリケーションのディレクトリ設計方法
この章では、「リソースベースなルーティング設計方法」を中心に解説します。リソースベースなルーティング設計にすれば、ルーティング/コントローラ/ビューに統一感を持たせ、Railsアプリケーション全体として可読性の高いRailsアプリケーションになります。
逆にルーティング設計に統一性を持たせられなければ、コントローラとビューのディレクトリ構造に大きく影響が生じ、処理がどこに書いてあるのか分からなくなる原因になります。
まずRailsアプリケーションの土台となるルーティング設計方法を学びましょう。そして、「ルーティング/コントローラー/ビューのディレクトリに統一感を持たせたRailsアプリケーション」を作成できるようになりましょう。
2. スキニーコントローラ、ファットモデル
スキニーコントローラ、ファットモデルという考え方があります。この考え方はロジックはモデルに切り出し、コントローラーは処理を呼び出すために使おうという考え方です。
モデルにロジックを切り出すことで、コントローラー以外のいろいろな場所(例えばビューファイル)でロジックを使い回せる様になります。
コントローラーは処理を呼び出すだけなので、ファイルが肥大化せずコントローラーで何をしているか分かりやすくなります。
この章を読めば、同じ様なロジックをいろいろな場所で重複して書くことはなくなります。
モデルにどの様にロジックを定義すれば、汎用的にロジックを使いまわせるか分かる様になります。
3. FLOCSSを使ったSCSS設計方法
SCSSファイルはHTMLごとに書きたい様に書いてしまうと、あるSCSSファイルを変更すると、別の部分の見た目が崩れるといったデザイン崩壊が起きます。
デザイン崩壊を起こさないために、適切なディレクトリ構成でSCSSファイルを管理する有名な設計手法があります。
その設計手法は「FLOCSS」と呼ばれています。
FLOCSSを使用することで、SCSSのファイル数が不要にたくさん増えるのを防ぐことができ、どのデザインがどこに書いてあるか把握し易くなります。
また具体的な命名規則があるので、命名に統一性を持たせることができ、
ドキュメントも豊富なので分からなくてもすぐに調べられます。
この3つのステップを通して学ぶことで、ルーティング/コントローラ/モデル/SCSSのディレクトリ構造とソースコードが適切に責務分けされたRailsアプリケーションを作成できる様になります。
それでは、「リソースベースなRailsアプリケーションのディレクトリ設計方法」から学んでいきましょう。