Skip to content

HerokuへRailsアプリケーションをデプロイする2025年版ガイド

はじめに

Herokuは、2007年に設立されたPaaS(Platform as a Service)の代表格であり、長年にわたってRailsアプリケーションのデプロイメントにおいて最も人気のあるプラットフォームの一つでした。Git-basedなデプロイメント、アドオンエコシステム、そして開発者フレンドリーなインターフェースで多くの開発者に愛され続けています。

2022年に無料プランが廃止されたものの、Herokuは依然として本格的なWebアプリケーションのホスティングにおいて強力な選択肢です。この記事では、2025年現在のHerokuの料金体系と機能を踏まえ、Rails 7アプリケーションをHerokuにデプロイするための包括的なガイドを提供します。

Herokuを選ぶ理由

メリット

  • Git-basedデプロイ: git push heroku mainだけでデプロイが完了する簡単さ
  • 豊富なアドオンエコシステム: PostgreSQL、Redis、SendGrid、New Relicなど200以上のアドオンが利用可能
  • スケーラビリティ: dynoの追加でアプリケーションを簡単にスケールアップ・アウト可能
  • 開発者体験: 直感的なCLIとWebダッシュボード
  • 確立されたエコシステム: 豊富なドキュメントとコミュニティ

デメリット

  • 料金: 無料プランがなくなり、最低でも月額$5~から
  • パフォーマンス制限: 他のクラウドプロバイダーと比較してコストパフォーマンスが劣る場合がある
  • カスタマイズ性: PaaSの制約により、インフラレベルの細かいカスタマイズは困難

料金プラン(2025年時点)

  • Basic: $5/月 - 1つのdyno、スリープモードなし
  • Standard: $25/月 - より高いリソース、メトリクス機能
  • Performance: $250/月~ - 高性能dyno、優先サポート

デプロイ準備

1. Heroku CLIのインストール

bash
# macOS (Homebrew)
brew tap heroku/brew && brew install heroku

# Ubuntu/Debian
curl https://cli-assets.heroku.com/install.sh | sh

# Windows
# Heroku公式サイトからインストーラーをダウンロード

2. Herokuにログイン

bash
heroku login

3. Railsアプリケーションの準備

Gemfileの設定

本番環境用のGemを追加します:

ruby
# Gemfile
group :production do
  gem 'pg', '~> 1.5' # PostgreSQL
  gem 'redis', '~> 5.0' # Redis(必要に応じて)
end

# 開発環境ではSQLiteを使う場合
group :development, :test do
  gem 'sqlite3', '~> 1.4'
end

database.ymlの設定

yaml
# config/database.yml
production:
  adapter: postgresql
  encoding: unicode
  url: <%= ENV['DATABASE_URL'] %>
  pool: <%= ENV.fetch('RAILS_MAX_THREADS', 5) %>

Procfileの作成

アプリケーションのルートディレクトリにProcfileを作成:

web: bundle exec puma -C config/puma.rb
worker: bundle exec sidekiq

config/puma.rbの設定

ruby
# config/puma.rb
workers Integer(ENV['WEB_CONCURRENCY'] || 2)
threads_count = Integer(ENV['RAILS_MAX_THREADS'] || 5)
threads threads_count, threads_count

preload_app!

rackup      DefaultRackup
port        ENV['PORT']     || 3000
environment ENV['RAILS_ENV'] || 'development'

on_worker_boot do
  # Worker specific setup for Rails 4.1+
  ActiveRecord::Base.establish_connection
end

アセットの事前コンパイル設定

ruby
# config/environments/production.rb
Rails.application.configure do
  # アセットの事前コンパイルを有効化
  config.assets.compile = false
  config.assets.precompile += %w( *.js *.css )
  
  # Force SSL in production
  config.force_ssl = true
end

Herokuアプリケーションの作成とデプロイ

1. Herokuアプリケーションの作成

bash
# アプリケーション名を指定して作成
heroku create your-app-name

# または、自動生成される名前を使用
heroku create

2. アドオンの追加

PostgreSQLデータベース

bash
# 本番用(有料)
heroku addons:create heroku-postgresql:standard-0

# 開発用(より低価格)
heroku addons:create heroku-postgresql:essential-0

Redis(必要に応じて)

bash
heroku addons:create heroku-redis:premium-0

その他の推奨アドオン

bash
# New Relic(アプリケーション監視)
heroku addons:create newrelic:wayne

# SendGrid(メール送信)
heroku addons:create sendgrid:starter

# Papertrail(ログ管理)
heroku addons:create papertrail:choklad

3. 環境変数の設定

bash
# Rails秘密キーの設定
heroku config:set RAILS_MASTER_KEY=$(cat config/master.key)

# その他の環境変数
heroku config:set RAILS_ENV=production
heroku config:set RAILS_LOG_TO_STDOUT=enabled
heroku config:set RAILS_SERVE_STATIC_FILES=enabled

4. デプロイ実行

bash
# Gitコミット
git add .
git commit -m "Prepare for Heroku deployment"

# Herokuにデプロイ
git push heroku main

5. データベースのマイグレーション

bash
heroku run rails db:migrate
heroku run rails db:seed # 必要に応じて

高度な設定

バックグラウンドジョブ(Sidekiq)の設定

Workerプロセスの追加

bash
# Workerプロセスを1つ追加
heroku ps:scale worker=1

Redis設定の確認

ruby
# config/initializers/sidekiq.rb
Sidekiq.configure_server do |config|
  config.redis = { url: ENV['REDIS_URL'] }
end

Sidekiq.configure_client do |config|
  config.redis = { url: ENV['REDIS_URL'] }
end

スケジュールジョブ(Heroku Scheduler)

bash
# Heroku Schedulerアドオンを追加
heroku addons:create scheduler:standard

# スケジューラーのダッシュボードを開く
heroku addons:open scheduler

カスタムドメインの設定

bash
# カスタムドメインを追加
heroku domains:add www.example.com

# SSL証明書を自動管理(ACM)
heroku certs:auto:enable

アプリケーションの監視

Heroku Metrics

bash
# Metricsダッシュボードを開く
heroku addons:open heroku-postgresql

ログの確認

bash
# リアルタイムログ
heroku logs --tail

# 特定の数だけログを取得
heroku logs -n 100

パフォーマンス最適化

1. アセット配信の最適化

ruby
# config/environments/production.rb
config.assets.compress = true
config.assets.js_compressor = :terser
config.assets.css_compressor = :sass

2. データベースコネクションプールの調整

ruby
# config/database.yml
production:
  adapter: postgresql
  encoding: unicode
  url: <%= ENV['DATABASE_URL'] %>
  pool: <%= ENV.fetch('DB_POOL', 25) %>

3. Redisキャッシュの活用

ruby
# config/environments/production.rb
config.cache_store = :redis_cache_store, { url: ENV['REDIS_URL'] }

CI/CDパイプラインの構築

GitHub Actionsとの連携

yaml
# .github/workflows/deploy.yml
name: Deploy to Heroku

on:
  push:
    branches: [ main ]

jobs:
  deploy:
    runs-on: ubuntu-latest
    steps:
    - uses: actions/checkout@v3
    - uses: akhileshns/heroku-deploy@v3.12.12
      with:
        heroku_api_key: ${{secrets.HEROKU_API_KEY}}
        heroku_app_name: "your-app-name"
        heroku_email: "your-email@example.com"

トラブルシューティング

よくある問題と解決法

1. アセットコンパイルエラー

bash
# 手動でアセットをプリコンパイル
heroku run rails assets:precompile

2. データベース接続エラー

bash
# データベースの状態確認
heroku pg:info

# データベースのリセット
heroku pg:reset DATABASE_URL
heroku run rails db:migrate

3. メモリ不足エラー

bash
# dynoのサイズをアップグレード
heroku ps:scale web=1:standard-1x

セキュリティ対策

1. 環境変数の管理

bash
# 機密情報は必ず環境変数で管理
heroku config:set SECRET_KEY_BASE=$(bundle exec rails secret)
heroku config:set API_KEY=your-secret-api-key

2. HTTPS強制

ruby
# config/environments/production.rb
config.force_ssl = true

3. セキュリティヘッダーの設定

ruby
# config/application.rb
config.force_ssl = true
config.ssl_options = { 
  redirect: { exclude: ->(request) { request.path =~ /health/ } }
}

Heroku vs 他のPaaS比較

機能HerokuRenderRailway
最低料金$5/月$7/月$5/月
Git deployment
アドオン数200+制限あり制限あり
カスタムドメイン
自動SSL
プレビュー環境Review Apps

まとめ

Herokuは2025年現在も、Railsアプリケーションのデプロイメントにおいて非常に魅力的な選択肢です。特に以下のような場合にHerokuをお勧めします:

  • 迅速なプロトタイプ開発: アイデアを素早く形にしたい場合
  • アドオンエコシステム活用: 豊富なアドオンを組み合わせて機能を拡張したい場合
  • チーム開発: 複数人でのコラボレーションを重視する場合
  • エンタープライズ要件: SOC2準拠などのコンプライアンス要件がある場合

一方で、コスト効率性を重視する場合や、インフラレベルでの細かいカスタマイズが必要な場合は、DigitalOcean App Platform、Railway、Render.comなどの代替サービスの検討をお勧めします。

Herokuの強みは、10年以上にわたって磨き上げられた開発者体験と、成熟したエコシステムです。適切に設定すれば、スケーラブルで信頼性の高いRailsアプリケーションを運用できるでしょう。

AI が自動生成した技術記事をまとめたテックブログ