Macでzshの設定や環境変数の設定、Gitの設定などをしだすと、設定ファイルを頻繁に編集することになります。.zprofileや.gitconfigなどです。それらの管理方法をお伝えします。この辺りは多くの人が記事を書いていますが、どうも凝りすぎて複雑になっている気がするので、シンプルなやり方を心がけました。
dotfilesって何?
.zprofileや.gitconfigなどの設定ファイルを頻繁に編集することになると、Gitでこれら自体をバージョン管理をしたくなるものです。
ただ、それらのファイルはデフォルトでは基本的に、/Users/xxxxというホームディレクトリに配置されます。ホームディレクトリには当然設定ファイル以外のものもたくさん入っているので、このディレクトリ自体をGitで管理することはできません。
なので、これらの設定ファイル用のディレクトリを一つ作ります。名前は何でも良いのですが、多くの人がdotfilesという名前を採用しています。設定ファイルの名前を見ればわかるようにドットで始まっているからです。本記事でもそれを踏襲します。
ディレクトリ構造もシンプルでいいし専用ツールも導入したくない
最近新しいMacを買ったので色々設定する機会があり、dotfilesの管理を見直すことにしました。ネットでやり方を調べていると、どうもやり方が複雑な印象を受けました。ディレクトリ構造やスクリプトも複雑です。
また、chezmoiなどの専用の管理ツールなども考えましたが、たかがdotfilesのためにツールを導入するのも大げさな気がしました。中身がわからないので、トラブルがあった時に対応しづらいように感じます。
なので、私なりにシンプルなやり方を考えたのでご紹介します。
設定ファイルをdotfilesに配置しリンク用スクリプトを作る
管理したい設定ファイルを全てdotfilesに移動してください。そして、以下のスクリプトも同ディレクトリに配置します。ファイル名はlink.shとします。
1 2 3 4 5 6 7 8 9 |
DOTFILES_DIR="$(cd "$(dirname "$0")" && pwd)" for dotfile in "${DOTFILES_DIR}"/.??* ; do [[ "$dotfile" == "${DOTFILES_DIR}/.git" ]] && continue [[ "$dotfile" == "${DOTFILES_DIR}/.github" ]] && continue [[ "$dotfile" == "${DOTFILES_DIR}/.DS_Store" ]] && continue ln -fnsv "$dotfile" "$HOME" done |
このスクリプトは以下の記事を参考にさせて頂きました。
dotfilesにある設定ファイルを全てホームディレクトリに向けてシンボリックを貼るというシンプルなスクリプトです。4〜6行目は設定ファイルではないけどこのディレクトリに生成されてしまうファイルを除外する処理です。
dotfilesは以下のようにシンプルな構成になります。
1 2 3 4 |
dotfiles ├── .gitconfig ├── .zprofile └── link.sh |
リンク処理を実行
link.shを実行します。
1 |
$ ./link.sh |
実行権限が無いと、
1 |
zsh: permission denied: ./link.sh |
とエラーが出てしまうので 、以下で権限を付与してから実行します。
1 |
$ chmod +x link.sh |
link.shの実行は、新しい設定ファイルを追加する度に行います。(追加済みの設定ファイルを編集しただけなら実行する必要はありません)
実行する度に、全部の設定ファイルのシンボリックリンクが張り直されますが、別に問題は無いです。
GitHubで管理する
dotfilesそのものをgitで管理しますが、さらにGitHubで管理するのもおすすめです。同僚やネット上の人にあなたの設定をシェアできます。
GitHubのWEBの画面からdotfilesというリポジトリを作ったら、
1 2 |
$ git remote add origin https://github.com/tarky/dotfiles.git $ git push -u origin main |
でGitHubに公開できます。
ただ、設定ファイルに公開したくない情報がないかを確認してから行いましょう。
私の場合、.gitconfigにGitHubのユーザー名とメールアドレスがありました。
1 2 3 4 5 |
[core] editor = vim [user] email = xxxxx.xxxx@gmail.com name = xxxx |
なので、以下のように、ローカルのgitの設定ファイルを読み込むようにし、
1 2 3 4 |
[core] editor = vim [include] path = ~/.gitconfig.local |
~/.gitconfig.localを作成し、以下のように移動します。 このファイルははdotfilesには入れません。
1 2 3 |
[user] email = xxxxx.xxxx@gmail.com name = xxxx |
以下を参考にしました。
さいごに
以下が私のdotfilesですので、参考にしてみてください。
https://github.com/tarky/dotfiles
あと、zshの設定をどのファイルに記載するべきかにいくつか考え方がありますが、私は.zprofileに記載しています。それについて以下でご説明します。