どぼじょのIT学習ブログ

高専卒土木女子がIT業界を目指してお勉強。

SinatraでWebの基本を学ぶ

今回は Sinatra を使って Web の基本を学びます!
Ruby on Rails は機能が多いので、Sinatra からのほうが入りやすいそうです。

目次

1.Sinatraインストール

まず Sinatra をインストールをします。

$ gem install sinatra

f:id:mistyrinth:20190327171239p:plain

同様に、関連 gem もインストールしておきます。

$ gem install sinatra-contrib
$ gem install activerecord

私は既にインストール済みですが、sqlite3を未インストールの場合ここでインストールしておいたほうが良さそうです😐

2.ディレクトリの作成

ここからは以下のサイトを参考に進めていきます!

qiita.com

まずディレクトリを作成します。ここではディレクトリ名はsinatra_sampleとします。
作成したディレクトリに移動して、bundle initを実行します。これにより bundler が使えるようになり、Gemfileというファイルが作成されます💡
f:id:mistyrinth:20190327184053p:plain

Gemfile内には既に数行書かれていますが、以下の1文を追加します。

gem 'sinatra'

f:id:mistyrinth:20190327184937p:plain

続いてgemのインストールを行います💪
f:id:mistyrinth:20190327185107p:plain

3.アプリケーションの作成と起動

試しにRubyファイルを作成します。ファイル名はapp.rbにします。
中身は以下のように書きます✍️
f:id:mistyrinth:20190327185519p:plain

書けたら、bundler で実行します。
bundle exec ruby app.rbとなります!
f:id:mistyrinth:20190327190010p:plain

この状態でlocalhost:4567に接続すると、helloという文字が現れます✨
ローカルホストなのでブログリンクから飛んでも表示されませんが💦
こんなふうになります。

f:id:mistyrinth:20190327190214p:plain

4.sinatra reloader

app.rbの内容を変更してブラウザを再読み込みしても、変更が反映されません。
変更を反映するには、sinatraを再起動する必要があります。
そこで再起動を簡単にするために、 sinatra reloader をインストールします! まず起動中のアプリを閉じ、Gemfileに以下を追加します。

gem 'sinatra-contrib'

追加したら先程と同じく$ bundle installを実行します。
次にapp.rbを編集します。

f:id:mistyrinth:20190327221331p:plain

再びbundle exec ruby app.rbを実行すると、localhost:4567は以下の画面になります!
f:id:mistyrinth:20190327224149p:plain

今後はブラウザの再読み込みで変更が反映されます🎉

5.動かしてみる

先程のapp.rbのコードに3行追加します。path/toとか書いてあるあたりです。
ルーティングを追加しています。
f:id:mistyrinth:20190327225505p:plain

この状態だと、localhost:4567/path/toが以下のように表示されます🙂
f:id:mistyrinth:20190327225727p:plain

次に、静的ファイルを追加します。
ルートディレクトリ配下にpublicディレクトリを作成します。
その中にthis is html file.と書かれたtest.htmlファイルを作成します。
f:id:mistyrinth:20190327230200p:plain

この状態でlocalhost:4567/test.htmlを開くと以下のようになっています👀
f:id:mistyrinth:20190327230309p:plain

更にapp.rbに3行追加します。
f:id:mistyrinth:20190327230525p:plain

この場合、*ワイルドカードで任意の文字列が入ります。
なのでlocalhost:4567/hello/sayakaにアクセスすると、以下のようになります!
f:id:mistyrinth:20190327231138p:plain
sayaka を別の名前にしても同様です。

次はビューを使ってみます。
app.rbにまた3行追加します。見づらくなってきたので、行番号を表示しました😊
16〜18行目のところです。
f:id:mistyrinth:20190327231531p:plain

追加できたら、今度はディレクトリとファイルを作成します。
ディレクトリはviewsで、ファイルはerb_template_page.erbです💡💡
erb_template_page.erbの中身は以下の1行です。
f:id:mistyrinth:20190327232345p:plain

この状態で、localhost:4567/erb_template_pageにアクセスすると、現在時刻が表示されます!
f:id:mistyrinth:20190327232546p:plain

続いて、redcarpet という、Markdownに対応させる gem を対応させます。
Gemfileに1行追加し、$ bundle installを実行します。

gem 'redcarpet'

f:id:mistyrinth:20190327232904p:plain

app.rbに3行追加します。対象箇所だけ抜粋します。
f:id:mistyrinth:20190327233320p:plain

またviewsディレクトリの中にファイルを作成します。 名前はmarkdown_template_page.markdownです。
中身は以下のとおりです😎😎
f:id:mistyrinth:20190327233608p:plain

これでlocalhost:4567/markdown_template_pageを見ると、以下のようになります。
f:id:mistyrinth:20190327234003p:plain
Markdown の見出し#が反映されているようですね👏

先程の erb と markdown を組み合わせてみます。
※ここからリンク先サイトとは少し違います。たぶんリンク先サイトに誤りがあります。
app.rbに以下の3行を追加します。
f:id:mistyrinth:20190328001933p:plain

viewsディレクトリの中にファイルを2つ作成します。
ひとつめはerb_and_md_template_page.erbで、中身は以下のとおりです🙂
f:id:mistyrinth:20190328000559p:plain

ふたつめは同名のmarkdownファイルで、中身は以下のとおりです。
f:id:mistyrinth:20190328001951p:plain

これでlocalhost:4567/erb_and_md_template_pageを見ると、以下のようになっています🎉🎉🎉
f:id:mistyrinth:20190328002036p:plain

Sinatraの基本は以上です!