web アプリって何かよくわからなかったので、Sinatra に入門。
https://sinatrarb.com/intro-ja.html
web サーバーを起ちあげて、ブラウザでアクセスして何らかの処理をしたりしなかったりするものを web アプリと呼ぶようだ。
処理をしたりしなかったりする部分をフレームワークで、決まりきったパターンでプログラムを書けるというジャンルにあり、そのなかでもシンプルなのが Sinatra らしい。
python だと cherrypy と似ているのかもしれない。perl だと Dancer というフレームワーク は sinatra にパッと見たところはよく似ている。
"webrick" "sinatra" を使って、もっとも単純な処理をする web アプリを作ってみる。もっとも単純な処理だから、基本的にとても短いコードになるので概要をつかむのにはいいはずだ。
( web アプリって何か全く知らない場合、どうなってるか理解するには 1 時間から 2 時間程度かかると思います。が、全く知らなくてもわかるので、そのうち。 )
プロジェクトのディレクトリを作る。
~/HelloWorld $ mkdir HelloWorld
bundler のインストール。
( bundler については、一体何するものなのかは、調べてみてください。python だと、venv みたいなものかなぁ。わかってなくても、他の言語やってみたりしたらわかるかもしれない。)
~/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 が作られる。( Go 言語の go mod init
みたいな感じだなぁ。)
~/HelloWorld $ ls
Gemfile
Gemfile を編集する。
~/HelloWorld $ vim Gemfile
#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
views ディレクトリに、layout.erb, index.erb というファイルを作っていきます。
~/HelloWorld $ cd views
~/HelloWorld/views $ vim layout.erb
~/HelloWorld/views $ vim index.erb
. HelloWorld # ディレクトリ
├── hello.rb
├── views # ディレクトリ
│ ├── index.erb
│ └── layout.erb
│
~/HelloWorld $ dir
Gemfile Gemfile.lock hello.rb vender views
~/HelloWorld $ dir views
index.erb layout.erb
こんな感じです。
. HelloWorld # ディレクトリ
├── hello.rb
├── views # ディレクトリ
│ ├── index.erb
│ └── layout.erb
│
# [ bundle init ] したらばできるファイル
├── Gemfile # 編集するファイル
# [ bundle install ] したらばできるファイル
├── nender # auto generated
└── Gemfile.lock # auto generated
準備できたので、hello.rb を実行したい。bundle exec ruby hello.rb
で WEBrick ウェブサーバーをたちあげる。
~/HelloWorld/views $ cd HelloWorld
~/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
キー。localhost:4567
は、 http://127.0.0.1:4567
のことです。4567 は sinatra のデフォルトのポートナンバーです。
アドレス http://127.0.0.1 のポートナンバー 4567 = localhost:4567
どうなっているか見ていくと、
hello.rb の '/' の指し示すのは localhost へアクセスしてきた場合、それはすなわち 127.0.0.0/
で、index.html に相当するファイルへのアクセスということになる。
すると、そこに get でアクセスしてきたら、erb : index を返しますと定義している。
get '/' do
erb :index
end
:index
とは、layout.erb でひな型を用意されているものに、index.erb で用意されている内容が埋め込まれたもののようだ。
layout.erb のなかの
<%= yield %>
が、index.erb の
Hello Sinatra.
に置き換わっているものが :index
にあたる。
hello.rb が実行されると、layout.erb というのが、プロトタイプというか、テンプレのフォーマットで、そこに index.erb が読み込まれるという感じ。
get localhost:4567 で :index ( :index は、index.erb をテンプレートの layout.erb に流し込んだもの ) という感じ。
require 'sinatra'
set :environment, :production
get '/' do
erb :index
end
<html>
<head>
<title>Sinatra framework</title>
</head>
<body>
<h1>hello sinatra</h1>
<%= yield %>
</body>
</html>
Hello Sinatra!
もういちどファイルとディレクトリの構図を登場させておきます。
. HelloWorld # ディレクトリ
├── hello.rb
├── views # ディレクトリ
│ ├── index.erb
│ └── layout.erb
│
web アプリの実行は、HelloWorld ディレクトリの hello.rb を実行します。
~/HelloWorld $ bundle exec ruby hello.rb
似たような Hello World が1分30秒で説明されている。
Crieitは誰でも投稿できるサービスです。 是非記事の投稿をお願いします。どんな軽い内容でも投稿できます。
また、「こんな記事が読みたいけど見つからない!」という方は是非記事投稿リクエストボードへ!
こじんまりと作業ログやメモ、進捗を書き残しておきたい方はボード機能をご利用ください。
ボードとは?
コメント