Ruby on Rails チュートリアル1章まとめ(演習も)
こんちにわ、opiyoです。
突然ですが、私は今日からプログラミングの勉強をスタートしようと思います。
その名も
Railsブートキャンプ
うん。そのまま!
基礎部分をRailsチュートリアルで行い、最終的に一つアウトプットできるwebサービスを作ることが目標です。
経験上、だらだらやっていると間延びしちゃうので一気に駆け抜けます!
第2章は、こちらからどうぞー
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
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)
この例では、heroku
とorigin(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上に置かれているのです
何か不備、不足があればご指摘ください。