📝

オープンソースで公開するコードのプライベートキーは.envファイルに書いて、.gitignoreで除外しよう

2021/07/19に公開

初心者向け記事です。
タイトルで終わりっちゃ終わりなんですが、初心者向けにちょっと丁寧に書きます。

僕自身プライベートキーを漏らすのが怖くて、個人開発のソースの公開をためらっていた時期があるので。

なぜオープンソースにするのか

オープンソースでコードを公開する、というのは、開発者としてはメリットがあります。
もちろんビジネスで売っているコードを載せることはできませんが、そうではなく趣味や勉強用に書いたコードであれば、ガンガン公開した方がいいでしょう。

書いたコードを見れば、その人の開発者としてのレベルがわかるので、それで評価が高くなるかもしれません。
人の目に晒すことで、フィードバックをもらえるかもしれません。
また、公開することによって恥ずかしいコードは書けないぞというモチベーションにもなるので、ローカルのストレージで死蔵するよりいいでしょう。
もしかしたら同じようなコードを書こうとしていた人の参考になるかもしれません。

しかしコードを公開することにはリスクもある

AWSのプライベートキーをGithubにあげて不正利用される事故が結構ありました。

https://qiita.com/saitotak/items/813ac6c2057ac64d5fef

今はGithubの方も対応が進んでいて、連絡が来るみたいなんですが、
AWSのプライベートキーまではいかなくとも、うっかり公開してはいけない情報が入りこんでいて、あげてしまうのではないか、という怖さはあります。
特に初学者にとって、自分の開発しているリポジトリで隅から隅まで把握できている、という状況はあまりないと思われます。

キーってどう扱ったらいいんだ……?

僕は2019年からiOSエンジニアとして働いていますが、最初の頃は.gitignoreの存在すら知りませんでした。
(さすがに途中で「なんか俺のプロジェクトファイル数やたら多くて見づらいな……」と気づいたみたいです)

https://github.com/github/gitignore

↑ここにGithubがまとめた各言語ごとの.gitignoreテンプレートがあるので、ありがたく利用させてもらいました。
当時つくってたのはiOSアプリですが、/privateというディレクトリをつくって、そこに見せたくない情報を集約して、.gitignoreで無視させていた模様です。

今時のアプリでパブリッククラウド使わないことってそんなにないと思いますし、
そのためにプライベートキーというのはどっかに保持しているものだと思います。
ソースコード自体はOSSとして公開してもよくとも、キーは隠しておきたい、というケースはそこそこあると思います。

Web開発では.envにキーを書く

モバイル開発だとそもそもOSSで公開するのはサンプルアプリ程度で、
普通はストア公開したアプリはプライベートリポジトリで運用することが多いのではないかと思います。

最近僕は個人開発でWebに触る中で、プライベートキーを.envファイルに書く、ということを覚えました。

https://nextjs.org/docs/basic-features/environment-variables

Next.jsでは.gitignoreの中にデフォルトで

.env.local
.env.development.local
.env.test.local
.env.production.local

の4つが指定されています。
詳しい規則は↑のリンクを読んでいただければと思いますが、.env.*.localという風に末尾に.localがついているものはGit管理からはずす、という運用になっています。

XXX_KEY=xxx

.envファイル内にこんな感じでキーを指定します。
JavaScript側からは、

process.env.XXX_KEY

で呼び出せます。
機能自体はnode.jsの機能で、本番環境か開発環境かで読み先を変えるようになっているそうです。

使ってる言語やフレームワークによって細かいところは異なるかもですが、.envファイルに環境変数を書く、という文化はだいたい同じみたいです。

チーム開発では

当たり前っちゃ当たり前ですが、.gitignoreの対象ファイルはGithubに上がらない(というかgitのコミット対象にならない)ので、
別の開発者がgit cloneでリポジトリを持ってきても、キー情報がない状態になります。

個人開発だと別に問題ありませんが、チーム開発だとそれでは困るので、別途キー情報を連携する必要があるかと思います。

モバイルでは……?

モバイル開発でも.envファイル的なのを使う運用でいいと思いますが、そもそもオープンソースにすることが現実的にはそんなにないので、
GoogleもAppleも開発者もそんなにこの辺の問題に興味がないような気がしています。

https://qiita.com/uhooi/items/432754962b3cecb2edbe

↑一応ベストプラクティスを模索している記事を紹介して、終わります。

まとめ

初心者向け過ぎて記事にすべきか迷ったんですが、長年ベストプラクティスがよくわからない中で、
最近.envファイルを書く文化を知って目から鱗だったので、書いてみました。

Discussion