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

  関連記事

nokogiriでスクレイピングするときによく忘れるヤツ集

書くことで記憶を定着させる施術。 class,id以外の属性を指定してタグを探したい …

Docker Machineのメモ

随時追記する Contents1 …

no image
Mastodonインスタンス(お一人様用)を作り方メモ

Mastodonは運営の存在を気にせず罵詈雑言吐けるの便利そう。 自分用のインスタンス作ったので、便所の落書きしておく。 …

no image
『Tutorial & Hackathon #1』をやってみる

https://pydata.tokyo/news/pydata.tokyo-tutorial-hackathon-1 タイタニックの乗客データから生存者の推定モデルを作成してる。 …

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

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

no image
Androidアプリを実機デバッグしたいのにNo debuggable applicationsと表示される時の対処例

Tools > …

ReactとFluxとReduxについて順を追って整理する

書き途中 Contents1 …

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

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

MacでDockerした感想文

Contents1 前提:DockerはLinux上でしか動かない1.1 …

no image
Python(Anaconda)とOpenCVを使って動画から顔画像を抽出してみる

今話題のディープラーニングをやってみたい。 いろいろ見た感じCaffeというフレームワークが良さそう。 …