Skip Navigation
Show nav
Dev Center
  • Get Started
  • ドキュメント
  • Changelog
  • Search
  • Get Started
    • Node.js
    • Ruby on Rails
    • Ruby
    • Python
    • Java
    • PHP
    • Go
    • Scala
    • Clojure
    • .NET
  • ドキュメント
  • Changelog
  • More
    Additional Resources
    • Home
    • Elements
    • Products
    • Pricing
    • Careers
    • Help
    • Status
    • Events
    • Podcasts
    • Compliance Center
    Heroku Blog

    Heroku Blog

    Find out what's new with Heroku on our blog.

    Visit Blog
  • Log inorSign up
View categories

Categories

  • Heroku のアーキテクチャ
    • Dyno (アプリコンテナ)
      • Dyno Management
      • Dyno Concepts
      • Dyno Behavior
      • Dyno Reference
      • Dyno Troubleshooting
    • スタック (オペレーティングシステムイメージ)
    • ネットワーキングと DNS
    • プラットフォームポリシー
    • プラットフォームの原則
  • Developer Tools
    • コマンドライン
    • Heroku VS Code Extension
  • デプロイ
    • Git を使用したデプロイ
    • Docker によるデプロイ
    • デプロイ統合
  • 継続的デリバリーとインテグレーション
    • 継続的統合
  • 言語サポート
    • Node.js
      • Working with Node.js
      • Node.js Behavior in Heroku
      • Troubleshooting Node.js Apps
    • Ruby
      • Rails のサポート
      • Bundler の使用
      • Working with Ruby
      • Ruby Behavior in Heroku
      • Troubleshooting Ruby Apps
    • Python
      • Working with Python
      • Python でのバックグランドジョブ
      • Python Behavior in Heroku
      • Django の使用
    • Java
      • Java Behavior in Heroku
      • Working with Java
      • Maven の使用
      • Spring Boot の使用
      • Troubleshooting Java Apps
    • PHP
      • PHP Behavior in Heroku
      • Working with PHP
    • Go
      • Go の依存関係管理
    • Scala
    • Clojure
    • .NET
      • Working with .NET
  • データベースとデータ管理
    • Heroku Postgres
      • Postgres の基礎
      • Postgres スターターガイド
      • Postgres のパフォーマンス
      • Postgres のデータ転送と保持
      • Postgres の可用性
      • Postgres の特別なトピック
      • Migrating to Heroku Postgres
    • Heroku Data For Redis
    • Apache Kafka on Heroku
    • その他のデータストア
  • AI
    • Working with AI
    • Heroku Inference
      • Inference API
      • Quick Start Guides
      • AI Models
      • Inference Essentials
    • Vector Database
    • Model Context Protocol
  • モニタリングとメトリクス
    • ログ記録
  • アプリのパフォーマンス
  • アドオン
    • すべてのアドオン
  • 共同作業
  • セキュリティ
    • アプリのセキュリティ
    • ID と認証
      • シングルサインオン (SSO)
    • Private Space
      • インフラストラクチャネットワーキング
    • コンプライアンス
  • Heroku Enterprise
    • Enterprise Accounts
    • Enterprise Team
    • Heroku Connect (Salesforce 同期)
      • Heroku Connect の管理
      • Heroku Connect のリファレンス
      • Heroku Connect のトラブルシューティング
  • パターンとベストプラクティス
  • Heroku の拡張
    • Platform API
    • アプリの Webhook
    • Heroku Labs
    • アドオンのビルド
      • アドオン開発のタスク
      • アドオン API
      • アドオンのガイドラインと要件
    • CLI プラグインのビルド
    • 開発ビルドパック
    • Dev Center
  • アカウントと請求
  • トラブルシューティングとサポート
  • Salesforce とのインテグレーション
  • 言語サポート
  • Ruby
  • Working with Ruby
  • Ruby バージョンの指定

Ruby バージョンの指定

日本語 — Switch to English

最終更新日 2024年03月08日(金)

Table of Contents

  • Ruby のバージョンの選択
  • Ruby のバージョン指定子
  • 環境を使用した Ruby バージョンの指定
  • トラブルシューティング

Ruby のバージョンの選択

ruby​ キーワードを使用するには Bundler 1.2.x​ 以上を、Ruby のバージョン指定子を使用するには Bundler 1.13.x​ 以上をインストールする必要があります。

アプリの Gemfile​ で ruby​ キーワードを使用すると、Ruby の特定のバージョンを指定できます。

source "https://rubygems.org"
ruby "3.2.2"
# ...

Heroku では、アプリで処理できる最新の Ruby バージョンを実行することをお勧めします。Ruby 3.2.2 は最新の Ruby バージョンでない可能性があります。ここではデモンストレーションの目的でのみ使用しています。更新された一覧については、サポートされている Ruby バージョン​を参照してください。

コミットして Heroku にプッシュすると、Ruby 3.2.2​ が検出されたことが表示されます。

-----> Heroku receiving push
-----> Ruby/Rack app detected
-----> Using Ruby version: 3.2.2
-----> Installing dependencies using Bundler version 2.5.6
...

MRI 以外の Ruby エンジンを指定する場合は、:engine​ および :engine_version​ オプションを使用する必要があります。次の行を使用して JRuby を指定できます。

ruby "2.2.2", :engine => "jruby", :engine_version => "9.0.0.0"

使用可能なバージョンの一覧については、Ruby サポート​を参照してください。

Ruby のバージョン指定子

Bundler 1.12​ 以降では、Ruby バージョンにバージョン指定子を使用できます。たとえば、3.2.2​ を使用してデプロイするが、チームの一部のメンバーが 3.2.3​ を使用する必要がある場合は、次を指定して実現できます。

ruby "~> 3.2.2"

これは、x が 2 以上の 3.2.x​ の全バージョンが有効であることを示しています。これを Heroku で機能させるには、3 つのすべての桁を含むフルバージョンを指定する必要があります。たとえば、Heroku では ~> 3.2​ や ~> 3.2.x​ は有効なバージョン指定子ではありません。

Bundler はローカルで使用されている Ruby バージョンを Gemfile.lock​ でロックします。上のシナリオでは、システム上に Ruby 3.2.1​ が存在するユーザーが bundle install​ を実行した場合、そのユーザーは Gemfile.lock で次を受け取ります。

RUBY VERSION
   ruby 3.2.2p53

Gemfile.lock​ のこのバージョンを更新するには、ローカルの Ruby バージョンを変更し、Gemfile​ に ruby​ 宣言があることを確認して次を実行します。

$ bundle update --ruby

Ruby バージョンのロックされたバージョンは常に “受け入れられ” ます。そのため、チームの別のメンバーが異なる Ruby バージョンを使用している場合、そのメンバーは Gemfile.lock​ に間違ったバージョンをコミットしないように注意する必要があります。

Heroku で使用されるバージョンがわからない場合は、次のコマンドをローカルで実行して確認できます。

$ bundle platform --ruby

環境を使用した Ruby バージョンの指定

Bundler 2.3 以前を使用している場合は、環境変数を使用して Ruby のバージョンを設定できます。Gemfile​は Ruby コードで構成されているため、環境で Ruby バージョンを指定することもできます。次に例を示します。

ruby ENV['CUSTOM_RUBY_VERSION'] || '2.5.1'

環境変数を変更しても、アプリは再コンパイルされません。Ruby は各 slug にベンダリングされるため、この方法を使用して Ruby バージョンの変更を有効にするには、アプリを再度デプロイする必要があります。

これにより、CUSTOM_RUBY_VERSION​ 環境変数で Ruby バージョンを指定できます。この変数が設定されていない場合は、デフォルトで 2.5.1​ になります。これは、継続的インテグレーションツールでアプリを実行しており、それによりコードベースが他のバージョンの Ruby に対して確実にチェックされるが、Heroku にデプロイされるときは特定のバージョンに制限するようにしたい場合に便利です。

Gemfile​ での環境変数の使用を制限することをお勧めします。条件付きの使用はお勧めしません。プライベートリポジトリのユーザー名またはパスワードなどの情報を設定する必要がある場合は、「Bundler の設定​」を参照してください。

トラブルシューティング

Gemfile で Ruby のバージョンを指定したが、Heroku に別のバージョンがインストールされる

Bundler 2.4 以降、Bundler は Ruby のバージョンが Gemfile.lock​ でロックされていない場合は Ruby のバージョンを出力しなくなりました。Heroku が Ruby のバージョンを読み取ることができるようにするには、次のコマンドをローカルで実行します。

$ bundle platform --ruby

No ruby version specified​ のような出力が表示された場合、次のコマンドで Gemfile.lock​ のバージョンをロックする必要がある場合があります。

$ bundle update --ruby
$ git add Gemfile.lock
$ git commit -m "update ruby version"

Ruby バージョンは

このエラーの最も一般的な原因は、Gemfile​ を変更した後に Gemfile.lock​ が更新されなかったことです。これを修正するには、次を実行してください。

$ bundle update --ruby
$ git add Gemfile.lock
$ git commit -m "update ruby version"

Ruby バージョンが、指定された現在のバージョンとは異なっていることを示すエラーが引き続き表示される場合は、考えられる原因がいくつかあります。

まず、ローカルで最新バージョンの Bundler を使用していることを確認してください。少なくとも Heroku と同じバージョンを実行することをお勧めします。このバージョンは、次を実行することによってローカルで確認できます。

$ bundler -v
Bundler version 1.13.6

最新バージョンの Bundler を使用していることを確認したら、次を実行して、アプリで指定したバージョンを確認します。

$ bundle platform --ruby
ruby 2.3.3p222

これが想定していたものでない場合は、Gemfile.lock​ の中をチェックします。

$ cat Gemfile.lock | grep -A 2 RUBY
RUBY VERSION
   ruby 2.3.3p222

これは Bundler で優先されるバージョンです。これが想定したものでない場合は、bundle install​ をローカルで実行すると、Gemfile.lock​ の Ruby バージョンがローカルで実行している任意のバージョンに設定されます。

Heroku にプッシュしたときに、依然としてそのエラーが表示される場合は、変更を Git にコミットしたことを確認します。

$ git add Gemfile.lock
$ git commit -m "Gemfile.lock ruby version"

また、プロジェクトの master​ ブランチにいることも確認してください。

$ git status -b
On branch master

git push heroku master​ を実行するときにマスターとは別のブランチにいる場合、このコマンドは git push heroku master:master​ のショートカットです。つまり、ローカルリポジトリのマスターが Heroku のマスターブランチに送信されます。testing-feature-1​などのマスター以外のブランチにデプロイしたい場合は、git push heroku testing-feature-1:master​ を実行する必要があります。

この混乱を回避する 1 つの方法として、Heroku レビューアプリ​を設定し、コミットがマスターにマージされたら継続的インテグレーション (CI) サーバーに Heroku にデプロイさせます。

移行

Ruby のデフォルト以外のバージョンに移行するアプリケーションでは、bin​ がその PATH​ 環境設定内の最初のエントリである必要があります。この値は Ruby buildpack で設定されるため、変更しないでください。この設定の現在の値は、heroku config​ を使用して特定できます。

$ heroku run bash
$ env | grep PATH
PATH=/app/bin:/app/vendor/bundle/bin:/app/vendor/bundle/ruby/2.2.0/bin:bin:vendor/bundle/ruby/1.9.1/bin:/usr/local/bin:/usr/bin:/bin```

If absent or not the first entry you should ensure you’re using the supported version of the Ruby buildpack. If you are, please open a support ticket.

If the PATH is set correctly you will see the expected version using heroku run:

$ heroku run "ruby -v"
Running `ruby -v` attached to terminal... up, run.1
ruby 1.9.2p290 (2011-07-09 revision 32553) [x86_64-linux]

PATH​ が正しく設定されていない場合は、次のエラーが表示されることがあります。

Your Ruby version is 1.9.2, but your Gemfile specified 1.9.3

PATH が正しく設定されているときは、不適切なハッシュタグ (#!) 行がコミットされている場合にこのエラーが表示されることがあります。たとえば、bin/bundle​ が次の行で始まる場合です。

#!/usr/bin/env ruby1.9.1
ENV['BUNDLE_GEMFILE'] ||= File.expand_path('../../Gemfile', __FILE__)
load Gem.bin_path('bundler', 'bundle')

これにより、不適切なバージョンの Ruby を使用しようとします。次のように、1 行目でバージョンを指定しないようにしてください。

#!/usr/bin/env ruby
ENV['BUNDLE_GEMFILE'] ||= File.expand_path('../../Gemfile', __FILE__)
load Gem.bin_path('bundler', 'bundle')

Bundler のエラー

Bundler 1.1.4​ 以下を使用している場合は、次のエラーが表示されます。

undefined method `ruby' for #<Bundler::Dsl:0x0000000250acb0> (NoMethodError)

ruby​ キーワードを使用するには、Bundler 1.2.0​ 以上をインストールする必要があります。

$ gem install bundler

関連カテゴリー

  • Working with Ruby
Windows で生成された Ruby プロジェクトのデプロイ Windows で生成された Ruby プロジェクトのデプロイ

Information & Support

  • Getting Started
  • Documentation
  • Changelog
  • Compliance Center
  • Training & Education
  • Blog
  • Support Channels
  • Status

Language Reference

  • Node.js
  • Ruby
  • Java
  • PHP
  • Python
  • Go
  • Scala
  • Clojure
  • .NET

Other Resources

  • Careers
  • Elements
  • Products
  • Pricing
  • RSS
    • Dev Center Articles
    • Dev Center Changelog
    • Heroku Blog
    • Heroku News Blog
    • Heroku Engineering Blog
  • Twitter
    • Dev Center Articles
    • Dev Center Changelog
    • Heroku
    • Heroku Status
  • Github
  • LinkedIn
  • © 2025 Salesforce, Inc. All rights reserved. Various trademarks held by their respective owners. Salesforce Tower, 415 Mission Street, 3rd Floor, San Francisco, CA 94105, United States
  • heroku.com
  • Legal
  • Terms of Service
  • Privacy Information
  • Responsible Disclosure
  • Trust
  • Contact
  • Cookie Preferences
  • Your Privacy Choices