おぴよの気まぐれ日記

おぴよの気まぐれ日記

岡山やプログラミング、ファッションのこと、子育てや人生、生き方についての備忘録。

Ruby on Rails チュートリアル1章まとめ(演習も)

こんちにわ、opiyoです。

突然ですが、私は今日からプログラミングの勉強をスタートしようと思います。

その名も

Railsブートキャンプ

うん。そのまま!

基礎部分をRailsチュートリアルで行い、最終的に一つアウトプットできるwebサービスを作ることが目標です。

経験上、だらだらやっていると間延びしちゃうので一気に駆け抜けます!

第2章は、こちらからどうぞー

opiyotan.hatenablog.com

railsチュートリアルの開発環境

cloud9が良いのだろうが、面倒なのでローカルでやる。

cloud9でのやり方は、こちらで。

https://railstutorial.jp/chapters/beginning?version=5.0#sec-development_environment

railsをインストール

$ gem install rails -v 5.0.0.1
$ rails _5.0.0.1_ new hello_app
  create
  create README.md
  create vendor/assets/stylesheets/.keep
  remove config/initializers/cors.rb
  run bundle install

Bundle complete! 15 Gemfile dependencies, 62 gems now installed.
Use `bundle show [gemname]` to see where a bundled gem is installed.
  run bundle exec spring binstub --all
* bin/rake: spring inserted
* bin/rails: spring inserted

Gemfileの書き方

  • gem 'sqlite3'

特定のバージョンを指定しない場合は、最新のバージョンを取得する

  • gem 'uglifier', '>= 1.3.0'

ugliflerが1.3.0以上であれば最新バージョンがインストールされます メジャーバージョンアップになる

  • gem 'coffee-rails', '~> 4.0.0'

4.0.4より大きく、4.1より小さい場合にインストールされる マイナーバージョンアップになる(4.0.1, 4.0.2, ...) 4.1, 4.2にはならない

railsサーバーの動かし方

$ rails s

f:id:opiyotan:20170613185258p:plain

Railsチュートリアルの演習問題

1.3.2演習

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

<回答1>

$ ruby -v
ruby 2.3.3p222 (2016-11-21 revision 56859) [x86_64-darwin15]

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

<回答2>

$ rails -v
Rails 5.0.0.1

1.3.4演習

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

<回答1> application_controller.rbのrender html: "XX"を修正する

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

<回答2>¡™£¢∞§¶•ªºœ∑´®†¥¨øåß∂ƒ©˙∆˚¬Ω≈ç√∫˜µ≤≥/ªº–≠π“‘/

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

<回答3>

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

  def hello
  render html: "¡Hola, mundo!"
  end

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

Rails.application.routes.draw do
  root 'application#googbye'
end

gitによるバージョン管理

プロジェクトのコードの履歴を追ったり、うっかり削除してしまったファイルを復旧 (ロールバック) したりという作業が行えるようになります。バージョン管理システムを熟知することは、今ではあらゆるソフトウェア開発者にとって必須のスキル

無料で読める書籍 https://git-scm.com/book/ja/v2

gitをなぜ使うのか?

https://railstutorial.jp/chapters/beginning?version=5.0#sec-what_good_does_git_do_you

git管理下にあれば、例え削除したとしても簡単に復活させることが可能です。

gitのコマンド

  • git config

ユーザー名とメールアドレスを設定します。 これらは今後インターネット上に公開されることになりますので、ご注意ください。

  • git init
  • git status
  • git add .
  • git commit -m "コメント"
  • git log
  • git checkout -b modify-README
  • git merge modify-README
  • git branch -d
  • git push

GitHubとBitbucket

gitを扱うための2つの著名なサービスです。 どちらも無料で使えますが、個人で使う分にはそれぞれ特徴があるので気をつけましょう! github 無料の場合は全てpublicになる つまり誰でも見ることができる bitbucket 無料でprivateになる

なので、無難なのはbitbucketでしょうか。 私も昔やったことがあるのですが、知らぬ知らぬ間に大事なkeyとかがコードに書いてて公開してしまうと非常に良くないですよね。 なので、閉じた環境であるbitbuckeの方がそういった心配をしなくて良いので安心です。

しかし本チュートリアルではWebアプリケーションの様々なコードを扱うため、全てのリポジトリがデフォルトで非公開になっている方がセキュリティ上安心して取り組めます。具体的には、本チュートリアルの後半で扱うコードには、暗号化キーやパスワードなどの機密情報が含まれます。このような情報を利用されると、サイトのセキュリティが脅かされるかもしれません。

Herokuにデプロイする

Railsを含むRuby Webアプリ用のホスティングプラットフォームです。Herokuは、ソースコードのバージョン管理にGitを使用していれば、Railsアプリケーションを簡単に本番環境にデプロイできます レンタルサーバーのすごいやつ。osとかdbとかをインターネット越しに扱えて簡単に使うことができる。 http://www.sejuku.net/blog/7858

セットアップは以前まとめた以下を参照 opiyotan.hatenablog.com

Herokuコマンド

  • heroku rename rails-tutorial-hello

1.5.4演習

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

<回答1>

Usage: heroku COMMAND [--app APP] [command-specific-options]

Help topics, type "heroku help TOPIC" for more details:

  heroku access # manage user access to apps
  heroku addons # manage add-ons
  heroku apps # manage apps
  heroku authorizations # OAuth authorizations
  heroku buildpacks # manage the buildpacks for an app
  heroku certs # a topic for the ssl plugin
  heroku ci # run an application test suite on Heroku
  heroku clients # OAuth clients on the platform
  heroku config # manage app config vars
  heroku domains # manage the domains for an app
  heroku drains # list all log drains
  heroku features # manage optional features
  heroku git # manage local git repository for app
  heroku keys # manage ssh keys
  heroku labs # experimental features
  heroku local # run heroku app locally
  heroku logs # display recent log output
  heroku maintenance # manage maintenance mode for an app
  heroku members # manage organization members
  heroku notifications # display notifications
  heroku orgs # manage organizations
  heroku pg # manage postgresql databases
  heroku pipelines # manage collections of apps in pipelines
  heroku plugins # manage plugins
  heroku ps # manage dynos (dynos, workers)
  heroku redis # manage heroku redis instances
  heroku regions # list available regions
  heroku releases # manage app releases
  heroku run # run a one-off process inside a Heroku dyno
  heroku sessions # OAuth sessions
  heroku spaces # manage heroku private spaces
  heroku status # status of the Heroku platform
  heroku teams # manage teams
  heroku update # update heroku-cli

<問題2> 同じく、アプリの状態を調べるためのコマンドはどれですか? 直近に発生したイベントは何でしたか? (ちなみにこのログを調べるコマンドは、本番環境をデバッグするのに便利です)

<回答2>

  • heroku ps
  • heroku status
  • heroku logs

このあたりかなー?

難しかったところ

1.3.1でGemfileを1.5に修正するが、bundle installするとエラーになる

Resolving dependencies...
Bundler could not find compatible versions for gem "actionpack":
  In snapshot (Gemfile.lock):
  actionpack (= 5.0.3)

  In Gemfile:
  rails (= 5.0.0.1) was resolved to 5.0.0.1, which depends on
  actionpack (= 5.0.0.1)

  rails (= 5.0.0.1) was resolved to 5.0.0.1, which depends on
  actionpack (= 5.0.0.1)

  rails (= 5.0.0.1) was resolved to 5.0.0.1, which depends on
  actionpack (= 5.0.0.1)

  rails (= 5.0.0.1) was resolved to 5.0.0.1, which depends on
  sprockets-rails (>= 2.0.0) was resolved to 3.2.0, which depends on
  actionpack (>= 4.0)

Running `bundle update` will rebuild your snapshot from scratch, using only
the gems in your Gemfile, which may resolve the conflict.

だから、bundle updateしよう

気になったところ

  • githubとbitbucket両方でソース管理することは可能か?
$ git remote -v
heroku  https://git.heroku.com/opiyo.git (fetch)
heroku  https://git.heroku.com/opiyo.git (push)
origin  git@github.com:opiyo/railstutorial.git (fetch)
origin  git@github.com:opiyo/railstutorial.git (push)

この例では、herokuorigin(github)だけどこのようにremote addしてやれば共存は可能。 コマンド打つ時も先頭の文字列を変えてやればOKだ。

$ git push origin master
$ git push heroku master
  • mergeした内容がpushされているかどうか確認する方法は?

git diff ローカル リモートコマンドでローカルブランチとリモートブランチを比較すれば確認できる!

$ git diff master origin/master # これね!
diff --git a/Gemfile b/Gemfile
index 4816f4f..63b826d 100644
--- a/Gemfile
+++ b/Gemfile
@@ -21,9 +21,5 @@ group :development do
   gem 'spring-watcher-listen', '2.0.0'
 end

-group :production do
-  gem 'pg', '0.18.4'
-end
-
 # Windows環境ではtzinfo-dataというgemを含める必要があります
 gem 'tzinfo-data', platforms: [:mingw, :mswin, :x64_mingw, :jruby]
diff --git a/Gemfile.lock b/Gemfile.lock
index 79ef8a6..5c7b646 100644
--- a/Gemfile.lock
+++ b/Gemfile.lock
@@ -80,7 +80,6 @@ GEM
     nio4r (1.2.1)
     nokogiri (1.8.0)
       mini_portile2 (~> 2.2.0)
-    pg (0.18.4)
     puma (3.4.0)
     rack (2.0.3)
     rack-test (0.6.3)
@@ -158,7 +157,6 @@ DEPENDENCIES
   jbuilder (= 2.4.1)
   jquery-rails (= 4.1.1)
   listen (= 3.0.8)
-  pg (= 0.18.4)
   puma (= 3.4.0)
   rails (= 5.0.0.1)
   sass-rails (= 5.0.6)

その他の学んだところ

Model-View-Controller(MVC)

ブラウザは一般的にWebサーバーにリクエスト (request) を送信し、これはリクエストを処理する役割を担っているRailsのコントローラ (controller) に渡されます。 コントローラは、場合によってはすぐにビュー (view) を生成してHTMLをブラウザに送り返します。 動的なサイトでは、一般にコントローラは (ユーザーなどの) サイトの要素を表しており、データベースとの通信を担当しているRubyのオブジェクトであるモデル (model) と対話します。 モデルを呼び出した後、コントローラは、ビューを描画し、完成したWebページをHTMLとしてブラウザに返します。

https://railstutorial.jp/chapters/images/figures/mvc_schematic.png

bundle installする時のオプション

$ bundle install --without production

本番用のgem (この場合はpg gem) をローカルの環境にはインストールしないようにするために、bundle installに特殊なフラグ「--without production」を追加します。

Herokuでは、サブドメインの他に独自ドメインも使用できます。実を言うと、このRuby on RailsチュートリアルもHeroku上に置かれているのです




何か不備、不足があればご指摘ください。