rails_outofband_keys — Railsの鍵ファイルをプロジェクト外で解決するプラグイン

Library

概要

rails_outofband_keysは、Railsのcredentialsキー(master.key や 環境別キー)をプロジェクトルートやGit管理下に置かず、OSやユーザー側の標準的な場所(XDG仕様の設定ディレクトリやWindowsのAppDataなど)、あるいは環境変数で指定した値から解決できるようにする小さなRailsプラグインです。本プラグインはRailsの暗号化処理や credentials.yml.enc の位置を変更せず、ただ config.credentials.key_path の決定ロジックを差し替えるだけなので、既存のRailsアプリに導入しても暗号化の互換性は維持されます。運用時に鍵をリポジトリ外で管理したい場合、CI/CDや複数開発者・複数マシンでの鍵配置を整理したい場面で有用です。

GitHub

リポジトリの統計情報

  • スター数: 1
  • フォーク数: 0
  • ウォッチャー数: 1
  • コミット数: 6
  • ファイル数: 9
  • メインの言語: Ruby

主な特徴

  • Railsのcredentials機構を変更せず、鍵ファイルの探索先(key_path)だけを上書きする。
  • RAILS_MASTER_KEY 環境変数を優先し、さらにXDG(~/.config 等)やWindows AppDataの標準パスから鍵を検索可能。
  • 鍵をプロジェクトツリー外に置けるため、鍵の誤ってコミットを防ぎやすい。
  • 軽量なプラグイン(gem)として導入でき、既存のRails初期化プロセスに組み込むだけで動作。

技術的なポイント

rails_outofband_keysは「どこに鍵があるか」を決める責務に限定しており、実装はRailsの初期化プロセスにフックして config.credentials.key_path を適切なファイルパスへ設定する形をとっています。具体的には初期化時に以下の優先順(概要)で鍵の探索・決定を行います:

  1. RAILS_MASTER_KEY 環境変数がセットされていればそれを最優先で使用(Rails標準の挙動を尊重)。
  2. 明示的なオーバーライド(環境変数やアプリケーション設定で指定されたパス)があればそれを使用。
  3. XDG Base Directory Specification に従ったユーザ設定ディレクトリ(例: $XDG_CONFIG_HOME/rails/credentials または ~/.config/rails/credentials)を探索して環境別キー(production.key 等)を探す。
  4. Windows環境では AppData 相当(%APPDATA%\rails\credentials 等)を探索。
  5. 上記がいずれも見つからない場合は従来通りプロジェクト内の config/credentials/*.key(例: config/master.key)を参照するフォールバックになる。

このプラグインはRails側の credentials.yml.enc の場所・暗号化方式を変更しないため、鍵の実体をどこに置くかだけを制御できます。実装は小さな Railtie(あるいは初期化スクリプト)として提供され、boot 時点で config.credentials.key_path を上書きするため、Rails が credentials を読み込む前に決定が済みます。これによりアプリケーションコードやミドルウェア、テスト環境が起動する際に一貫した鍵参照挙動が得られます。

セキュリティ観点では、鍵をユーザーのホームディレクトリやOSの設定ディレクトリに置くことで鍵の管理をOS側または運用者の管理下に移せますが、アクセス権やバックアップポリシーには注意が必要です(例: 適切なファイルパーミッション、クラウドバックアップに含めない等)。またCI環境では環境変数で鍵を注入する運用(RAILS_MASTER_KEY)やシークレットマネージャーを使って鍵ファイルを適所に配置するパターンが自然に組み合わせられます。

導入は非常に軽量で、gemとしてBundlerのGemfileに追加しbundle installすればRailtie経由で初期化に組み込まれます。互換性面ではRailsのcredentials API自体を変えないため、既存のcredentials.yml.encとの互換性が保たれる点が利点です。用途としては、複数リポジトリや複数アプリで共通鍵を管理したい場合、開発者のマシンとCIで鍵の配置ルールを統一したい場合、あるいは鍵をVCSに含めたくないポリシーを採用している組織で特に有用です。

プロジェクトの構成

主要なファイルとディレクトリ:

  • .gitignore: file
  • .rubocop.yml: file
  • Gemfile: file
  • Gemfile.lock: file
  • README.md: file

…他 4 ファイル

(実際の実装コードは lib 以下にRailtieや初期化ロジックが収められている想定。READMEに導入方法や解決順序の詳細が記載されています。)

まとめ

鍵ファイルをプロジェクト外に安全に置きたいRailsアプリに適した、軽量で導入しやすいプラグインです(50字程度)。

リポジトリ情報:

READMEの抜粋:

rails_outofband_keys

rails_outofband_keys is a small Rails plugin that changes how Rails finds the credentials key file (e.g. production.key / master.key) so you can keep key files out of the project directory / git tree.

It does not replace Rails credentials, does not change where credentials.yml.enc lives, and does not change how encryption works. It only sets config.credentials.key_path.

Resolution order

  1. If RAILS_MASTER_KEY is set, Rails uses it (th…