🐅

Macを交換する度に行う面倒な初期設定を自動化する

に公開

はじめに

ITエンジニアとして働いていると、Macの初期設定を何度も行う機会があります。
私用PCであれば数年に一度ですが、会社支給のPCを利用していると意外と高頻度で初期設定を行うことになります。

メモや記憶を頼りに手作業で設定し、古いMacと見比べながら環境を構築して...気付くと半日が消えているなんてことも。

こんなこと毎回やってられない。。ということで調べてみたらシェルスクリプトを組んでいる人やAnsibleを使っている人など色んな初期設定の自動化パターンを見つけました。

入れるアプリや設定は人それぞれ好みがあるので、沢山の人の良いとこを参考にさせていただきながら自分なりに試行錯誤して、最終的にコマンドを2回叩くだけで設定が完了するように頑張って自動化しました。

ファイル構成はシンプルですし、なるべくコメントで説明を入れたりしているので、エンジニアではない人でも参考にしたりカスタマイズして使えるのではと思います。詳細は以下のリポジトリを参照ください。
https://github.com/fumi-mura/mac-auto-setup

手順の解説

リポジトリのClone

GitがセットアップされていればCloneできますが、初期はGitも設定されていないと思うので、CurlでリポジトリのZipをダウンロードするパターンも記載しています。

# If Git settings isn't complete.
$ cd ~ && curl -LO https://github.com/fumi-mura/mac-auto-setup/archive/refs/heads/main.zip && unzip -q main.zip && mv mac-auto-setup-main mac-auto-setup && rm main.zip

# If Git settings is complete.
$ git clone {this_repository}

setup_all(対象の全ファイルを実行)

このファイルを起点に各種シェルファイルを実行します。

pre_setup(事前準備)

最初に各種アプリケーションのインストールに必要なHomebrewや、dotfilesと言われる環境設定に必要なファイルも準備しています。

Homebrewアプリケーション

Homebrew公式サイトを参考にすると、パスを通したりと数回のコマンド実行が必要になってしまうため、自分の場合はpre_setupのシェルに記載の通りAppleSiliconに適した形でインストールするようにしています。

アプリケーションによっては直接アプリを開いて設定したり、ライセンスキーの認証が必要だったりと一部手動による設定が必要なものも存在します。
この辺りも自動化できたら嬉しいのですが、現段階では難しそうだったため{アプリ名}.mdファイルを作成しそれぞれ説明を記載しました。

ちなみにbrewからインストール可能なアプリケーション一覧は以下から確認可能です。
https://formulae.brew.sh/formula/
https://formulae.brew.sh/cask/

AppStoreアプリケーション

全アプリをbrewで管理できたら嬉しいのですが、中にはAppStoreからしかインストールできないものも存在します。

そこでmas-cliを使えばStoreのアプリもコマンドからインストールできるようになります。
前提としてmas自体はbrewでインストールします。操作感はbrewとよく似ているので、普段から使っている人はすぐに使いこなせると思います。

# インストール(pre setupでインストール済み)
$ brew install mas

# インストール済みアプリの確認
$ mas list

# アプリ名から検索
$ mas search {app_name}

# ID指定でインストール
$ mas install {id}

# ID指定でアンインストール(※AppStoreから手動インストールした場合は権限でエラーが出ます)
$ mas uninstall {id}

npmアプリケーション

記事執筆時点ではClaude Codeのみですが、開発用のパッケージなどはnpmでインストールが必要な場合もあるので、ここでインストールするようにしています。

システム設定

Dockのアイコン配置やキーボード設定、トラックパッドの挙動などのシステムに関する設定もコマンドで自動化できます。詳細は以下の公式ページを参照ください。
https://macos-defaults.com/

一部コマンドは対象のアプリケーションを再起動をしないと反映されないため、以下コマンドで最後にまとめて実行しています。

killall Dock
killall Finder
killall SystemUIServer

中にはMac自体を再起動しないと反映されないものも存在します。テストの度に再起動したら大変ですし、再起動は後から行いたい場合もあると思うのでyを押した時のみ実行するようにしています。

read -p "Some changes require a reboot to reflect. Would you like to reboot now? (y/N): " -n 1 -r
echo
if [[ $REPLY =~ ^[Yy]$ ]]; then
  sudo reboot
else
  echo "Reboot has been canceled. Please perform it manually later."
fi

まとめ

最初に作った時はHomebrewを事前にインストールする必要があったり、Cloneコマンド前提だったためGitの設定が必要であったり、自動化用のシェルを実行するまでに多くの手間がありましたが、最終的に2個のコマンドでシェルを実行するところまで簡略化できました。
勿論Gitを含めた一部アプリケーションはインストール後に手動で設定は必要なので、その辺りもさらに自動化できたらなと思っています。

作っている間は色んなアイデアが出てきますし、他の人のおすすめアプリや設定も取り入れたりしながら進めるのはとても楽しかったです。やはり自分はこういう自動化を考えたりするのが好きなんだと改めて実感しました。

毎回手動で設定を行っている方には是非この機会に自動化の快適さを体験して欲しく、この記事がそのきっかけになれば嬉しいです。

Discussion