幸ログ

ナレッジを溜めていきます

Sinatraでviews以下のディレクトリからファイルを指定する方法

Sinatraのディレクトリ構成

/
Lmain.rb     --- アプリのコントローラ
Lconfig.ru  --- WebアプリのフレームワークのRackの設定ファイル
LGemfile    --- Gemパッケージを管理する
Lviews
  Llayout.slim  --- 各ページで共通するパーツ
  Lindex.slim     --- Topページ
  Lcss
    Lbase.sass     --- 各ページで使用するスタイルシート(sass)

問題

views以下のファイル(index.slim)は簡単にアクセスができます。

Sinatraはデフォルトでviewsディレクトリから
Viewの役目があるファイルを探します

しかし、views以下のディレクトリにあるファイルを指定したいことがあります。 views以下のファイルがslimやsassなど様々なファイルが集り、構成がわかりにくくなります。

/
Lmain.rb     --- アプリのコントローラ
Lconfig.ru  --- WebアプリのフレームワークのRackの設定ファイル
LGemfile    --- Gemパッケージを管理する
Lviews
  Llayout.slim  --- 各ページで共通するパーツ
  Lindex.slim     --- Topページ
  Lbase.sass    --- 各ページで使用するスタイルシート(sass)

なのでslimはviewsに置き、cssなどはviews以下のディレクトリに分けます。 私の中で理想な形です。

/
Lmain.rb     --- アプリのコントローラ
Lconfig.ru  --- WebアプリのフレームワークのRackの設定ファイル
LGemfile    --- Gemパッケージを管理する
Lviews
  Llayout.slim  --- 各ページで共通するパーツ
  Lindex.slim     --- Topページ
  Lcss
    Lbase.sass     --- 各ページで使用するスタイルシート(sass)

解決方法

ファイル指定時に'(シングルクォーテーション)で括ってあげることで、 views以下のディレクトリのファイルを指定することができる。 以下はsassファイルを定義している例です。

# coding:utf-8
require 'rubygems'
require 'sinatra/base'
require 'sinatra/reloader'
require 'slim'
require 'sass'

class MainApp < Sinatra::Base
  configure :development do
    register Sinatra::Reloader # developmentの場合Sinatraのリロードをする
  end
  set format: :html5
  # css
  get '/css/base.css' do
    sass :'css/base' # ''でファイルパスを書く views/css/base.slim
  end
  # public
  get '/' do
    slim :index # views/index.slim
  end

これからSinatraのエントリーが増えるかもしれません。