皆さんはdotfileを作っていますか?dotfileを作ることで
- 環境を複数PCで共有する手順書化できる
- 自分の環境に入れたプラグインの「いつ」「なぜ」を管理できる
- 自分の環境を大事に手入れしている「感」が湧き、自己肯定感が上がる
環境を複数PCで共有する手順書化できる
特にnvimやvscodeのプラグインに言える話なのですが同じ環境を簡単に作るのは難しいですね。自分はMacしか使っていないためmac用のセットアップ手順をdotfiles化して「今使っている設定」をできる限りすぐ新しい端末で再現できるようにしています。
自分の環境に入れたプラグインの「いつ」「なぜ」を管理できる
plaginによっては競合した時に「そんなに重要度高くないならこれ削除して対処したいなぁ」というときありますよね。この時にgitのように履歴を追えるようにしていれば「こういう文脈だった」と思い出すフックにすることができます。
自分の環境を大事に手入れしている「感」が湧き、自己肯定感が上がる
自分の環境、自分のPCをちゃんと盆栽できることってなんか嫌なことあった時に「でもうちのdotfilesはかわいいしなぁ」と思うことができます。数年育てたdotfilesは自分の成長の証。昔は理解できなかったコードや人に勧められてなんとなく入れたツールがいつの間にか常にいる相棒になった。その日付がわかることって素敵だと思いませんか?
もちろん新しいツールをlerningすることも同じくらい大事です。
今回は「同期できる機能」に着目してbrewとvscodeの私がやっている同期方法について紹介します。
brewの共有方法
myPackage.txtと以下のBash Scriptを使って管理しています。myPackage.txtはbrew list | xargs -n1で表示されるパッケージを保存しています。こちらもgit管理しているのでいつ追加したかがわかるようになっています。xargsを使っているのは1行1パッケージにすることで while を回しやすくする工夫です。
function installBrewPackage() {
local package
while read package; do
brew install $package
done < myPackage.txt
}
vscode 設定・プラグイン設定
vscodeは連携機能で設定を同期できることは知っていますが置いておいて、settings.jsonを手動で同期できるように、またextensionsを同期できるように以下のようなbashファイルを実行させて同期を取るようにしています。
keybindings.jsonやextensions、settings.jsonをgitで管理しているため「なぜそれを変更したのか」をCommitで管理することができて便利ですよ
#!/bin/bash
#vscode settings
VSCODE_SETTING_DIR=~/Library/Application\ Support/Code/User
rm "$VSCODE_SETTING_DIR/settings.json"
ln -s "$SCRIPT_DIR/vscode/settings.json" "${VSCODE_SETTING_DIR}/settings.json"
rm "$VSCODE_SETTING_DIR/keybindings.json"
ln -s "$SCRIPT_DIR/vscode/keybindings.json" "${VSCODE_SETTING_DIR}/keybindings.json"
# install vscode extensions
code --list-extensions > now_extensions
sort now_extensions now_extensions $SCRIPT_DIR/vscode/extensions| uniq -u > extensions_require
cat ./extensions_require | while read line
do
code --install-extension $line
done
rm now_extensions
rm extensions_require
code --list-extensions > $SCRIPT_DIR/vscode/extensions