Sinatra の configure で書く必要がないかも知れない項目

小さい規模で WEB Application を書く場合において、Sinatra はサイコーに便利です。
ビューのあるアプリの場合はだいたいこういうディレクトリ構成にしますよね。

$ tree ore_tachi_no
ore_tachi_no
├── config.ru
├── lib
│   └── ore_tachi_no
│       └── application.rb
├── public
│   ├── css
│   │   └── application.min.css
│   └── js
│       └── application.min.js
└── views
    ├── index.slim
    └── layout.slim

6 directories, 6 files

application.rb の内容

/ へのアクセスで index.slim を表示させるだけのカンタンなアプリですね。

require 'sinatra/base'
require 'slim'

module OreTachiNo
  class Application < Sinatra::Base
    configure do
      app_root = File.dirname(__FILE__) + '/../..'
      set :public_folder, app_root + '/public'
      set :views, app_root + '/views'
    end

    get '/' do
      slim :index
    end
  end
end

Sinatra をお使いの皆さんにおかれましては、こいつの configure に違和感を覚えませんか?

application.rb の内容(改)

実は余計な記述がありました。
ので削ります。こうなりました。

require 'sinatra/base'
require 'slim'

module OreTachiNo
  class Application < Sinatra::Base
    configure do
      set :root, File.dirname(__FILE__) + '/../..'
    end

    get '/' do
      slim :index
    end
  end
end

わがままなあなたのために diff を貼りますね。

diff --git a/lib/ore_tachi_no/application.rb b/lib/ore_tachi_no/application.rb
index 28852eb..bf9ca17 100644
--- a/lib/ore_tachi_no/application.rb
+++ b/lib/ore_tachi_no/application.rb
@@ -4,9 +4,7 @@ require 'slim'
 module OreTachiNo
   class Application < Sinatra::Base
     configure do
-      app_root = File.dirname(__FILE__) + '/../..'
-      set :public_folder, app_root + '/public'
-      set :views, app_root + '/views'
+      set :root, File.dirname(__FILE__) + '/../..'
     end

     get '/' do

どういうこと?

set :root, [directory path] が設定されていない場合は、configure の記述があるファイルのディレクトリをルートディレクトリとして扱います。
ルートディレクトリは、settings.root で参照出来ます。

そして、Sinatra の設定の views, public_folder はそれぞれ settings.root + '/views', settings.root + '/public' がデフォルトです。
それぞれ settings.views, settings.public_folder で参照出来ます。

つまり、

  • アプリケーションのトップレベルのディレクトリに、views, public という名前でテンプレートと静的ファイルを設置する場合は、set :root でディレクトリを設定しておくだけでいい
  • settings.root 直下 以外に置く場合や、views, public 以外の名称のディレクトリに設置したい場合はこの限りではない

ということです。

ドキュメント読もう

Sinatra: Documentation