(2015年までの)odaillyjp blog

イベント参加記録とプログラミング系の雑記

パーフェクト Rails を読みました(1章)

技術評論社様から『パーフェクト Ruby on Rails』が発売されました。著者の皆様、お疲れ様でした。発売日は6月6日なのですが、ちょっとだけ早く手に入れることができましたので、これからじっくり読んでいきます。

パーフェクト Ruby on Rails

パーフェクト Ruby on Rails

1章の感想

1章では RubyRails をインストールして、scaffold を使って簡単な todo アプリを作りながら、Rails の構造を見ていきます。著者の方々から「入門者向けの本ではないかもしれません」と聞いていましたので、インストール方法は掲載されていないのだと思っていたのですが、入門者でも読めるように配慮されている感じがしました。特に、WindowsRails を使うときの注意点についてコラムで細かく解説されていたのが驚きでした。

備忘録

rails のバージョンを切り替える

$ rails _4.0.6_

というように、rails の後にバージョンを入れると、そのバージョンで rails コマンドを実行できます。

db:migrate タスクを実行したときの動きについて

P.35 「migration の管理について」から引用します。

rake db:migrate を実行すると、最初に schema_migrations というテーブルを参照し migration ID を確認します。そして、実行されていない migration を検知すると、対応する migration ファイルを実行し migratetion ID を記録します。

この動きは知りませんでした。試しに db:migrate タスクを実行して、動きを見てみましょう。

$ ./bin/rails g scaffold tasks content:text
(出力略)
$ ./bin/rake db:create
$ sqlite3 db/development.sqlite3 ".schema"
$ ./bin/rake db:migrate
== 20140603165721 CreateTasks: migrating ======================================
-- create_table(:tasks)
   -> 0.0013s
== 20140603165721 CreateTasks: migrated (0.0014s) =============================

$ sqlite3 db/development.sqlite3 ".schema" 
CREATE TABLE "schema_migrations" ("version" varchar(255) NOT NULL);
CREATE TABLE "tasks" ("id" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, "controller" text, "created_at" datetime, "updated_at" datetime);
CREATE UNIQUE INDEX "unique_schema_migrations" ON "schema_migrations" ("version");

初めて db:migrate タスクを実行したときに、schema_migrations テーブルが作成されています。ついでに、このテーブルにはどのようなデータが入っているのか見てみましょう。

$ sqlite3 db/development.sqlite3 "SELECT version FROM schema_migrations"
20140603165721

よくわからない数字が入っていますが、これが migration ID だそうです。(migration ファイルを生成したときの時刻UTCが migration ID になるそうです。)

現在記録されている migration ID を確認したいときは db:migrate:status タスクを実行します。

$ ./bin/rake db:migrate:status

database: /Users/Odailly/foo/todo/db/development.sqlite3

 Status   Migration ID    Migration Name
--------------------------------------------------
   up     20140603165721  Create tasks

Status が up になっている Migration は適用済みで、down になっている Migration は未適用ということだそうです。

(development 環境限定) /rails/info/routes にアクセスすると、ルーティング情報が表示される

ブラウザからルーティングを確認する機能があります。これは Rails 4 から新たに加わった機能だそうです。
f:id:Shindo_Masaya:20140604021849j:plain:w600

お疲れ様でした

第二章も楽しみながら読んでいきたいです。