v-crn Code Log

主に備忘録

Rails Tutorial 第4版 第1章 演習 解答例

f:id:v-crn:20190711155257p:plain

この文書はRails Tutorial第4版第1章の演習に対する個人の解答例です。解答には誤りや不適切な表現が含まれていることがありますが、もし誤謬を見つけたらコメント頂けると嬉しいです。
それでは、やっていきましょう!

1.1 はじめに

1.1.1 前提知識

1. Ruby on Railsで使うRuby gemはどのWebサイトにありますか?ヒント: 分からないときはとにかくググりましょう。

Ruby gemは主にはRubyGemsで、またそれ以外にもGitHubで配布されています。

2. 現時点でのRailsの最新バージョンはいくつですか?

下記のWebサイトで確認できます。2019年7月7日現在、最新版は5.2.3です。 Ruby on Rails | A web-application framework that includes everything needed to create database-backed web applications according to the Model-View-Controller (MVC) pattern.

3. Ruby on Railsはこれまでに何回ダウンロードされたでしょうか?調べてみてください。

下記のWebサイトで確認できます。この文を書いている時点で累計ダウンロード数は179,872,069です。 rails | RubyGems.org | コミュニティのGemホスティングサービス

1.1.2 この本における取り決め

演習なし。

1.2 さっそく動かす

1.2.1 開発環境

演習なし。

1.2.2 Railsをインストールする

演習なし。

1.3 最初のアプリケーション

1.3.1 Bundler

演習なし。

1.3.2 rails server

1. デフォルトのRailsページに表示されているものと比べて、今の自分のコンピュータにあるRubyのバージョンはいくつになっていますか? コマンドラインruby -vを実行することで簡単に確認できます。

$ ruby -v
ruby 2.5.3p105 (2018-10-18 revision 65156) [x86_64-darwin18]

2. 同様にして、Railsのバージョンも調べてみましょう。調べたバージョンはリスト 1.1でインストールしたバージョンと一致しているでしょうか?

$ rails -v
Rails 5.2.3

最新版をインストールしたので一致していません。

1.3.3 Model-View-Controller (MVC)

演習なし。

1.3.4 Hello, world!

1. リスト 1.7のhelloアクションを書き換え、「hello, world!」の代わりに「hola, mundo!」と表示されるようにしてみましょう。

application_controller.rb

class ApplicationController < ActionController::Base
    protect_from_forgery with: :exception

  def hello
        # render html: "hello, world!"
        render html: "hola, mundo!"
  end
end

2. Railsでは「非ASCII文字」もサポートされています。「¡Hola, mundo!」にはスペイン語特有の逆さ感嘆符「¡」が含まれています (図 1.16)18。「¡」文字をMacで表示するには、Optionキーを押しながら1キーを押します。この文字をコピーして自分のエディタに貼り付ける方が早いかもしれません。

application_controller.rb

...
def hello
    # render html: "hello, world!"
    # render html: "hola, mundo!"
    render html: "¡hola, mundo!"
end
...

3. リスト 1.7のhelloアクションを参考にして、2つ目のアクションgoodbyeを追加しましょう。このアクションは、「goodbye, world!」というテキストを表示します。リスト 1.9のルーティングを編集して、ルートルーティングの割り当て先をhelloアクションからgoodbyeアクションに変更します (図 1.17)。

application_controller.rb

def goodbye
    render html: "goodbye, world!"
end

routes.rb

Rails.application.routes.draw do
    # root 'application#hello'
    root 'application#goodbye'
end

1.4 Gitによるバージョン管理

1.4.1 インストールとセットアップ

演習なし。

1.4.2 Gitのメリット

演習なし。

1.4.3 Bitbucket

演習なし。

1.4.4 ブランチ、編集、コミット、マージ

演習なし。

1.5 デプロイする

1.5.1 Herokuのセットアップ

演習なし。

1.5.2 Herokuにデプロイする (1)

演習なし。

1.5.3 Herokuにデプロイする (2)

1. 1.3.4.1と同じ変更を行い、本番アプリでも「hola, mundo!」を表示できるようにしてください。

application_controller.rb

def hello
    # render html: "hello, world!"
    render html: "hola, mundo!"
    # render html: "¡hola, mundo!"
end

routes.rb

Rails.application.routes.draw do
    root 'application#hello'
    # root 'application#goodbye'
end

コンソール

$ git add app/controllers/application_controller.rb config/routes.rb
$ git commit -m "change hello method to show \"hola, mundo!\""
$ git push
$ git push heroku master

2. 1.3.4.1と同様、ルートへのルーティングを変更してgoodbyeアクションの結果が表示されるようにしてください。またデプロイ時には、Git pushのmasterをあえて省略し、git push herokuでデプロイできることを確認してみてください。

routes.rb

Rails.application.routes.draw do
    # root 'application#hello'
    root 'application#goodbye'
end

コンソール

$ git add config/routes.rb
$ git commit -m "change ApplicationController's method from hello to goodbye in root"
$ git push
$ git push heroku

1.5.4 Herokuコマンド

1. heroku helpコマンドを実行し、Herokuコマンドの一覧を表示してみてください。Herokuアプリのログを表示するコマンドはどれですか?

$ heroku help
CLI to interact with Heroku

VERSION
  heroku/7.26.2 darwin-x64 node-v11.14.0

USAGE
  $ heroku [COMMAND]

COMMANDS
  access          manage user access to apps
  addons          tools and services for developing, extending, and
                  operating your app
  apps            manage apps on Heroku
  auth            check 2fa status
  authorizations  OAuth authorizations
  autocomplete    display autocomplete installation instructions
  buildpacks      scripts used to compile apps
  certs           a topic for the ssl plugin
  ci              run an application test suite on Heroku
  clients         OAuth clients on the platform
  config          environment variables of apps
  container       Use containers to build and deploy Heroku apps
  domains         custom domains for apps
  drains          forward logs to syslog or HTTPS
  features        add/remove app features
  git             manage local git repository for app
  help            display help for heroku
  keys            add/remove account ssh keys
  labs            add/remove experimental features
  local           run Heroku app locally
  logs            display recent log output     <- Herokuアプリのログを表示するコマンド
  maintenance     enable/disable access to app
  members         manage organization members
  notifications   display notifications
  orgs            manage organizations
  pg              manage postgresql databases
  pipelines       groups of apps that share the same codebase
  plugins         list installed plugins
  ps              Client tools for Heroku Exec
  psql            open a psql shell to the database
  redis           manage heroku redis instances
  regions         list available regions for deployment
  releases        display the releases for an app
  reviewapps      disposable apps built on GitHub pull requests
  run             run a one-off process inside a Heroku dyno
  sessions        OAuth sessions
  spaces          manage heroku private spaces
  status          status of the Heroku platform
  teams           manage teams
  update          update the Heroku CLI
  webhooks        setup HTTP notifications of app activity

2. 上の演習で見つけたコマンドを使って、Herokuアプリの最近のログ (log) を調べてみましょう。直近に発生したイベントは何でしたか? (このログを調べるコマンドを覚えておくと、本番環境の不具合を見つけるときに役立ちます)

$ heroku logs
2019-07-07T18:24:18.346528+00:00 app[api]: Release v1 created by user railstutorial@example.com
2019-07-07T18:24:18.346528+00:00 app[api]: Initial release by user railstutorial@example.com
2019-07-07T18:24:18.550232+00:00 app[api]: Enable Logplex by user railstutorial@example.com
2019-07-07T18:24:18.550232+00:00 app[api]: Release v2 created by user railstutorial@example.com

......

2019-07-07T20:11:55.516940+00:00 app[web.1]: === puma shutdown: 2019-07-07 20:11:55 +0000 ===
2019-07-07T20:11:55.516942+00:00 app[web.1]: - Goodbye!
2019-07-07T20:11:55.516944+00:00 app[web.1]: Exiting

直近に発生したイベントは終了処理でした。

1.6 最後に

1.6.1 本章のまとめ

演習なし。