Ruby: シークレット(環境変数)の管理

このドキュメントは高度な使用法ガイドの一部です。完全なガイドはこちらからご覧いただけます:Rubyデプロイメントをさらに進める

👋 Stackhero ドキュメントへようこそ!

Stackhero では、すぐに使える Ruby cloud ソリューションをご提供しています。主な特長は以下の通りです:

  • シンプルな git push だけで、数秒でアプリケーションをデプロイできます。
  • 独自ドメイン名をご利用いただけ、HTTPS 証明書の自動設定による高いセキュリティを実現します。
  • 自動バックアップワンクリックアップデート、そしてシンプルで透明性のある予測可能な料金体系で安心してご利用いただけます。
  • プライベートかつ専用インフラによる最適なパフォーマンスと堅牢なセキュリティを確保しています。

時間を節約し、運用をシンプルに:Stackhero の Ruby cloud hosting ソリューションは、わずか5分でお試しいただけます!

データベースやサードパーティサービスのトークンやパスワードなどのシークレットを管理する必要がある時が来ます。これらのシークレットを安全に保管することが重要です。リポジトリやコードにシークレットを直接埋め込むことは、重大なセキュリティリスクをもたらすため避けてください。

環境変数には2つの大きな利点があります。

  1. シークレットがGitリポジトリに保存されないため、ソースコードにアクセスされた場合のリスクが軽減されます。
  2. 異なる環境で異なる資格情報を使用できます。例えば、本番環境では本番データベースに接続し、開発中は開発データベースを使用します。

開発用には、プロジェクトのルートに.envファイルを作成します。このファイルはGitから除外され、コミットされることはありません。dotenv gemを使用して.envファイルを自動的に読み込みます。

まず、dotenv-rails gemをGemfileに追加します。

# Gemfile
gem 'dotenv-rails', groups: [:development, :test]

次に、gemをインストールします。

bundle install

次に、プロジェクトのルートに.envファイルを作成し、変数を追加します。

RAILS_ENV="development"
DATABASE_PASSWORD="secretPassword"
THIRD_API_PRIVATE_KEY="secretKey"
# ...

最後に、.envファイルがGitで無視されることを確認します。

echo '.env*' >> .gitignore

ステージングおよび本番用には、.envファイルは安全でも実用的でもありません。Gitリポジトリに保存できないためです。代わりに、StackheroはRubyサービスの設定で環境変数を直接管理するための安全なソリューションを提供します。

これらの変数は、StackheroダッシュボードでRubyサービスを選択し、「設定」ボタンをクリックして設定できます。

Rubyでは、ENVを使用して環境変数に簡単にアクセスできます。例えば、DATABASE_PASSWORDを取得するには、次のように使用します。

ENV['DATABASE_PASSWORD'] # => 'secretPassword'

環境変数を使用してRabbitMQサーバーに接続する例を以下に示します。

require 'bunny'

class RabbitMQClient
  def initialize
    @connection = Bunny.new(hostname: ENV['RABBITMQ_HOST'],
                            username: ENV['RABBITMQ_USERNAME'],
                            password: ENV['RABBITMQ_PASSWORD'])
    @connection.start
  end

  def publish(queue_name, message)
    channel = @connection.create_channel
    queue = channel.queue(queue_name)
    channel.default_exchange.publish(message, routing_key: queue.name)
  end

  def close
    @connection.close
  end
end

開発プラットフォームでは、.envファイルに次のような内容が含まれるかもしれません。

RABBITMQ_HOST='127.0.0.1'
RABBITMQ_USERNAME='developmentUser'
RABBITMQ_PASSWORD='developmentPassword'

本番およびステージング用には、StackheroダッシュボードのRubyサービス設定で環境変数を以下のように定義します。

RABBITMQ_HOST='<XXXXXX>.stackhero-network.com'
RABBITMQ_USERNAME='production'
RABBITMQ_PASSWORD='secretProductionPassword'