この記事は dotfiles Advent Calendar 2020 - Qiita の3日目の記事です。
開発環境をセットアップするとき、多くの方は長年使っているdotfilesを独自に管理して使用していると思います。
今回、この記事ではご多分に漏れず、秘伝のタレが染み込んだオレオレスクリプトで独自にdotfilesを管理をしてきた方法を紹介したいと思います。正直、自分自身で作成した管理スクリプトなので、この記事は誰得な状態になるかもしれませんが、こんな管理方法をしているんだなと思っていただければと思います。
ちなみに、カレンダーに参加した当初は管理方法を変えようと息巻いていたのですが、そのときに思いついた管理方法をすっかり失念してしまい、思い出せないため現状の管理方法を紹介しようと思った次第です。
前述した通り、秘伝のタレが染み込んでいる管理スクリプト込みのリポジトリがこちらです。
$ tree
.
├── bin
│ ├── dotfiles -> ../libexec/dotfiles
├── bundle
├── dict
│ └── myths-legends
└── libexec
├── dotfiles
├── dotfiles-bootstrap
├── dotfiles-help
├── dotfiles-install
├── dotfiles-sync
└── dotfiles-version
ディレクトリ構造に関しては bin/dotfiles -> ../libexec/dotfiles
のスクリプトで libexec
に存在するサブコマンドを呼び出して使うようにしています。
というサブコマンドを用意していますが、基本的には install
と bootstrap
のみ使用しています。それらを解説します。
$ ./bin/dotfiles install ./bundle
のように、設定したい dotfiles のディレクトリ(例だと ./bundle
)を指定することによって、ホームディレクトリにシンボリックリンクをするというありがちなことをしています。
ホームディレクトリに直接リンクしているので、今後は ~/.config
に配置する改修をしようというのを考えています。なぜならば、ホームディレクトリに直接置いているとやはり雑多に管理している印象を自分自身が受けてしまうので、それを変更したいためです。
そしてこのスクリプトは自分で別途用意した他の dotfiles を導入することもできるようになっています。
$ ./bin/dotfiles install ./another-dotfiles
ミニマムインストールしたいときに使っていましたが、最近は全く出番がありません。
$ ./bin/dotfiles bootstrap ./bundle/.bootstrap
昔はAnsibleを使ってプロビジョニングを行っていたのですが、Ansibleインストールするのが面倒だったため、簡易スクリプトでインストールするようにしました。
これはただ単に .bootstrap
を起動しているだけなので /bin/bash ./bundle/.bootstrap
を実行しているだけです。
そのため libexec/dotfiles-bootstrap
を作成したの完全に趣味です。
私の dotfiles は趣味の塊です
おまけですが、ジョブ実行中に遊び心で画像のようなスピナーを表示させています。
適当なスクリプトですが、スクリプトの待ちで遊びたい方はどうぞ。
jobs_await() {
local pid="$1"
local spinners=('⠋' '⠙' '⠹' '⠸' '⠼' '⠴' '⠦' '⠧' '⠇' '⠏')
while true; do
for spinner in ${spinners[@]}; do
printf " $spinner \r" > /dev/stderr
sleep 0.05
done
if ! jobs -rp | grep "$pid" > /dev/null; then
break
fi
done
}
{
# execution task
} &
pid=$!
jobs_await $pid
wait $pid
exit 0
ここからは完全におまけなのですが、新しくMacを購入したときに私がやっているセットアップを紹介したいと思います。
かなりミニマムですが、これで大体事足りています。
まず、PCを購入してやるのはコンピューターの命名を変更するところからやっています。System Preferences > Sharing > Computer Name にて変更が可能です。
命名ですが、クラウドインスタンスの場合は数学者の名前、Macのように物理PCがある場合は時間の神を用いています。
ここにあるZurvanというホストネームも ズルワーンという時間を意味する創造神の名前で使っています。
キーボードの Key Repeat を System Preferences では設定できない値をターミナル経由で設定します。
$ defaults write -g InitialKeyRepeat -int 10
$ defaults write -g KeyRepeat -int 1
Macで開発者ツールと言ったら Xcode なので、手っ取り早くインストールしてしまいましょう。
# Install Xcode and the Xcode Command Line Tools
$ sudo xcode-select --install
# Agree to Xcode license
$ sudo xcodebuild -license
# Install the Rosetta2
$ sudo softwareupdate --install-rosetta
これで基本的なものは使えるようになっています。
Mac用のパッケージマネージャーとして、MacPorts か Homebrew をインストールします。個人的に Homebrew が昔から苦手だったので、最近から MacPorts に移行しています。
$ sudo port -v selfupdate
この後は特に事前に必要なものをインストールしておくものはないです。開発で必要になったら順次導入しています。
ED25519の暗号化で鍵を生成しているのと、GitHubに登録するときに後々どこの鍵かをわかりやすいようにコメントを入れています。
$ ssh-keygen -t ed25519 -C "$USERNAME@$HOST"
クラウドのインスタンスをよく立てたりするので、ホストの名前(コンピューターネーム)とかは大事。
Gitで容量の大きいファイルを扱うときものです。本来なら下記のコマンドでインストールできます。
# Homebrew:
$ brew install git-lfs
# MacPorts:
$ port install git-lfs
arm64
には対応しておらずインストールに失敗するので、今回はマニュアルインストールをしました。
こちらのページのDownloadからファイルをDLして展開します。
$ cd /path/to/git-lfs-dir
$ PREFIX=~/local ./install.sh
PREFIX
を設定して、 install.sh
を叩いて git-lfs
をインストールすれば Rosetta2 で動く git-lfs
が導入完了です。
あとはその他便利ツールをインストールしています。
if which go > /dev/null 2>&1; then
go get -v -u github.com/x-motemen/ghq
go get -v -u github.com/fatih/gomodifytags
go get -v -u github.com/itchyny/mmv/cmd/mmv
go get -v -u github.com/mattn/gof
go get -v -u github.com/mattn/cho
fi
go get
で対応しているので、この前に Go をインストールしておくのと、 go get
は将来的になくなる可能性もあるので現状のメモ程度で使っています。
完全に自分メモとしての管理手法とセットアップを記事にしました。これが誰かのためになるかはわからないですが、何かの参考になれば幸いです。
年末年始には dotfiles の管理方法は変えていこうかと計画しているので、アップデートがあればまたブログにて紹介します。
Cover photo: https://unsplash.com/photos/1sSfrozgiFk
Shintaro Kaneko
December 03, 2020