GOTCHA !

新米Android アプリエンジニアの学び

dotfiles for Mac

Background

これまでプライベートでは Mac Mini を仕事で MacBook Pro を使っていたものの
追加で iMac も使うこととなりました
流石に 3台目となると環境構築をスムーズにする必要性を感じたので
今後のために dotfiles にチャレンジしてみました

Target

  • dotfile (.*) を cloud (github) 上で保管しておくこと
  • 自動化して最小の手順で環境が構築できること

要らなさそうなものは断捨離してみたところ残ったのは vimbashgit 関連のものだけでした

.vim/colors/molokai.vim  (*)
.vimrc
.bash_profile
.bashrc

molokai.vim については git submodule にして他の git から持ってきます

git submodule add https://github.com/tomasr/molokai .vim

Deploy

基本は git clone で持ってきた dotfiles 内に配置した各 dotfile に対して
$HOME への symbolic link を作るだけです

利用するコマンド

ln -snfv ${HOME}/dotfiles/${f} ${HOME}/${f}

各 option の意味は以下の通り

-s    Create a symbolic link.
-n    Same as -h, for compatibility with other ln implementations.
-h    If the target_file or target_dir is a symbolic link, do not follow it.  This is
        most useful with the -f option, to replace a symlink which may point to a
        directory
-f    If the target file already exists, then unlink it so that the link may occur.
        (The -f option overrides any previous -i options.)
-v    Cause ln to be verbose, showing files as they are processed.

すでに link が存在している場合は上書きするということかと思います

git については .gitconfig だけが対象でこれも link で対処もできましたが
特に意味はなさそうですがなんとなく git コマンドで生成することにしました

git config --global user.name <username>
git config --global user.email <email>
git config --global color.ui true

Install packages

Mac だと Home Brew を使っていろんな program をインストールできるので その部分も自動化しました

homebrew

/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

homebrew cask

homebrew の拡張版らしく
Web から dmg をダウンロードしてインストール実行
という手作業 が必要なパッケージも手軽にインストールが可能になるという
すごく便利な機能
大概のパッケージはサポートされておりありがたい限りです

brew bundle

homebrew 経由でインストールしたパッケージ情報を brew bundle dump コマンドで Brewfile 書き出すことができます

そのBrewfile がある場所で brew bundle を実行することで
必要なpackageが一発でインストールされます

ちなみに自分の Brewfile に含まれているものは以下の通り

Clean

実環境ではまず使わないとは思いますが
テストのために元に戻す手順も一応用意しておきました
と言っても単に 作成した link file を削除することと
homebrew のアンインストールだけで済みました
(homebrew でインストールしたパッケージは一緒に消える)

setup script

以上を踏まえて、出来上がった shell script は以下のようになります

Automation

1手順で環境構築ができるよう、setup script をダウンロードとinstall / install の実行を試行錯誤した結果
次の1行にたどり着きました

bash -c "$(curl -fSL https://raw.githubusercontent.com/<username>/dotfiles/master/setup.sh)"

github の private repository を使っている場合は github の repo アクセストークンを使用してアクセス可能なので
こちら

bash -c "$(curl -H "Authorization: token <token>" -fSL https://raw.githubusercontent.com/<username>/dotfiles/master/setup.sh)"

ToDo

わりとやっつけで作ったので以下の改善ができそうな気がしてます - error ハンドリングの検討 - 要らない処理の除去