æããããã°ã©ã ãSinatraã§Webã¢ããªã«ããPart.2ï¼»CHAPTER4 ããããã®GUIï¼½â
è¨äºã®æ¦è¦
ãæããããã°ã©ã ãã®ï¼»CHAPTER4 ããããã®GUIï¼½ã§ä½æããGUIããã°ã©ã ã®ãµã³ãã«ãåèã«ãSinatraã使ã£ãWebã¢ããª*1ã使ãã¾ãã
ç®æ¬¡
- è¨äºã®æ¦è¦
- ç®æ¬¡
- éçºç°å¢
- ãã¿ã³ãã¯ãªãã¯ããã¨æ°åãå¢ããWebã¢ããª
- åèæ¸ç±
- åèè¨äº
- é¢é£è¨äº
éçºç°å¢
- 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ï¼»ãããã«ï¼½