はじめに
Macを真っさらな状態から設定してみようということで、ここまで全4回にわたって環境構築をしてきました。
- 手元のMac環境をリセットする - なまえは まだ ない
- 手元のMac環境をリセットする (2) - なまえは まだ ない
- 手元のMac環境をリセットする (3) - なまえは まだ ない
- 手元のMac環境をリセットする (4) - なまえは まだ ない
ただここまでやってきた内容を、またMacをリセットしたとか新しく買ったという時にいちいちやり直すのは面倒です。 というわけで、これらの内容をスクリプト化して簡単にやり直せるよう自動化しましょう。
ゴールを考える
まずは今までの作業をスクリプト化します。数回のコマンド/スクリプト実行で作業完了することを目指します。 また、果たしてそんなシチュエーションがあるか不明ですが、 複数のMac環境がある場合に片方で行なった変更を簡単に同期できるようにしたいです。 これは多くの方がやっているように、Gitリポジトリにスクリプトを登録することで実現しようと思います。
というわけで、目標はとりあえず次の通りです。
実際にやってみた
OS設定
特筆すべき内容はありません(笑)。
パート2でやったOS設定をシェルスクリプトに書き出せば終了です。
スクリプト名は仮にmacos.sh
としておきましょう。
手元のMac環境をリセットする (2) - なまえは まだ ない
ターミナル関連の設定
基本的にパート3でやった内容をひとつのスクリプトとして記述します。
terminal.sh
とでもしておきます。
手元のMac環境をリセットする (3) - なまえは まだ ない
.zproztorc
を直接編集してカラーテーマを変更した作業は、次のようにsed
コマンドで実現しました。
sed -i "" -E "/zstyle ':prezto:module:prompt' theme/s/'[a-z]+'/'pure'/" "${ZDOTDIR:-$HOME}"/.zprezto/runcoms/zpreztorc
もっとスマートな書き方があったら教えてください。
Macに同梱されているsed
コマンドはBSD版というものらしく、検索でヒットするGNU版とは若干挙動が異なります。
-i
オプションでファイルを直接編集する場合、バックアップファイルを作成しない場合は空の拡張子指定(""
)が必要です。
Zshのモジュールを追記した作業もsed
で表現したかったのですが、今のところ良い感じの解にたどり着いていません。
ここは後の宿題にしようと思います。
ちなみに、MacでGNU版のsed
コマンドを使いたい場合はHomebrewからインストールできるようです。
brew install gnu-sed
今後こちらに切り替えるかもしれません。
エディター関連
ここが今回の主役かもしれません。
Vim
.vimrc
は当たり前ですが凝れば凝るほど長くなっていくので、
後々のことを考えて、大まかな役割で複数のVim Scriptに分割しておきます。
今回はVimの基本的な設定や共通設定をbase.vim
、
NeoBundleによるプラグイン関連をbundle.vim
として分割することにしました。
それぞれの設定項目はパート4の内容そのままです。
手元のMac環境をリセットする (4) - なまえは まだ ない
.vimrc
本体は各Vim Scriptをロードするだけの処理としました。
注意としては、base.vim
で記載したカラーテーマはNeoBundleでインストールしたものなので、
先にbundle.vim
をロードします。
source ./dotfiles/vim/bundle.vim source ./dotfiles/vim/base.vim
あとはこの.vimrc
のシンボリックリンクをユーザーディレクトリに配置します。
ln -sf dotfiles/vim/.vimrc ${HOME}/.vimrc
Visual Studio Code
VSCodeは拡張機能のインストールがGUIで簡単にできるのが魅力のひとつですが、 いちいち検索&インストールというのも面倒です。 VSCodeにはコマンドラインで拡張機能をインストールする機能が実装されているので、そちらを利用します。
code --install-extension <extension-id>
すでにインストールされている拡張機能の一覧は--list-extensions
オプションで取得することができます。
これをファイルにダンプすれば、インストール対象のリストが簡単に作成できます。
code --list-extensions > ./vscode-extensions
あとはこのファイルを読んで各行に対して--install-extension
を実行するスクリプトを書けば完成です。
#!/bin/bash # 拡張機能のリストをファイルから取得する dir=`cd $(dirname ${0}) && pwd` extensions=`cat ${dir}/vscode-extensions` # 拡張機能を順にインストールする for ext in ${extensions[@]}; do code --install-extension $ext done
これなら、今後新しい拡張機能を導入した時にも簡単に同期することができます。
settings.json
の同期は.vimrc
と同様にシンボリックリンクを貼ります。
ln -sf vscode/settings.json ${HOME}/Library/Application\ Support/Code/User/settings.json
それぞれの作業もスクリプト化する
VimとVSCodeの設定をまとめて実施するスクリプトを書きます。名前はeditor.sh
としておきます。
#!/bin/bash dir=`cd $(dirname ${0}) && pwd` # VSCodeがインストール済であれば環境設定を同期する if type code >/dev/null 2>&1; then # 拡張機能をインストール ${dir}/vscode/install-vscode-extensions.sh # settings.jsonを同期 ln -sf ${dir}/vscode/settings.json ${HOME}/Library/Application\ Support/Code/User/settings.json fi # Vimの環境設定を同期する ln -sf ${dir}/vim/.vimrc ${HOME}/.vimrc
一応VSCodeは外部からインストールするアプリケーションなので、code
コマンドの存在確認はしておきます。
ディレクトリ構成
以上を踏まえて、最終的なディレクトリ構成は次のようになりました。
dotfiles/ |---- vim/ | |---- .vimrc | |---- base.vim | `---- bundle.vim |---- vscode/ | |---- install-vscode-extensions.sh | |---- settings.json | `---- vscode-extensions |---- editor.sh |---- macos.sh `---- terminal.sh
なんとか形になりました。
まとめ
今まで実施した環境構築のステップをスクリプト化することができました。
このdotfiles
ディレクトリをユーザーのホームディレクトリ直下に配置して各スクリプトを実行すれば、
ほとんど作業なしに現在のMac環境を再現できるようになります。多分。