GitHub に公開するリポジトリでパスワードなどを管理しないようにする方法
前回までに紹介した FTP 関連の npm パッケージの中で、FTP 接続先の情報をスクリプト内にベタ書きしていた。
- promise-ftp を使って FTP 接続先のファイル一覧を取得してみる
- ftp-client で指定のファイルを FTP アップロードする
- ftp-deploy で指定のディレクトリを FTP アップロードする
// FTP 接続先情報
const user = 'user';
const password = 'password';
const host = 'example.com';
コレをそのまま GitHub なんかに Push してしまったらパスワード漏洩である。
そこで、こうした情報を Git 管理に含めない方法を考える。
目次
方法1 : 環境変数に持つ
よくあるのは、パスワードなどを環境変数に設定しておくというモノだ。利用する時は process.env から情報を取得するようなやり方だ。
コレをやり始めると、プロジェクトごとの秘密情報を .bash_profile などの Dotfiles にまとめておく運用が多いかもしれない。すると今度は Dotfiles を GitHub 管理しづらくなるし、秘密情報が増えていった時に煩雑になる。
方法2 : dotenv を使う
dotenv というパッケージを使うと、環境変数情報は .env ファイルに退避させておき、require('dotenv').config() でこのファイルの内容を読み込める。
.gitignore に .env ファイルを追加するのだけ忘れないようにする。
このやり方でも十分だが、情報を取得するためだけにパッケージを利用するのがなんとも大仰な感じがする。
方法3 : オリジナルの設定ファイルを require() する
自分なりのオススメは、production-config.js といった適当なファイルを作り、このファイルを .gitignore に追加しておく、というモノ。
まずは production-config.js の内容。
module.exports = {
// FTP 接続先情報
ftp: {
user : 'user',
password: 'password',
host : 'example.com'
}
};
module.exports で、連想配列をエクスポートしておく。
次に利用側。production-config.js をそのまま require() しておけば良い。
// production-config.js をインポートする
const productionConfig = require('./production-config');
// FTP 接続先情報
const user = productionConfig.ftp.user;
const password = productionConfig.ftp.password;
const host = productionConfig.ftp.host;
コレで完了。こうした固定値で環境情報を用意していて、最初から.gitignore に追加しておくのであれば、別に dotenv などのパッケージを使わずともできる、という話だった。
production-config.js は、値を設定していない状態のファイルだけは Git 管理しておきたいと思うだろう。ファイル自体が存在しないとワケが分からないからだ。
そんな時は、最初に値を設定しない空の状態で Git にコミットしておき、後からこのファイルの変更を追跡しないように設定しておくと良いだろう。詳しくは以下の記事で。