恋するプログラムをSinatraでWebアプリにするPart.2[CHAPTER4 あこがれのGUI]①
記事の概要
『恋するプログラム』の[CHAPTER4 あこがれのGUI]で作成するGUIプログラムのサンプルを参考に、Sinatraを使ったWebアプリ*1を作成します。
目次
開発環境
- OSX 10.11.2 El Capitan
- テキストエディタ: MacVim
- ターミナルエミュレータ: Macターミナル
- シェル: zsh
- パッケージマネージャ: Homebrew
- ブラウザ: Firefox - Ruby 2.0.0p645
- バージョンマネージャ: rbenv
- Webフレームワーク: Sinatra
参考記事
Rubyの開発環境構築は、こちらの記事を参考にさせていただきました。
ボタンをクリックすると数字が増えるWebアプリ
Webアプリの手始めに、クリックすると数字が増えるボタンをブラウザに表示します。
アプリケーションディレクトリの構成
~/programinlove
|- proto.rb // このアプリには関係ありません
|- unmo.rb // このアプリには関係ありません
|- responder.rb // このアプリには関係ありません
|- app.rb // 数字が増えるWebアプリのメインファイル
|- /views // ビューのテンプレートを配置するディレクトリ
|- index.erb // ボタンを表示するビュー
ソースコード
app.rb
では、サンプルプログラムを参考にして作ったMyFormクラスをSinatraのルーティングで操作し、ビューに表示するインスタンス変数@times
を生成します。
index.erb
には@btn_caption
の値を表示するボタンを設置し、SinatraのルーティングでMyFormクラスのインスタンス変数@times
の値を表示します。
app.rb
require 'sinatra' require 'sinatra/reloader' # ブラウザに表示するフォームのクラス class MyForm # @timesへのアクセスメソッド attr_accessor :times def initialize @times = 0 # ボタンをクリックした回数 end def btn_clicked # ボタンをクリックするとカウントアップ @times += 1 end end myform = MyForm.new # URL'/'にアクセス get '/' do # ボタンの数字を0にしてviewsフォルダのindex.erbを表示 myform.times = 0 @btn_caption = myform.times erb :index end # URL'/'にPOSTメソッドでアクセス post '/' do # ボタンの数字を増やしてviewsフォルダのindex.erbを表示 @btn_caption = myform.btn_clicked erb :index end
views/index.erb
<html> <body> <!-- ボタンを押すとPOSTメソッドで'/'にアクセス --> <form action="/" method="post"> <!-- Rubyで生成したインスタンス変数@btn_captionをボタンに表示 --> <button type="submit"><%= @btn_caption %></button> </form> </body> </html>
このコードのコミットには、[chapter4-2]のタグが付いてます。
実行結果
まず最初に、ターミナルでapp.rb
を動かします。
~/programinlove $ruby app.rb [2016-01-02 14:10:45] INFO WEBrick 1.3.1 [2016-01-02 14:10:45] INFO ruby 2.0.0 (2015-04-13) [x86_64-darwin12.6.0] == Sinatra (v1.4.6) has taken the stage on 4567 for development with backup from WEBrick [2016-01-02 14:10:45] INFO WEBrick::HTTPServer#start: pid=8299 port=4567
Sinatraに呼ばれてWebサーバのWEBrickが動いたのを確認したら、ブラウザにhttp://localhost:4567
を入力します。
ターミナルには、GETでアクセスしたログが表示されます。
::1 - - [02/Jan/2016:14:12:33 +0900] "GET / HTTP/1.1" 200 286 0.1703 localhost - - [02/Jan/2016:14:12:33 JST] "GET / HTTP/1.1" 200 286 - -> /
表示されたボタンをクリックすると数字が増え、
ターミナルにPOSTでアクセスしたログが表示されます。
::1 - - [02/Jan/2016:14:13:35 +0900] "POST / HTTP/1.1" 200 286 0.0016 localhost - - [02/Jan/2016:14:13:35 JST] "POST / HTTP/1.1" 200 286 http://localhost:4567/ -> /
参考書籍
参考記事
Sinatraについては、こちらの記事を参考にさせていただきました。
- Rubyの入門や書き捨てアプリを作る場合は sinatraがオススメ! - むかぁ~ どっと こむ
- SinatraとjQueryでおよそ100行で作るAjax掲示板アプリケーション - gaaamiiのブログ
- Sinatra: README (Japanese)
関連記事
- 恋するプログラムをSinatraでWebアプリにするPart.0[はじめに]
- 恋するプログラムをSinatraでWebアプリにするPart.1[CHAPTER3 ほんとに無能]
- 恋するプログラムをSinatraでWebアプリにするPart.3[CHAPTER4 あこがれのGUI]②
- 恋するプログラムをSinatraでWebアプリにするPart.4[CHAPTER4 あこがれのGUI]③
- 恋するプログラムをSinatraでWebアプリにするPart.5[CHAPTER5 辞書を片手に]
- 恋するプログラムをSinatraでWebアプリにするPart.6[CHAPTER6 感情コントロールの魔術師]①
- 恋するプログラムをSinatraでWebアプリにするPart.7[CHAPTER6 感情コントロールの魔術師]②
- 恋するプログラムをSinatraでWebアプリにするPart.8[CHAPTER7 学習のススメ]①
- 恋するプログラムをSinatraでWebアプリにするPart.9[CHAPTER7 学習のススメ]②
- 恋するプログラムをSinatraでWebアプリにするPart.10[CHAPTER7 学習のススメ]③
- 恋するプログラムをSinatraでWebアプリにするPart.11[CHAPTER8 文章を作り出す]
- 恋するプログラムをSinatraでWebアプリにするPart.12[CHAPTER9 ノビィ、ネットワークにつながる]
- 恋するプログラムをSinatraでWebアプリにするPart.13[おわりに]