【進捗】Ruby on Rails チュートリアル 第一章 ゼロからデプロイまで 【自分用】

はじめに

2017年02月に転職をキメたが、引越しや前職SIのプロジェクトがなかなか落ち着かずいたため、次の仕事の準備を今更初めた。次の仕事ではRuby on Rails使うらしいので「Railsチュートリアル」を進めることが準備につながると考えている。Web初心者なので1週間で100%消化は無理だと思っているけど、毎日少しずつ進めて行きたいと思う。とりあえずこれやっとけば入門できるよ!を信じて進める。Believe。

目下、試用期間で切られないことを目標に頑張っていきたい。


教材

上記にも書いたとおり。

Ruby on Rails チュートリアル Michael Hartl (マイケル・ハートル) 第4版
実例を使ってRailsを学ぼうrailstutorial.jp


進捗(やったこと、所感)


・1.2.1 開発環境の構築
MacBookProを購入するも、環境の巻き戻しや極力チュートリアルに沿うことを考慮して、Cloud9に登録。まだ走り始めだけど正直な感想はめっちゃ便利。


・1.2.2 Railsをインストール
「$ gem install rails -v 5.0.0.1」でRials環境を構築。


・1.3 最初のアプリケーション
rails newコマンドのバージョン指定を覚えた


・1.3.1 Bundler
Gemfilesで利用するGemの指定を行いRails環境を固定させることができると理解。ただ実際に「$ bundle install」 を実行すると、異なる(古い?)バージョンのGemはインストールできないとエラーで怒られたので「$ gem install rails -v 5.0.0.1」したバージョンでチュートリアルを進めることにした。有識者に聞けば解決するんだろうけど、とりあえず進めることが大事だと思い先を急ぐことにする。現状のgem listをまとめると以下の通りになる。チュートリアルで躓く場合はおそらく以下のバージョン差異が起因するだろうなぁ。デフォルトのgemfileの内容では無事インストール成功。

  • rails (5.0.2, 5.0.0.1)
  • rails-dom-testing (2.0.2)
  • rails-html-sanitizer (1.0.3)
  • sprockets-rails (3.2.0)
  • puma (3.8.2)
  • sass-rails (5.0.6)
  • uglifier (3.2.0)
  • coffee-rails (4.2.1)
  • jquery-rails (4.3.1)
  • turbolinks (5.0.1)
  • turbolinks-source (5.0.0)
  • jbuilder (2.6.3)
  • sqlite3 (1.3.13)
  • byebug (9.0.6)
  • web-console (3.5.0)
  • listen (3.0.8)
  • spring (2.0.1)
  • spring-watcher-listen (2.0.1)

Rails Tutorialのgemfileとインストールを試みた際のエラーログを記載。単純に操作ミスでは無いはずだけど・・・

リスト 1.5: Ruby gemごとにバージョンを明示的に指定したGemfile
source 'https://rubygems.org'

gem 'rails', '5.0.0.1'
gem 'puma', '3.4.0'
gem 'sass-rails', '5.0.6'
gem 'uglifier', '3.0.0'
gem 'coffee-rails', '4.2.1'
gem 'jquery-rails', '4.1.1'
gem 'turbolinks', '5.0.1'
gem 'jbuilder', '2.4.1'

group :development, :test do
gem 'sqlite3', '1.3.11'
gem 'byebug', '9.0.0', platform: :mri
end

group :development do
gem 'web-console', '3.1.1'
gem 'listen', '3.0.8'
gem 'spring', '1.7.2'
gem 'spring-watcher-listen', '2.0.0'
end

# Windows環境ではtzinfo-dataというgemを含める必要があります
gem 'tzinfo-data', platforms: [:mingw, :mswin, :x64_mingw, :jruby]

There was an error parsing `Gemfile`: You cannot specify the same gem twice with different version requirements.
You specified: sqlite3 (>= 0) and sqlite3 (= 1.3.11). Bundler cannot continue.


・1.3.2 rails server
「$ rails new」でhello appのWebサーバを起動。成功。

f:id:rhutaba:20170502200457p:plain

・演習

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

→デフォルトをそのまま使用しているのでRuby versionは2.3.0で差異はない。

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

→上記1.3.1 Bundlerで記載。


・1.3.3 Model-View-Controller (MVC)
所感なし


・1.3.4 Hello, world!
emcasで書き換えてhello world!の表示に成功。
f:id:rhutaba:20170502202620p:plain


・演習

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

→文字列の書き換え。成功。

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

→文字列の書き換え。成功。

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

→「ApplicationController」に「goodbye」を追加で定義し、ルートに「goodbye」を参照するように記載を変更。


・1.4 Gitによるバージョン管理
Bitbucketに公開鍵を設定するにあたって、BitbucketのUIがチュートリアルから乖離があったので戸惑った。が、サービスの内容を舐めたら見つかった。リモートリポジトリへのコミット完了。


・1.5 デプロイする
Herokuのサービスを登録させられる。大変便利らしい。チュートリアルの記載が薄いので戸惑った。デプロイ後のURLがチュートリアル記載の「$ heroku create」と違っていた。正しいリンクは「$ git push heroku master」でLunchされたURLだった。

remote: -----> Launching...
remote: Released v5
remote: https://gentle-plateau-11854.herokuapp.com/ deployed to Heroku


・演習

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

→省略

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

→こんな感じ。
f:id:rhutaba:20170503020748p:plain


最後にやってみた感想

知らないサービスを薄い記載で平然と載せてくるチュートリアルさんにたじろぎつつも、とりあえず1章はできた。概念は理解できた。理論とサービスの仕様、御作法は習得に時間が掛かるので仕事しながらいろいろと吸収していく形になるのかな。当然だけど、まだ全体像がまだもやもやしているので、手を動かし自分なりに咀嚼しながらRailsについて把握していきたい。

2章以降も1日1章できるかな?重い章、軽い章あるだろうけど、できるだけ先に進めるように時間を割きたいと思う。
はてな記法での書き方も考えないとなぁ。