moxt

Just another Blog site

意識低いRuby on Rails再入門1

      2015/07/03

整理がてらメモ。

Ruby on Railsとは何か

ウェブアプリケーションを作るためのフレームワーク。

必要そうなモノ全部持ってる。

  • ルーティング
  • DB管理
  • アセット管理
  • ジョブキュー
  • メール送信
  • テスト
  • デバッグ機能(webconsole,irb,pry…)

ほぼ事足りちゃうと思うが、足りなかったら豊富なgemを落としてくれば良い。

慣れればウェブアプリが短期間でつくれてしまう。

はじめかた

rubyをインストール

rbenvを使う。

railsをインストール

バージョン4.2.1がインストールされた。

railsアプリを新規作成

アプリを起動

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を作ってみる。

たったこれだけ。
ItemというModelができあがった。
Itemはtitleとbodyを持っている。
日記であればタイトルと本文といったところ。

何やら色々なファイルが生成されているようだ。

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上にテーブルを作成する。

実行結果はこんな感じ。

Itemクラスのデータを作ってみる

これでDB上にテーブルができた。
まだデータが存在しない。

直接DBのクライアントを起動してINSERTナントカしても良い。
railsにはconsoleという機能がある。

Item.connectionを実行して。。。

これでItemのデータが1つ作成された。

次はこのデータをブラウザ上で表示させてみたい。

 - プログラミング

  • このエントリーをはてなブックマークに追加
  • follow us in feedly

  関連記事

no image
意識低いRuby on Rails再入門4

下記の内容を読んでテスト系の処理をすっ飛ばしたメモ。 http://railstutorial.jp/chapters/sign-in-sign-out?version=4.0#top …

no image
YosemiteでRubyMineが起動できない

yosemiteからjavaが1.7系になってる。 一方、rubymineは1.6系を想定している。 …

large_v
Dockerでよく使うコマンド

随時追加 Contents1 …

300px-Ruby_logo
Ruby,Railsのチートシート

こういうのブログ形式じゃなくてwikiの方が良いのでは。。 と、遠い目をしつつ。 …

no image
Bower再入門

Contents1 Bowerとは何なのか2 …

large_v
Docker Machineのメモ

随時追記する Contents1 …

logo_og
ReactNativeでGiphyのデータを表示する

まずは下記をサクッとパクってみる。 当方、比較的AndroiderなのでAndroidで。 …

no image
アプリ起動時に呼び出すStoryboardを指定したい

google-fu不足でどこにも載ってなかったのでメモ。 プロジェクト内のInfo.plistで設定できます。 …

no image
意識低いRuby on Rails再入門5

http://railstutorial.jp/chapters/sign-in-sign-out?version=4.0#top この辺を読んだメモ。 …

no image
開発で詰まったときにググるキーワード

そもそも公式サイトやソースコード、テストコード、githubなどのissueを読む 基本的には1ヶ月から1年以内の回答しか見ないようにする …