tyoshikawa1106のブログ

- Force.com Developer Blog -

Rails:デモアプリケーションの作成を試してみました

Railsチュートリアルの第二章です。

アプリの計画

$ cd rails_projects
$ rails new demo_app
$ cd demo_app


デモアプリケーション用のGemfile。


「--without production」オプションを追加することで、本番用のgemを除いたローカルgemをインストールします。

$ bundle install --without production
$ bundle update
$ bundle install


Gitでバージョン管理

$ git init
$ subl .gitignore
$ git add .
$ git commit -m "Initial commit"


.gitignore内容


GitHubにリポジトリを作成してgit pushします。SSHを使えばパスワードを聞かれません。

$ git remote add origin https://github.com/<username>/demo_app.git
$ git push -u origin master

f:id:tyoshikawa1106:20150714205152p:plain

f:id:tyoshikawa1106:20150714205511p:plain


これで、アプリ自体を作成するための下準備が整いました。
f:id:tyoshikawa1106:20150714205559p:plain

ユーザーのモデル設計

f:id:tyoshikawa1106:20150714205905p:plain

マイクロポストのモデル設計

f:id:tyoshikawa1106:20150714205939p:plain

Users リソース

f:id:tyoshikawa1106:20150714210138p:plain


Railsのscaffoldは、rails generateスクリプトにscaffoldコマンドを渡すことで生成されます。scaffoldコマンドの引数には、リソース名を単数形にしたもの (この場合はUser) を使用し、必要に応じてデータモデルの属性をオプションとしてパラメータに追加します。

$ rails generate scaffold User name:string email:string

f:id:tyoshikawa1106:20150714210518p:plain


name:stringとemail:stringオプションを追加することで、Userモデルの内容が図2.2の表のとおりになるようにします (なお、idパラメータはRailsによって自動的に主キーとしてデータベースに追加されるため、追加不要です)。


続いてデモアプリケーションの開発を進めるには、以下のようにRakeを使用してデータベースをマイグレート (migrate) する必要があります。

$ bundle exec rake db:migrate

f:id:tyoshikawa1106:20150714210745p:plain

このコマンドは、単にデータベースを更新し、usersデータモデルを作成するためのものです (データベースのマイグレーションの詳細については 6.1.1以降で説明します)。なお、現在のGemfileに対応するバージョンのRakeが確実に実行されるようにするために、bundle execを使用してrakeを実行します


ここまで実行すれば、以下のようにrails sコマンド (rails serverコマンドの短縮版) を実行してローカルWebサーバーを起動できるようになります。

$ rails s

f:id:tyoshikawa1106:20150714211054p:plain


ここからアクセスします。

http://localhost:3000/

f:id:tyoshikawa1106:20150714211818p:plain

ユーザーページを表示する

f:id:tyoshikawa1106:20150714212057p:plain


Railsで自動でページが作成されるみたいです。たとえば次のURLでユーザ一覧ページを表示できます。

http://localhost:3000/users

f:id:tyoshikawa1106:20150714212357p:plain


新規作成、編集、削除、一覧表示の機能を利用できます。
f:id:tyoshikawa1106:20150714212956p:plain

MVCの挙動

f:id:tyoshikawa1106:20150714213434p:plain

  1. ブラウザは/usersというURLへのリクエストを発行する。
  2. Railsは/usersをUsersコントローラ内のindexアクションに割り当てる (ルーティング)。
  3. indexアクションはUserモデルに「すべてのユーザーを取り出せ」と指示する (User.all)。
  4. Userモデルはすべてのユーザーをデータベースから取り出す。
  5. Userモデルはユーザーの一覧をコントローラに返す。
  6. コントローラはユーザーの一覧を@users変数に保存し、indexビューに渡す。
  7. ビューは、その中に埋め込まれているRubyを使用してHTMLを生成する。
  8. コントローラは、生成されたHTMLをブラウザに返す。


MVC

  • app/models/user.rb (モデル)
  • app/views/users/index.html.erb (ビュー)
  • app/controllers/users_controller.rb (コントローラ)

継承について

Userクラスにおける継承。

app/models/user.rb

class User < ActiveRecord::Base
  .
end
Micropostクラスにおける継承。

app/models/micropost.rb

class Micropost < ActiveRecord::Base
  .
end

f:id:tyoshikawa1106:20150714215004p:plain

デモアプリケーションのデプロイ

GitHubにpush

$ git add .
$ git commit -m "Finish demo app"
$ git push

Herokuにデプロイ

$ heroku create
$ git push heroku master


アプリケーションのデータベースが動作するようにするには、以下を実行して本番データベースのマイグレーションを行う必要もあります。

$ heroku run rake db:migrate


herokuにデプロイしたのでheroku openコマンドでアプリにアクセスできます。アクセスすると次のようなエラーページが表示されますが、これはデフォルトページがサンプルのためです。

f:id:tyoshikawa1106:20150714215712p:plain


今回確認したusersなどのパスを指定すると一覧画面や登録画面を表示できます。
f:id:tyoshikawa1106:20150714215748p:plain