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
ディープラーニングが気になる

ダラダラとメモ。 Contents1 …

no image
Macでdocker系のコマンドが使えなくなったら確認すること

OSXではdockerは使えないため、別にVMを立ち上げ、そこでdockerを動かしてる。 macからdockerコマンドを使うためにboot2dockerというコマンドを使う。 …

logo_og
ReactなComponent同士を連携させたい

実践的なサンプルに塗れてなんとなく使ってると破綻する。 分かってること、分かってないことを整理しておきたい。 …

no image
sudo gem install cocoapods –preしても0.36.0が使えないとき

最新のcocoapodsそのものはインストールされてる。 なので、podコマンドを実行するときに下記のようにバージョンを指定すれば一応使える。 …

no image
意識低いRuby on Rails再入門6 ~ログイン必須のControllerを作りたい~

ログイン状態を取得するためのSessionsHelperを前に書いた 新規投稿画面を表示したり、実際に投稿するときにはログイン必須であることを保証したい。 …

no image
Androidアプリを作るために最低限必要な知識と未知の部分を列挙

作りたいアプリによって必要な知識は変わるかもしれないが。。 個人的過ぎて役に立たないが、整理がてら羅列してみる。 …

LJ_Gsz28
コードを雑に読むアプローチでScrapyを入門する

Scrapyはスクレイピング用フレームワークなので、登場人物多すぎてよく分からない。 彼らの関係性や役割を理解を深めるために『Data …

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

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

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

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

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

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