環境構築ほど面倒なものはない
macを買い換えたときに、開発環境をそっくりそのまま移行するのって、とても面倒なので、どうにか簡潔にできないかって思ったところ「dotfile」「mackup」などがあるらしく。それらの設定ファイルを「git」で管理して、いつでもどこでも同じような開発環境が構築できるようにします。
作業の流れ
homebrewなどを整理する
意外とインストールばっかりで整理しないmacportsやhomebrewを掃除します。これだけで数GBの容量が稼げる場合があるので、容量が足りない人は実行してみる価値ありです。
これらのサイトが参考になりました。 qiita.com qiita.com
masを導入する
App Storeからインストールする必要のあるアプリをCLIからインストールできる仕組み。 homebrew-bundle にも対応しているので、homebrew-bundle経由でインストールを実行することも可能です。 次に説明する homebrew-cask もだが、自分の使う全てのMacで必要なもの(エディタとかSNS, ブラウザとか)はこれで導入することにした。
brew install mas
mas list
で現在のmacに入っているアプリでApp Store経由でインストールした物が表示される。
~ via Node v10.14.2 ✦ ❯ mas list 1333542190 1Password 7 (7.4.1) 405399194 Kindle (1.26.1) 441258766 Magnet (2.4.5) 844918735 PicGIF Lite (2.0.8) 497799835 Xcode (11.3) 409183694 Keynote (9.2.1) 425424353 The Unarchiver (4.1.0) 823766827 OneDrive (19.192.0926) 803453959 Slack (4.2.0) 409201541 Pages (8.2.1) 539883307 LINE (5.20.1) 1176895641 Spark (2.5.1) 409203825 Numbers (6.2.1) 897118787 Shazam (2.9.0)
次に説明する homebrew-bundle と連携させることができるが、直接masを触ることはなく、インストールされていれば自動的にピックアップしてくれるようなので、masに関しては一旦これで終わり。
homebrew-bundleを導入する
Brewfileというファイルを作っておいてその中に必要なものを書いておいてbrew bundleコマンドで複数パッケージをまとめてインストールすることができるみたいです。しかも「mas」のリストを自動的にdumpしてくれるという優秀ぶり。
brewが入っていればbrew bundle
と実行するだけで初期設定を行ってくれる。初回起動時は Brewfile が見つからないと言われるが、実行できる状態にはなっている。
~ via Node v10.14.2 ✦ ❯ brew bundle ==> Tapping homebrew/bundle Cloning into '/usr/local/Homebrew/Library/Taps/homebrew/homebrew-bundle'... remote: Enumerating objects: 92, done. remote: Counting objects: 100% (92/92), done. remote: Compressing objects: 100% (82/82), done. remote: Total 92 (delta 5), reused 32 (delta 4), pack-reused 0 Unpacking objects: 100% (92/92), done. Tapped 1 command (190 files, 266.9KB). Error: No Brewfile found
現在インストールされているパッケージをピックアップするためにdump
を指定して実行すると、ファイルとして書き出してくれるようだ。これをdotfilesで管理することで、どのmacでも同様のパッケージを維持することができる。ファイルの中身は後々編集するとして、dotfilesへファイルを移動して、シンボリックリンクを作ることを忘れないように。
brew bundle dump mv Brewfile dotfiles/ ln -s dotfiles/Brewfile .
masが入っているので、dumpによって生成されたファイルを確認すると、ファイルの下の方にmasの行があることが確認できるはずだ。。。すごい。
: : mas "1Password 7", id: 1333542190 mas "Keynote", id: 409183694 mas "Kindle", id: 405399194 mas "LINE", id: 539883307 mas "Magnet", id: 441258766 mas "Numbers", id: 409203825 mas "OneDrive", id: 823766827 mas "Pages", id: 409201541 mas "PicGIF Lite", id: 844918735 mas "Shazam", id: 897118787 mas "Slack", id: 803453959 mas "Spark", id: 1176895641 mas "The Unarchiver", id: 425424353 mas "Xcode", id: 497799835
homebrew-caskを使うようにする
App Storeで配信されていないアプリ(.pkgなど外部からインストールするアプリ)をCLIでインストールするために使います。caskの利用設定はこちらの記事が参考になります。 qiita.com
自分のインストールしているアプリがcask
に対応していれば、caskからのインストールに置き換える方が今後簡単に環境を移行することができます。
(※ 基本的に最新バージョンしかインストールすることができないようです。ダウングレードインストールもできるようですが、骨が折れそうな作業をしている方が多数だったためオススメしません。その場合は手動でインストールする方がよさそうです。)
自分のインストールしたいアプリが対応しているか検索してみましょう(例: google chrome)
~ via Node v10.14.2 took 2s ✦ ❯ brew search chrome ==> Formulae chrome-cli chrome-export ==> Casks chrome-devtools epichrome homebrew/cask-versions/google-chrome-canary chrome-remote-desktop-host google-chrome homebrew/cask-versions/google-chrome-dev chromedriver mkchromecast dmm-player-for-chrome homebrew/cask-versions/google-chrome-beta
こんな感じで検索結果が出てくるので「Casks」の部分に注目してください。「google-chrome」があると思うので、cask経由でインストールできそうです。caskでインストールするアプリの詳細をみたい場合にはinfoコマンドを利用します。
~ via Node v10.14.2 ✦ ❯ brew cask info google-chrome google-chrome: 79.0.3945.130 (auto_updates) https://www.google.com/chrome/ Not installed From: https://github.com/Homebrew/homebrew-cask/blob/master/Casks/google-chrome.rb ==> Name Google Chrome ==> Artifacts Google Chrome.app (App)
Casksにない場合はCLIインストールができないので、手動インストールになります。 (※ homebrew-caskにプルリク発行して追加してもらうっていうやり方もあるみたいです。) qiita.com
各環境ファイルを保存するディレクトリ作成
とりあえず「~/dotfiles」を管理するファイルを集めるディレクトリとしておきます。このディレクトリに「.zshrc」「.mackup.cfg」とかを入れて、それらのファイル群を「git」で管理します。gitでリポジトリを作成してリポジトリのリンクを取得しておいてください。
cd mkdir dotfiles ; cd dotfiles ; git init git push --set-upstream origin master echo "# dotfiles" >> README.md ; git add README.md git commit -m "first commit" git remote add origin https://github.com/xxxxxxxxxxx/yyyyyyyyy.git git push
これでgitにコミットできるようになりました。今後「dotfiles」内のファイルを変更した時にはコミットするようにしましょう。
.zshrc
「~/.zshrc」を「~/dotfiles/.zshrc」にコピーしてシンボリックリンクを作っておきます。
cd mv .zshrc dotfiles/ ln -s dotfiles/.zshrc .
いままで「oh-my-zsh」を使ってたんですが、これが死ぬほど重くなって使えなかったので、これを機に使うのをやめました。結果、現在の.zshrcの中身はこんな感じ(※ aliasとかPATH設定は除いて記載してます)
# Tabで選択できるように zstyle ':completion:*:default' menu select=2 # 補完で大文字にもマッチ zstyle ':completion:*' matcher-list 'm:{a-z}={A-Z}' # ファイル補完候補に色を付ける zstyle ':completion:*' list-colors ${(s.:.)LS_COLORS} setopt auto_param_slash # ディレクトリ名の補完で末尾の / を自動的に付加し、次の補完に備える setopt mark_dirs # ファイル名の展開でディレクトリにマッチした場合 末尾に / を付加 setopt auto_menu # 補完キー連打で順に補完候補を自動で補完 setopt interactive_comments # コマンドラインでも # 以降をコメントと見なす setopt magic_equal_subst # コマンドラインの引数で --prefix=/usr などの = 以降でも補完できる setopt complete_in_word # 語の途中でもカーソル位置で補完 setopt print_eight_bit # 日本語ファイル名等8ビットを通す setopt extended_history # record timestamp of command in HISTFILE setopt hist_expire_dups_first # delete duplicates first when HISTFILE size exceeds HISTSIZE setopt share_history # 他のターミナルとヒストリーを共有 setopt histignorealldups # ヒストリーに重複を表示しない setopt hist_save_no_dups # 重複するコマンドが保存されるとき、古い方を削除する。 setopt extended_history # $HISTFILEに時間も記録 setopt print_eight_bit # 日本語ファイル名を表示可能にする setopt hist_ignore_all_dups # 同じコマンドをヒストリに残さない setopt auto_cd # ディレクトリ名だけでcdする setopt no_beep # ビープ音を消す # コマンドを途中まで入力後、historyから絞り込み autoload -Uz history-search-end zle -N history-beginning-search-backward-end history-search-end zle -N history-beginning-search-forward-end history-search-end
mackup
mackupを利用すれば、設定ファイルなどを特定のディレクトリに同期・特定のディレクトリからリストアすることができるので、各アプリケーションの環境設定を1から設定することなく移行することができるみたいです。
とりあえずインストールしておきます。
brew install mackup
このmackupの設定ファイルが「~/.mackup.cfg」を読み込むようになっているので、手動で「~/dotfiles/.mackup.cfg」を作ってシンボリックリンクを作っておきます。
cd dotfiles touch .mackup.cfg cd ln -s dotfiles/.mackup.cfg .
以下の内容を.mackup.cfg
に書き込みます
[storage] engine = file_system path = dotfiles
ここで注意が必要で「dotfiles」で「.bashrc」などを管理して、さらに別の場所にインストールしてシンボリックリンクを貼る、 みたいな設定をしてる場合にはちょっと注意が必要で、 mackupをしてしまうと一度mackupのシンボリックになり、uninstallすると 実体そのものが「~/.bashrc」に作られるので元のdotfilesとのリンクが切れてしまいます。
なので、dotfileで管理するものはバックアップしないように指定しておきます。mackup自身もdotfileで管理する場合にはmackupもignore指定してください。
mackup list
を実行すれば、対象のアプリケーション名が表示されるので、そこからピックアップして設定してください。[applications_to_ignore]を追記することで、環境設定をバックアップしないアプリケーションを指定することができます。
[applications_to_ignore] bash vim zsh mackup # 必要に応じて追記してください。
そしてmackup backup
を実行します。自分の場合はAdobe Illustratorのバックアップでエラーがでていたので環境設定をバックアップしない方向性にするので.mackup.cfg
に以下を追記します。
[applications_to_ignore] illustrator
とりあえずここまでにして、時間見つけて「その2」を書き上げます...。