techium

このブログは何かに追われないと頑張れない人たちが週一更新をノルマに技術情報を発信するブログです。もし何か調査して欲しい内容がありましたら、@kobashinG or @muchiki0226 までいただけますと気が向いたら調査するかもしれません。

Ruby on Rails チュートリアルをなぞる

Ruby on Rails チュートリアルをなぞる

きっかけ

先日 try! Swift Conf にて @yuumi3 さんにお会いし、

テストについて学びたいなら Ruby, 今からやるなら Rails。 サーバーサイドも学べていいよ。

とのお話をいただき、「そういえば Ruby on Rails は数回触ってみたものの使いこなすには至ってないなぁ」というところもありやってみるか、というのが動機。

Ruby on Rails チュートリアル:実例を使って Rails を学ぼう が良いとこれまた @yuumi3 さんに教えていただいたので一回これを通してみる。

  • テストについて学ぶ
  • サーバーサイドについても触れていこう

が目標。

一挙両得となるか、二兎を追う者一兎をも、となるか一回通してみれば見えてくるものもあるかなと。

導入

先述の通り Ruby on Rails チュートリアル:実例を使って Rails を学ぼうに沿って進める。

現行(2016/03/08)の最新は第3版(Rails 4.2。5系がそろそろ出るらしい)。

第1章 ゼロからデプロイまで | Rails チュートリアルを読んでいろいろ面喰らう。

この Rails チュートリアルを3日間かけて一気に読破しました

3日?(注釈あり)

インストールや設定などに関する多くのわずらわしい問題を回避するため、クラウド開発を標準で採用しました

今時のチュートリアルってそうなんですかね。「気合い入れて環境構築からやるぜ!」と思ってたけどこれはこれで面白い。

Railsを「デフォルトスタック」のまま無改造で使うことにしました。これに伴い、テスティングフレームワークも従来使用していたRSpecから、標準のminitestに切り替えました。

あれー?@yuumi3さんにテストを学ぶならRubyと聞いたときには「RSpecが良い!」と聞いていたのでこのまま進むかちょっと不安を覚えつつ、

ということで気にせず進める。

開発環境

先述の通り、クラウド上で行うためやることは少なめ。

使用するのは下記とのこと。

Cloud9 - Your development environment, in the cloud

使ったことはなかったが、特にハマることもなく非常に便利。あっという間に環境構築は完了する。

プログラミングの開発環境に便利!Cloud9の使い方 | TechAcademyマガジンとか見てみると他にも便利な使い方があるようなのでこれはこれで今後使ってみようと思ったり。

Railsのインストール

Cloud9上に用意されているテンプレート「rails-tutorial」には、Railsだけはインストールされておらず、インストールだけはチュートリアル中で実施する手順となっているそうな。

command-line terminal内に以下を入力。(チュートリアルの版によってバージョン指定は異なるので参照するチュートリアルに従ってください。)

$ gem install rails -v 4.2.2
Fetching: activesupport-4.2.2.gem (100%)
Successfully installed activesupport-4.2.2
Fetching: actionview-4.2.2.gem (100%)
Successfully installed actionview-4.2.2
Fetching: actionpack-4.2.2.gem (100%)
Successfully installed actionpack-4.2.2
Fetching: activejob-4.2.2.gem (100%)
Successfully installed activejob-4.2.2
Fetching: actionmailer-4.2.2.gem (100%)
Successfully installed actionmailer-4.2.2
Fetching: activemodel-4.2.2.gem (100%)
Successfully installed activemodel-4.2.2
Fetching: activerecord-4.2.2.gem (100%)
Successfully installed activerecord-4.2.2
Fetching: railties-4.2.2.gem (100%)
Successfully installed railties-4.2.2
Fetching: rails-4.2.2.gem (100%)
Successfully installed rails-4.2.2
9 gems installed

完了。便利過ぎ。

hello, world

アプリケーションの作成

バージョンを指定して rails new を実行。

$ rails _4.2.2_ new hello_app

ややあって以下のログが流れ完了。

      create  
      create  README.rdoc
      create  Rakefile
      create  config.ru
      create  .gitignore
      create  Gemfile
      create  app
      create  app/assets/javascripts/application.js
      create  app/assets/stylesheets/application.css
      create  app/controllers/application_controller.rb
      create  app/helpers/application_helper.rb
      create  app/views/layouts/application.html.erb
      create  app/assets/images/.keep
      create  app/mailers/.keep
      create  app/models/.keep
      create  app/controllers/concerns/.keep
      create  app/models/concerns/.keep
      create  bin
      create  bin/bundle
      create  bin/rails
      create  bin/rake
      create  bin/setup
      create  config
      create  config/routes.rb
      create  config/application.rb
      create  config/environment.rb
      create  config/secrets.yml
      create  config/environments
      create  config/environments/development.rb
      create  config/environments/production.rb
      create  config/environments/test.rb
      create  config/initializers
      create  config/initializers/assets.rb
      create  config/initializers/backtrace_silencers.rb
      create  config/initializers/cookies_serializer.rb
      create  config/initializers/filter_parameter_logging.rb
      create  config/initializers/inflections.rb
      create  config/initializers/mime_types.rb
      create  config/initializers/session_store.rb
      create  config/initializers/wrap_parameters.rb
      create  config/locales
      create  config/locales/en.yml
      create  config/boot.rb
      create  config/database.yml
      create  db
      create  db/seeds.rb
      create  lib
      create  lib/tasks
      create  lib/tasks/.keep
      create  lib/assets
      create  lib/assets/.keep
      create  log
      create  log/.keep
      create  public
      create  public/404.html
      create  public/422.html
      create  public/500.html
      create  public/favicon.ico
      create  public/robots.txt
      create  test/fixtures
      create  test/fixtures/.keep
      create  test/controllers
      create  test/controllers/.keep
      create  test/mailers
      create  test/mailers/.keep
      create  test/models
      create  test/models/.keep
      create  test/helpers
      create  test/helpers/.keep
      create  test/integration
      create  test/integration/.keep
      create  test/test_helper.rb
      create  tmp/cache
      create  tmp/cache/assets
      create  vendor/assets/javascripts
      create  vendor/assets/javascripts/.keep
      create  vendor/assets/stylesheets
      create  vendor/assets/stylesheets/.keep
         run  bundle install
Fetching gem metadata from https://rubygems.org/...........
Fetching version metadata from https://rubygems.org/...
Fetching dependency metadata from https://rubygems.org/..
Resolving dependencies...
Installing rake 10.5.0
Using i18n 0.7.0
Installing json 1.8.3
Installing minitest 5.8.4
Using thread_safe 0.3.5
Using tzinfo 1.2.2
Using activesupport 4.2.2
Using builder 3.2.2
Using erubis 2.7.0
Installing mini_portile2 2.0.0
Installing nokogiri 1.6.7.2
Using rails-deprecated_sanitizer 1.0.3
Using rails-dom-testing 1.0.7
Using loofah 2.0.3
Installing rails-html-sanitizer 1.0.3
Using actionview 4.2.2
Using rack 1.6.4
Using rack-test 0.6.3
Using actionpack 4.2.2
Using globalid 0.3.6
Using activejob 4.2.2
Installing mime-types 2.99.1
Using mail 2.6.3
Using actionmailer 4.2.2
Using activemodel 4.2.2
Using arel 6.0.3
Using activerecord 4.2.2
Installing debug_inspector 0.0.2
Installing binding_of_caller 0.7.2
Using bundler 1.8.4
Installing byebug 8.2.2
Installing coffee-script-source 1.10.0
Installing execjs 2.6.0
Installing coffee-script 2.4.1
Using thor 0.19.1
Using railties 4.2.2
Installing coffee-rails 4.1.1
Installing concurrent-ruby 1.0.1
Using multi_json 1.11.2
Installing jbuilder 2.4.1
Installing jquery-rails 4.1.0
Installing sprockets 3.5.2
Installing sprockets-rails 3.0.4
Using rails 4.2.2
Installing rdoc 4.2.2
Installing sass 3.4.21
Installing tilt 2.0.2
Installing sass-rails 5.0.4
Installing sdoc 0.4.1
Installing spring 1.6.4
Installing sqlite3 1.3.11
Installing turbolinks 2.5.3
Installing uglifier 2.7.2
Installing web-console 2.3.0
Bundle complete! 12 Gemfile dependencies, 54 gems now installed.
Use `bundle show [gemname]` to see where a bundled gem is installed.
Post-install message from rdoc:
Depending on your version of ruby, you may need to install ruby rdoc/ri data:

<= 1.8.6 : unsupported
 = 1.8.7 : gem install rdoc-data; rdoc-data --install
 = 1.9.1 : gem install rdoc-data; rdoc-data --install
>= 1.9.2 : nothing to do! Yay!
         run  bundle exec spring binstub --all
* bin/rake: spring inserted
* bin/rails: spring inserted

Gemfileの修正

Ruby gemごとにバージョンを明示的に指定することで、Bundlerが使用するgemのバージョンを指定できる(指定がない場合常に最新が使用される)とのこと。

下記で置き換える。

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

gemのインストール

$ bundle install
Using rake 10.5.0
Using i18n 0.7.0
Using json 1.8.3
Using minitest 5.8.4
Using thread_safe 0.3.5
Using tzinfo 1.2.2
Using activesupport 4.2.2
Using builder 3.2.2
Using erubis 2.7.0
Using mini_portile2 2.0.0
Using nokogiri 1.6.7.2
Using rails-deprecated_sanitizer 1.0.3
Using rails-dom-testing 1.0.7
Using loofah 2.0.3
Using rails-html-sanitizer 1.0.3
Using actionview 4.2.2
Using rack 1.6.4
Using rack-test 0.6.3
Using actionpack 4.2.2
Using globalid 0.3.6
Using activejob 4.2.2
Using mime-types 2.99.1
Using mail 2.6.3
Using actionmailer 4.2.2
Using activemodel 4.2.2
Using arel 6.0.3
Using activerecord 4.2.2
Using debug_inspector 0.0.2
Using binding_of_caller 0.7.2
Using byebug 8.2.2
Using coffee-script-source 1.10.0
Using execjs 2.6.0
Using coffee-script 2.4.1
Using thor 0.19.1
Using railties 4.2.2
Using coffee-rails 4.1.1
Using concurrent-ruby 1.0.1
Using multi_json 1.11.2
Using jbuilder 2.4.1
Using jquery-rails 4.1.0
Using bundler 1.8.4
Using sprockets 3.5.2
Using sprockets-rails 3.0.4
Using rails 4.2.2
Using rdoc 4.2.2
Using sass 3.4.21
Using tilt 2.0.2
Using sass-rails 5.0.4
Using sdoc 0.4.1
Using spring 1.6.4
Using sqlite3 1.3.11
Using turbolinks 2.5.3
Using uglifier 2.7.2
Using web-console 2.3.0
Bundle complete! 12 Gemfile dependencies, 54 gems now installed.
Use `bundle show [gemname]` to see where a bundled gem is installed.

成功。

Railsアプリケーション起動

下記を実行する。

$ rails server -b $IP -p $PORT

(Cloud9 では特殊な環境変数「$IP」と「$PORT」を使用してIPアドレスとポート番号を動的に割り当てます。コマンドラインでecho $IPまたはecho $PORTと入力すると値を確認できます)

なるほど。解説も親切。

Share → Application と選ぶと起動したRailsアプリケーションが表示できる。

f:id:kfurue:20160313075532p:plain

できたできた。

こんな感じで進めていこうかと思うがハマるところ無さすぎて淡々といきそう。