SecretEnv

暗号化した .env を
Git でチーム共有

あなたのチームでは、.env ファイルや証明書をどう共有していますか?

brew install ebisawa/secretenv/secretenv
Apache-2.0

よくある課題

Slack や DM で .env を送っている

「新しい API キーを Slack で送って」――多くのチームがやっていることですが、これには深刻なリスクがあります。

.env.example + 手動管理

.env.example をリポジトリにコミットし、実際の値は各自が管理するパターン。

クラウド秘密管理サービス

専用に作られた SaaS やクラウドの Secrets Manager は強力ですが、すべてのチームに合うわけではありません。

.env を暗号化して Git にコミット

方向性は正しいですが、既存ツールには課題が残ります。

SecretEnv が解決すること

SecretEnv は、.env や証明書などの秘密情報を暗号化して Git リポジトリ上で管理する CLI ツールです。外部サービスやサーバーに依存せず、オフライン完結で動作します。

.env の暗号化が一瞬で完了

# 初期セットアップ(1回だけ)
secretenv init --member-handle alice@example.com

# .env を暗号化して Git 管理下に
secretenv import .env

# 値の追加・更新も直接操作
secretenv set DATABASE_URL "postgres://..."
secretenv set API_KEY "sk-..."

暗号化されたファイルは .secretenv/secrets/ に保存され、そのまま Git にコミットできます。平文の .env は不要になるため、秘密情報の漏洩リスクを排除できます。

既存のワークフローを壊さない

# 暗号化された .env を環境変数として注入し、コマンドを実行
secretenv run -- docker compose up
secretenv run -- npm start
secretenv run -- rails server

# 個別の値を取得
secretenv get DATABASE_URL

secretenv run は、復号した値を環境変数としてプロセスに注入します。ディスクに平文を書き出さないため、.env ファイルの置き忘れや誤コミットによる漏洩を防げます。

メンバー管理が Git のワークフローに乗る

# 新メンバーが参加
secretenv join --member-handle bob@example.com
# → PR を作成してチームにマージしてもらう

# 既存メンバーが rewrap を実行して鍵を配布
secretenv rewrap
# → bob が復号できるようになる

メンバーの追加・削除はすべて Git 上のファイル操作として表現されます。PR レビューを経るため、「知らないうちにアクセス権が付与されていた」という事態を防げます。

メンバーの脱退にも確実に対応

# メンバーを削除
secretenv member remove alice@example.com

# 暗号ファイルを再暗号化し、アクセスを遮断
secretenv rewrap
# → removed_recipients に記録され、開示履歴が追跡可能に

SecretEnv は、削除されたメンバーの履歴(removed_recipients)を暗号ファイル内に記録します。「この人は過去にこの秘密情報にアクセスできていた」という事実を可視化することで、メンバー脱退時に更新すべき秘密値の特定が容易になります。

.env の差分がレビューできる

SecretEnv のデータ形式は、.env のキー・バリューを個別に暗号化します。

暗号ファイルなのに差分が最小限になるため、PR レビューで「何が変わったか」を把握できます。

ネットワークもインフラも不要

SecretEnv のコア機能はすべてローカルで完結します。

こんなチームに向いています

なぜ安全か

SecretEnv は独自の暗号アルゴリズムを一切使用せず、標準化された暗号技術だけを組み合わせて設計されています。

登録メンバーだけが復号できる

各メンバーの公開鍵で個別に暗号化するため、秘密鍵を持つ本人だけが復号できます。暗号化には、Web ブラウザや TLS でも採用が進む HPKE(RFC 9180)を使用しています。

改ざんを検知できる

暗号ファイルには Ed25519 電子署名(RFC 8032)が付与されます。リポジトリ上のファイルが不正に書き換えられた場合、復号時に自動で検知します。

なりすましを防止できる

メンバー追加時に、SSH 秘密鍵による attestation 署名GitHub API による公開鍵の突き合わせで本人性を検証し、偽の鍵の混入を防ぎます。

暗号文の使い回しを防止

暗号化の過程で「どの秘密に対する暗号文か」「どの鍵世代で暗号化したか」を暗号学的に紐づけています。異なる文脈での暗号文の流用や差し替えはすべて検知されます。

技術詳細は

Security Design

導入の流れ

必要なもの

インストール

# Homebrew
brew install ebisawa/secretenv/secretenv

既存プロジェクトへの導入(1分で完了)

# 1. workspace を初期化
secretenv init --member-handle alice@example.com

# 2. 既存の .env を暗号化して取り込み
secretenv import .env

これだけで移行は完了です。以降は secretenv runsecretenv get で秘密情報にアクセスできます。

詳しい使い方は

User Guide

よくある質問

GPG の導入は必要ですか?
いいえ。SecretEnv は SSH 鍵(Ed25519)だけで動作します。GPG や PGP の鍵管理は一切不要です。
クラウドの Secrets Manager は必要ですか?
いいえ。暗号化・復号・鍵管理はすべてローカルで完結します。KMS やクラウドサービスへの依存はありません。
共有秘密鍵の管理は必要ですか?
いいえ。SecretEnv は公開鍵暗号(HPKE)を採用しており、チーム全員で共有する秘密鍵はありません。各メンバーの公開鍵で個別に暗号化するため、共通パスワードや共有鍵の配布・管理・ローテーションといった負担がなくなります。
SSH 鍵は何のために必要ですか?
SSH 鍵は本人証明(attestation の署名)と秘密鍵の保護に使います。暗号化・復号には SecretEnv が独自に生成する HPKE 鍵ペアを使用しており、SSH 鍵で直接暗号化するわけではありません。
SSH 鍵を新しく作る必要がありますか?
GitHub 用などで Ed25519 鍵をすでに持っていれば、そのまま使えます。未作成の場合は ssh-keygen -t ed25519 で生成してください。
ssh-agent は使えますか?
はい。ssh-agent 経由での署名に対応しており、鍵ファイルを直接指定する必要はありません。1Password の SSH エージェント機能にも対応しています。
既存の .env ファイルからすぐ移行できますか?
secretenv import .env で一括取り込みできます。既存のワークフローを変える必要はなく、secretenv run で従来どおりコマンドを実行できます。
.env 以外のファイルも暗号化できますか?
はい。証明書、設定ファイル、任意のバイナリを secretenv encrypt / secretenv decrypt で扱えます。
CI/CD 環境でも使えますか?
はい。secretenv runsecretenv get は非対話で動作するため、CI パイプラインに組み込めます。
オフラインでも使えますか?
はい。暗号化・復号・署名検証などの主要操作はすべてローカルで完結します。外部サーバーやネットワーク接続は不要です。オンライン検証でのみ GitHub API を使用しますが、これはオプションの追加検証です。
複数の環境(dev / staging / prod)を分けて管理できますか?
はい。環境ごとに別の秘密情報ファイルを作成し、同じワークスペース内で管理できます。
暗号ファイルが Git でコンフリクトしたらどうなりますか?
SecretEnv は .env のキーごとに個別に暗号化するため、異なるキーを変更した場合はコンフリクトが起きにくい構造になっています。同じキーを同時に変更した場合は、通常の Git コンフリクト解消と同様に一方を選択してください。
鍵のローテーションはできますか?
はい。secretenv rewrap --rotate-key で暗号化に使う鍵自体を作り直して再暗号化できます。メンバー変更時だけでなく、定期的なローテーションにも対応しています。
SecretEnv で暗号化すればリポジトリを公開しても安全ですか?
暗号化されたファイル自体は HPKE や XChaCha20-Poly1305 などの現代的な暗号技術で保護されており、秘密鍵なしに復号することは困難です。ただし、リポジトリの公開は暗号化の強度だけでなく運用面のリスク(鍵の漏洩、将来の暗号解読技術の進歩など)も伴います。機密性の高い情報を扱う場合は、リポジトリをプライベートに保つことを推奨します。
SecretEnv は無料ですか?ライセンスはどうなっていますか?
はい。SecretEnv は Apache License 2.0 のオープンソースソフトウェアであり、個人・商用を問わず無料で利用できます。
サポートや保証はありますか?
SecretEnv はオープンソースソフトウェアとして「現状のまま(AS IS)」で提供されており、明示・黙示を問わず保証はありません。利用は自己責任となります。バグ報告や機能要望は GitHub の Issue でお受けしています。

さらに詳しく知りたい方は

GitHub で見る