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

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

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

Stackheroは、数多くの利点を提供する、すぐに使えるRubyクラウドソリューションを提供しています。

  • シンプルなgit pushでアプリケーションを数秒でデプロイ
  • 独自のドメイン名を使用し、HTTPS証明書の自動設定による強化されたセキュリティを享受。
  • 自動バックアップワンクリック更新、そしてシンプルで透明性があり、予測可能な価格設定で安心を提供。
  • プライベートで専用のVMによる最適なパフォーマンスと強固なセキュリティを実現。

時間を節約し、生活を簡素化:StackheroのRubyクラウドホスティングソリューションを試すのに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'