2017年6月19日月曜日

Sinatra で設定ファイルを使う方法

概要

sinatra-contrib というパッケージを使うと簡単に設定ファイルを読み込むことができます
実際に設定ファイルを使ったサンプルの sinatra アプリケーションを紹介します

環境

  • CentOS 7.3.1611
  • ruby 2.3.3p222
  • sinatra 2.0.0
  • sinatra-contrib 2.0.0

ライブラリのインストール

  • bundle init
  • vim Gemfile
gem "sinatra"
gem "sinatra-contrib"
  • bundle install

また今回のディレクトリ構成は以下の通りです

.
├── app.rb
├── config.ru
├── config.yml
├── Gemfile
├── Gemfile.lock
└── views
    └── hello.erb

アプリの作成

  • vim app.rb
require "sinatra/base"
require "sinatra/config_file"

class MyApp < Sinatra::Base
  register Sinatra::ConfigFile
  config_file './config.yml'

  get '/' do
    @message = settings.message
    @friends = settings.friends
    erb :hello
  end
end

Sinatra::Base を継承して独自のコントローラクラスを定義します
そして、設定ファイルを読み込むために Sinatra::ConfigFile を登録します
読み込みに成功した後は settings というオブジェクトを参照することで値を取得することができます
今回は取得した値をテンプレートに渡してテンプレート側で値を確認します

設定ファイルの作成

  • vim config.yml
message: "My friends"
friends:
  - name: 'bob'
    age: 20
    favorites:
      - 'baseball'
      - 'soccer'
  - name: 'tom'
    age: 19
    favorites:
      - 'soccer'

app.rb と同じディレクトリに配置します
YAML 形式で記述します
今回は配列も使っています

テンプレートファイルの作成

  • mkdir views
  • vim views/hello.erb
<h2>"<%= @message %>"</h2>
<% @friends.each do |f| %>
<div>
  <div>name: <%= f['name'] %></div>
  <div>age: <%= f['age'] %></div>
  <div>favorites:</div>
  <% f['favorites'].each do |fa| %>
    <div>- <%= fa %></div>
  <% end %>
</div>
<% end %>

app.rb から呼び出されるテンプレートファイルです
設定ファイルの内容を出力しています
ハッシュとして渡ってくるので ruby のハッシュを参照する方法で値を取り出すことができます

アプリ起動用の rackup ファイル作成

  • vim config.ru
require 'bundler'
Bundler.require

require './app'
run MyApp

rackup コマンドでアプリを起動するためのスクリプトです

動作確認

  • bundle exec rackup
  • curl localhost:9292

で config.yml に書かれた情報が HTML で出力されると思います

最後に

sinatra で YAML で書かれた設定ファイルを読む込む方法を紹介しました
値の参照は settings オブジェクトを使って参照しますがスコープは sinatra アプリケーション内のみとなります
なので、自分で定義したライブラリの関数などに値を渡したい場合は引数などで渡す必要があります (ライブラリ側で settings を参照することはできません)

参考サイト

0 件のコメント:

コメントを投稿