酔いどれエンジニアのブログ

有限会社wisdomのスタッフブログです。主にプログラミングやアプリケーション開発の話題を書いていきます。

ブログシステムを作りながらRailsを学ぶ(2) ひな形を作る

前回のブログシステムを作りながらRailsを学ぶ(1) 準備:プロジェクトを作るで作ったプロジェクトにひな形を付けていきます。

本当の開発では、いきなり思いつきでひな形を作ったりしませんが、学習が目的ですので、深く開発プロセスは考えないことにします。    

ひな形を作る

とは言え、最低限データとして必要なものは考えておかないとさすがに作れません。

ブログに置いて最低限必要なものは何か。
タイトルと内容、そして更新日でしょう。

最低限必要なデータが決まったので、さっそくひな形を作ろうと思います。
以下のコマンドを実行して下さい。
更新日が入っていませんが、気にせずこのまま実行して下さい。

$ sudo rails g scaffold blog title:string content:text 
    invoke  active_record
      create    db/migrate/[Migration ID]_create_blogs.rb
      create    app/models/blog.rb
      invoke    test_unit
      create      test/models/blog_test.rb
      create      test/fixtures/blogs.yml
      invoke  resource_route
       route    resources :blogs
      invoke  scaffold_controller
      create    app/controllers/blogs_controller.rb
      invoke    erb
      create      app/views/blogs
      create      app/views/blogs/index.html.erb
      create      app/views/blogs/edit.html.erb
      create      app/views/blogs/show.html.erb
      create      app/views/blogs/new.html.erb
      create      app/views/blogs/_form.html.erb
      invoke    test_unit
      create      test/controllers/blogs_controller_test.rb
      invoke    helper
      create      app/helpers/blogs_helper.rb
      invoke      test_unit
      create        test/helpers/blogs_helper_test.rb
      invoke    jbuilder
      create      app/views/blogs/index.json.jbuilder
      create      app/views/blogs/show.json.jbuilder
      invoke  assets
      invoke    coffee
      create      app/assets/javascripts/blogs.js.coffee
      invoke    scss
      create      app/assets/stylesheets/blogs.css.scss
      invoke  scss
      create    app/assets/stylesheets/scaffolds.css.scss

これによりひな形が出来ました。
特に重要なものは以下の通りです。

  • マイグレーションファイル
    db/migrate/[Migration ID]_create_blogs.rb
    SQLを使わずにテーブルの定義ができるマイグレーションのファイルです。

  • Modelクラス
    app/models/blog.rb
    MVCのModelクラスのはずですが、RailsのModelは責務が大きく肥大化しがちなので注意が必要です。
    この辺り、この先の記事で触れていくと思います。

  • Controllerクラス app/controllers/blogs_controller.rb
    Controllerクラスです。 一つのControllerは一つのModelに対しての窓口になるのが基本です。

  • Viewファイル
    app/views/blogs/index.html.erb app/views/blogs/edit.html.erb app/views/blogs/show.html.erb app/views/blogs/new.html.erb
    各々、indexは一覧、editは編集、showは個別データの照会、newは新規作成の画面となっています。    

テーブルを作る

まだデータベースにテーブルができていません。
データベースを用意した覚えはないと思いますがRailsはデフォルトでsqliteを用意してくれますので、とりあずそれを使うことにします。
次のコマンドを実行し、マイグレーションファイルを適用します。

$ sudo rake db:migrate

==  CreateBlogs: migrating ====================================================
-- create_table(:blogs)
   -> 0.0019s
==  CreateBlogs: migrated (0.0020s) ===========================================

これによりテーブルが作成されました。
どこまでマイグレーションファイルが適用されているかは、以下のコマンドで確認出来ます。

$ sudo rake db:migrate:status

それでは実際にテーブルの中身を確認したいと思います。
データベースファイルはdb/development.sqlite3に入っています。
下記のコマンドを打って、データベースに接続します。

$ sqlite3 db/development.sqlite3 
SQLite version 3.7.12 2012-04-03 19:43:07
Enter ".help" for instructions
Enter SQL statements terminated with a ";"

接続できたら先ずテーブルの存在を確認し、その後にそのテーブルの構成を確認します。

sqlite> .tables
blogs              schema_migrations

sqlite> .schema blogs
CREATE TABLE "blogs" ("id" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, "title" varchar(255), "content" text, "created_at" datetime, "updated_at" datetime);

確認できたでしょうか。
テーブルの構成に見覚えのない項目があると思いますが、これはマイグレーションした際に自動生成されたものです。
この中のupdated_atがデータの更新日を示す項目ですので、これで必要なものが揃った状態になりました。

それではSQLiteからログアウトします。

sqlite> .exit

     

動作を確認する

それでは確認してみましょう。
以下のコマンドを実行して、Serverを起動して下さい。

$ sudo rails server

起動したらhttp://localhost:3000/blogsにアクセスし、起動を確認して下さい。
下記のような画面が出たら更新完了です。 画面のイメージです    

Gitに送信する

編集が終わったのでGitに送信します。

$ git add .
$ git commit -am "ひな形作成"
$ git push

今回はBlogのベースを作ったので一応Tagをつけときたいと思います。

$ git tag -a 0.1 -m "Plain Blog"
$ git push --tag

タグ名が「0.1」のものに「Plain Blog」というコメントを付けました。

以上で作成は終わりです。
http://localhost:3000/blogsにアクセスして挙動を確認しておくと、より理解が深まると思います。