意識低いRuby on Rails再入門1
2015/07/03
整理がてらメモ。
Contents
Ruby on Railsとは何か
ウェブアプリケーションを作るためのフレームワーク。
必要そうなモノ全部持ってる。
- ルーティング
- DB管理
- アセット管理
- ジョブキュー
- メール送信
- テスト
- デバッグ機能(webconsole,irb,pry…)
ほぼ事足りちゃうと思うが、足りなかったら豊富なgemを落としてくれば良い。
慣れればウェブアプリが短期間でつくれてしまう。
はじめかた
rubyをインストール
rbenvを使う。
railsをインストール
1 |
gem install rails |
バージョン4.2.1がインストールされた。
railsアプリを新規作成
1 |
rails new [アプリ名] |
アプリを起動
1 |
rails s |
localhost:3000にアクセスして何か表示されたらおk。
Modelを作る
ティザーサイトでもない限りウェブアプリを作るなら何かしらデータベースを使ってデータを永続化する必要があるだろう。
まあ、テキストファイルでも良いんだけど。
localhost:3000にアクセスしたら日記のリストを表示したい、とか。ログイン画面を表示してユーザにログインさせたい、とか。何かやりたい事があるはず。
日記を例にすれば、日記のデータ一覧をデータベースから取得して、そのデータをもとにhtmlを生成して表示する必要がある。
RailsではMVCというフレームワークを採用している。
それぞれ
M:Model
V:View
C:Controller
という単語の頭文字を連結させたもの。
日記のデータはModelに該当する。
Modelのデータをもとにhtmlを生成している部分はViewに該当する。
Controllerはユーザから受けたリクエスト(localhost:3000に対してアクセスがきた、といった外部からの状況を監視してる)をもとに適切なModel、Viewを呼び出してhtmlなデータを返却する。いわば調整役である。
Modelはアプリの核。
これがないと何も始まらない。
というわけで、適当にModelを作ってみる。
1 |
rails generate model Item title:string body:string |
たったこれだけ。
ItemというModelができあがった。
Itemはtitleとbodyを持っている。
日記であればタイトルと本文といったところ。
1 2 3 4 5 6 7 |
anal% bundle exec rails g model Item title:String body:String invoke active_record create db/migrate/20150330124730_create_items.rb create app/models/item.rb invoke test_unit create test/models/item_test.rb create test/fixtures/items.yml |
何やら色々なファイルが生成されているようだ。
app/models/item.rb
これがModel。
db/migrate/20150330124730_create_items.rb
Migrateファイルとよばれるもの。
あとで書くmigrateコマンドを実行することでデータベース上にテーブルを作ったり消したり、カラムを追加してくれたりする。
test/models/item_test.rb
テストファイル
Itemクラスの中になんかしらのメソッドを追加したとき、そのメソッドが期待通りに動くかどうか確認するために使う。
メソッドを追加してわざわざその動作を確認するなんて面倒だ。
仕様変更によって今までまともに動作していたメソッドが正しく動かなくなった=バグを検知するためにも有用だったりする。バグは早く検知できたほうが良いよね。
test/fixtures/items.yml
フィクスチャーファイル
Itemクラスのテストをするとき実際DBに入ってる値に対して破壊的操作(値をアップデートしたり、消したりとか)してたらDBの状態がテストを実行するたびに変化してしまう。
何が困るって、ソースコード変更してないのにテストが成功したり失敗したりと不安定な状態になることだ。
これではテストの意味が全くない。
なので、テスト用に偽物のデータを使い開発環境のDBの状態を変化させないようにする。
この偽物のデータがフィクスチャーファイル。
Migrationする
generateコマンドでModelを作成した。
この状態ではまだDB上にテーブルが存在しない。
アプリケーション上にModelが存在しても、永続化するDBにそのModelを受ける皿が無い。
migirateコマンドを実行してDB上にテーブルを作成する。
1 |
rake db:migrate |
実行結果はこんな感じ。
1 2 3 4 5 |
anal% bundle exec rake db:migrate == 20150330124730 CreateItems: migrating ====================================== -- create_table(:items) -> 0.0012s == 20150330124730 CreateItems: migrated (0.0012s) ============================= |
Itemクラスのデータを作ってみる
これでDB上にテーブルができた。
まだデータが存在しない。
直接DBのクライアントを起動してINSERTナントカしても良い。
railsにはconsoleという機能がある。
1 |
rails console |
Item.connectionを実行して。。。
1 2 3 4 5 6 7 8 |
irb(main):004:0> item = Item.create(title: 'Hello Item', body: 'awesome') (0.1ms) begin transaction SQL (0.7ms) INSERT INTO "items" ("title", "body", "created_at", "updated_at") VALUES (?, ?, ?, ?) [["title", "Hello Item"], ["body", "awesome"], ["created_at", "2015-03-30 13:18:52.344634"], ["updated_at", "2015-03-30 13:18:52.344634"]] (1.5ms) commit transaction => #<Item id: 1, title: "Hello Item", body: "awesome", created_at: "2015-03-30 13:18:52", updated_at: "2015-03-30 13:18:52"> irb(main):006:0> Item.all Item Load (0.2ms) SELECT "items".* FROM "items" => #<ActiveRecord::Relation [#<Item id: 1, title: "Hello Item", body: "awesome", created_at: "2015-03-30 13:18:52", updated_at: "2015-03-30 13:18:52">]> |
これでItemのデータが1つ作成された。
次はこのデータをブラウザ上で表示させてみたい。
336px
336px
関連記事
-
-
開発で詰まったときにググるキーワード
そも …
-
-
redux-sagaをざっくり入門したい
Co …
-
-
FlutterでListViewしたい
こん …
-
-
フロントエンド開発のメモ
最近 …
-
-
プログラミング入門以前
これ …
-
-
Docker Machineのメモ
随時 …