※ 今回の記事はRailsアプリの作り方【環境構築編】の続編となります
※ 作成したアプリケーションをインターネット上に公開することをデプロイといいます。

- Gitを使ってバージョンを管理する方法
- Railsアプリの生み出し方
- railsコマンドを使ってRailsアプリを生み出す方法
- Railsアプリのトップページが表示されるようにする方法
- RailsアプリをGitHubとrender.comを組み合わせてインターネット上に公開する方法
できる限りわかりやすく最低限のやり方で説明しますが初心者の方にとっては難易度は高いところもあると思います。
わからないところがあっても読み進めてイメージだけでも持って返っていただきたいと思っております。
Railsウェルカムページにいることを確認する
ブラウザで
http://localhost:3000/にアクセスして以下の状態になっていることを確認してください。



testapp以下のファイルをGitの管理下に置く
現在いるディレクトリを確認する
ターミナルで pwd と入力し現在自分がいるディレクトリ(フォルダ)を確認してください。
testappディレクトリにいれば正解です。
それ以外のディレクトリにいる場合 lsで階層を確認しながら cd コマンドなどを使い testappディレクトリに来てください。
testappディレクトリ以下のディレクトリ(フォルダ)とファイルをgitの管理下に置く
testappディレクトリにいる状態で
git init
と入力すると、testappディレクトリにGitリポジトリが作成されます。
これを「リポジトリの初期化」と呼びこの操作によりtestapp以下のディレクトリやファイルのバージョンを管理しながら開発できるようになります。
補足
- 初期化を行うと、testapp/.gitディレクトリが作成されます(.gitは隠しディレクトリのため、VSCodeの標準のファイルツリーには表示されません。)
- ターミナルで「 ls -a 」コマンドを実行すると、.gitディレクトリの存在を確認できます。
- .git ディレクトリとは
プロジェクトのすべてのバージョン管理情報(コミット履歴、リモートリポジトリ情報など)を格納する特別なディレクトリ - ls -a とは
隠しファイル/ディレクトリも含め、現在のディレクトリの内容をすべて表示するコマンド
Gitのブランチを確認する
ターミナルで
git branch
と入力することで現在自分がいるブランチを確認することができます。
Gitのブランチってなに?
Gitでは通常、メインとなるブランチ(main)を中心に開発を行います。
新しい機能を作るときは、mainブランチから作業用ブランチを作成して開発します。
機能ごとにブランチ(枝)を作り完成したコードに問題がなければmainブランチに取り込むという使い方をします。




この手法をとることでブランチで開発中のコードを失敗してもmainブランチには影響を与えないで済みます。
testapp以下のディレクトリ、ファイルをステージングエリアに追加する
gitには、ワーキングツリー、ステージングエリア、リポジトリと3つのステージがあります。
ワーキングツリーで作業して、下書きができたら、ステージングエリアに送って、完成したらリポジトリに送るというイメージです。
git add .
というコマンドを入力すると.gitignoreに指定したファイルを除く、現在のディレクトリ以下のすべてのファイルをステージングエリアに送ります。
.gitignoreとは
Gitで管理したくないファイルを指定するための設定ファイルです。
このファイルに記載したファイルやディレクトリはGitの管理対象から除外されます。
(ログファイル/一時ファイルなど)外部に流出させたくないファイルを指定する。
- .env
- /config/master.key
- log/
- tmp/
※Railsアプリでは .gitignoreファイル は最初から作成されています。必要に応じて内容を追加していきます。
testapp以下のディレクトリ、ファイルをリポジトリに追加する
git commit -m “初期コミット”
と入力することで、ステージングエリアに追加されているファイルの変更内容をリポジトリに記録することができます。
“初期コミット”の部分はメッセージなので他の文章でも問題ないです。
例 )
git commit -m “プロジェクト開始” など




ここがセーブポイントとなり何か問題があった時この時点のコードに戻すことができます。
Railsアプリ(testapp)にUser機能を追加する
ターミナルで以下のコマンドを入力しRailsアプリ(testapp)にUser機能を追加します。
rails generate scaffold User name:string age:integer
このコマンドは、Userモデルと、それに関連するコントローラー、ビュー、ルーティング、マイグレーションファイルなどを自動で生成します。
string(文字列)型のname属性とinteger(整数)型のage属性を持つUserモデルが作成されます。




名前と年齢というデータを持ったUserというデータを作るというイメージです。
補足 | scaffoldコマンドについて




scaffoldについては下記の記事が参考にないますので余裕のある方はぜひ読んでみてください。
https://pikawaka.com/rails/scaffold
コントローラー(controller)とは
ユーザーからのリクエストを受け取り、どの処理を実行するかを決めるファイルです。
ここでデータの取得や保存などを行い、どの画面(ビュー)を表示するかを決めます。
※ 今回はアプリをインターネット上に公開するまでの手順を理解してもらうことを目的としておりますのでコントローラーの実装は行いません。
ビュー(view)とは
画面を表示するためのファイル。今あなたが見ているこの画面もビューファイルです😄
ルーティング(routing)とは
URLにアクセスがあったときに、どのコントローラーのどのアクションを実行するかを決める仕組みです。




ここにアクセスが来たらあっちに行ってねを指定するファイルです。
マイグレーションファイルとは
データベースの構造を変更するためのファイルです。
例えば
・Userテーブルを作る
・nameカラムを追加する
・ageカラムを追加する
といったデータベースの変更内容を記録します。
マイグレーションを実行すると、その内容に従ってデータベースの構造が更新されます。
簡単に言うと
「データベースの設計図を変更するファイル」
です。
マイグレーションファイルの内容をデータベースに反映させる
マイグレーションファイルを作っただけではデータベースに反映されません。
rails db:migrate
というコマンドを実行することでマイグレーションファイルの内容がデータベースに変更が反映されます。
Railsサーバーを起動する




この時点でRailsサーバーが起動してなかったら rails server コマンドで起動してください。
その後、ブラウザで localhost:3000 にアクセスします。
ここではまだ、Railsウェルカムページのままです。
ルーティング(routing)を設定する
ルーティングを追記する
config/routes.rbに
root “users#index”
と追記する。



これによりトップページにアクセスが来た場合、usersコントローラーのindexアクションが実行されます。
補足 | rootとは
アプリケーションのトップページ(/)にアクセスがあったときに表示するページのことです。




今回の場合、アプリケーションにアクセスが来たら
usersコントローラーのindexアクションを実行してください
という意味になります。
トップページの表示を確認する
localhost:3000
にアクセスして以下の画像のように表示されていれば完成です。







本来はここからアプリに機能を実装していくのですが今回は環境構築完了地点からアプリを公開するまでの手順を覚えることを目的としておりますので機能の実装は行いません。
GihHubにリモートリポジトリを作成する




GihHub上(オンライン)のリポジトリをリモートリポジトリと言います。
GitHubってなにもの?
Gitで管理しているコードをインターネット上に保存・共有できるサービスがGitHubです。
自分のPCだけでなくオンライン上にもコードを保存できるため、バックアップを取ったり、他の人とコードを共有したりできます。
ローカルリポジトリに変更を保存する(ここはGit)(オフライン)
git add .
で現在のディレクトリ以下の変更をステージングエリアに追加する。
git commit -m “ユーザー登録機能のテストアプリ実装完了”
でステージングエリアに追加された変更をローカルリポジトリに記録します。




ステージングエリアに追加された変更をローカルリポジトリに記録します。
この操作を「コミット」と言います。
GitHubに登録する
にアクセスし登録を行います。
GitHub上(オンライン)にリポジトリを作成する
登録が完了すると下記の画像のように表示されるので
create repository
をクリックしてリポジトリの設定を開始する。



Repository nameを決める
create repository をクリック後以下のように表示されるのでRepository nameをtestappとします。



コードの公開範囲を決める
GitHubに保存したコードを全世界に公開するならPublic、
非公開ならPrivateを選択する。
今回はPublicを選択します。
リモートリポジトリの作成を完了する
create repository ボタン
をクリックしてリモートリポジトリの作成を完了します。
GitHubとローカルリポジトリを紐づける
ターミナルで下記のようなコマンドを実行。
git remote add origin https://github.com/kw47b/testapp.git




kw47bのところはそれぞれ異なるのでご自身が設定された名前にして実行してください。
画像の赤枠のところで確認できます。







このコマンドは
「このプロジェクトのアップロード先はこのGitHubリポジトリですよ」
とGitに教える設定です。
これによって git push でGitHubにコードを送れるようになります。




origin はリモートリポジトリの名前です。
Gitでは慣例的に GitHub を origin という名前で登録します。
GitHubとtestappが紐づいたことを確認する
ターミナルで
git remote -v
を実行します。
以下の画像のように表示されれば無事にGitHubとtestappが紐づきました。







git remote -v は、設定されているリモートリポジトリのURLを確認するコマンドです。
Gitで管理されたくないファイルを設定する(再確認)
.gitignoreを開きリモートリポジトリにアップロードしたくないファイルを追記します。




今回は特に何もないので特に操作はしません。
変更をローカルリポジトリにコミットする
今回は何も変更していないので必要ありませんが、何かを変更したら下記を打つ癖をつけておいてください。
git add .
git commit -m “コミットメッセージ”
ローカルリポジトリの状態をリモートリポジトリに反映させる
git push origin main
このコマンドでローカルリポジトリのmainブランチの状態をリモートリポジトリのmainブランチに同期します。
GitHubにアクセスしてリロード後下記画像のようになっていれば push 成功です。



render.comにデプロイする準備をする
render.comとは
GitHubにpushしたコードを自動でビルドしてアプリを公開できるPaaS(Platform as a Service)」と呼ばれるクラウドサービスです。




簡単に言うとrender.comにコードをアップロードすればアプリを公開できるということです。
デプロイ時に実行することを指定するファイルを作る
ターミナルで
touch bin/render-build.sh
を実行し
bin/render-build.sh
というファイルを作る。
bin/render-build.shにデプロイ時に実行することを記載する
※ デプロイとはインターネット上にアプリを公開することです。
bin/render-build.shに下記を記載する
set -e
bundle install
bundle exec rails assets:precompile
bundle exec rails assets:clean
bundle exec rails db:migrate
bin/render-build.shに下記を記載する
set -e : 実行中にエラーが発生した場合、そこで処理を停止する設定です。
bundle install : Gemfileに記載されたgem(Rubyのライブラリ)をインストールします。
bundle exec rails assets:precompile : Railsアプリケーションのアセット(CSS、JavaScript、画像など)を本番環境用にコンパイルします。
bundle exec rails assets:clean : 以前にプリコンパイルされたアセットを削除します。
rails db:migrate : データベースのマイグレーションを実行します。
ローカルリポジトリに変更をコミットする
git add .
git commit -m 'render-build.sh追加'
リモートリポジトリに変更したローカルリポジトリをpushする
git push origin main
render.comにログインする
https://dashboard.render.com/ へアクセスしGitHubアカウントでログインします。
render.comの設定をする



画面右上の、「+ New」ボタンを クリックし、 「Postgres」を選択。
下記のように表示されるので
データベースに名前を付けます。今回は「testapp_DB」とします。



RegionはSingaporeにします。(日本から一番近いため)



Freeプランを選択します。



Name, Region, Plan Options,を確認したら、「Create Database」をクリックします。
データベースが作成されるので、StatusがCreatingからAvailableになるまで待ちます。



つづいて、そのまま下にスクロールすると
Internal Database URLが出てくるのでその値をコピーして、エクセルでも、ワードでもなんでもいいので貼り付けて、仮置きしておく(後で使うため、念のため仮置きしておきます)



上記画像の左上のRenderマークを別タブで開く
ここはそのまま開くと作業が大変になることがあるので必ず別タブで開いてください。
+ Add newボタンをクリック。
Web Serviceを選択。



下記画像のように表示されるので、GitHubを選択する



すると、GitHubが開き、下記画像の様にGitHubにあるすべてのリポジトリをrender.comに反映させるか、選択したリポジトリだけを反映させるか聞かれるので今回は、
Only select repositories を選択する。
その下のトグルよりtestappを選択する。



そのまま下にスクロールしてinstallボタンをクリック。
下記のような画面が表示されるのでtestappをクリック。



Name欄に testapp
Language欄に Ruby
Region欄に Singapore
デフォルトで記載がありますが、それぞれ下記に変更します。
Build Commnad
./bin/render-build.sh
先ほどtestappアプリに追加したrender.shをここで呼び出します。
Start Command
bundle exec rails server
Rails serverを起動します。
bundle exec は、Gemfileで指定したバージョンのgemを使ってコマンドを実行するためのプレフィックスです。
Instance TypeをFreeに変更する。
RAILS_MASTER_KEYを設定する。
VScodeを開きconfig/master.keyの中にある値を入力する。
数字とアルファベットが多数並んでいるものです。
+Add Environment Variableを押して、RAILS_ENVの項目を作成する。
左枠にRAILS_ENVと入力し、右枠にはproductionと入力する。
+Add Environment Variableを押して、DATABASE_URLの項目を作成する。
左枠にDATABASE_URLと入力し先ほどコピーして、エクセルやワードに仮置きしておいたInternal Database URLの値を入力する。
仮置きを忘れていたら、別タブで開いているDashboardからInternal Database URLを取得してください。



Deploy Web service のボタンを押してください。
==> Your service is live 🎉が出たらデプロイ完了です。
赤枠で囲ったURLをクリックしてアプリを確認してみましょう。



以上がアプリケーションをデプロイする初歩的な流れです。おつかれさまでした。




