1. Railsをインストール
事前にインストールしておいたRubyに付属のgemコマンドを利用して、Railsをインストールします。'-v'オプションで特定のバージョンを指定してのインストールが可能です。
$ gem install rails -v X.X.X
2. アプリケーションを作成
railsコマンドを使用してアプリケーションの雛形を生成します。
$ rails new myApp
特定バージョンのrailsを使用して作成するためには
$ rails _X.X.X_ new myApp
とします。また、既定はsqlite3ですが、例えばmysqlを使用するアプリケーションを作成するためには
$ rails new myApp --database='mysql'
とします。
3. テストページを表示
作成したアプリケーションのディレクトリ内に移動し
$ cd /path/to/myApp
railsコマンドでサーバーを起動します。
$ rails server
(or $ rails s)
オプションを指定しませんでしたので、規定の3000番ポートでテストページ http://localhost:3000/ にアクセスできます。なお、'-p 8080'とするとポートを指定できます。その他のオプションとして、例えば'-e production'とすれば生成されたアプリケーションの設定のうちproductionのものを使用してサーバーが起動します。省略時にはdevelopmentの設定が使用されます。
4. コントローラを作成
railsコマンドを使用してコントローラファイルの雛形を自動生成します。
$ rails generate controller main
(or $ rails g controller main)
間違って作成したコントローラのファイル群は
$ rails destroy controller main
とすれば削除できます。コントローラファイルを編集してアクションメソッドを追記しましょう。
app/controllers/main_controller.rb (utf-8で保存してください)
# coding: utf-8
# ↑ruby2.0以降であれば、規定がutf-8であるため省略可能
class MainController < ApplicationController
def index
render text: 'こんにちはー' # printデバッグで便利。View要らずです。
end
end
簡易ルーティング設定を行います。
config/routes.rb
MyApp::Application.routes.draw do
match ':controller(/:action(/:id))', via: [ :get, :post, :patch ]
# match → このパターンにマッチするURLでのアクセスを処理
# () → 省略可能であることを示す
end
アクセスしてみましょう → http://localhost:3000/main/index
5. ビューを作成
app/views/main/myView.html.erb
<div>
<%# 値を返す %>
<%= @val %>
<br />
<%# 処理を実行するだけ %>
<% @val = 256 %>
<%= @val %>
<br />
<%# 値を返す(後方のスペースや改行を除去) %>
<%= @val -%>
<br />
<%# HTMLエスケープしない (XSSに注意) %>
<% str = '&' %>
<%== str %>
<%# XSS対策のサニタイジング (許可したタグと属性以外は取り除く) %>
<% str2 = '<div><p><a id="id" href="url">リンクテキスト</a></p></div>' %>
<%= sanitize str2, tags: %w(a div), attributes: %w(href) %>
<%# デバッグ時に重宝 %>
<%= debug(@val) %>
<!-- その他のコメント方法 -->
<% @val = 512
# これはコメントです
p @val %>
<%
=begin
%>
<% @val = 'これもコメントです' %>
<%
=end
%>
</div>
app/controllers/main_controller.rb
# coding: utf-8
# ↑ruby2.0以降であれば、規定がutf-8であるため省略可能
class MainController < ApplicationController
def index
render text: 'こんにちはー' # printデバッグで便利。View要らずです。
end
def myView
@val = 128
end
end
アクセスしてみましょう → http://localhost:3000/main/myView
静的なページを作成する場合、アクションメソッドが不要であれば省略可能です。
app/views/main/staticView.html.erb
<p>静的なページです。<p/>
アクセスしてみましょう → http://localhost:3000/main/staticView
また、ヘッダおよびフッタなどのレイアウトは app/views/layouts/application.html.erb で編集可能です。
6. モデルを作成
railsコマンドを使用して、モデルファイルの雛形を自動生成しましょう。
$ rails generate model myModel field1:string field2:integer field3:date field4:boolean
(単数形とする。myModelsはダメです)
その後、config/database.ymlに設定のあるデータベースにモデルファイルと同じ構造のテーブルを作成するために、Railsに付属のrakeコマンドを使用して
$ rake db:migrate
を実行しましょう。すると、先程モデルファイルと一緒に生成された db/migrate/20140601095337_create_my_models.rb を利用してデータベースが更新されます (誤って作成した場合などは "rake db:drop" または "rake db:drop:all" で削除できます。誤ってUPDATEなどした場合は "rake db:reset" で初期化できます)。実際に更新されたことを確認するために、クライアントを立ち上げてみましょう。
$ rails dbconsole
(or $ rails db)
SQLite3の場合、下記のようなコマンドが実行できます。
- .tables → テーブル一覧を表示
- .schema tablename → 指定したテーブルの構造を表示
- SELECT * FROM tablename → お馴染のSQLクエリ
- .quit → 終了
このモデルを使用して簡易表示ページを作成してみましょう。
app/controllers/main_controller.rb
# coding: utf-8
# ↑ruby2.0以降であれば、規定がutf-8であるため省略可能
class MainController < ApplicationController
def index
render text: 'こんにちはー' # printデバッグで便利。View要らずです。
end
def myView
@val = 128
end
def show
@myModels = MyModel.all # SELECT * FROM my_models
end
end
app/views/main/show.html.erb
<% @myModels.each do |myModel| %>
<%= myModel.id %><br />
<% end %>
アクセスしてみましょう → http://localhost:3000/main/show
アクセス時に発行されたSQL文は、rails server を実行したコンソール (コマンドプロンプト等) に
Processing by MainController#show as HTML
MyModel Load (0.0ms) SELECT "my_models".* FROM "my_models"
のように表示されます。
7. その他、知っていると便利な知識
環境ごとの設定ファイル
- config/application.rb → アプリケーション全体で環境に依存せずに有効な設定を記述可能
- config/production.rb → production環境でのみ有効な設定を記述可能
- config/development.rb → development環境でのみ有効な設定を記述可能
(いずれも、編集したらサーバを再起動する必要あります)
自分で作成する設定ファイル
config/my_config.yml
COMMON: &COMMON # YAML記法のひとつ。下記のように参照できるようになります
serviceName: "myApp"
development:
envName: "development"
<<: *COMMON
production:
envName: "production"
<<: *COMMON
config/initializers/my_config.rb (起動時に読み込まれます)
# グローバル変数を用意して、アプリケーション全体での設定値を読み込ませます
MY_APP_GVAR = YAML.load(File.read("#{Rails.root}/config/my_config.yml"))[Rails.env]
コードの中にマークを設定
app/controllers/main_controller.rb
...
def index
render text: 'こんにちはー' # printデバッグで便利。
# TODO: HelloWorld (そういえばまだだったので)
end
...
app/views/main/myView.html.erb
...
<% # TODO: やり残し@ビュー %>
...
などとしておけば、
$ rake notes
(or $ rake notes | nkf -s)
を実行することで、
$ rake notes | nkf -s
app/controllers/main_controller.rb:
* [7] [TODO] HelloWorld (そういえばまだだったので)
app/views/main/myView.html.erb:
* [5] [TODO] やり残し@ビュー
と出力できます。
ビューテンプレートを指定する
app/controllers/main_controller.rb
...
def index
render 'main/common'
end
...
とすれば、common.html.erbを強制的にビューテンプレートとして使用させることが可能です。
関連記事
- レイアウトおよび部分テンプレートに関するまとめ (Rails4)レイアウトおよび部分テンプレートはどちらもテンプレート (*.html.erb) に共通の要素をまとめておき、任意のテンプレートから利用できるようにしておくための仕組みです。フッターやヘッダーといった大枠はレイアウト、小さなパーツは部分テンプレートというイメージで使い分けましょう。 レイアウトの使用方法 クラス毎に指定する方法と、アクション毎に指定する方法があります。 app/views/layo...
- Ruby コードスニペット (正規表現)sample.rb str = "001: This is a string." var1,var2 = 2,3 # 'EOS'とすると#{}による変数展開がなされない (%03dは展開される) doc = (<<"EOS" % var1) # 括弧は省略可。要は<<"EOS"の次の行からEOSまで。(参: <<-"EOS"とすると前に空白...
- OAuthを用いずにTwitterに自動投稿する (回数制限あり, Selenium with Ruby)Seleniumを用いて、OAuthを用いずにTwitterに自動投稿するRubyスクリプトを記述してみます。連続で複数回実行すると、ボット判定としてキャプチャ認証が発生します。その認証までは通過できませんので悪しからず。また、Twitterの仕様変更次第ではDOMの構造が変化するため、下記サンプルは機能しなくなる恐れが有ります。 twitter_post.rb #!/usr/bin/ruby r...
- Ruby における日本語のエンコーディング日本語を含めて多言語対応する際には、Asciiコード以外の文字コードセットが必要になります。日本語が主となる場合、よく使われる文字セットにはUnicode, Shift_JIS, EUC-JPがあります。このうち Unicode だけは特殊であり、世界中のあらゆる文字を収録しようとしていることから 1 文字を表現するために必要なバイト数が大きくなってしまっています。そのため Unicode のうち...
- Rails3ビューテンプレートの基本的な使用方法 (Ruby)Railsでは、ERB (eRuby (テキストファイルにRubyスクリプトを埋込む書式の仕様) をRubyで実装したもの) を用いてHTML内にRubyスクリプトを埋込むことができます。 <% %> で囲むと出力されません (if-elseなど制御構文を記述します) <%= %> で囲むとエスケープ出力されます <%== %> で囲むとエスケープされずに...