Rails Tutorialで躓いたポイントまとめ
RailsTutorialを進める中で躓いたポイントや解決策、Herokuデプロイの問題、Git関連のトラブル、テストエラーの対処法などをまとめました。初心者の方に役立つRails学習のヒントを紹介します。
1章
Herokuで差分を反映させ、起動するコマンド
$ git commit -a -m "Update Gemfile for Heroku"
$ git push heroku master
$ heroku open1章まとめ RailsTutorial1章より
- Ruby on Railsとは、Web開発のためのフレームワークであり、Rubyプログラミング言語によって記述されている。事前設定済みのクラウド環境を利用することで、Railsのインストール、アプリケーションの生成、生成されたファイルの編集を簡単に行うことができる。Railsにはrailsという名前のコマンドラインコマンドがあり、rails newで新しいアプリケーションを生成したり、rails serverでローカルサーバーを実行したりできる。コントローラのアクションを追加したり、ルートルーティングを変更したりするだけで「hello, world」アプリケーションを作成できる
- Gitによるバージョン管理を導入し、Bitbucketの非公開リポジトリにプッシュする理由は、データの喪失を防止し、他の開発者との共同作業を行えるようにするため。作成したアプリケーションをHerokuの本番環境にデプロイした
2章
2章でGit関連で躓いたこと
.gitignoreファイルの範囲指定がうまくいっていなかった.ideaディレクトリでコンフリクトが起きていたので、ローカルとリモートで削除してraiil s- masterとの差分を反映出来ていなかったので、deployブランチでmasterをpullして解決しました。
Herokuでデプロイが出来ていない問題
ローカルでは問題なく動いていたので原因として考えられるのは、Herokuの本番環境でデータベースのマイグレーションを行なっていないこと
$ heroku run rails db:migrateをターミナルより実行して、本番データベースのマイグレーションを行い、次にホームページからHerokuのデプロイを行なったところデプロイが出来ました。
2章まとめ RailsTutorial2章より
- Scaffold機能でコードを自動生成すると、Webのあらゆる部分からモデルデータにアクセスしてやりとりできるようになる。Scaffoldは何よりも手っ取り早いのがとりえだが、これを元にRailsを理解するには向いていない。RailsではWebアプリケーションの構成にMVC (Model-View-Controller) というモデルを採用している。Railsが解釈するRESTには、標準的なURLセットと、データモデルとやりとりするためのコントローラアクションが含まれている。
- Railsではデータのバリデーション (validation) がサポートされており、データモデルの属性の値に制限をかけることができる。Railsには、さまざまなデータモデル同士を関連付けを定義するための組み込み関数が多数用意されている。Railsコンソールを使うと、コマンドラインからRailsアプリケーションとやりとりすることができる
3章
StaticPagesコントローラを生成する(静的ページの作成)コマンド
$ rails generate controller StaticPages home help3章まとめ RailsTutorial3章より
- 新しいRailsアプリケーションをゼロから作成したのはこれで3度目。今回も必要なgemのインストール、リモートリポジトリへのプッシュ、production環境まで行った。コントローラを新規作成するためのrailsコマンドはrails generate controller ControllerName アクション名 (省略可)。新しいルーティングはconfig/routes.rbファイルで定義する。Railsのビューでは、静的HTMLの他にERB (埋め込みRuby: Embedded RuBy) が使える
- 常に自動化テストを使って新機能開発を進めることで、自信を持ってリファクタリングできるようになり、回帰バグも素早くキャッチできるようになる。テスト駆動開発では「red ・ green ・REFACTOR」サイクルを繰り返す。Railsのレイアウトでは、アプリケーションのページの共通部分をテンプレートに置くことでコードの重複を解決することができる
4章
pメソッド
文字列は、 "" に囲まれて出力されるため、特殊文字(\nや\t)がそのまま出力される
empty?メソッド
"" の中身が半角スペースであってもfalseとなる
"".empty?
=> true
" ".empty?
=> false4章まとめ RailsTutorial4章より
- Rubyは文字列を扱うためのメソッドを多数持っている。Rubyの世界では、すべてがオブジェクトである。Rubyではdefというキーワードを使ってメソッドを定義する。Rubyではclassというキーワードを使ってクラスを定義する。Railsのビューでは、静的HTMLの他にERB (埋め込みRuby: Embedded RuBy) も使える。Rubyの組み込みクラスには配列、範囲、ハッシュなどがある。Rubyのブロックは (他の似た機能と比べ) 柔軟な機能で、添え字を使ったデータ構造よりも自然にイテレーションができる
- シンボルとはラベルである。追加的な構造を持たない (代入などができない) 文字列みたいなもの。Rubyではクラスを継承できる。Rubyでは組み込みクラスですら内部を見たり修正したりできる。「deified」という単語は回文である
5章
rails testでつまずいたこと
header.html.erb ファイルで<%= link_to "sample app", root_path, id: "logo" %>の文が<%= link_to "sample app", 'rootpath', id: "logo" %>となっていたため、root_path が見つからないとエラーが出ていた
- header.html.erb
<header class="navbar navber-fixed-top navbar-inverse">
<div class="container">
<%= link_to "sample app", root_path, id: "logo" %>
<nav>
<ul class="nav navbar-nav navbar-right">
<li><%= link_to "Home", root_path %></li>
<li><%= link_to "Help", help_path %></li>
<li><%= link_to "Log in", '#' %></li>
</ul>
</nav>
</div>
</header>5章まとめ RailsTutorial5章より
- HTML5を使ってheaderやfooter、logoやbodyといったコンテンツのレイアウトを定義しました。Railsのパーシャルは効率化のために使われ、別ファイルにマークアップを切り出すことができます。CSSは、CSSクラスとidを使ってレイアウトやデザインを調整します。Bootstrapフレームワークを使うと、いい感じのデザインを素早く実装できる。SassとAsset Pipelineは、(開発効率のために切り分けられた) CSSの冗長な部分を圧縮し、本番環境に最適化した結果を出力する
- Railsのルーティングでは自由にルールを定義することができ、また、その際に名前付きルートも使えるようになる。統合テストは、ブラウザによるページ間の遷移を効率的にシミュレートする
6章
Userモデル
- Model-View-Controller (MVC)のMに該当する
- Rails にはマイグレーション(Migration)があるため、データ定義をRubyで行うことができる。そのため、SQLのDDL(CREATE(表の創成、定義)、DROP(表の削除)など)を新たに学ぶ必要がない。開発環境では
SQLite,本番環境ではPostgreSQLを用いる
Userモデルを生成
$ rails generate model User name:string email:string
マイグレーションのロールバック(rollback)
$ rails db:rollback
オブジェクトの継承の確認
$ user.new
=> #<User id: nil, name: nil, email: nil, created_at: nil, updated_at: nil>
$ User.superclass
=> ApplicationRecord(abstract)
$ ApplicationRecord.superclass
=> ActiveRecord::Baseemailに関するエラー情報のみ取得
$ u.errors.messages[:email]
=> ["can't be blank"]配列の簡単な作成メソッド %w
$ %w[foo bar baz]
=> ["foo", "bar", "baz"]正規表現エディタ Rubular
6章まとめ RailsTutorial6章より
- マイグレーションを使うことで、アプリケーションのデータモデルを修正することができる。Active Recordを使うと、データモデルを作成したり操作したりするための多数のメソッドが使えるようになる。Active Recordのバリデーションを使うと、モデルに対して制限を追加することができる。よくあるバリデーションには、存在性・長さ・フォーマットなどがある。。正規表現は謎めいて見えるが非常に強力である。
- データベースにインデックスを追加することで検索効率が向上する。また、データベースレベルでの一意性を保証するためにも使われる。has_secure_passwordメソッドを使うことで、モデルに対してセキュアなパスワードを追加することができる。