デプロイRails | SkillhubAI(スキルハブエーアイ)

デプロイRails

Rails 8アプリをRender.comにデプロイする完全ガイド【初心者向け】

はじめに - デプロイってそもそも何?

「デプロイっていったいなんですか?」って、よーく聞かれます。

生徒さんの多くは、「HTMLファイルをサーバーにアップロードするのと同じでしょ?」って思っているんですね。でも実際は全然違うんです。今日はそこから丁寧に説明していきますよ。

デプロイとは?ローカルと同じ環境をリモートに作ること

あなたは今、自分のPC(ローカル環境)でbin/rails serverを実行して、localhost:3000でRailsアプリが動いているはずです。デプロイとは、このローカル環境と全く同じ状態を、インターネット上のサーバー(リモート環境)に作り上げることです。

ローカル環境(あなたのPC)の構成

まず、あなたのPCでRailsアプリが動いている環境を整理してみましょう。

あなたのPC(ローカル環境)
┌─────────────────────────────────────┐
│ ┌─────────────┐                   │
│ │   Ruby      │ ← プログラミング言語  │
│ │   3.3.8     │                   │
│ └─────────────┘                   │
│ ┌─────────────┐                   │
│ │   SQLite    │ ← データベース      │
│ │ development │                   │
│ └─────────────┘                   │
│ ┌─────────────┐                   │
│ │    Puma     │ ← アプリサーバー    │
│ │ (Rails内蔵) │                   │
│ └─────────────┘                   │
│ ┌─────────────┐                   │
│ │ Rails アプリ │ ← あなたのコード    │
│ │ portfolio   │                   │
│ └─────────────┘                   │
│                                   │
│ bin/rails server 実行中            │
│ http://localhost:3000             │
└─────────────────────────────────────┘

つまり、あなたのPCには以下が揃っています: - Ruby言語: Railsを動かすためのプログラミング言語 - データベース: ユーザー情報や投稿データを保存する場所 - アプリケーションサーバー: RailsコードをWebサーバーとして動かすソフト - あなたのRailsコード: controllers、models、viewsなど

リモート環境(クラウドサーバー)に必要なもの

デプロイとは、この構成を全く同じようにクラウド上に再現することです。

クラウドサーバー(リモート環境)
┌─────────────────────────────────────┐
│ ┌─────────────┐                   │
│ │   Ruby      │ ← 同じバージョン     │
│ │   3.3.8     │   が必要            │
│ └─────────────┘                   │
│ ┌─────────────┐                   │
│ │ PostgreSQL  │ ← 本番用DB         │
│ │ production  │   SQLiteは使えない  │
│ └─────────────┘                   │
│ ┌─────────────┐                   │
│ │    Puma     │ ← 同じアプリサーバー │
│ │ (本番設定)   │                   │
│ └─────────────┘                   │
│ ┌─────────────┐                   │
│ │   Nginx     │ ← Webサーバー      │
│ │ (リバース    │   (高速化のため)    │
│ │  プロキシ)   │                   │
│ └─────────────┘                   │
│ ┌─────────────┐                   │
│ │ Rails アプリ │ ← あなたのコードを  │
│ │ portfolio   │   コピー            │
│ └─────────────┘                   │
│                                   │
│ 24時間365日稼働                    │
│ https://your-app.onrender.com     │
└─────────────────────────────────────┘

HTMLアップロードとの決定的な違い

多くの人が最初に混乱するのは、「HTMLファイルのアップロードと何が違うの?」という点です。

HTMLファイルのアップロード

あなたのPC                  レンタルサーバー
┌─────────────┐            ┌─────────────┐
│ index.html  │    FTP     │ index.html  │
│ style.css   │ ─────────→ │ style.css   │  
│ script.js   │            │ script.js   │
└─────────────┘            └─────────────┘
                                 ↓
                    ┌─────────────────────┐
                    │ Apache/Nginx が     │
                    │ ファイルをそのまま   │
                    │ ブラウザに送信       │
                    └─────────────────────┘

この場合、サーバーに必要なのはWebサーバー(Apache/Nginx)だけです。ファイルを置けば、すぐに公開できます。

Railsアプリのデプロイ

あなたのPC                  クラウドサーバー
┌─────────────┐            ┌─────────────────────────┐
│ Rails       │    Git     │ 1. Ruby環境構築          │
│ ソースコード │ ─────────→ │ 2. データベースセットアップ│
│             │            │ 3. ライブラリインストール │
│             │            │ 4. アプリケーション配置   │
│             │            │ 5. Webサーバー設定       │
│             │            │ 6. 全体の起動と連携      │
└─────────────┘            └─────────────────────────┘
                                       ↓
                           ┌─────────────────────────┐
                           │ ユーザーリクエスト       │
                           │          ↓              │
                           │ Nginx → Puma → Rails   │
                           │          ↓              │
                           │ データベースアクセス     │
                           │          ↓              │
                           │ 動的ページ生成・返却     │
                           └─────────────────────────┘

Railsアプリの場合、複数のソフトウェアが連携して動作する必要があります。そのため、単純なファイルコピーではなく、環境全体の構築が必要になるのです。

現代のデプロイサービスが解決してくれること

「こんな複雑な環境構築、初心者には無理でしょ?」と思うかもしれません。

でも大丈夫です。Render.comのような現代のクラウドサービスが、これらの複雑な作業を全て自動化してくれます。

私たちがやること          Render.comが自動でやってくれること
┌─────────────────┐      ┌─────────────────────────────┐
│ 1. 設定ファイル準備│      │ 1. Ruby環境の構築            │
│ 2. GitHubアップロード│ ──→ │ 2. PostgreSQLの作成・設定     │
│ 3. Render.com設定 │      │ 3. Nginx + Pumaの設定       │
│ 4. デプロイボタン  │      │ 4. SSL証明書の設定          │
└─────────────────┘      │ 5. ドメインの設定           │
                        │ 6. 監視・自動復旧の設定      │
                        └─────────────────────────────┘

この記事では、その「設定ファイルの準備」を中心に、初心者でも確実にデプロイできる方法を説明していきます!


1. なぜRender.comを選んだのか?デプロイサービスの現状

1.1 Herokuの有料化で選択肢を探すことに

以前はRailsのデプロイといえば「Heroku」が定番でした。初心者でも無料で簡単にデプロイできるということで、多くのプログラミングスクールや教材でも使われていたんです。ところが2022年11月に、Herokuの無料プランが終了してしまいました。

Herokuの変化
2022年10月まで          2022年11月以降
┌─────────────┐        ┌─────────────┐
│ ✅ 無料プラン │   →   │ ❌ 有料のみ  │
│ ✅ 簡単設定  │        │ ✅ 簡単設定  │
│ ✅ 初心者向け │        │ 💰 月$7〜   │
└─────────────┘        └─────────────┘

そこで「じゃあ、他にどんな選択肢があるの?」ということになったわけです。調べてみると、いくつかの有力な候補が見つかりました。Railway.appはシンプルで使いやすいのですが、無料枠が少し制限的です。Fly.ioは高性能で評判も良いのですが、設定がやや複雑で初心者には少しハードルが高い感じがしました。

1.2 Render.comの評判を調べてみた

実際にRender.comの評判を調べてみると、かなり良好でした。日本語ブログでも「Herokuの代替として最適」という記事が多数見つかりましたし、「設定が簡単」「無料プランでも実用的」という声が目立ちました。

評価ポイント比較
┌─────────────────┬─────────┬─────────┬─────────┐
│      項目        │Render.com│Railway  │ Fly.io  │
├─────────────────┼─────────┼─────────┼─────────┤
│ 設定の簡単さ      │   ⭐⭐⭐   │  ⭐⭐⭐   │   ⭐⭐    │
│ 無料枠の充実度    │   ⭐⭐⭐   │   ⭐⭐    │   ⭐⭐    │
│ Rails対応       │   ⭐⭐⭐   │   ⭐⭐    │   ⭐⭐    │
│ 日本語情報       │    ⭐⭐    │    ⭐     │    ⭐     │
│ 初心者向け       │   ⭐⭐⭐   │   ⭐⭐    │    ⭐     │
└─────────────────┴─────────┴─────────┴─────────┘

最終的にRender.comを選んだ理由は、初心者にとって一番ハードルが低いと判断したからです。別に営業されたわけでも、アフィリエイト収入があるわけでもありません。純粋に「初心者が一番つまずきにくそう」という観点で選択しました。


2. 【重要】GitHubとの連動について理解しよう

2.1 Render.comの最大の特徴:自動デプロイ

実は、Render.comの一番便利な機能は「GitHubと連動した自動デプロイ」なんです。これを最初に理解しておくと、後の作業がスムーズになります。

従来のデプロイ方法だと、コードを変更するたびに手動でサーバーにアップロードする必要がありました。でもRender.comなら、GitHubにpushするだけで自動的にデプロイされます。

従来の手動デプロイ vs Render.comの自動デプロイ
┌─────────────────────┐    ┌─────────────────────┐
│    従来の方法        │    │   Render.comの方法   │
│                    │    │                    │
│ 1. コード修正       │    │ 1. コード修正       │
│ 2. ファイル圧縮      │    │ 2. git add .       │
│ 3. FTPアップロード   │    │ 3. git commit      │
│ 4. サーバー設定変更  │    │ 4. git push        │
│ 5. サービス再起動    │    │      ↓             │
│                    │    │ 5. 🤖 自動デプロイ   │
│ 😰 毎回手作業で面倒  │    │ 😊 pushするだけ!   │
└─────────────────────┘    └─────────────────────┘

2.2 具体的な連動の仕組み

GitHubとRender.comを連携すると、以下のような流れで自動デプロイが実行されます:

自動デプロイの仕組み
┌─────────────────────────────────────────────────┐
│ 👨‍💻 あなた(開発者)                               │
│ ┌─────────────────────────────────────────────┐ │
│ │ 1. ローカルでコード修正                     │ │
│ │ 2. git add . && git commit                 │ │
│ │ 3. git push origin main                    │ │
│ └─────────────────────────────────────────────┘ │
│                      ↓                         │
│ 🐙 GitHub                                      │
│ ┌─────────────────────────────────────────────┐ │
│ │ main ブランチが更新された!                 │ │
│ │ Render.comに「更新されたよ」と通知          │ │
│ └─────────────────────────────────────────────┘ │
│                      ↓                         │
│ 🚀 Render.com                                  │
│ ┌─────────────────────────────────────────────┐ │
│ │ 「お、更新されたな。デプロイ開始!」        │ │
│ │ 1. 最新コードをGitHubから取得               │ │
│ │ 2. bin/render-build.sh 実行                │ │
│ │ 3. アプリケーション再起動                   │ │
│ │ 4. デプロイ完了!                           │ │
│ └─────────────────────────────────────────────┘ │
│                      ↓                         │
│ 🌐 本番環境                                    │
│ ┌─────────────────────────────────────────────┐ │
│ │ https://your-app.onrender.com              │ │
│ │ 新しいバージョンが公開される                │ │
│ └─────────────────────────────────────────────┘ │
└─────────────────────────────────────────────────┘

2.3 これは「継続的デプロイメント(CD)」という仕組み

この仕組みは、プロの開発現場でも使われている「継続的デプロイメント(Continuous Deployment, CD)」という手法です。コードの変更が自動的に本番環境に反映されるので、開発スピードが格段に向上します。

継続的デプロイメントの利点
┌─────────────────────────────────────────────────┐
│ ✅ 手動作業の削減                               │
│    git push するだけでデプロイ完了              │
│                                                │
│ ✅ ヒューマンエラーの防止                       │
│    毎回同じ手順で自動実行されるため安全         │
│                                                │
│ ✅ 迅速なフィードバック                         │
│    数分でユーザーに新機能を届けられる           │
│                                                │
│ ✅ 開発に集中できる                             │
│    デプロイ作業にかかる時間を開発に充てられる   │
└─────────────────────────────────────────────────┘

2.4 「デプロイボタン」はいつ使うの?

Render.comには手動でデプロイを実行する「Manual Deploy」ボタンもありますが、これは以下の場面でのみ使用します:

  • 初回のデプロイ時(GitHubとの連携設定完了後)
  • 環境変数を変更した後に強制的に再起動したい時
  • 何らかの理由で自動デプロイが失敗した時の手動リトライ

基本的には、普段の開発では git push するだけで自動デプロイされるので、手動ボタンを押す必要はありません。


3. 【事前準備】Render.comアカウントを作成しよう

2.1 Render.comにサインアップ

まず https://render.com にアクセスしてください。サインアップ方法は2つあります。

サインアップ方法の選択
┌─────────────────────┐    ┌─────────────────────┐
│   GitHubサインアップ   │    │  メールサインアップ    │
│  ┌─────────────────┐ │    │ ┌─────────────────┐ │
│  │ ✅ 設定が早い     │ │    │ │ ✅ 既存アカウント不要│ │
│  │ ✅ パスワード不要  │ │    │ │ ❌ メール認証必要   │ │
│  │ ✅ 連携が楽      │ │    │ │ ❌ パスワード管理   │ │
│  └─────────────────┘ │    │ └─────────────────┘ │
│        おすすめ!       │    │                    │
└─────────────────────┘    └─────────────────────┘

私はGitHubアカウントでのサインアップをお勧めしています。理由は、後でリポジトリ連携が楽になることと、パスワードを新たに覚える必要がないことです。

2.2 アカウント作成の流れ

GitHubサインアップの流れ
┌─────────────────────────────────────────────────┐
│ 1. "Sign up with GitHub" クリック                │
│                    ↓                            │
│ 2. GitHubにログイン                             │
│                    ↓                            │
│ 3. Render.comへのアクセス許可                    │
│                    ↓                            │
│ 4. ダッシュボード表示 → 完了!                   │
└─────────────────────────────────────────────────┘

認証が完了すると、Render.comのダッシュボードが表示されます。「Welcome to Render」のような画面が表示されれば、アカウント作成は成功です。


3. 【準備編】Railsアプリをデプロイ用に設定しよう

3.1 プロジェクト構造の確認

まず、あなたのRailsプロジェクトがどんな構成になっているか確認しましょう。

ls -la

実行すると、プロジェクトの構成が2つのパターンのいずれかになっているはずです。

パターン1: シンプル構成          パターン2: 入れ子構成
portfolio/                     portfolio/
├── Gemfile  ← ここにある        ├── portfolio_rails/  ← この中にRailsアプリ
├── app/                       │   ├── Gemfile  ← ここにある
├── config/                    │   ├── app/
└── ...                        │   └── config/
                               ├── images/
                               └── js/

3.2 デプロイ用スクリプトを作成しよう

なぜスクリプトが必要なのか?

Render.comは「様々な言語のアプリを動かせる汎用的なクラウドサービス」です。そのため、Render.comは「あなたのRailsアプリをどうやって動かすか」を知りません。

Render.comの立場
┌─────────────────────────────────────────────────┐
│ Render.com: 「コードは受け取ったけど...」         │
│                                                │
│ 🤔 「これはRailsアプリらしいけど」               │
│ 🤔 「どうやって動かせばいいの?」               │
│ 🤔 「どんな準備が必要なの?」                   │
│                                                │
│ そこで必要になるのが「作業手順書」               │
│                ↓                              │
│ 📝 bin/render-build.sh                         │
│    「こんな手順でアプリを動かしてください」      │
└─────────────────────────────────────────────────┘

いつ・どこで実行されるのか?

このスクリプトは、Render.comのサーバー上で、デプロイ時に自動実行されます。

デプロイ時の実行タイミング
┌─────────────────────────────────────────────────┐
│ あなたがデプロイボタンを押す                     │
│                ↓                              │
│ Render.comサーバー内で以下が順番に実行:         │
│                                                │
│ 1. GitHubからコードをダウンロード               │
│ 2. 📝 bin/render-build.sh を実行  ← ここ!      │
│    └── bundle install                         │
│    └── assets:precompile                      │
│    └── assets:clean                           │
│    └── db:migrate                             │
│ 3. bin/rails server で起動                     │
│                ↓                              │
│ デプロイ完了!アプリが公開される                 │
└─────────────────────────────────────────────────┘

Build Commandとの関係

後ほどRender.comの設定で「Build Command」に bin/render-build.sh を指定します。これにより、Render.comは「アプリを動かす前に、このスクリプトを実行すればいいんだな」と理解できるようになります。

設定の流れ
┌─────────────────────────────────────────────────┐
│ 1. 今: スクリプトファイルを作成                  │
│    bin/render-build.sh                         │
│                ↓                              │
│ 2. 後: Render.comの設定画面で指定               │
│    Build Command: bin/render-build.sh          │
│                ↓                              │
│ 3. デプロイ時: Render.comが自動実行             │
│    「このスクリプトを実行してからアプリ起動」    │
└─────────────────────────────────────────────────┘

では、実際にファイルを作成しましょう:

touch bin/render-build.sh

次に、以下の内容をファイルに書き込みます:

#!/usr/bin/env bash
set -o errexit

bundle install
bin/rails assets:precompile
bin/rails assets:clean
bin/rails db:migrate

各コマンドの役割を図解で説明しますね:

デプロイスクリプトの実行フロー
┌─────────────────────────────────────────────────┐
│ bundle install                                 │
│ ┌─────────────────────────────────────────────┐ │
│ │ Gemfile → 必要なライブラリをダウンロード      │ │
│ │ 料理の材料を買い揃える                      │ │
│ └─────────────────────────────────────────────┘ │
│                    ↓                           │
│ bin/rails assets:precompile                    │
│ ┌─────────────────────────────────────────────┐ │
│ │ CSS・JS → 最適化・圧縮                      │ │
│ │ 料理を美しく盛り付ける                      │ │
│ └─────────────────────────────────────────────┘ │
│                    ↓                           │
│ bin/rails assets:clean                         │
│ ┌─────────────────────────────────────────────┐ │
│ │ 古いファイル → 削除                         │ │
│ │ 使わなくなったものを捨てる                  │ │
│ └─────────────────────────────────────────────┘ │
│                    ↓                           │
│ bin/rails db:migrate                           │
│ ┌─────────────────────────────────────────────┐ │
│ │ データベース → 最新構造に更新               │ │
│ │ 倉庫の棚を整理整頓                          │ │
│ └─────────────────────────────────────────────┘ │
└─────────────────────────────────────────────────┘

ファイルを保存したら、実行権限を付与します:

chmod +x bin/render-build.sh

3.3 SQLiteからPostgreSQLに対応させよう

なぜPostgreSQLが必要かというと、クラウドサービス(Render.com)では、SQLiteが使えないからです。

データベースの違い
┌─────────────────────┐    ┌─────────────────────┐
│      SQLite         │    │    PostgreSQL       │
│  ┌───────────────┐   │    │ ┌─────────────────┐ │
│  │ 📁 ファイル型  │   │    │ │ 🏢 サーバー型    │ │
│  │ 1人用の本棚   │   │    │ │ 図書館システム   │ │
│  │ 開発向け      │   │    │ │ 本番運用向け     │ │
│  │ 軽量・簡単     │   │    │ │ 高性能・多機能   │ │
│  └───────────────┘   │    │ └─────────────────┘ │
│    ローカル環境で使用    │    │   本番環境で使用     │
└─────────────────────┘    └─────────────────────┘

現在のGemfileを修正して、環境に応じて使い分けるようにします:

group :development, :test do
  gem 'sqlite3'  # 家庭用(あなたのPC)では小さな冷蔵庫
end

group :production do
  gem 'pg'  # レストラン(本番環境)では大きな冷蔵庫
end

bundle install

database.ymlを設定しよう

database.ymlは「どのデータベースを使うか」を決める設定ファイルです。

cat config/database.yml

現在のproduction設定を以下に置き換えてください:

production:
  primary:
    adapter: postgresql
    encoding: unicode
    pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
    url: <%= ENV['DATABASE_URL'] %>
  cache:
    adapter: postgresql
    encoding: unicode
    pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
    url: <%= ENV['DATABASE_URL'] %>
    migrations_paths: db/cache_migrate
  queue:
    adapter: postgresql
    encoding: unicode
    pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
    url: <%= ENV['DATABASE_URL'] %>
    migrations_paths: db/queue_migrate
  cable:
    adapter: postgresql
    encoding: unicode
    pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
    url: <%= ENV['DATABASE_URL'] %>
    migrations_paths: db/cable_migrate

Rails 8では、1つのアプリで複数の機能を使うため、それぞれ専用のデータベース接続が必要なんです:

Rails 8のマルチデータベース構成
┌─────────────────────────────────────────────────┐
│                Railsアプリ                      │
│ ┌─────────┐ ┌─────────┐ ┌─────────┐ ┌─────────┐ │
│ │primary  │ │ cache   │ │ queue   │ │ cable   │ │
│ │メインDB │ │キャッシュ│ │ジョブ管理│ │WebSocket│ │
│ │ユーザー │ │一時保存 │ │非同期処理│ │リアルタイム│ │
│ │投稿データ│ │高速化   │ │時間のかかる│ │通信     │ │
│ └─────────┘ └─────────┘ │処理     │ └─────────┘ │
│                      └─────────┘              │
└─────────────────────────────────────────────────┘

3.4 Rails認証キーの準備

Railsは重要なデータを暗号化するために、秘密の鍵を使用します。現在のmaster.keyを確認してみましょう:

cat config/master.key

正常な場合は32文字程度が表示されます。異常に長い場合は再生成が必要です:

master.keyの状態チェック
┌─────────────────────┐    ┌─────────────────────┐
│   正常(32文字)      │    │   異常(128文字〜)   │
│ a1b2c3d4e5f6g7h8... │    │ bb4b4a1fb69cafe5... │
│        ↓            │    │        ↓            │
│    そのまま使用      │    │      再生成必要      │
└─────────────────────┘    └─────────────────────┘

再生成が必要な場合:

# 古いファイルを削除
rm config/master.key config/credentials.yml.enc

# 新しい認証情報を生成
EDITOR="code --wait" bin/rails credentials:edit

3.5 変更をGitHubにアップロードしよう

これまでの変更をGitHubに保存しましょう。Gitの操作フローを図解で説明します:

Git操作の流れ
┌─────────────────────────────────────────────────┐
│ 1. git status  → 変更ファイルを確認             │
│                                                │
│ 2. git add .   → ステージングエリアに追加       │
│    ┌─────────────────┐  add   ┌──────────────┐ │
│    │ ワーキング      │ ────→  │ステージング   │ │
│    │ ディレクトリ    │        │エリア        │ │
│    └─────────────────┘        └──────────────┘ │
│                                                │
│ 3. git commit  → ローカルリポジトリに記録       │
│    ┌──────────────┐  commit  ┌──────────────┐ │
│    │ステージング  │ ────────→ │ローカル      │ │
│    │エリア        │          │リポジトリ    │ │
│    └──────────────┘          └──────────────┘ │
│                                                │
│ 4. git push    → GitHubに送信                  │
│    ┌──────────────┐   push   ┌──────────────┐ │
│    │ローカル      │ ────────→ │GitHub        │ │
│    │リポジトリ    │          │リポジトリ    │ │
│    └──────────────┘          └──────────────┘ │
└─────────────────────────────────────────────────┘

実際のコマンド実行:

git status
git add .
git commit -m "Configure for Render.com deployment"
git push origin main


4. 【Render.com設定編】データベースとアプリを作成しよう

4.1 PostgreSQLデータベースを作成しよう

Render.comでは、まずデータベースを作ってから、Webアプリを作成します。

作成順序が重要な理由
┌─────────────────────────────────────────────────┐
│ 1. データベース作成(倉庫を借りる)               │
│    ┌─────────────────────────────────────────┐   │
│    │ 🏪 PostgreSQL Database                 │   │
│    │ データを保存する倉庫                    │   │
│    └─────────────────────────────────────────┘   │
│                      ↓                         │
│ 2. Webアプリ作成(レストランを開店)             │
│    ┌─────────────────────────────────────────┐   │
│    │ 🍽️ Rails Web App                       │   │
│    │ 倉庫にアクセスするレストラン             │   │
│    └─────────────────────────────────────────┘   │
└─────────────────────────────────────────────────┘

まず https://dashboard.render.com にログインして、「New」→「PostgreSQL」を選択します。

設定項目: - Name: portfolio-database - Region: Singapore(日本に最も近い) - Instance Type: Free

Regionの選択理由
┌─────────────────────────────────────────────────┐
│              世界地図                            │
│                                                │
│     🇺🇸 Oregon   🇸🇬 Singapore   🇪🇺 Frankfurt    │
│      (遠い)       (近い!)        (遠い)       │
│                                                │
│ 🇯🇵 日本からの距離と速度:                        │
│ Oregon    : 約9,000km  → 遅い                  │
│ Singapore : 約5,000km  → 速い ⭐               │
│ Frankfurt : 約9,000km  → 遅い                  │
└─────────────────────────────────────────────────┘

4.2 データベース接続情報を取得しよう

データベースが作成できたら、「住所」を取得します。

データベース接続情報の取得
┌─────────────────────────────────────────────────┐
│ 1. 作成したデータベースをクリック                │
│                      ↓                         │
│ 2. 「Connections」タブをクリック                │
│                      ↓                         │
│ 3. 「Internal Database URL」をコピー 📋         │
│   postgres://user:pass@host:port/db            │
│                      ↓                         │
│ 4. 後でWebアプリの環境変数に設定                 │
└─────────────────────────────────────────────────┘


5. 【いよいよ本番】Webサービスを作成してデプロイしよう!

5.1 GitHubリポジトリと連携しよう

GitHubとRender.comの連携
┌─────────────────────────────────────────────────┐
│ GitHub Repository                               │
│ ┌─────────────────────────────────────────────┐ │
│ │ 📁 portfolio                               │ │
│ │   ├── app/                                │ │
│ │   ├── config/                             │ │
│ │   ├── Gemfile                             │ │
│ │   └── bin/render-build.sh                 │ │
│ └─────────────────────────────────────────────┘ │
│                      ↓ 連携                    │
│ Render.com                                     │
│ ┌─────────────────────────────────────────────┐ │
│ │ 🚀 Web Service                             │ │
│ │   コードを自動取得してデプロイ              │ │
│ └─────────────────────────────────────────────┘ │
└─────────────────────────────────────────────────┘

Dashboard画面で「New」→「Web Service」→「Git Provider」を選択し、portfolioリポジトリを見つけてクリックします。

5.2 重要設定項目

Root Directoryの設定は、プロジェクト構造によって変わります:

Root Directory設定
┌─────────────────────┐    ┌─────────────────────┐
│  シンプル構成        │    │   入れ子構成         │
│                    │    │                    │
│ portfolio/         │    │ portfolio/         │
│ ├── Gemfile ⭐     │    │ ├── portfolio_rails/│
│ ├── app/           │    │ │   ├── Gemfile ⭐  │
│ └── config/        │    │ │   └── app/        │
│                    │    │ └── images/        │
│ Root Directory:    │    │ Root Directory:    │
│ 空欄のまま          │    │ portfolio_rails    │
└─────────────────────┘    └─────────────────────┘

5.3 環境変数を設定しよう

環境変数は「秘密の設定情報」を保存する場所です。

環境変数の役割
┌─────────────────────────────────────────────────┐
│                                                │
│ DATABASE_URL     = 倉庫の住所 🏪                │
│ RAILS_MASTER_KEY = 金庫の鍵 🔐                 │
│ WEB_CONCURRENCY  = スタッフ数 👥 (2人)          │
│                                                │
│ ┌─────────────────────────────────────────────┐ │
│ │              安全な金庫                      │ │
│ │ 🔒 誰にも見えない場所に保管                  │ │
│ │    アプリが起動時に自動で取得               │ │
│ └─────────────────────────────────────────────┘ │
└─────────────────────────────────────────────────┘

設定する3つの環境変数:

  1. DATABASE_URL: 先ほどコピーしたInternal Database URL
  2. RAILS_MASTER_KEY: config/master.keyの内容(32文字)
  3. WEB_CONCURRENCY: 2

5.4 いよいよデプロイ!

すべての設定ができたら、「Deploy Web Service」ボタンをクリックしてください。


6. 【ドキドキの瞬間】デプロイログを見守ろう

6.1 デプロイの流れを理解しよう

デプロイが開始されると、リアルタイムでログが表示されます。これは、レストランの開店準備を実況中継で見ているようなものです。

デプロイの7段階プロセス
┌─────────────────────────────────────────────────┐
│ 1. 📥 ソースコードクローン                       │
│    GitHubからレシピ本をコピー                   │
│                      ↓                         │
│ 2. 🛠️ Ruby環境セットアップ                      │
│    調理器具(コンロ・オーブン)を準備           │
│                      ↓                         │
│ 3. 📦 bundle install                           │
│    レシピの材料を全部買い揃える                 │
│                      ↓                         │
│ 4. 📝 ビルドスクリプト実行                       │
│    作業手順書に従って下準備開始                 │
│                      ↓                         │
│ 5. 🎨 アセットプリコンパイル                     │
│    料理を美しく盛り付ける                       │
│                      ↓                         │
│ 6. 🗃️ データベースマイグレーション              │
│    倉庫の棚を整理整頓                           │
│                      ↓                         │
│ 7. 🚀 サーバー起動                              │
│    レストラン開店!看板点灯                     │
└─────────────────────────────────────────────────┘

6.2 成功の確認

デプロイが成功すると:

成功時の表示
┌─────────────────────────────────────────────────┐
│ ✅ ステータス: Live                             │
│ 🟢 緑色のチェックマーク                         │
│ 🌐 https://portfolio-app.onrender.com          │
│                                                │
│    これがあなた専用のURLです!                  │
└─────────────────────────────────────────────────┘

6.3 初回アクセス時の注意

無料プランでは、アプリがスリープする仕組みがあります:

スリープ機能の仕組み
┌─────────────────────────────────────────────────┐
│ 15分間アクセスなし                              │
│           ↓                                   │
│ 😴 アプリがスリープ                             │
│   (節電のため自動停止)                        │
│           ↓                                   │
│ 👤 誰かがアクセス                               │
│           ↓                                   │
│ ⏰ 30秒〜1分で起動                              │
│           ↓                                   │
│ ✅ 通常通り動作                                 │
└─────────────────────────────────────────────────┘


7. 【トラブルシューティング】「うまくいかない!」時の対処法

7.1 よくあるエラーと対処法

初心者の方がよく遭遇するエラーパターンを図解で説明します:

トラブルシューティングの3段階アプローチ
┌─────────────────────────────────────────────────┐
│ レベル1: 基本確認 🔍                            │
│ ┌─────────────────────────────────────────────┐ │
│ │ ✓ GitHubリポジトリ最新?                   │ │
│ │ ✓ Root Directory正しい?                   │ │
│ │ ✓ 環境変数3つ設定済み?                    │ │
│ └─────────────────────────────────────────────┘ │
│                      ↓                         │
│ レベル2: 詳細確認 🔧                            │
│ ┌─────────────────────────────────────────────┐ │
│ │ ✓ RAILS_MASTER_KEY は32文字?              │ │
│ │ ✓ DATABASE_URL にスペース入ってない?      │ │
│ │ ✓ DBとWebサービス同じRegion?              │ │
│ └─────────────────────────────────────────────┘ │
│                      ↓                         │
│ レベル3: ログ確認 📋                            │
│ ┌─────────────────────────────────────────────┐ │
│ │ ✓ 手動再デプロイを試す                     │ │
│ │ ✓ エラーメッセージを特定                   │ │
│ │ ✓ Google検索で解決策を探す                 │ │
│ └─────────────────────────────────────────────┘ │
└─────────────────────────────────────────────────┘

7.2 具体的なエラー対処法

「bin/render-build.sh: No such file or directory」

問題: 作業手順書が見つからない
┌─────────────────────────────────────────────────┐
│ Render.com: 「手順書を見せて」                   │
│                ↓                              │
│ あなたのリポジトリ: 「手順書がない...」          │
│                                                │
│ 解決策:                                        │
│ 1. ファイル作成: touch bin/render-build.sh      │
│ 2. 内容記述: (前述のスクリプト)                  │
│ 3. 権限付与: chmod +x bin/render-build.sh       │
│ 4. Git push: GitHubにアップロード               │
└─────────────────────────────────────────────────┘

「pg is not part of the bundle」

問題: PostgreSQL用の道具がない
┌─────────────────────────────────────────────────┐
│ Rails: 「PostgreSQLという道具を使いたい」        │
│                ↓                              │
│ Gemfile: 「その道具は登録されてません」          │
│                                                │
│ 解決策:                                        │
│ 1. Gemfile修正: production group に gem 'pg'    │
│ 2. bundle install                             │
│ 3. Git push                                   │
└─────────────────────────────────────────────────┘


8. 【祝!完成】アプリが公開されました!

8.1 あなたのアプリが世界デビュー!

おめでとうございます!あなたのRailsアプリが、ついにインターネット上で公開されました!

世界中からアクセス可能!
┌─────────────────────────────────────────────────┐
│              🌍 世界地図                         │
│                                                │
│ 🇯🇵 日本    🇺🇸 アメリカ    🇪🇺 ヨーロッパ      │
│  👤         👤👤         👤👤👤               │
│  │          │ │          │ │ │                │
│  └──────────┼─┼──────────┼─┼─┼────────────────┐ │
│             │ │          │ │ │                │ │
│             ↓ ↓          ↓ ↓ ↓                │ │
│ ┌─────────────────────────────────────────────┐ │ │
│ │ 🚀 https://portfolio-app.onrender.com      │ │ │
│ │    あなたのRailsアプリ                      │ │ │
│ └─────────────────────────────────────────────┘ │ │
│                                              │ │
│ 24時間365日アクセス可能!                     │ │
└──────────────────────────────────────────────────┘

8.2 今後のアップデート方法

新機能を追加したい時の流れ:

継続的デプロイメントの流れ
┌─────────────────────────────────────────────────┐
│ 1. 💻 ローカルで開発                             │
│    新機能を追加・テスト                         │
│                      ↓                         │
│ 2. 📝 Git コミット                              │
│    git add . && git commit -m "新機能追加"      │
│                      ↓                         │
│ 3. 📤 GitHub プッシュ                           │
│    git push origin main                        │
│                      ↓                         │
│ 4. 🔄 自動再デプロイ                             │
│    Render.comが変更を検知して自動更新           │
│                      ↓                         │
│ 5. ✅ 本番環境更新完了                           │
│    新機能が世界中で利用可能!                   │
└─────────────────────────────────────────────────┘

8.3 無料プランの特徴

知っておきたい無料プランの制限:

無料プラン vs 有料プラン
┌─────────────────────┐    ┌─────────────────────┐
│    無料プラン        │    │    有料プラン        │
│ ┌─────────────────┐ │    │ ┌─────────────────┐ │
│ │ 💤 スリープ機能   │ │    │ │ ⚡ 常時起動      │ │
│ │ 15分で休眠       │ │    │ │ 24時間稼働      │ │
│ │ 起動に30秒〜1分  │ │    │ │ 即座にレスポンス │ │
│ │ 月750時間制限    │ │    │ │ 無制限          │ │
│ │ 基本SSL対応      │ │    │ │ カスタムドメイン │ │
│ └─────────────────┘ │    │ └─────────────────┘ │
│      月 $0          │    │     月 $7〜         │
└─────────────────────┘    └─────────────────────┘


まとめ - あなたもデプロイマスターです!

お疲れさまでした!この記事を最後まで読んで、実際にデプロイを成功させたあなたは、もう立派な「デプロイできる開発者」です。

今日学んだことの振り返り

習得したスキル一覧
┌─────────────────────────────────────────────────┐
│ ✅ デプロイとは何かの基本概念                    │
│    HTMLアップロードとの違いを理解               │
│                                                │
│ ✅ SQLite→PostgreSQL対応                       │
│    本番環境用データベース設定                   │
│                                                │
│ ✅ Linuxコマンドの基本                          │
│    touch, chmod, cat, git など                 │
│                                                │
│ ✅ Render.comでのサービス作成                   │
│    データベース&Webアプリケーション           │
│                                                │
│ ✅ 環境変数の重要性                             │
│    秘密情報の安全な管理                         │
│                                                │
│ ✅ エラー解決力                                 │
│    ログを読んで問題を特定・解決                 │
└─────────────────────────────────────────────────┘

次のステップ

更なるスキルアップの道
┌─────────────────────────────────────────────────┐
│ 📈 Level 1: 基本デプロイ(今ここ!)             │
│    ├── Render.comデプロイ成功                   │
│    └── 基本的なトラブル解決                     │
│                      ↓                         │
│ 🚀 Level 2: 応用デプロイ                        │
│    ├── カスタムドメイン設定                     │
│    ├── CI/CDパイプライン構築                    │
│    └── パフォーマンス最適化                     │
│                      ↓                         │
│ 🌟 Level 3: 本格運用                           │
│    ├── 監視・ログ管理                           │
│    ├── スケーリング対応                         │
│    └── セキュリティ強化                         │
└─────────────────────────────────────────────────┘

「最初は難しそうって思ったけど、意外とできた!」と感じられたのではないでしょうか。そうなんです。デプロイって、手順を知ってしまえば意外と簡単なんです。コマンドも、何をしているかが分かれば怖くありません。

あなたのRails開発ライフがより楽しくなることを願っています!

参考リンク

もっと詳しく学びたい方は、以下のリンクも参考にしてください。

次に読みたい記事

  • 「Rails アプリにカスタムドメインを設定しよう」- 独自ドメインでより本格的に
  • 「CI/CDパイプラインでより効率的なデプロイを」- 自動テスト&デプロイの仕組み
  • 「Rails アプリのパフォーマンス改善テクニック」- 高速化と安定性向上

Happy coding! あなたのRailsアプリがたくさんの人に使われることを祈っています! 🎉