Webアプリを作るときに以下の機能と環境をサッと使えるようにするためのスケルトンを作りました。
サーバーサイド
sinatra / slim / activerecord / sqlite3 / rspec
フロントエンド
sass / coffeescript / jquery / bootstrap3
ゴールとしては、コマンド一発でWebサーバーを起動してフロントエンド周りをビルドして、
js、css、rubyのファイル更新時にライブリロードさせることです。ビルドツールはgulpを使います。
とりあえずgemファイルから。
source 'https://rubygems.org'
gem 'sinatra'
gem 'slim'
gem 'sqlite3'
gem 'sinatra-activerecord'
gem 'rake'
group :development, :test do
gem 'shotgun' # ローカルサーバー
gem 'foreman' # コマンドの一括実行
gem 'rspec'
end
アプリケーションの起動にはforemanというgemを使います。
foremanはProcfileに書いたコマンドを一括で実行してくれます。
bundle exec foreman start
これでサーバーを起動してビルドを走らせたいのでProcfileを次のように書きます。
application: bundle exec shotgun -p 8000
gulp: gulp
foremanではshotgunというgemを実行します。
shotgunを使うことでファイル編集時にサーバー再起動する必要がなくなるので、
sinatraアプリ側にsinatra/reloaderを記述せずにすみます。
ホストを指定したい場合はoオプションで指定します。ポートを指定しない場合は9393が使われます。
shotgunはrackアプリケーションなので、config.ruを読み込んで実行します。
require './app'
run App
ここではsinatraのapp.rbをロードして実行しています。
これで、sinatra -> shotgun -> foreman の流れができました。
あとはapp.rbです。
# encoding: utf-8
require 'bundler'
Bundler.require
set :database, { :adapter => 'sqlite3', :database => 'db/app.db' }
class App < Sinatra::Base
get '/' do
slim :index
end
end
Bundler.requireで手持ちのgemを呼び出しておいて、sinatra-activerecordを使ってDB接続します。
アプリから使うにはこれでいいのですがマイグレーションもしたいので、rakeを実行できるようにRakefileも作ります。
require 'sinatra/activerecord/rake'
namespace :db do
task :load_config do
require './app'
end
end
これでrake db:createやrake db:migrateができるようになります。
サーバーサイドはここまでにして、次はフロントエンドの方やっていきます。