Rokiのチラ裏

学生による学習のログ

Ruby on RailsをOS Xに導入&動作させてみるログ

ついに、ウェブアプリケーションを作る機会に遭遇してしまった。
といっても、以前ウェブアプリケーション製造に着手した事はある。そしてそれは今現在、とある小さなウェブサービスで稼働中だ。その当時、私はC++をどうしても使いたかったので、C++を使ってウェブアプリケーションを組んでいた。しかし、プラットフォーム依存する点や整えられたフレームワークが少ない点やメンテナンスの面倒さetc...が気になっていたし、rubyという言語はC++erを甘やかす*1ので、この機会に、甘やかされてみる事にした。
取り敢えず、UNIX環境で動かしたかったので、手軽にOS Xを用いる事とした。

導入

% sudo gem install rails

しかし、何かエラーを吐いた。

ERROR:  Error installing rails:
    activesupport requires Ruby version >= 2.2.2.

どうやら、2.2.2以上のバージョンでなければインストールできないようだ。はて、しかし私のこのOS Xrubyは、そんなにバージョンが低かったのだろうか。

% ruby --version
ruby 2.0.0p645 (2015-04-13 revision 50299) [universal.x86_64-darwin15]

確かに、低い。いやしかし、私の頭の片隅にある記憶を辿れば、恐らく以前brewrubyを管理したはずである。

% brew install ruby
Warning: ruby-2.3.1 already installed
% which ruby
/usr/bin/ruby

やはりそうだ。これはつまり、/usr/bin/rubyなるパスしか見えていないためだ。

% export PATH="/usr/local/bin:$PATH"

新規プロジェクト作成

ここで少し、調べて見ると*2

システムのgemはbundlerいっこにして、必要なものはvendor/bundleに格納し、bundle execで呼び出すのがクリーンでいいですよね。

確かにそうだ。システムのgemにインストールするのでは、バージョンアップしていくにつれての管理がとても気にかかる。
そんなわけで、bundler管理下でrailsを扱うことにした。

% sudo gem install bundler
% mkdir project
% cd project
% bundle init
Writing new Gemfile to /Users/Hiroki/Documents/src/ruby/project/Gemfile

生成されたGemfileの該当部分をコメントアウトする。

# A sample Gemfile
source "https://rubygems.org"

gem "rails"

bundlerを用いてrailsを導入する。

% bundle install --path vendor/bundle --without staging production --jobs=4

そしてフレームワークを新規展開する。

% bundle exec rails new test_project -BJT

動作させる

ビューとコントローラーを作成。フレームワーク展開の段階で指定したオプションが反映されている様子が確認できる。

% bundle exec rails generate controller texts index show
      create  app/controllers/text_controller.rb
       route  get 'text/show'
       route  get 'text/index'
      invoke  erb
      create    app/views/text
      create    app/views/text/index.html.erb
      create    app/views/text/show.html.erb
      invoke  helper
      create    app/helpers/text_helper.rb
      invoke  assets
      invoke    js
      create      app/assets/javascripts/text.js
      invoke    scss
      create      app/assets/stylesheets/text.scss

show.html.erbを、取り敢えず以下のようにした。

<!doctype html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>Test Text</title>
<link rel="stylesheet" type="text/css" href="style.css">
</head>
<body>
<div id="holder"><p><%= @text[:string] %></p></div>
</body>
</html>

style.css

@charset "UTF-8";

#holder{
    margin:0 auto;
    width:300px;
    height:auto;
    border:solid #eee 1px;
    border-radius:50px;
    background-color:#3593DD;
}

#holder p{
    text-align:center;
    color:#eee;
}

texts_controller.rbで上記htmlの変数を定義。

class TextController < ApplicationController
    def index
    end
    
    def show
        @text=Hash.new
        @text[:string]='Roki'
    end
end

サーバーを立ち上げ動作の確認。今回はhttp://localhost:3000/text/showにアクセスする。

% bundle exec rails s

f:id:Rok1:20160827040142g:plain 一通り触って感じる。これはとても便利だ。開発速度が非常に早い。巷で話題になる理由がなんとなく分かった。
ここまでの基本的な工程を基盤に、configureを設定して各データごとにページ内情報を変動させたり、ましてやその情報をデーターベースを活用した上で管理し、稼働させれば、ウェブアプリケーションの実装は完了する。素晴らしい。
しかし、私個人としては、railsなる素晴らしいフレームワークを扱うための、rubyという言語の基本的な思想*3に反するような発言になる気がしないでもないが、rubyrailsによって、ブラックボックス化されている部分を、理解したいと思うところがある。そういった面でも、今一度railsの前に、rubyという言語自体をもっと深く学習するのも、良いのかもしれないと思った。

*1:Ruby official Documents

*2:http://qiita.com/youcune/items/222777415f00d19cccb4

*3:RubyC言語の「機構側は何も隠蔽しない」という原則からはかけ離れた言語のように見えます。 Rubyの本質は、人間の仕事を簡単にするために、できるだけ多くの作業を実行環境が肩代わりすることにあります。 -- [上記Ruby official documents参照