ヘルプ − 困ったときのヒント集

本ページではRailsチュートリアルでよく見かけるエラーや対処法、迷ったときの学習ロードマップなどをまとめています。Railsチュートリアルを進めていて困ったときにご活用ください。

目次

はじめに

Web技術は日々進化しているため、エラーに遭遇せずに開発を進められることは稀です。すべてのエラーを網羅するのは難しいですが、エラー発生時に役立つ(かもしれない)ヒントを以下にまとめておきました。困ったときはぜひお試しください。

エラーメッセージは開発者のデバッグを助ける味方です。エラーメッセージを読んで状況を掴めるようになると開発も早くなるため、開発中に出るエラーを読み解くことは熟練への道とも言えます。
  • Sample App 実装例のコードと自分のコードを比較しましたか?
  • チュートリアルで使用した gem のバージョン(Rails を含む)を正確に使用していますか?
  • エラーメッセージで検索してみましたか?
  • RailsのWebサーバを(Ctrl-Cで)停止して再起動しましたか?
  • bin/spring stopを使ってSpringを停止してみましたか?
  • bundle installを再実行しましたか?
  • bundle updateを実行してみましたか?
  • heroku logsheroku logs --tailを使って Heroku のログを調べましたか?
  • sqlite3gem がGemfileの開発環境とテスト環境にのみリストされていることを確認しましたか?
  • エラーメッセージで検索してみましたか?(大事なことなので2回書きました)

上記ヒントが皆さんのお役に立てば解決すれば嬉しいです。『デバッグ時間をもっと短くしたい』『より早く学びたい』といった場合は、次の学習ロードマップをご参照していただけると幸いです。

学習ロードマップ

『学習の全体像を掴みたい』といった場面でお役立てください。最適な学び方は1人1人異なるため『この進め方が正解』といったものではありませんが、1つの事例としてご参考になれば嬉しいです。

☝️ 図中に記載されている各種サービスの概要は、次の通りです。

  • Progate

    対話的に学べるオンラインのプログラミング学習サービスです。初心者向けのコンテンツが特に充実しており、初めてプログラミングをする方にオススメです。『Progate Journey』でプログラミング学習の全体像を把握することもできます。
  • Railsチュートリアル初心者シリーズ

    Railsチュートリアルを進めて『難しい!』と感じた方を対象とした補足コンテンツです。『基礎力を高めたい』『まずは基本を押さえたい』という方にオススメです。
  • RailsチュートリアルWebテキスト

    WebpackやGitHubにも対応した最新のコンテンツです。『理解がうまく進まない』『もっと早く学びたい』といった場合は、スライドと実演動画で学べるRailsチュートリアル解説動画がオススメです。
  • Railsチュートリアル解説動画

    実演付きの解説動画で学べる一押しのコンテンツです。イラストと実演で早く効率的に学べるので、すばやく学習を完了させたい人に特にオススメです。
  • 質問対応サポート付き解説動画【提供: ShareWis】

    現役Rubyエンジニアのサポート付きで学べる、解説動画の質問対応付きサービスです。後半の章ほど難しくなっていきますが、サポートを受けながらしっかり学ぶことができます。
  • コミュニティサポート付き解説動画【提供: TechCommit】

    コミュニティ型の学習支援サービスです。独学での学習が不安な方にオススメです。(【Railsチュートリアルコラボ】Rails学習支援追加パックでお申し込みください。)
  • Ruby on Railsガイド

    トピック毎に体系化された、1,600ページを超えるRailsの大型ドキュメントです。Railsチュートリアルを完走し、プロダクト開発の実践に入った方々を対象として、各機能の詳しい使い方を解説する辞書型サービスです。『もっと生産的に開発したい』という方向けにProプランTeamプラン電子書籍版も提供しています。
  • 読み物ガイド

    Railsチュートリアル完走者を対象とした『読み物ガイド』も用意しています。『完走後ってどうしたらいいの?』とお悩みの場面でお役に立てば嬉しいです 😌💖

上記の他、YouTubeチャンネルnoteマガジンもあります。『Ruby/Rails学習者の統計データ』や『3ヶ月でWebサービスを開発した話』、『医者からエンジニアになった話』などを公開しているので、ぜひご購読ください!📺✅

AWS Cloud9 の容量不足を解決する

Cloud9 で開発していると、デフォルトで設定されている Amazon EBS ボリューム容量では足らなくなってしまうことがあります。本セクションでは、使わなくなったファイルの削除方法や EBS ボリュームを増やす方法を紹介します。(Amazon EBS の無料利用枠については公式ページからご確認ください。)

0. 第3章に入ったら hello_app, toy_app は削除しよう

第3章『ほぼ静的なページの作成』からは sample_app だけを使います。第1章で作った hello_app と、第2章で作った toy_app は削除しても大丈夫です。容量不足が不安になってきたら、まずは hello_apptoy_app を削除してみましょう。(ソースコードを残しておきたい方は、事前に GitHub に push しておきましょう)

1. EBS ボリュームの確認方法

df -h コマンドで、現在の容量を確認します。 /dev/xvda1 の列の Use が100%になると、動作しなくなることもあります。(動作しなくなってしまった場合は、新しい environment を作成した方が早いかもしれません。)
        $ df -h
        Filesystem      Size  Used Avail Use% Mounted on
        .
        .
        /dev/xvda1      9.8G  8.2G  1.5G  85% /
      
エラーの例
        There was an error while trying to write to `/home/ubuntu/environment/sample_app/.bundle/config`. There was insufficient space remaining on the device.
      
hello_apptoy_appを削除しても構わない方は、この時点で削除して容量を少し空けておきましょう。

2. EBS ボリュームを増やす方法

  • Amazon EC2 コンソールを開きます。
  • 「ボリューム」を選択し、変更するボリュームを選択します。(複数あって分からない場合は、「インスタンス」の「実行中のインスタンス」の中からaws-cloud9から始まる Name のインスタンス ID をコピーし、ボリューム内で検索するとよいでしょう。)
  • 上部にある「アクション」ボタンから「ボリュームの変更」を選択し、サイズを AWS が定める最大無料枠に設定し、変更します。(執筆時点では 30 でしたが、念のため確認しておくことをオススメします)
  • 「インスタンス」にいき、該当のインスタンスを選択後、画面上部にある「アクション」ボタンから「インスタンスの状態」→「再起動(停止中なら開始)」をします。
  • 「Cloud9」に戻り、ターミナルからボリュームの拡張をします。現在のインスタンスに割り当てられているブロックデバイスの情報を確認するには、lsblkコマンドで表示します。ルートボリュームである/dev/xvdaは拡張されていますが、/dev/xvda1はまだ元のままです。
              $ lsblk
              .
              .
              xvda    202:0    0  30G  0 disk
              └─xvda1 202:1    0   8G  0 part
            
    ボリュームを拡張させるには以下のコマンドを使います。
              $ sudo growpart /dev/xvda 1
            
              $ lsblk
              .
              .
              xvda    202:0    0  30G  0 disk
              └─xvda1 202:1    0  30G  0 part /
            
  • 最後にファイルシステムを拡張します。ファイルシステムを拡張するには、以下のコマンドを使います。
              $ sudo resize2fs /dev/xvda1
            
              $ df -h
              Filesystem      Size  Used Avail Use% Mounted on
              .
              .
              /dev/xvda1       30G  8.2G  21G  27% /
            
参考記事

本番環境でメールが送れない

Heroku のメール系アドオンにはいくつかあります。メールが送れない場合は、設定を見直すか、もしくは別のメール系アドオンを試してみましょう。本セクションでは『Mailgun』と『SendGrid』の2つをご紹介します。

Mailgun の設定方法

Mailgun でメールを送る場合は、次の手順でセットアップを行います。

  • $ heroku addons:create mailgun:starterで無料枠 (1日400通まで) の Starter プランを追加します。
  • Mailgun の公式ドキュメントに従って、ActionMailer を設定します。(config/environments/production.rb)
    Rails.application.configure do
      ...
      config.action_mailer.raise_delivery_errors = true
      config.action_mailer.delivery_method = :smtp
      host = '【Herokuのサブドメイン】.herokuapp.com'
      config.action_mailer.default_url_options = { host: host }
      ActionMailer::Base.smtp_settings = {
            :port           => ENV['MAILGUN_SMTP_PORT'],
            :address        => ENV['MAILGUN_SMTP_SERVER'],
            :user_name      => ENV['MAILGUN_SMTP_LOGIN'],
            :password       => ENV['MAILGUN_SMTP_PASSWORD'],
            :domain         => host,
            :authentication => :plain,
      }
      ...
    end
    	
  • 変更したコードをcommitし、Heroku にpushします。
              $ git push heroku
            
  • $ heroku addons:open mailgunで Mailgun ダッシュボードのURLが表示されるので、ブラウザで開きます。
  • MailGun公式ドキュメントに従い、受信したいメールアドレスを認証します。画面左側の「Sending」→「Domains」のリストにある「sandbox」で始まるサンドボックスドメインを選択します。画面右側の「Authorized Recipients」で、受信したいメールアドレスを認証できます。

SendGrid の設定方法

SendGrid でメールを送る場合は、次の手順でセットアップを行います。Mailgun でメールが送れず、設定を見直してもうまくいかなかった場合は、SendGrid を試してみてください。

  • 公式ページを参考に、ActionMailer を設定します。(config/environments/production.rb)
      Rails.application.configure do
        ...
        config.action_mailer.delivery_method = :smtp
        config.action_mailer.perform_deliveries = true
        host = '【Herokuのサブドメイン】.herokuapp.com'
        config.action_mailer.default_url_options = { host: host }
        ActionMailer::Base.smtp_settings = {
              :port                 => 587,
              :address              => 'smtp.sendgrid.net',
              :user_name            => ENV['SENDGRID_USERNAME'],
              :password             => ENV['SENDGRID_PASSWORD'],
              :domain               => host,
              :authentication       => :plain,
              :enable_starttls_auto => true
        }
        ...
      end
        
  • 変更したコードをcommitし、Heroku にpushします。
  • $ heroku addons:create sendgrid:starterで無料枠 (1日400通まで) の Starter プランを追加します。

SendGrid アカウントの状態を確認

heroku logs --tailを実行後、本番環境でアカウント登録するとメールに関するログが確認できます。メール文面に関するログの後、以下のようなエラーメッセージがあるかどうかを確認してください。
      # エラー例『認証に失敗 (535)』
      Net::SMTPAuthenticationError (535 Authentication failed: account disabled
    
      # エラー例『未確認のドメイン (550)』
      Net::SMTPFatalError (550 The from address does not match a verified Sender Identity. Mail cannot be sent until this error is resolved.
    
エラーメッセージが無い場合は、コードが間違っている可能性があります。サンプルコードと自分のコードを比較してみましょう。

メールアドレスの認証

  • 上記のようなエラーメッセージの場合、noreply@example.com を認証されたメールアドレスに置き換えてみましょう。
  • Heroku ダッシュボードから該当するアプリのページにいき、「Resources」をクリックします。
  • 「Add-ons」という項目の中にある「SendGrid」をクリックし、SendGrid のダッシュボードに行きます。
  • SendGrid ダッシュボード下部の「Admin User Details」に認証されたメールアドレスが表示されているので、ソースコード内の「noreply@example.com」を表示されているメールアドレスに置き換えます。
  • 最後に、変更したコードをcommitし、Heroku にpushします。
              $ git push heroku
            
参考記事

公式情報まとめ

Railsチュートリアルに関する公式動画・公式アカウントなどをまとめてみました。最新情報を知りたい場面などでお役立てください。

公式動画:Railsチュートリアルの歩き方

Railsチュートリアルの全体像を俯瞰したいときや、完走後のイメージを掴みたい場面でご活用ください。

公式リポジトリ:yasslab/sample_apps

GitHub 上で公開しているRailsチュートリアルの実装例です。Railsのバージョン毎にそれぞれディレクトリが分けられているので、学習中のバージョンに合わせて適宜ご参照ください。

公式アカウント

読み物ガイド - 完走した方へ

Railsチュートリアル完走者を対象とした『読み物ガイド』も用意しています。『完走後ってどうしたらいいの?』とお悩みの場面でご活用ください 🗺✨

読み物ガイドをみる