Controller を作らないで View を追加したい


こんにちは。 Gaji-Labo 衛生班の和田です。
激落ちくん is Awesome!
この記事は、 Gaji-Labo Advent Calendar 2015、14日目のエントリです。

さて、 Ruby on Rails プロジェクトのフロントエンド開発を多く担当してる弊社では、以下のようなケースがよくあります。

  • Visual Regression Testing のためのダミーページが欲しい
  • 新規・リニューアルなどのために、現状は存在しないページを作りたい
  • でも、都度、 routes や Controller 書くのは手間だよね

そこで、この記事では、気軽に view の開発を進めるための準備についてご紹介します。

※ここまでに書いた、「Ruby on Rails プロジェクトの開発環境を Vagrant で作る」、「Rails プロジェクトでフロントエンド開発を高速化する」も参考になれば幸いです。

条件

  • /sandbox/ 以下は、テストや view の実装サンプルに使う
  • /sandbox/admin/ 以下は、管理画面用として、別のレイアウトを使用する

routes と Controller を書く

「Controller を作らないで View を追加したい」というタイトルですが、早速、routes と Controller を書きます(汗

ワイルドカードを使います。
参考:3.11 ルーティンググロブとワイルドカードセグメント | Rails のルーティング

config/routes.rb

Rails.application.routes.draw do
if Rails.env.development?
get 'sandbox/*path', to: 'sandbox#show'
end
end

Controller を書く

基本は、 layouts/application を使う。 /sandbox/admin/xxx だったら、 layouts/admin を使う。
という条件です。

app/controller/sandbox_controller.rb

class SandboxController < ApplicationController
def show
if params[:path].split('/').first == 'admin'
layout = 'admin'
else
layout = 'application'
end

render "sandbox/#{params[:path]}", layout: layout
end
end

View を書く

ここまでの作業で、view のファイルを追加するだけで、以下のようにアクセスできるようになるはずです。

app/views/sandbox/blog/index.html.slim
-> //localhost:3000/sandbox/blog/index
app/views/sandbox/blog/category/index.html.slim
-> //localhost:3000/sandbox/blog/category/index
app/views/sandbox/admin/entries/index.html.slim
-> //localhost:3000/sandbox/admin/entries/index
app/views/sandbox/admin/entries/edit.html.slim
-> //localhost:3000/sandbox/admin/entries/edit

.slim なのはプロジェクトによって読み替えてください。

まとめ

従来の流れ

1. HTML/CSS 書く人:「ページ追加するので用意してください」
2. Ruby 書く人: 「はーい」
3. HTML/CSS 書く人: 待つ
4. Ruby 書く人: 「用意しました」
5. HTML/CSS 書く人:「はーい、書くのでお待ちを」
6. Ruby 書く人: 待つ
7. HTML/CSS 書く人:「できました!実装お願いしまっす」
8. Ruby 書く人: 「はーい」

サンドボックス利用時

1. HTML/CSS 書く人:「ガシガシ書くのでいけるところから実装進めてください」
2. Ruby 書く人: 「はーい。お願いします!」
3. HTML/CSS 書く人:「全部、おわりました!」
4. Ruby 書く人: 「全部終わったので、一旦、サンドボックス閉じますね!」

のように待ち時間がなくなって、スムーズに進みます(かもしれないです)よね。
※「こういうの無駄な差分出るから嫌だよね」というご意見はあるかと思います。


弊社では、 Ruby on Rails プロジェクトで上記のような対応を適当にやってくれるフロントエンドエンジニアが担当いたします。ぜひ、お気軽にお声掛けください!

関連リンク


投稿者 Gaji-Labo Staff

Gaji-Laboの社内デジタル環境でいろいろなお手伝いをしているがじ専務&じら常務。みんなのシリーズ記事をまとめたり、卒業したスタッフの過去記事を記録したり、Twitterをやったりしています。