御参拝、誠に有難う御座います。住職(管理人)の修羅観音です。
仏事や仏教の事柄に触れる機会が多かったため、随分とプログラミングの話をしておりませんでしたが、ちまちまとプログラミングの学習と実践はしておりまして。
右往左往しながら、苦しみながらも、なんとか作品的なものを一つ拵える事が出来ました。
コーディングで躓いて、デプロイでも躓いたりと、色々とあったものです。
そのためか、エラーを脱してやっとこさ動くようになったり、デプロイした時の喜びはあったものです、そこに執着せんようにせんととは思うのですがね。
作ったアプリケーションはWEBアプリケーションと呼ばれるもので、内容は「簡易チャットアプリケーション」で御座います。
何とかHerokuという場所にデプロイも出来たところで、躓いたところや苦しんだところ等、備忘録的な話をここでしてみることと致します。
現在、私と同じように悪戦苦闘されている方の、ヒントなりなんなりとなれば嬉しゅう御座います。
Contents
簡易チャットアプリケーションの概要と参考資料
早速ですが、まずは拵えた簡易chatアプリケーションのURLからお伝え致します。こちらです。
簡易チャットアプリケーション:https://syuratya.herokuapp.com/
:Ruby on Rails5.2
:Ruby2.4
:Cloud9(プライベートモード)
:ユーザー登録用に使ったgem:devise
:デプロイ先:Heroku
(尚、Herokuはなにやら有料になる事があったりとするから、未来永劫このチャットアプリを残しておく可能性は低いから、消してしもうておりました、申し訳ない。)
実際に登録して中をのぞいて頂ければ分かりますが、試験的に私の名前(修羅観音)と、そのほかユーザーを一人分登録しております。
後、バリデーションを使っておりませんで、例えば「12345@12345.com」などの当てずっぽうなメールアドレスでも登録できます。
実際に使っている様子を、ローカルサーバーで動かしている際に、スクリーンショットしておきました。

この画像のやり取りは、仏陀とアーナンダさんのやり取りです。
アーナンダさんが、仏陀に新規チャットを制作して、そこで仏陀に質問している様子です。
アーナンダさんの質問に対して、仏陀が答えている、というところです。
ちなみに、これは仏陀とアーナンダさんによる、「善友」についてのやり取りです。
善友については、プラユキ・ナラテボーさんの本などで学ぶことが出来ます。
仏陀曰く、「善友の存在は、聖なる道の半ばではなく、その全てである」という事です。
七善友法という徳性を持つ者が善友とみなされており、「頼りがいがあり尊敬できる」「誤った道や破滅への道へ、人を迷わせる事がない」等の項目が御座います。
巷で観られる、自称インフルエンサーなど、煽ったり特定の対象をディスったりして金銭をかすめ取る輩は、この真逆と言えましょう。
ああいうのは、善友ではなく我利我利亡者と言います、反面教師にして精進したいところでありまするな。
それはさておき。
Cloud9のプライベートモードで拵えましたこの簡易チャットアプリケーション、参考資料は「Coffee-Cup」というRuby on Railsについて、実践しながら学べる解説サイトです。
参照先:「Coffee-Cup」
今回拵えた簡易チャットアプリケーションは、Coffee-Cupの応用編の内容を形にしたものです。
私は最初、Progateを何周もやってからRuby on Railsチュートリアルに進みましたが、途中で何度もやり直すという事が繰り返され、その時にであったのがこのサイトでした。
そうして、基礎編を終えてから応用編に進み、何とかHerokuへのデプロイまでこぎ着けた、というわけです。
Coffee-Cupの制作者には、この場を借りて厚く御礼申し上げる次第で御座います、有り難う御座います。
合掌、礼拝。

簡易チャットアプリケーションをHerokuにデプロイするまでに躓いたところ
なんとか、Herokuに簡易チャットアプリケーションをデプロイするまでにこぎ着けたわけでありますが。その過程で、何度か1からやり直したりと、順調ではありませんでした。
特に躓いたところなどを、私の備忘録にもなるように、ここに記しておきます。
最も躓いたのは、Herokuへのデプロイ
簡易チャットアプリケーションを制作してデプロイするまでに、最も躓いたところ。それは、「Herokuへのデプロイ」です。
コーディング、コードを書いてプログラムを作っていくところでは、もちろん、ケアレスミスやなかなか理解出来なかったところもありました。
今も、全てを理解出来ているわけではありませんから、これから復習と関連知識の学習・実践をせんといかんわけですが。
コードそのものは、Coffee-Cupや参考資料を丁寧に読み解いていけば、進める事は出来たものです。
コードの注意点:Ruby on Rails5をお使いの方はredirect_to backにご注意をば
Herokuへのデプロイで躓いた話をする前に、ここで私がコーディングの際に躓いたところを先にお伝え致します。恐らく、これからRuby on Railsを学習・実践したり、アプリケーションをはじめて作る人は、出くわす話でありましょうからね。
Ruby on Railsにおいて、直前のページに戻る時は、次のコードを使ってきた事でありましょう。
「redirect_to :back」
これはRuby on Rails4までは使えたようです。
ようですが、としか言えないのは、私はRuby on Rails5からしか経験がないものでして、それゆえに、今から話すところで躓いたのです。
Coffee-Cup応用編の「2:メッセージを作る」という単元にて、「redirect_to :back」が使われています。
具体的には、「controllers > messages_controller.rb」の中です。
ここで「redirect_to :back」が使われておりますが、Ruby on Rails5では、恐らく動かない事でしょう。
全てをコピーペーストでやってきた人でしたら、ここで躓くかと存じます。
Ruby on Rails5において、「redirect_to :back」の代わりに使う事になるのが、次のコードです。
「redirect_back(fallback_location: root_path)」
私も、Ruby on Rails5.2で簡易チャットアプリケーションを拵えたとき、次のようにしました。
これで、「redirect_to :back」と同じ挙動になります。
現段階におけるHerokuへRuby on Rails5で作ったアプリケーションをデプロイする方法の備忘録
それでは、Herokuへのデプロイで躓いた話に移りましょう。私が実際にやったことや、参考資料を提示しておきます。
私の備忘録も兼ねて。
参考資料はこちらです。
参照先:「Herokuへのデプロイの参考資料」
Herokuへのデプロイは、Gemfileとdatabase.ymlというファイルを操作します。

上の画像で、赤丸で囲んだファイルです。
まずgemfileには、次のgemを追加して、「bundle install」をターミナルで打ち込みます。

初期の頃は「gem ‘sqlite3’」となっている箇所に、「gem ‘sqlite3’, group: :development」「gem ‘pg’, group: :production」「gem ‘rails_12factor’, group: :production」を追加します。
これは、Herokuで動くデータベースがpg(PostgreSQL)であり、本番環境であるHerokuに合わせる必要があって、このような追加事項が御座います。
ちなみに、別の書き方として、「gem ‘sqlite3’, group: :development」の追加はこの通りにしておいて、Gemfileのどこかの箇所に、次のような書き方で追加するという方法もあるようです。
私は、さくっと上部に3行追加するやり方を採用しておりますがね。
これが終わったら、今度はdatabase.ymlファイルをいじります。
ファイルの最後辺りは、次のようになっているでしょう。
「production:」とあることから察しがつくかと存じますが、ここで本番環境のデータベースについて、記述することになります。
具体的には、下記の通りに。
これで、Herokuへのデプロイ準備が出来ました。
後は、「git init、git add .. ~~~」と、デプロイするための操作をターミナルで行います。
具体的には、次の文をターミナルに入力していきます。
これで、デプロイが完了致します。
私もやってしまった忘れ物
そうそう、私も最初、「あれ、動かないぞ?」となったところがありまして。デプロイしたら、ターミナルにこのコマンドを打ち込むのを忘れずに。
「heroku run rails db:migrate」
これは、Herokuのデータベースを動かすコマンドです。
これをしないと、Herokuのデータベースが動いてくれませんから、忘れずにターミナルに打ち込みましょう。
私も最初の時、これを知らずに色々調べ回って、この情報に到達してやってみて、やっと動かせるに至りました。
動いた時は、嬉しゅう御座いましたよ。

Deviseを入れている場合のデプロイ
もう一つ、私が躓いたところ、これもHerokuへのデプロイに関する箇所なのですが、そちらも記しておきます。私は、ユーザー登録やログイン機能は、「Devise」というgemを入れております。
Deviseを入れておけば、ログインしたユーザーだけが操作できるようにするメソッドを使う事ができるようになり、とても便利です。
ただ、Deviseを活用しているアプリケーションを、Herokuにデプロイする際、一つ操作をせんといかんのです。
恐らく、何もせずにHerokuへデプロイすると、次のようなメッセージがターミナルに出てくることでありましょう。
「Devise.secret_key was not set. Please add the following to your Devise initializer:」
これは「Devise.secret_keyがセットされてませんよ、付け加えておいてね。」というメッセージです。
これについては、configフォルダの中にあるinitializersフォルダの中の「devise.rbファイル」をいじれば、解決致します。

このファイルを開いて頂くと、11行目辺りに「# config.secret_key = ‘*****(英数字の文字列)’」が御座いましょう。
この行の頭にある「#」を消すと、config.secret_keyが有効になります。
最低限この操作をすることによって、これでHerokuへのデプロイは出来るようになります。
ただ、セキュリティ上の問題もあるために、更に操作する必要がありますが、それについてはこちらの参考資料を参照して頂ければと思います。
参照先:「deviseとHerokuへのデプロイ」
参照先2:「deviseとHerokuへのデプロイその2」
deviseを活用したRuby on Railsで作成したアプリケーションをHerokuにデプロイする際には、活用して頂ければ幸いに御座います。
これあれば彼生ず、このコードあればかの動作生ず、このコードなければかの動作無し
今回は、私の備忘録も兼ねて、Ruby on Railsで拵えた、簡易チャットアプリケーションをHerokuへデプロイした報告と、躓いたところを伝え致しました。Cloud9をお使いの方は、この通りにやればHerokuへのアップロードは出来るかと存じます。
最後に、仏教的な話をば、仏教のブログですからね。
コードを書いている際、一文字でも無かったり多すぎたりしても、プログラムは動作しません。
有り難い事に、Ruby on Railsではエラー・例外処理の要因を示してはくれます。
それでも、意地になって調べまくっても、なかなか上手くいかんものでしたがね。
まさに「求不得苦」、思い通りにならないことの苦も頂いた事に御座ります。
また、「これあれば彼生ず」という、仏教の因縁果の話を、何度も痛感したものです。
プログラミングの話にすれば、「このコードあればかの動作生ず、このコードなければかの動作無し」です。
実際にやってしまった具体例としては、ルートのところにて、一文字足りなかったために動かなかった、という事もありまして。
「resources :messages」とすべきところを、最後の「s」を書き忘れてしまっていた、という事がありましてね。
プログラミングから仏法を頂く。
これからも、色々と作ったり実践しながら、仏法を頂いていくこともあるのだろうなあ、と、ふとそんな事を考えた次第で御座ります。
最後の最後に、もう一度簡易チャットアプリケーションのURLをば。
簡易チャットアプリケーション:https://syuratya.herokuapp.com/
いつまで残しておくかは、現段階では何とも申し上げられませんが、こういうのもあるんだ、という事で。
合掌、礼拝