🤞

Railsで静的ページが増えてきたときのベストプラクティス

に公開

色々なサイトを作ってきた中で、静的ページの作り方には本当にいろんなパターンがあると感じました。
「RESTfulにしたいからコントローラを分けるべき」「できるだけDRYに high_voltage(非推奨) を使うべき」など意見も様々です。
https://github.com/thoughtbot/high_voltage

でも結局、一番シンプルな PagesController に戻ってくるのが良さそう、というのが今の僕の結論です。

静的ページって、一度作ったらそんなにメンテしないし、気にしない。でも簡単だからこそ、みんなこだわりが出て混乱しがちなんですよね。

これはまさに、パーキンソンの凡俗法則 かもしれませんが、今回は僕なりの静的ページ設計のベストプラクティスをまとめておきます。


✅ 基本:まずはPagesControllerで十分

# config/routes.rb
get '/about', to: 'pages#about'
get '/terms', to: 'pages#terms'
<!-- app/views/pages/about.html.erb -->
<h1>About Us</h1>
<p>This is the about page.</p>

✅ ページが増えてきたときの課題

  • PagesController にメソッドがどんどん増えていく
  • app/views/pages/ にファイルが増えて一覧性が落ちる
  • URL設計がバラバラになることも

✅ コントローラを用途別に分割する

用途別に分けてスッキリ整理します。

# config/routes.rb
get '/about',    to: 'pages#about'
get '/company',  to: 'pages#company'

get '/terms',    to: 'legal_pages#terms'
get '/privacy',  to: 'legal_pages#privacy'

get '/faq',      to: 'help_pages#faq'
get '/how-to',   to: 'help_pages#how_to'

namespaceでURLを整理する

URLに階層を持たせたい場合は namespace が便利です。

# config/routes.rb
namespace :legal do
  get 'terms'
  get 'privacy'
end

namespace :help do
  get 'faq'
  get 'how_to'
end

これにより、以下のようなURLになります:

  • /legal/terms
  • /legal/privacy
  • /help/faq
  • /help/how_to

✅ CMSを検討するケース

以下のような状況であれば、CMS(コンテンツ管理システム)の導入を検討するのも良い選択です。

  • 非エンジニアもページを編集したい
  • 頻繁にコンテンツの更新が発生する
  • 法務ページ、FAQ、プレスリリースなど、変更が多い

おすすめの選択肢

  • Comfortable Mexican Sofa(Rails製CMS)
  • ActiveAdmin + Page モデルの自作CMS
  • Notion API連携(ヘッドレスCMSとして活用)

✅ 状況別のベストプラクティスまとめ

ページ数 方法
〜10 PagesController 一括管理
〜20 コントローラとビューを用途別に分割
20〜 namespace を使って階層化+CMS導入検討

✅ まとめ

静的ページはつい軽視しがちですが、ページ数が増えるほど保守性に差が出ます

Railsは柔軟な分、構成がカオスになりがちです。だからこそ、次の3つを意識するのが大切です:

  • 用途ごとに構造化
  • 再利用できるところはPartial化
  • 状況によってはCMS化

静的ページもプロジェクトの一部。気持ちよく運用できる形に整えておくと、後がぐっと楽になります。

Discussion