7CF Style Tokyo

1999, つまり世紀末マインドで気ままにWEB技術で遊ぼうというコンセプトです

公開リポジトリの特定ファイルのみをgit-cryptで暗号化

公開日: 2026/03/16 / 更新日: 2026/03/28

WEB

Git Hubに配置したソースコードのうち一部のファイルやディレクトリを見られたくない時は、privateにするかgitignoreが普通である。しかし、不特定多数に対してgit cloneしてもらいたいし、バージョン管理もしたいし、特定の人物には確認してもらいたいってときもある。

そんなとき便利なgit-cryptを使ってみた。

これは、リポジトリ内の特定のファイルやディレクトリを暗号化して読めなくするもの。これで暗号化すると、たとえpublicリポジトリであっても、任意のファイルの中身を意味のわからないバイナリに変換することができる。暗号化方式はいくつかあるが、今回はシンプルな共通鍵方式でいく。つまり自分以外に見せるには、共通鍵を渡して復号してもらう必要がある。

暗号化

まずは、PCにインストールする。

brew install git-crypt

(git-cryptはC++でNode.jsと関係ないからnpmは使わない。私は脳死でnpmして、同名のよくわからないライブラリを入れてしまった。)

次に、対象のルートディレクトリで、git-cryptを初期化する。

git-crypt init

そしたら、ルートに.gitattributes というファイルを作成して、どれを暗号化するか指定する。

secret.md filter=git-crypt diff=git-crypt #"secret.md"のみを暗号化
*.secret.md filter=git-crypt diff=git-crypt #"〜.secret.md"系のファイルをまとめて暗号化
docs/** filter=git-crypt diff=git-crypt #docsディレクトリ内のすべてのファイルを暗号化

ちなみに、この命令は上から順に実行されて上書きされていくためしたから順に優先度が高い。例えば、docs内の"public.md"以外を暗号化したい場合は以下のように書けばいい。

docs/** filter=git-crypt diff=git-crypt #一旦docs全体選択
docs/public.md !filter !diff #これが除外コマンド

あとは、通常通りコミットしてpushするだけ。Git Hubのサイトで確認するか、以下のコマンドで暗号化できているか確認できる。

git-crypt status

すると以下のように表示されて、docs内のファイルが暗号化されていることがわかる。

not encrypted: .gitattributes
not encrypted: .gitignore
not encrypted: README.md
not encrypted: app/favicon.ico
not encrypted: app/globals.css
not encrypted: app/layout.tsx
not encrypted: app/page.tsx
    encrypted: docs/test.md
    encrypted: docs/test01.md
not encrypted: eslint.config.mjs
not encrypted: next.config.ts
not encrypted: package-lock.json
not encrypted: package.json
not encrypted: postcss.config.mjs
not encrypted: public/file.svg
not encrypted: public/globe.svg
not encrypted: public/next.svg
not encrypted: public/vercel.svg
not encrypted: public/window.svg
not encrypted: tsconfig.json

復号化

準備として、同一リポジトリのルートディレクトリで以下のコマンドを実行することで復号に使用でいる共通鍵ファイルを任意のパスでエクスポートする。今回はデスクトップに"key"という名前のファイルとして保存するように指定している。

git-crypt export-key ~/Desktop/key

このファイルを渡すことで暗号を解読してもらうことができる。

これを受け取った側は、クローンしてきたリポジトリ内で以下のコマンドをこの鍵ファイルのパスとともに実行すれば良い。ただし、解読する側のPCにもgit-cryptのインストールが必要なので予め入れとく必要あり。

git-crypt unlock もらった鍵を保存した場所

ちなみに、一度アンロックしてしまえば今後pullする内容は自動で復号されるし、当該ファイル内を書き換えてpushした場合は自動で暗号化される。

ライター

HARLYA

無能アリ

趣味でフルスタック開発をしている。巨人の肩に乗りまくりで四捨五入すればエンドユーザー。

関連記事

Webページをダークモードに切り替えるChrome拡張機能を自作

更新日: 2026/04/08

WEB

入力したテキストを四国めたんが読み上げるフローを完全ローカルで構築

更新日: 2026/03/28

WEB

ブラウザの音声入力インターフェース(VUI)を試す

更新日: 2026/03/28

WEB
データ処理