dotfiles(ドットで始まる設定ファイル)の管理のために、Gitリポジトリを作成しGitHubにdotfilesという名前で公開するときに注意すべきこととして秘匿情報の扱いが挙げられます。

秘匿情報が .bashrc に含まれているとき、それをそのままGit管理してGitHubに公開することには問題があります。 ここでいう秘匿情報とはGitHubのパーソナルアクセストークンやAWSのアクセス用シークレットキーなどの認証時のパスワードの代替となるようなものをはじめとする、他の人に見せてはいけない情報のことです。

こういった内容を含む.bashrcは分割し、秘匿情報の含まない部分のみGit管理下に置くのがよいでしょう。

今回は以下のような~/.bashrcがあったとき、秘匿情報の含む部分と含まない部分に分割する手法を紹介します。

# ~/.bashrc

# 秘匿情報
GITHUB_TOKEN=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
AWS_SECRET_ACCESS_KEY=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

# 秘匿情報以外の記述
alias his="cat $HISTFILE | grep"

このファイルを秘匿情報の含む~/.bashrc.localと秘匿情報の含まない~/.bashrcに分割します。 さらに、秘匿情報の含まない~/.bashrcは、秘匿情報の含む~/.bashrc.localを内部で読み込むようにします。

# ~/.bashrc-private

# 秘匿情報
GITHUB_TOKEN=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
AWS_SECRET_ACCESS_KEY=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
# ~/.bashrc

# 秘匿情報を読み込む
source ~/.bashrc.local

# 秘匿情報以外の記述
alias his="cat $HISTFILE | grep"

sourceはBashの組み込みコマンドのひとつで、指定したファイルを読み込みカレントシェルで実行します。 この例で言えば、sourceコマンドが書かれている部分に~/.bashrc.localの内容が書かれているのと同じ動きになります。

こうすることで、~/.bashrcはGitリポジトリに含めて公開しても問題ない状態になりました。 source ~/.bashrc.local という記述から何らかの情報を読み込んでいることはわかりますが、その中身が何であるかは.bashrcを読んでもわかりません。

この記事に従って秘匿情報を分割した場合、以降~/.bashrc.local は公開せずに手元の環境に留めておくようにしてください。

なお、今回のような.bashrcの分割は秘匿情報に限らず他のことにも応用できます。 特定のOSのみ指定したファイルを読み込むようなif文を記載すれば、設定をOSによって切り替えることも可能です。