Rails Tutorial意図せず2週目(第4章 Rails風味のRuby)

背景

1周目第13章途中でどうしても問題が解消できなくなり、gitでソースコードを戻してもDBの状態が戻らない、Herokuにデプロイはできるがアプリケーションが表示されない等の問題達にぶち当たったため、意図せず2周目を開始することに。
今回は丁寧にわからない用語等あれば拾いつつ復習していこうと思います。

第4章 Rails風味のRuby

本章ではRailsというよりRubyそのものの機能や概念・実装方法についての知識を学びました。メソッドやクラスはもとより配列・範囲・ハッシュ等の様々なRubyの機能を実装しつつ手に入れていきました。
また、その中で「クラスが継承される」ことに着目し、どのクラスは何クラスから継承しているのかを探るといった演習も行いました。
この章では今後のRuby on Railsでの開発のため、Ruby自体のAPIや機能を学ぶことを通じてサンプルアプリケーションの実装を行いました。

以下1周目はスルーしていた概念やコマンドの意味を調べる

カスタムヘルパー

Railsに元々存在している組み込み関数のことを「ヘルパー」と言いますが、一方でそうでないものを「カスタムヘルパー」というようです。


Rails Tutorial 第4章 Rails風味のRubyより引用

  • Railsのビューでは膨大な数の組み込み関数が使えますが、それだけでなく、新しく作成することもできます。新しく作ったメソッドはカスタムヘルパーと呼ばれます。

【結論】

  • Ruby on Railsでは組み込み関数は「ヘルパー」、作られた関数は「カスタムヘルパー」という
メソッドチェーン

メソッドは複数つなげて利用することができます。そういう動作や手法のことを「メソッドチェーン」とよぶようです。競技プログラミング等ではよく使うためこの手法は知っていましたが名前は初めて知ったため忘備録として残しておきます。

# 競技プログラミングでよく使う標準入力を配列化し、それを数値として扱うメソッドチェーン
> 3 4 5
$ line = gets.split(' ').map(&:to_i)
>> [3, 4, 5]


# 文字列a~zの範囲を配列化してその順序をシャッフルするメソッドチェーン
$ ('a'..'z').to_a.shuffle
>>   ["q", "u", "r", "x", "w", "b", "a", "l", "n", "t", "j", "d", "v", "o", "g", "m", "z", "k", "h", "s", "f", "p", "i", "c", "y", "e"]

【結論】

  • メソッドは複数繋げて、「メソッドチェーン」にすることができる
  • 便利かつ簡潔に書けるので有用な一方、可読性が下がるように思うのではじめは少しつづ理解して使っていきたい
範囲の.の数による動作の違い(a..z, a...zの違い)

これはRails Tutorial内にはなかったものですが、チェリー本の「4.5 範囲(Range)」(115p)に記載があったのでここに残します。


  • 最初値..最後の値(最後の値を含む)
    $ a..z (a~z)

  • 最初値...最後の値(最後の値を含まない)
    $ a...z (a~y)


これは細かい差ですが、理解を間違い使ってしまうとバグの温床になるので気をつけたいと思います。

ハッシュ

他のプログラミング言語PHP等)では「連想配列」と呼ぶ概念です。
配列内にKeyとValueが設定されており、Kayを呼び出すとValueが表示できます。

以下、[Rails Tutorial 第4章 Rails風味のRuby](https://railstutorial.jp/chapters/rails_flavored_ruby?version=6.0#sec-custom_helpers)より引用

 # ハッシュのリテラル表記
>> user                              
=> {"last_name"=>"Hartl", "first_name"=>"Michael"}

# キーが "first_name" で値が "Michael"
>> user["first_name"] = "Michael"     
=> "Michael"

# キーが "last_name" で値が "Hartl"
>> user["last_name"] = "Hartl"        
=> "Hartl"

【結論】

  • 「ハッシュ」=「連想配列」と覚えることでPHPJavaから入った身としては覚えやすい
ハッシュ中のハッシュを作成する場面で最初に空のハッシュを作り忘れた

以下のようにハッシュの中にハッシュを作成する場合は、はじめに空のハッシュを作成しておく必要があります。
でないと、以降上位のハッシュを呼び出す際に「TypeError (no implicit conversion of Symbol into Integer)」というエラーが出ます。気をつけましょう。

>> params = {}
=> {}
>> person1 = {first:"Hiro", last:"Shima"}                                                                                                                                                                                                                          
=> {:first=>"Hiro", :last=>"Shima"}
>> person2 = {father:"Miyuki", last:"Shima"}                                                                                                                                                                                                                           
=> {:father=>"Miyuki", :last=>"Shima"}
>> person3 = {father:"Ichi", last:"Shima"}                                                                                                                                                                                                                          
=> {:father=>"Ichi", :last=>"Shima"}
>> params[:father] = person1
=> {:first=>"Hiro", :last=>"Shima"}
>> params[:father][:first]
=> "Hiro"
>> person1[:first]
=> "Hiro"

【結論】

  • これは凡ミス。ハッシュの中にハッシュを入れるなら親を空でも良いので定義しておかないといけなかった。
  • とはいえ、これがInteger系のエラーになるとは思わなかった。

Rails Tutorial意図せず2週目(第3章 ほぼ静的なページの作成)

背景

1周目第13章途中でどうしても問題が解消できなくなり、gitでソースコードを戻してもDBの状態が戻らない、Herokuにデプロイはできるがアプリケーションが表示されない等の問題達にぶち当たったため、意図せず2周目を開始することに。
今回は丁寧にわからない用語等あれば拾いつつ復習していこうと思います。

第3章ほぼ静的なページの作成

本章から第14章まで続けるサンプルアプリケーションの作成を開始します。
またその際の開発・実装の間にはテスト駆動開発1を行います。ここでテスト駆動開発を行うことで今後の開発人生における素振りを行うようなものなのでしっかりと個々のテストの意味を理解しつつ、進めていきました。
最終的に本章では静的なページをコマンド実行とコードの編集で作成し、次章以降では動的ページを作っていくための基礎を学びました。

以下1周目はスルーしていた概念やコマンドの意味を調べる

provide

本章ではprovideを利用してページのタイトルタグに各ページタイトルの一部を差し込みました。このprovideコマンドですが、以下のように利用しました。
provideコマンド内に入れた変数とその中身をyieldで呼び出して各静的ページに配置することができております。

[例: /sample_app/app/views/static_pages/home.html.erb]

<% provide(:title, "Home") %>
<h1>Sample App</h1>
<p>
  This is the home page for the
  <a href="https://railstutorial.jp/">Ruby on Rails Tutorial</a>
  sample application.
</p>

以下、Rails 公式APIリファレンス ActionView::Helpers::CaptureHelper 「provide」の説明を意訳するとこのようになります。

  • content_for2と同じですが、その内容(変数と中身)をレイアウトに直接書き込みます。
  • 複数回の利用や他のヘルパーとの連携が想定されない場合はprovideを使用してください。

【結論】

  • 今回はprovideコマンドについて調べてみた所、公式のAPIリファレンスにたどり着きました。
  • 公式リファレンスでは類似のヘルパーとしてcontent_forを提示していたが利用方法の違い、今回だと一度のみのタイトルの挿入のみ、のためprovideの利用になったことが想定できました。
  • 公式APIリファレンス、今後気になったらアクセスしてコードを眺めてみてもよいかもしれないなと思ったのでここにリンクを残しておきました。

【参考】

yield

本章では上記provideでもお見せしたようにprovide内に埋め込んだ変数をyieldで呼び出して表示していました。 そこでyieldもRailsのコマンドorヘルパーといったものかと思い調べてみました。

そうした所、yieldはRailsではなくRubyの「ブロックを呼び出す」メソッドであることがわかりました。

また、同時に読み進めているチェリー本で丸々1章分3割かれる程重要なものだということもわかりました。

現状はそこまで深く理解する必要性はあまり感じないため、ひとまず脇において以下のポイントだけを理解しておこうと思いました。

【結論】

  • yieldはRubyのメソッドであること
  • yeildはブロックを呼び出すメソッドであること
  • チェリー本で1章割かれる程度に複雑かつ難解な可能性があり、今深追いすべきでないということ

  1. Test Driven Development(TDD)のことで、テストを①わざと失敗、②簡易的に成功、③コードを修正して意図通りにするの3過程を繰り返す技法です。

  2. 同様に変数を埋め込んで利用するものですが、複数回の利用や、他の変数やヘルパーとの連携を行う場合に利用を想定されているようです。

  3. 第10章yieldとProcを理解する

Rails Tutorial意図せず2週目(第2章 Toyアプリケーション)

背景

1周目第13章途中でどうしても問題が解消できなくなり、gitでソースコードを戻してもDBの状態が戻らない、Herokuにデプロイはできるがアプリケーションが表示されない等の問題達にぶち当たったため、意図せず2周目を開始することに。
今回は丁寧にわからない用語等あれば拾いつつ復習していこうと思います。

第2章 Toyアプリケーション

この章では、1章同様シンプルなアプリケーションを作成〜デプロイまでを行いました。
その中で特徴的だったのが「Scaffold」コマンドです。これを行うだけでMVCアーキテクチャのModel, View, Controller全てが準備されるという強力なコマンドです。ここから先の章では強力過ぎて問題を切り分けられなくなるため使わなくなるほどの強力なものでした。1
今回の章で初めてDBにも触れることになり、初歩的ではありますがRails+DBというアプリケーション構成を作れるようになりました。

以下1周目はスルーしていた概念やコマンドの意味を調べる

bundler

本章では以下の形でbundlerを利用しました。 しかし、bundlerとは何なのかわからなかったので調べてみました。

$ bundle _2.2.17_ config set --local without 'production'
$ bundle install
$ bundle update

【結論】

  • bundlerは大量のgemを利用するRailsプロジェクトの中でgemの依存関係をきれいに整えるプログラムである2
  • 以下のような便利機能が沢山ある
    • bundleコマンドを利用することでGemfile中のgem設定をGemfile.lockに書き込み環境を整えることができる
    • bundleコマンドを利用することで一部のgemを本番環境だけに適用する設定ができる

また、古い記事ではあるもののbundlerについての整理がよくされていたため記事を貼っておきます。

qiita.com

Scaffoldコマンド

本章以降は使用禁止となったscaffoldコマンド、強力すぎる感覚はつかめたものの何が強力なのか改めて調べてみました。

本章では以下のようにUser table/model/controller/view を一行で作成しているように見えました。

$ rails generate scaffold User name:string email:string

Railsガイド v7によるとrailsにおけるscaffold(足場)とは以下のことを指すようです。以下引用です。

  • Railsにおけるscaffold(足場)とは、「モデル」「モデルのマイグレーションファイル「モデルを操作するコントローラ」「データを操作・表示するビュー」「それぞれのテストファイル」一式をさします。

【結論】

  • 1点私の勘違いがあり、railsのscaffold(足場)は「テストファイル」も含めたものだったことがわかりました。一瞬で大量のファイルが生成されるためにテストファイルの生成を見落としていたんでしょう。
  • 上記の定義を見ると、その後model, migration file, controller, test fileを別々にコマンド生成しているのがバカバカしくなるほど強力です。一方で、これに頼ってしまうと自身のミスの切り分けが難しくなるというrails tutorialの判断は正しいと私も思いました。
railsでのバリデーションについて

本章で初めて入力に対してRails側でバリデーション(制限)を設定しました。(以下、例)
バリデーションは入力される内容を制限することでアプリケーションのセキュリティ上の安全性を高めるものです。本章ではモデルでバリデーションが行われていましたがその理由やそもそものバリデーションの重要性を確認するために、調べてみました。

[例: /toy_app/app/models/user.rb]

class User < ApplicationRecord
   has_many :microposts
   #  name属性に空入力を許さない(入力必須にする)
   validates :name, presence: true
   #  email属性に空入力を許さない(入力必須にする)
   validates :email, presence:true
end

Railsガイド v7 「Active Record バリデーション」によるとモデルでバリデーションを行う理由は以下となります。(引用)

  • バリデーションは、正しいデータだけをデータベースに保存するために行われます。
    • モデルレベルでのバリデーションは、データベースに依存せず、エンドユーザーがバイパスすることもできず、テストもメンテナンスもやりやすいためです。

【結論】

  • バリデーションは重要!(当然)
  • モデル以外にもデータベース制約やクライアント側(フロントエンド)でのバリデーションも存在するようですが、上記Railsガイドによるとそれぞれのメリット・デメリットがあるようです。
  • 今回利用したモデルでのバリデーションがRailsにおいては一般的なもののように上記資料からは伺えます。
railsでのオブジェクト間の関連付けについて

本章でDBの関連付けのためにコード上に以下のような記載を行いました。
以下の例のようなコードを書きましたが、他にどのような書き方や関連付けがあるのかActive Recordについて調べてみました。

  • belongs_to
  • has_many
[例: /toy_app/app/models/micropost.rb]

class Micropost < ApplicationRecord
  # MicropostはUserに紐づく(多対一の関連付け)
  belongs_to :user
  validates :content, length: { maximum: 140 },
                      presence: true
end
[例: /toy_app/app/models/user.rb]

class User < ApplicationRecord
   # UserはMicropostのオブジェクトを複数保有可能(一対多の関連付け)
   has_many :microposts
   validates :name, presence: true
   validates :email, presence:true
end

これもまたRailsガイド v7「Active Recordの関連付け」にドンピシャの記事がありました。以下引用です。

  • Railsの「関連付け(アソシエーション: association)」は、2つのActive Recordモデル同士のつながりを指します。モデルとモデルの間には関連付けを行なう必要がありますが、その理由はおわかりでしょうか。関連付けを行うことで、自分のコードの共通操作がシンプルになって扱いやすくなります。

【結論】

  • オブジェクト間の関連付けはこれまでの感覚ではDBのテーブル間で行っていた印象があったが、Railsではモデル間で行うということを知ることができました。
  • たった一行のコードを書くだけで関連付けができる機能の強力さを実感して、Railsって便利だなと改めて思う次第です。

  1. 本当にこのコマンドが楽で勝手に必要なものを作ってくれるので依存するのは危ないなと思うほどでした。

  2. bundler.ioの紹介文「Bundler provides a consistent environment for Ruby projects by tracking and installing the exact gems and versions that are needed. 」から意訳。

Rails Tutorial意図せず2週目(第1章 ゼロからデプロイまで)

背景

1周目第13章途中でどうしても問題が解消できなくなり、gitでソースコードを戻してもDBの状態が戻らない、Herokuにデプロイはできるがアプリケーションが表示されない等の問題達にぶち当たったため、意図せず2周目を開始することに。
今回は丁寧にわからない用語等あれば拾いつつ復習していこうと思います。

第1章 ゼロからデプロイまで

この章はRailsでシンプルなアプリケーションを作成し、アプリケーション作成〜デプロイまでを一貫して学ぶという章でした。
一応13章まで繰り返してきた事の再復習になったので良い準備運動になったと思います。
特に環境構築部分はCloud9に慣れていないため、コマンドの意味を考えながら実施することでいい勉強になりました。

以下、1周目はスルーしていた概念やコマンドの意味を調べる

1. gemrcについて

以下は「gem インストール時にドキュメントをインストールしない」とgemrc(gem全体の設定箇所)に書き込むコマンドです。
ドキュメントというと各gemのREADMEやヘルプ、使い方等が書かれたファイルになると思うので、毎回入れていてはCloud9の容量を圧迫してしまいますし、インストールに時間がかかるのでこの設定は必要な設定に思います。

$ echo "gem: --no-document" >> ~/.gemrc

「.gemrc」について調べて見た所、他のブログ等でも同様にドキュメントインストールをスキップしたりgemのインストールを早めるために生成されている人が多い印象でした。1

そもそも、「.gemrc」は自然は生成されずgemに関してなんらかの設定を施す際に生成、書き込むファイルのようです。

2. sourceコマンドで実行したものたち

以下は「Cloud9環境のディスク容量アップと、クラウドIDEへのYarnインストール」するコマンド群です。

$ source <(curl -sL https://cdn.learnenough.com/resize)
$ source <(curl -sL https://cdn.learnenough.com/yarn_install)

しかしながら、そもそも「source」コマンドとは何か、そしてこれらは何をしているのかがわかっていないので調べてみました。結果は以下です。


以下は脚注のサイトとcurlのhelpからの引用です。

  • sourceコマンドは引数(後ろ)で渡した内容を即座実行するコマンド2
  • curlコマンドは引数に渡したURLを指定してファイルをダウンロードする3
    • 今回は -sLというオプションを渡しているため、-sの「実行時メッセージを非表示」と-Lの「リダイレクトを実行」4の2つも同時に行われていました。

結論としては、sourceで実行したいコマンドとして「①cloud9のリサイズを行うURLアクセス」と、「yarnコマンドをインストールするURLへのアクセス」を行っていた。
その際にメッセージは非表示にするオプションとリダイレクトするように設定していたということでしょう。特に今回アクセス先となっていたのがCDN5のURLのため本体のURLにリダイレクトをする関係で-Lオプションをつけていたのではないかということです。

【参考】

kaworu.jpn.org

3.yarnについて

よく見かけるコマンドyarnですが、知らなかったので調べてみました。


以下、こちらの「UbuntuにYarnをインストールする」からの引用です。

  • Yarnはnpmと互換性のあるJavaScriptパッケージマネージャーで、npmパッケージのインストール、更新、構成、削除のプロセスを自動化するのに役立ちます。

とのことです。


JavaScriptのパッケージマネージャーというとnpm等もありますが、それをインストールする際にも使えるということで、利用されたのかもしれません。
後述するwebpackerについてRailsガイドを調べていた所「webpackerを利用するにはyarnとNode.jsのインストールが必要です。」となっていたため、webpackerおよびwebpackの利用のためにyarnが必要ということだったようです。

4.webpack, webpackerについて

webpackerもこのRails Tutorialで初めて出会ったため、調べた所、どんびしゃの記事を見つけました。 Railsガイドにwebpackerの記事がありましたので、こちらを見ていきましょう。


以下、「Railsガイドv7 Webpacker の概要」から引用。

[webpack]

  • webpackなどのフロントエンドビルドシステムの目的は、開発者にとって使いやすい方法でフロントエンドのコードを書き、そのコードをブラウザで利用しやすい方法でパッケージ化することです。webpackは「JavaScript」「CSS」「画像やフォント」といった静的アセットを管理できます。

[webpacker]

  • Webpackerは、汎用的なwebpackビルドシステムのRailsラッパーであり、標準的なwebpackの設定と合理的なデフォルト設定を提供します。

  • webpackは、より新しいJavaScriptツールやNPMパッケージとの統合に優れており、より多くのものを統合できます。新しいRailsアプリは「JavaScriptはwebpackで管理する」「CSSはSprocketsで管理する」設定になっていますが、webpackでCSSを管理することもできます。


ということは、フロントエンドのjsやcssを管理するwebpackと、それを管理するwebpackerという立ち位置のようです。
webpackerは言ってみればgemのように沢山ある資産(特にフロントエンド関連のもの)をまとめる役割のようですね。

【今回のまとめ】

  • 1章だけを見ても知らない単語や概念が沢山あり、一旦それをスルーしていくことでアプリケーションを作ることができていたことを改めて知ることができた
  • なんとなく動かしていたコマンドの意味が少し理解でき、Railsでのアプリケーションの環境構築方法への解像度が上がった
  • 過去に自分が作っていた作業メモ(忘備録)が役立ったため、忘備録は重要だとあらためて気がついた

  1. .gemrc に以下を入れておくと gem install が多少早くなる

  2. 【 source 】コマンド/【 . 】コマンド――シェルの設定を即座に反映させる

  3. 【 curl 】コマンド――さまざまなプロトコルでファイルをダウンロード(転送)する

  4. ちなみに、curl等のコマンドは -helpというオプションを渡せば(「$ curl -help」)コマンドのドキュメントを読むことができるため、オプションの詳細を把握することができます。

  5. Contents Delivery Networkの略で、本体のサーバの代理としてアクセスを受付、捌いてくれるサーバサービスのことです。これがあるおかげで現代の高速インターネットやブラウジングが成立している側面もあります。

Rails Tutorialで詰まったこと(第13章 ユーザーのマイクロポスト)

本記事の目的

  • 本格的なプログラム言語学習を独学するに辺り、自分が躓いた場所を逐一残していおくことで他の独学者の皆さんの役に立つことを狙って
  • 自身の忘備録として

第13章 ユーザーのマイクロポスト

本章ではTwitterのように短い文章を投稿する「マイクロポスト」機能を実装・テストしていきます。140字制限のある文字だけではなく、画像のアップロードやリサイズにも対応させていきました。また、本章ではじめてDBのテーブル間連携等を学んだため、今後のRails開発には大きく役立つ知識が着きました。

問題1. fixtureってなんだっけ?

  • 原因 : 忘れた
  • 対策 : 思い出すために公式ドキュメントを読み、そのドキュメントから用語を学習する

以下、Railsガイドからの引用。

フィクスチャ(fixture)とは、いわゆるサンプルデータを言い換えたものです。フィクスチャを使うことで、
事前に定義したデータをテスト実行直前にtestデータベースに導入することができます。

引用元:Railsガイド v7.0

【結論】
用語がわからなくなったらなるべく公式ドキュメントを読み、確認しましょう。どうしても見つからないor読んでも理解できない時はブログ等の二次情報でも良いが、玉石混交なので気をつけましょう。

問題2. 標準時設定がデフォルトだとUTC(協定標準時)でわかりにくい

DBにデータを投入することが増え、そのcreated_atとupdated_atを比較する演習が出てきたため、UTCだとわかりにくく感じJTCに設定変更してみました。

  • 原因 : config/application.rbに設定していないためデフォルトだった
  • 対策 : JTC(日本標準時)になるように設定を追加

[config/application.rb]

require_relative 'boot'
require 'rails/all'

Bundler.require(*Rails.groups)

module SampleApp
  class Application < Rails::Application
    config.load_defaults 6.0

    # この行を追加し日本標準時に設定
    config.time_zone = 'Tokyo' 
  end
end

【参考】
qiita.com

【結論】
割と簡単な設定で拍子抜けでした。参考のQiitaに記載のコード1行で全てのDBのデータまでも日本標準時に変更できたので驚きです。

問題3.herokuにデプロイした際にデプロイは通るが503エラーが発生しアプリが立ち上がらない

  • 原因 : 不明
  • 対策 : rails tutorialを1からやり直す…

【結論】
YasLabの安川さんから公式のGithubを共有頂きDiffをとったものの差分が多すぎて対応できず、結局一から環境を構築し直すことにしました。ひとまず1章の構築部分を行い、その後SampleAppを作成する3章から進め直してみることにします。
また13章まで戻ってこれたならこの続きを書こうと思います。
Aizack先生の次回作にご期待ください。

Rails Tutorialで詰まったこと(第12章 パスワードの再設定)

本記事の目的

  • 本格的なプログラム言語学習を独学するに辺り、自分が躓いた場所を逐一残していおくことで他の独学者の皆さんの役に立つことを狙って
  • 自身の忘備録として

第12章 パスワードの再設定

本章ではこれまで作成したアカウント作成〜有効化までの流れとともに「パスワードの再設定」機能を追加します。その中で11章でも利用したメール送信機能を利用したり、安全なパスワード生成のためのURL生成したり等を行いました。
11章同様、この機能も本番環境のHerokuでメール送信できるようします。

問題1. GreenとなるはずのテストがRedになる

  • 原因 : テストを書いた場所・修正したファイルが間違っていた
  • 対策 : 本来のファイルに対して修正を行い再テスト実行

今回私が間違えたテストファイルは以下の通りです。

  • 正しいファイル
  • 間違えて修正したファイル
    • test/mailers/user_mailer_test.rb

【結論】
テキストはよく見て、修正するファイルを見つけましょう。
ファイルが増え似たファイル名が沢山でてきたので、今後はファイル名で検索を掛けていっても良いかもしれません。

問題2. パスワードリセットしたくてもアカウントが有効化していないと怒られる

  • 原因 : テキストを読み飛ばし11章でやるはずだったアカウント有効化ができていないアカウントを作っていた
  • 対策 : 11章の11.25のアカウント有効化メールのログと実際の挙動を照らし合わすことでアカウント有効化を成功1

【結論】
詰まったら、テキストを何度も読んで確認。
答え全部とまでは言わないがある程度はテキストに書いてある。
長くて疲れていると読むのは大変だけど少しづつ読んでいこう!


  1. 11章走破とかTweetしておきながら実は終わっていなかったので少し恥ずかしい……

Rails Tutorialで詰まったこと(第11章 アカウントの有効化)

本記事の目的

  • 本格的なプログラム言語学習を独学するに辺り、自分が躓いた場所を逐一残していおくことで他の独学者の皆さんの役に立つことを狙って
  • 自身の忘備録として

第11章 アカウントの有効化

本章ではアカウントの有効化をするために、メール送信機能とその後のアカウント有効化機能を実装しました。その上でより安全(セキュア)なアカウント有効化の方法を学び、最終的には本番環境のHerokuでもメールを送れるようになります。

問題1. アカウント有効化メールの画面が表示できない

f:id:Aizack:20220312212729p:plain
アカウント有効化画面にアクセスした際のエラー画面

  • 原因 : サイト根幹部分のソース更新時に仮想サーバーを立ち上げたままにしていた
  • 対策 : サーバを再起動

f:id:Aizack:20220313085718p:plain
再起動後に見えるアカウント有効化メールの画面

【結論】 大きな変更作業が終わる毎にサーバは再起動しておくこと。何が変更されたかによっては立ち上げっぱなしの状態で見ることはできないこともある。(凡ミス)

問題2.リスト 11.19~20でGreenになるはずのテストが通らない

以下の問題ですが、テキストでの誤植かと思いきや運営に問い合わせを行った所、私の勘違いということが判明しました。

  • 原因 : テキストをよく読んでいなかった
  • 対策 : テキストをよく読みましょう

【結論】
本件でご迷惑おかけしたYassLab安川さん、申し訳有りませんでした。 今後もテキストはよく読んで進めていきます。