37歳から始めるプログラミング

37歳にして初Macからの初プログラミングをする人の戯言を垂れ流す場所です

sinatra reloaderで快適環境を作ろう

ご無沙汰しております

一週間ぶりですかね。

reloaderが動いたのが嬉しくて、あれこれいじってたらBlog放置しちゃってました。

アカン。

と言う訳で、sinatra reloaderを使用して快適なPG環境を構築するお話です。

 

Bundlerをインストールする

はい、聞きなれない言葉出てきましたね、Bundler。

Bundlerは、Gemパッケージの種類やバージョンを管理し、必要なアプリケーションをインストールする仕組みを提供してくれます。

んじゃ、Gemパッケージとはなんぞや、となりますよね。

Rubyにおけるライブラリやアプリケーションは、Gemと呼ばれる形式のパッケージにすることができます。

そしてGem形式で多くのライブラリが公開されており、RubyGemsと呼ばれるパッケージ管理ソフトを利用して、ダウンロードを行ったりインストールをすることができます。

簡単に言うと、Rubyの便利機能がお得なセットになっているのがGem。それを取り寄せたり利用するのに必要なのがRubyGemsってことですね。

例えが合っているかどうかは別として、とにかく、入れないと不便ですよってことすね。

ターミナルを起動したら、以下のコマンドを実行してBundlerをインストールしましょう。

$ sudo gem install bundler

 

作業用のディレクトリを作成する

次はいよいよ作業環境の構築です。

ディレクトリってなんぞ?と思うかもしれせんが、フォルダと考えてもらえれば分かりやすいと思います。

reloaderを動かすのに、ファイル作成したり、作業フォルダにインストールが必要になってくるので、そのためのディレクトリを作成します。

自分は、以下のように構成しました。

f:id:moco-tan:20150415015224p:plain

/local/ruby-2.2/myapp

ディレクトリを作成する場合は、ターミナルで、作成したいディレクトリまで移動し、以下のとおり実行すれば、任意のディレクトリが作成できます

$ mkdir 【ディレクトリ名】

  ※実行した結果は、特に返ってきません。$に戻るだけですが、きちんとディレクトリは作成されています。

自分のディレクトリ構成にしようと思ったら、ディレクトリ移動から含めて、以下のように実行すれば同じ環境になるはずです。

$ cd local

↓実行

$ cd ruby-2.2

↓実行

$ mkdir myapp

 

Gemファイルを作成する

作成したディレクトリ配下にGemファイルを作成します。

Gemファイルは、このファイルに記載したGemと、そのGemを使用するために必要なGemをインストールするためのファイルです。

ターミナルで以下のコマンドを実行することで、作成したディレクトリ配下にGemファイルを作成できます。

実行時のディレクトリパス:~local/ruby-2.2/myapp

$ bundle init 

実行後、myappディレクトリ内を確認すると、Gemfileなるものが作成されているはずです。

 

Gemfileに必要な記述をする

必要なGemをインストールすために、Gemfileへ記載をしていきます。

とりあえず、Atomで先ほど作成したGemfileを開いて、何も考えずに以下の記載をしてみてください。

source "http://rubygems.org"

 

gem "sinatra", require: "sinatra/base"

gem "sinatra-contrib", require: "sinatra/contrib"

 

gem "haml"

gem "sass"

gem "coffee-script"

記載が完了したら、保存を忘れずに。

 

Bundlerで必要なGemをインストールする

Gemfileへの記載が完了したら、いよいよ記載したGemをインストールします。

まず、ターミナルを起動し、最新バージョンのRubyで作業できるよう以下のコマンドを実行します。

実行時のディレクトリパス:~local/ruby-2.2/myapp
$ export PATH=$HOME/local/ruby-2.2/bin:$PATH 

※実行した結果は、特に返ってきません。$に戻るだけです

次に、作成したディレクトリ(このBlogの手順通りならmyapp)まで移動し、以下のコマンドを実行します。

実行時のディレクトリパス:~local/ruby-2.2/myapp
$ bundle install --path vendor/bundle

 

BundlerでインストールしたGemのバージョンを最新にする

インストールが完了したら、次はバージョンを最適化します。

ターミナルで次のコマンドを実行してください。

実行時のディレクトリパス:~local/ruby-2.2/myapp

$ bundle update 

実行後、最終行で次の結果が返ってきたら最適化成功です。

Bundle updated!

Gem in the group production were not installed 

 

Sinatraでアプリケーションを作ってみる

ターミナルで次のコマンドを実行し、ファイルを作成します。

実行時のディレクトリパス:~local/ruby-2.2/myapp

$ touch myapp.rb

↓実行

$ touch config.ru

 これで、myappディレクトリ内に、myapp.rbとconfig.ruというファイルが作成されました。

 

myappファイルに記述する

作成したmyappファイルをAtomで開いて、何も考えず以下の記載をしてください。

require 'sinatra'
require 'sinatra/reloader'

class App < Sinatra::Base
   configure :development do
       register Sinatra::Reloader
   end

   get '/' do
       "hello world!"
   end
end

 記述したら忘れずに保存を。

 

config.ruファイルに記述する

次に、config.ruファイルを同じくAtomで開いて以下の記述をしましょう。

require 'bundler'
Bundler.require

require './myapp'

run App

これも忘れずに保存を。

 

サーバーを起動する!

次はいよいよサーバーを起動して、作成したアプリケーションを動かしてみます。

つまり、ブラウザ上で先ほど記述したhello world!を表示させる、ということですね。

作成したmyappディレクト内で、以下のコマンドを実行してください。

実行時のディレクトリパス:~local/ruby-2.2/myapp
$ bundle exec rackup  

少し感覚が空いたあとに、以下の結果が返ってきたらサーバーは無事起動しています。

[yyyy-mm-dd hh:mm:ss] INFO WEBrick 1.3.1
[yyyy-mm-dd hh:mm:ss] INFO ruby 2.2.1 (2015-02-26) [x86_64-darwin14]
[yyyy-mm-dd hh:mm:ss] INFO WEBrick::HTTPServer#start: pid=835 port=9292

 ※yyyy-mm-dd hh:mm:ssの部分は、起動した時刻が入ります。

無事、起動したら以下のURLへアクセスしてみます。

http://localhost:9292/

 すると、以前ターミナルで直接起動させていた時と同じく

f:id:moco-tan:20150415035007p:plain

hello world!が表示されました。ここまでは、一緒ですね。

違うのはここから。

ターミナルから直接起動した時は、ファイル内容を書き換えた場合、ターミナルを再起動して、再度、同じコマンドを実行しなければブラウザの表示は変わることはありませんでした。

今回は、一味違います。

ファイルに記述してあるhello world!を好きな言葉に置き換えて、保存してください。

その後、hello world!を表示させていたブラウザを更新してみてください。

 

 

 

 

 

 

 

 

f:id:moco-tan:20150415035426p:plain

ターミナルを再起動することなく、更新したファイルが反映されます!!

ちょー便利!

 これで、ファイルを更新しつつ、表示を確認しながら作業ができるようになりました。

1週間かけて格闘した甲斐があったぜ…。睡眠時間と引き換えにな!

1回1回ターミナル再起動しながら確かめるのは本当にしんどかったので、なんとかreloaderが動くようにしたかったのです…。

記述の内容自体はあまり良く分かっていないのですが、ディレクトリの構成や、必要なファイルなどについては、うっすら理解できました。

 

これで色々捗る。やったね!!

 

今日のまとめ的な何か

・reloaderがないとマジでしんどい

・GemとBundlerを使いこなしてこ

・睡眠時間と等価交換した