Ruby + Sinatra で web アプリケーション

Sinatra

web アプリって何かよくわからなかったので、Sinatra に入門。

https://sinatrarb.com/intro-ja.html

web アプリ

web サーバーを起ちあげて、ブラウザでアクセスして何らかの処理をしたりしなかったりするものを web アプリと呼ぶようだ。
処理をしたりしなかったりする部分をフレームワークで、決まりきったパターンでプログラムを書けるというジャンルにあり、そのなかでもシンプルなのが Sinatra らしい。
python だと cherrypy と似ているのかもしれない。

web アプリを作ってみる

"webrick" "sinatra" を使って、もっとも単純な処理をする web アプリを作ってみる。もっとも単純な処理だから、基本的にとても短いコードになるので概要をつかむのにはいいはずだ。

所要時間: ゆっくりやってみて 30 分程度。

プロジェクトのディレクトリを作る。

~/HelloWorld $ mkdir HelloWorld

bundler のインストール。

1
2
3
~/HelloWorld $ bundle config set path 'vender/bundle'
~/HelloWorld $ gem update
~/HelloWorld $ gem install bundler 

bundler
https://github.com/rubygems/bundler


プロジェクトのディレクトリに移動。

~/HelloWorld $ cd HelloWorld
~/HelloWorld $ bundle init

Gemfile が作られる。

~/HelloWorld $ dir
Gemfile

Gemfile を編集する。

~/HelloWorld $ vim Gemfile
1
2
3
4
5
#frozen_string_literal: true
source "https://rubygems.org"
#gem "rails"
gem "webrick"
gem "sinatra"
~/HelloWorld $ bundle install

"webrick" と "sinatra" がインストールされる。この二つが依存しているプログラムも同時にインストールされる。

WEBrick
https://docs.ruby-lang.org/ja/latest/library/webrick.html
要約
汎用HTTPサーバーフレームワークです。HTTPサーバが簡単に作れます。
WEBrick はサーブレットによって機能します。サーブレットとはサーバの機能をオブジェクト化したものです。ファイルを読み込んで返す・forkしてスクリプトを実行する・テンプレートを適用するなど、「サーバが行なっている様々なこと」を抽象化しオブジェクトにしたものがサーブレットです。サーブレットは WEBrick::HTTPServlet::AbstractServlet のサブクラスのインスタンスとして実装されます。
WEBrick はセッション管理の機能を提供しません。
NOTE: WEBrick は Ruby 3.0 で標準ライブラリから削除されました。Ruby 3.0 以降で WEBrick を使いたい場合は rubygems から利用してください。


views ディレクトリを作る。

~/HelloWorld $ mkdir views

hello.rb, layout.erb, index.erb
3 つファイルを作る。

~/HelloWorld $ vim hello.rb
~/HelloWorld $ cd views
~/HelloWorld/views $ vim layout.erb
~/HelloWorld/views $ vim index.erb

ファイルはこういう階層で配置されます。

1
2
3
4
5
6
. HelloWorld # ディレクトリ
├── hello.rb
├── views # ディレクトリ
│   ├── index.erb
│   └── layout.erb

Hello sinatra.

1
2
3
4
~/HelloWorld $ dir
Gemfile  Gemfile.lock  hello.rb  vender  views
~/HelloWorld $ dir views
index.erb  layout.erb

準備できたので、hello.rb を実行したい。bundle exec ruby hello.rb で WEBrick ウェブサーバーをたちあげる。

~/HelloWorld/views $ cd HelloWorld
1
2
3
4
5
~/HelloWorld $ bundle exec ruby hello.rb
[2022-08-12 02:07:49] INFO  WEBrick 1.7.0
[2022-08-12 02:07:49] INFO  ruby 3.1.2 (2022-04-12) [arm-linux-androideabi]
== Sinatra (v2.2.1) has taken the stage on 4567 for production with backup from WEBrick
[2022-08-12 02:07:49] INFO  WEBrick::HTTPServer#start: pid=2090 port=4567

chrome ブラウザーでアクセスする。localhost:4567 とアドレスバーに入力して Enter キー。

image


どうなっているか見ていくと、

hello.rb の '/' の指し示すのは localhost へアクセスしてきた場合、それはすなわち 127.0.0.0/ で、index.html に相当するファイルへのアクセスということになる。
すると、そこに get でアクセスしてきたら、erb : index を返しますと定義している。

1
2
3
get '/' do
    erb :index
end

:index とは、layout.erb でひな型を用意されているものに、index.erb で用意されている内容が埋め込まれたもののようだ。

layout.erb のなかの

<%= yield %>

が、index.erb の

Hello Sinatra.

に置き換わっているものが :index にあたる。

image

image


.HelloWorld # directory
├── hello.rb
├── views # directory
   ├── layout.erb
   └── index.erb

    # bundle init
├── Gemfile
     # bundle install
├── nender # auto generated 
└── Gemfile.lock # auto generated

HelloWorld/hello.rb

1
2
3
4
5
6
7
require 'sinatra'

set :environment, :production

get '/' do
    erb :index
end

HelloWorld/views/layout.erb

<html>

<head>
<title>Sinatra framework</title>
</head>

<body>
<h1>hello sinatra</h1>
<%= yield %>
</body>

</html>

HelloWorld/views/index.erb

Hello Sinatra!

https://crieit.net/posts/Ruby-Sinatra-web

Edit
Pub: 11 Aug 2022 18:27 UTC
Edit: 19 Aug 2022 18:35 UTC
Views: 236