どうもこんにちは。
今回は、RailsではないRubyのフレームワーク「sinatra」を使用して簡単なアプリを作ってみました。
sinatraについて
sinatraはRuby製のオープンソースフレームワークです。
RubyのフレームワークといえばRuby on Railsがとても有名ですが、Railsよりも少ない労力でWebアプリケーションを開発できます。
Railsとsinatraの比較
RailsだとMVCモデルという概念に沿って作られているので、ファイルを行ったり来たりする必要があります。
ただ、sinatraはそんな概念がないので、1つメインコードファイルを作って、viewファイルを作成すればほぼ完成します。
Railsを使用している方でルーティング、コントローラの概念がいまいちわからない方はsinatraを使用することで理解が深まると思います。
自分は普段からRailsを使用していますが、sinatraとRailsには近しいものを感じましたが、DBを使用しないのであればsinatraで開発した方が圧倒的に楽かなと感じました。DBを使用するのであれば、MVCモデルの概念があるRailsを使用するのが良いと思います。
ソースコードはこちらです。
Let's Go!!
手順
1. 任意のディレクトリに移動する
mkdir ruby_code
cd ruby_code
2. ターミナルでファイル/ディレクトリを作成する
touch Dockerfile
touch docker-compose.yml
touch Gemfile
touch your_script.rb
touch config.ru
mkdir views
3. Dockerfile
に以下のコードを記述する
# ベースイメージとして公式のRubyイメージを使用
FROM ruby:latest
# 作業ディレクトリを設定
WORKDIR /usr/src/app
# GemfileとGemfile.lockをコピー
COPY Gemfile Gemfile.lock ./
# 依存関係をインストール
RUN bundle install
# アプリケーションのソースコードをコピー
COPY . .
# デフォルトのコマンドを設定
CMD ["bundle", "exec", "rackup", "--host", "0.0.0.0", "--port", "4567"]
4. docker-compose.yml
に以下のコードを記述する
version: '3.8'
services:
app:
build:
context: .
volumes:
- .:/usr/src/app
ports:
- "4567:4567"
environment:
- RACK_ENV=development
5. Gemfile
に以下のコードを記述する
source "https://rubygems.org"
gem "sinatra"
gem "rackup"
6. Gemfile.lockを生成する
bundle install
7. your_script.rb
に以下のコードを記述する
require 'sinatra'
$data = {}
get '/' do
'Hello, World!'
end
get '/hello/:name' do
"Hello, #{params[:name]}!"
end
get '/index' do
erb :index
end
get '/form' do
erb :form
end
post '/submit' do
$data[:name] = params[:name]
$data[:age] = params[:age]
redirect '/show'
end
get '/show' do
erb :show, locals: { name: $data[:name], age: $data[:age] }
end
8. views
ディレクトリにindex/form/showのファイルを作成する
詳しくはソースコード参照
9. config.ru
に以下のコードを記述する
# config.ru
require 'sinatra'
require './your_script'
set :port, 4567
run Sinatra::Application
10. Dockerイメージをビルドする
docker-compose build
11. コンテナを実行してSinatraアプリケーションを起動する
docker-compose up
12. 使用しない時はコンテナを閉じる
docker-compose down
以上です。