rails_outofband_keys — Railsの鍵ファイルをプロジェクト外で解決するプラグイン
概要
rails_outofband_keysは、Railsのcredentialsキー(master.key や 環境別キー)をプロジェクトルートやGit管理下に置かず、OSやユーザー側の標準的な場所(XDG仕様の設定ディレクトリやWindowsのAppDataなど)、あるいは環境変数で指定した値から解決できるようにする小さなRailsプラグインです。本プラグインはRailsの暗号化処理や credentials.yml.enc の位置を変更せず、ただ config.credentials.key_path の決定ロジックを差し替えるだけなので、既存のRailsアプリに導入しても暗号化の互換性は維持されます。運用時に鍵をリポジトリ外で管理したい場合、CI/CDや複数開発者・複数マシンでの鍵配置を整理したい場面で有用です。
リポジトリの統計情報
- スター数: 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 を適切なファイルパスへ設定する形をとっています。具体的には初期化時に以下の優先順(概要)で鍵の探索・決定を行います:
- RAILS_MASTER_KEY 環境変数がセットされていればそれを最優先で使用(Rails標準の挙動を尊重)。
- 明示的なオーバーライド(環境変数やアプリケーション設定で指定されたパス)があればそれを使用。
- XDG Base Directory Specification に従ったユーザ設定ディレクトリ(例: $XDG_CONFIG_HOME/rails/credentials または ~/.config/rails/credentials)を探索して環境別キー(production.key 等)を探す。
- Windows環境では AppData 相当(%APPDATA%\rails\credentials 等)を探索。
- 上記がいずれも見つからない場合は従来通りプロジェクト内の 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字程度)。
リポジトリ情報:
- 名前: rails_outofband_keys
- 説明: Resolve Rails credentials key files outside the project tree (XDG/AppData + overrides).
- スター数: 1
- 言語: Ruby
- URL: https://github.com/lholden/rails_outofband_keys
- オーナー: lholden
- アバター: https://avatars.githubusercontent.com/u/20953?v=4
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
- If
RAILS_MASTER_KEYis set, Rails uses it (th…