Ruby on Rails チュートリアル をやってみた その8

前回「Ruby on Rails チュートリアル をやってみた その7 - IxD's blog」では第7章をやりましたが、今回は

railstutorial.jp

から始めていきます。

 

今回も特に詰まった点はなかったのですが、演習とそれに関連する点ついて。

1について、チュートリアル中では明示的にクラス名をプレフィックスとして幾つかのクラスメソッドを定義していましたが、この演習で別のクラスメソッド定義方法が紹介されています。
リスト8.59: selfを使ってトークンやダイジェストの新しいメソッドを定義するでは一つ一つのクラスメソッドを定義する際にselfを記述しているのに対し、リスト8.60: class << selfを使ってトークンやダイジェストの新しいメソッドを定義するでは一度の記述でよく、纏まった一つのブロックとなるためコードの視認性が高いと言えます。

ちなみに、リスト8.32: rememberメソッドをUserモデルに追加するにある、self.remember_tokenのselfはクラスではなくモデル(ユーザーオブジェクトのインスタンス)を指している点に注意が必要です。

 

次回「Ruby on Rails チュートリアル をやってみた その9 - IxD's blog」は、

railstutorial.jp

をやっていきます。

Ruby on Rails チュートリアル をやってみた その7

前回「Ruby on Rails チュートリアル をやってみた その6 - IxD's blog」で第6章をやりましたが、今回は

railstutorial.jp

から始めていきます。

 

7.1.3 デバッガー

リスト7.6の通りにして、ブラウザで該当ページへアクセスすると、パーミッションエラーが発生しました。
ここでそもそもの勘違いがあったわけですが、ここでいう/users/1にアクセス、というのは何もブラウザでアクセスせよ、という話ではない点です。

ここでは、コンソールからのアクセスを想定していると考えられます。
従って、rails serverを起動した状態で、コンソールから、

$ byebug -R localhost:3000/users/1

といったようにするのですが、当方の環境では

Connecting to byebug server...
Connected.

と表示された以降、(byebug)プロンプトも出ずに終了しました。byebugについて色々とググってみたのですが、充分な結果を得られなかったことと、本チュートリアルを実行していく上で必ず必要な事項でもないため、ひとまずこの問題は棚上げします。勿論、当方の解釈が間違っている場合もあるので、その点は注意してください。

 

7.5.2 本番環境用Webサーバー

毎度の記述となりますが、当方のやってみたではBitbucketやHerokuは使用しませんので、

$ git push
$ git push heroku
$ heroku run rake db:migrate

は未実行です。

 

次回「Ruby on Rails チュートリアル をやってみた その8 - IxD's blog」は、

railstutorial.jp

をやっていきます。

Ruby on Rails チュートリアル をやってみた その6

前回「Ruby on Rails チュートリアル をやってみた その5 - IxD's blog」で第5章をやりましたが、今回は

railstutorial.jp

から始めていきます。


本章については特に詰まる点はありませんでしたが、全体として難易度は上がっているように感じました。
これまでの章の内容をよく読み、進めていくことが求められると思います。


次回「Ruby on Rails チュートリアル をやってみた その7 - IxD's blog」は

railstutorial.jp

をやっていきます。

Ruby on Rails チュートリアル をやってみた その5

前回「Ruby on Rails チュートリアル をやってみた その4 - IxD's blog」で第4章をやりましたが、今回は

railstutorial.jp

から始めていきます。
これまでとは違い、今回からは詰まった場合や気になった項目のみを取り上げることとします。

 

5.1.1 ナビゲーション

リスト5.2: サインアップページへのリンクがあるHomeページ
の箇所で、リストの内容でソースを変更してブラウザで表示させたところ、

Add `Rails.application.config.assets.precompile += %w( rails.png )` to `config/initializers/assets.rb` and restart your server

というエラーが表示されます。
そこで、

xrosriver.com

を参考に、config/environments/development.rbの

config.assets.raise_runtime_errors = ture

config.assets.raise_runtime_errors = false

と書き換え、webサーバを再起動したところ、問題なく表示されました。

 

次回「Ruby on Rails チュートリアル をやってみた その6 - IxD's blog」は

railstutorial.jp

をやっていきます。

Ruby on Rails チュートリアル をやってみた その4

前回は「Ruby on Rails チュートリアル をやってみた その3 - IxD's blog」で第3章をやりましたが、今回は

railstutorial.jp

をやっていきます。

 

第4章 Rails風味のRuby

4.1 動機

4.2 文字列(string)とメソッド

4.2.1 コメント

4.2.2 文字列

4.2.3 オブジェクトとメッセージ受け渡し

4.2.4 メソッドの定義

4.2.5 title ヘルパー、再び

4.3 他のデータ構造

4.3.1 配列と範囲演算子

4.3.2 ブロック

4.3.3 ハッシュとシンボル

4.3.4 CSS、再び

4.4 Rubyにおけるクラス

4.4.1 コンストラクタ

4.4.2 クラス継承

4.4.3 組込みクラスの変更

4.4.4 コントローラクラス

4.4.5 ユーザークラス

 

ここまでは特に詰まるポイントはないと思います。

 

4.5 最後に

$ git status
$ git commit -am "Add a full_title helper"
$ git push
$ bundle exec rake test
$ git push heroku

上記コマンドについて、今回のやってみたではBitbucketやHerokuは使用しませんので、

$ git status
$ git commit -am "Add a full_title helper"

としてあります。

 

4.5.1 本章のまとめ

「“deified”」という単語は回文である

 とまとめに入ってるのはクールですね。

 

4.6 演習

1.について、

リスト4.14のコードにある2つの疑問符を、それぞれ適切なメソッドに置き換えて、与えられた文字列の文字をシャッフルする関数を作成してください。ヒント: splitメソッド、shuffleメソッド、joinメソッドを組み合わせてみましょう。

とありますが、疑問符は3つありますので、それぞれにplitメソッド、shuffleメソッド、joinメソッドのいずれかを使用します。

 

次回「Ruby on Rails チュートリアル をやってみた その5 - IxD's blog」は、

railstutorial.jp

をやっていきます。

Ruby on Rails チュートリアル をやってみた その3

前回、「Ruby on Rails チュートリアル をやってみた その2 - IxD's blog」で第2章をやりましたが、今回は

railstutorial.jp

 

こちらのチュートリアルをやっていきます。

今回は第3章 ほぼ静的なページの作成です。

 

第3章 ほぼ静的なページの作成
説明のみなので特にありません。

3.1 セットアップ

リスト3.1

$ cd ~/workspace
$ rails _4.2.2_ new sample_app
$ cd sample_app/

実行したコマンド

$ cd ~/workspace
$ rails new sample_app
$ cd sample_app/

 

リスト3.2

source 'https://rubygems.org'

gem 'rails', '4.2.2'
gem 'sass-rails', '5.0.2'
gem 'uglifier', '2.5.3'
gem 'coffee-rails', '4.1.0'
gem 'jquery-rails', '4.0.3'
gem 'turbolinks', '2.3.0'
gem 'jbuilder', '2.2.3'
gem 'sdoc', '0.4.0', group: :doc

group :development, :test do
gem 'sqlite3', '1.3.9'
gem 'byebug', '3.4.0'
gem 'web-console', '2.0.0.beta3'
gem 'spring', '1.1.3'
end

group :test do
gem 'minitest-reporters', '1.0.5'
gem 'mini_backtrace', '0.1.3'
gem 'guard-minitest', '2.3.1'
end

group :production do
gem 'pg', '0.17.1'
gem 'rails_12factor', '0.0.2'
end

実際に使用したGemfile

source 'https://rubygems.org'

gem 'rails', '4.2.5'
gem 'sass-rails', '~> 5.0'
gem 'uglifier', '>= 1.3.0'
gem 'coffee-rails', '~> 4.1.0'
gem 'jquery-rails'
gem 'turbolinks'
gem 'jbuilder', '~> 2.0'
gem 'sdoc', '~> 0.4.0', group: :doc

group :development, :test do
gem 'sqlite3'
gem 'byebug'
gem 'web-console', '~> 2.0'
gem 'spring'
end

group :test do
gem 'minitest-report'
gem 'mini_backtrace'
gem 'guard-minitest'
end

group :production do
gem 'pg'
gem 'rails_12factor'
end

完全に環境を一緒にすることも考えましたが、バージョンがほぼ変わらないのでそのまま進めることにしました。

第1章や第2章と同様に、リスト1.8や1.9の「Hello, world」の手順に従うことをお勧めします。

とありますが、リスト1.9はroutes.rbのデフォルト状態が掲載されているのみですので、リスト1.10を実行してほしいのだろうと解釈し、実行しています。
また、今回のやってみたではBitbucketやHerokuは使用しませんので、

$ git remote add origin git@bitbucket.org:<username>/sample_app.git
$ git push -u origin --all # リポジトリと参照を初めてプッシュする

上記コマンドは実行しません。そして、

$ git commit -am "Add hello"
$ heroku create
$ git push heroku master

はコミットのみ実行としました。ですので、

$ git commit -am "Add hello"

のみとなります。これらのことからも分かる通り、

$ heroku logs

についても必要ありませんので実行しません。

3.1 静的ページ
前章の章番号が3.1だったので、おそらくは3.2が正しいと思われます。
内容的には特に不明な点はありませんでした。

3.2.1 静的なページの生成

$ git status
$ git add -A
$ git commit -m "Add a Static Pages controller"
$ git push -u origin static-pages

記事にも説明がありますが、最後のコマンドはBitbucketへプッシュを実行するものなので、

$ git push -u origin static-pages

は実行しません。

3.3 テストから始める
説明のみなので特にありません。

3.3.1 最初のテスト
リスト 3.12: GREEN

$ bundle exec rake test

を実行すると、以下の文言が含まれるエラーが発生します。

doesn't exist yet. Run `rake db:migrate` to create it, then try again. If you do not intend to use a database, you should instead alter application.rb to limit the frameworks that will be loaded.

パス部分は省略していますが、rake db:migrateを実行せよ、ということですので実行しました。

$ bundle exec rake db:migrate

その後、

$ bundle exec rake test

を実行すると以下のエラーが出ました。

`require': cannot load such file -- guard (LoadError)

そこで、

$ bundle exec guard

を実行したところ、

bundler: command not found: guard
Install missing gem executables with `bundle install`

ということでしたので、Gemfileのtestに「gem 'guard’」を追加します。

group :test do
gem 'minitest-reporters'
gem 'mini_backtrace'
gem 'guard'
gem 'guard-minitest'
end

全体としては以下のようになります。

source 'https://rubygems.org'

gem 'rails', '4.2.5'
gem 'sass-rails', '~> 5.0'
gem 'uglifier', '>= 1.3.0'
gem 'coffee-rails', '~> 4.1.0'
gem 'jquery-rails'
gem 'turbolinks'
gem 'jbuilder', '~> 2.0'
gem 'sdoc', '~> 0.4.0', group: :doc

group :development, :test do
gem 'sqlite3'
gem 'byebug'
gem 'web-console', '~> 2.0'
gem 'spring'
end

group :test do
gem 'minitest-reporters'
gem 'mini_backtrace'
gem 'guard'
gem 'guard-minitest'
end

group :production do
gem 'pg'
gem 'rails_12factor'
end

書き換え後、

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

と実行後、

$ bundle exec rake test

テストを実行すると、正常にテストを行うことができました。

3.3.2 Red
3.3.3 Green
特に詰まるポイントはありませんでした。

3.3.4 リファクタリング
説明のみなので特にありません。

3.4 少しだけ動的なページ
ようやく動的な要素が出てきましたね。
ここでの内容について、特に躓くポイントはありませんでしたが、実際にコードを書いた結果がわかりやすく反映される様は、僅かではあったとしても楽しくなってきます。

3.5 最後に

$ git add -A
$ git commit -m "Finish static pages"

$ git checkout master
$ git merge static-pages

までは実行しましたが、それ以降は実行していません。

3.5.1 本章のまとめ
説明のみなので特にありません。

3.6 演習
特に問題なくできました。
回答は本記事には掲載しません。

3.7 高度なセットアップ

3.7.1 minitestレポーター
特に詰まるポイントはありませんでした。

3.7.2 Backtrace silencer
私はクラウドIDEを使用していませんので、スキップしました。

3.7.3 Guardによるテストの自動化
3.3.1 最初のテストで問題となったguardについて記載があります。
こちらでリスト3.2においてguard gem をアプリ内に取り込み済みである、という記載がありますがリスト3.2の状態で

$ bundle exec guard init

とすることで動かすことができるとあるのですが、guard gemはリスト3.2にはありませんので、下記のエラーになります。

`block in replace_gem': guard is not part of the bundle. Add it to Gemfile. (Gem::LoadError)

ですので上記3.3.1の箇所で指摘した通り、guardを追加しておきましょう。


次回、「Ruby on Rails チュートリアル をやってみた その4 - IxD's blog」は

railstutorial.jp

をやっていきます。

Ruby on Rails チュートリアル をやってみた その2

前回の「Ruby on Rails チュートリアル をやってみた その1 - IxD's blog」では第1章でしたが、今回は

railstutorial.jp

 

こちらのチュートリアルをやっていきます。

今回はその2ということで、「第2章 Toyアプリケーション」です。

 

2.1 アプリケーションの計画

記事にはバージョン指定して

$ cd ~/workspace
$ rails _4.2.2_ new toy_app
$ cd toy_app/

となっていますが、

$ cd ~/workspace
$ rails new toy_app
$ cd toy_app/

としています。

当方で作成した環境とチュートリアルで想定している環境が異なるため、Gemfileの編集は行ってません。
因みにGemfieで指定されているバージョンとnewで作成されたアプリケーションにおける細かいバージョンの違いは多少ありますが、大きな違いはない。x.y.zのzが違う程度です。
また、前回の記事でも書いたように、BitbucketやHerokuは使用していないため、当記事ではBitbucketやHerokuに関する箇所は無視します。ですので、
2.1の最後に出てくるコマンドは、

$ git commit -am "Add hello"
$ heroku create
$ git push heroku master

ではなく、

$ git commit -am "Add hello"

としました。

2.1.1 ユーザーのモデル設計
説明のみなので特にありません。

2.1.2 マイクロポストのモデル設計
説明のみなので特にありません。

2.2 Usersリソース

$ rails server -b $IP -p $PORT

こちら実行すると当方の環境では以下のようなエラーが出ました。

`getaddrinfo': getaddrinfo: Name or service not known (SocketError)

前回の記事で作成した環境はサーバマシンに作成しているので、他のマシンから見えないと困ってしまいます。
ですので前回の記事に記載した、以下のコマンドを実行します。

$ rails server -d -b 0.0.0.0

2.2.1 ユーザーページを探索する
冒頭に「/」で表示されるのはRailsのデフォルトページが表示され、という記述がありますが、2.1の最後にリスト1.8と1.9で推奨した「Hello, world!」での手順と同様の手順を〜という記述があります。
この作業を行っているとデフォルトページではなく、Hello, world!となっているはずです。
と思いましたがリスト1.10をやるとは書かれていませんでしたので、デフォルトページが表示される、が正解ですね。

2.2.2 MVCの挙動
説明のみなので特にありません。

2.2.3 自動生成したUsersリソースの欠点
説明のみなので特にありません。

2.3 Micropostsリソース
説明のみなので特にありません。

2.3.1 マイクロポストのページを探検する
躓くポイントは特にありませんでした。

2.3.2 マイクロポストをマイクロにする
躓くポイントは特にありませんでした。

2.3.3 ユーザーとマイクロポストをhas_manyで関連づける
リスト2.10 マイクロポストの最大文字数を140文字に制限する。

validates :content, length: { maximum: 140 }

validates:の場合はコロンの前にスペースがありますが、miximumの場合はコロンの後にスペースがあります。
この違いが一見してわかりませんでした。
命令に対してはコロンの前にスペース、パラメータ等はコロンの後にスペース、ということなんですかね?

ちなみに、rails consoleの箇所でコマンド実行順序を間違えてしまい、エラーが出ましたが、
toy_app以下のapp、db、config、testを削除してからgit checkout -fを実行し、2.1から再度やり直すことで元に戻せました。
が、後々考えてみると、こちらは確認するだけだったので特に必要なかったですね…

なんらか間違えてリカバーする方法が他にない場合はこのようにすると良いかもしれません。

2.3.4 継承の階層
説明のみなので特にありません。

2.3.5 アプリケーションをデプロイする

$ git status
$ git add -A
$ git commit -m "Finish toy app"
$ git push

とありますが、Bitbucketは使っていませんので、

$ git status
$ git add -A
$ git commit -m "Finish toy app"

と、しました。
同様に、Herokuも使用していないので、

$ git push heroku

$ heroku run rake db:migrate

は実行しません。

2.4 最後に
説明のみなので特にありません。
2.4.1 本章のまとめ
説明のみなので特にありません。

2.5 演習
解答はこちらで載せるのもどうかと思いますので、あえて掲載はしません。

 

次回、「Ruby on Rails チュートリアル をやってみた その3 - IxD's blog」は

railstutorial.jp

をやっていきます。