Mac の移行と dotfiles

目次

概要

はじめに

急に欲しくなって MacBook Air M5 をプライベート用の PC として購入しました。 色は Starlight です。 エレガントです。

ちなみに1か月くらい前の話です。 書きかけで放置していたことを今更思い出しました。

それまで使っていたのが MacBook Pro M1 だったのですが、それなりにカクつくシーンが出てきたこと、 Air が私の開発では十分な性能で物理的に軽量だったこと、最近自作キーボードをするなどして US 配列がメインになっており旧 Mac の JIS 配列が使いづらくなってきたことなどが購入動機です。

元も Mac なので移行アシスタントを使えば容易にセットアップできたのですが、たくさんゴミも残っている作業環境だったこともあり掃除も兼ねて1から作り直しました。 忘備録ついでに dotfiles 管理の参考になると嬉しいなと思いブログを書いています。

対象読者

  • 自分
  • dotfiles 管理に興味がある方

購入前

スペックの決定

メモリ / M5 チップ

AI の性能向上によって並行してあらゆる処理が行われる未来を想像すると、ここはケチることができないと判断して、一番多い 32 GB を選択しています。

32 GB の場合は問答無用で強い方のチップになりました。

ストレージ

基本的にローカルストレージに保存するデータは最小限にして、 Google Drive, Google Photo, GitHub, 1Password あたりに格納しています。 端末のポータビリティを高めるための重要な思想だと考えています。

特にデータを格納しない前提なので Mac は 500 GB ストレージを選んでいます。 (11月になって、 Docker Sandboxes のような micro VM も使い始めたので、ちょっとミスったかもと思っています)。

dotfiles の整理

asdf -> mise

元々 asdf が dotfiles のレギュラーだったのですが、微妙に mise を使っている場所もあって気持ち悪い状況になっていたので mise に全部揃えるよう調整しました。

環境変数の PATH の検索などを mise 経由にしたり、 asdf の設定ファイルを削除して mise の設定ファイルを足したり程度の話で、 AI が一瞬で書き換えてくれました。

ついでに、言語だけでなくuv と betterleaks も mise 管理に寄せました。 uv は Homebrew よりも mise で扱った方が開発環境の構築が容易だったことを覚えているのですが、 betterleaks をなぜ mise で管理しているのかは正直覚えていません。 開発用途のツールチェインは mise に寄せようという意図があったのかもしれないです。

karabiner

karabiner の設定ファイルは dotfiles に入れて symlink を張るスクリプトも用意していたものの、気づけば symlink が切れてしまうという症状に見舞われていました。

どうやら GUI 側で karabiner を設定すると保存する際にファイルを上書きするのではなく、別のファイルを作ってから入れ替えるというような工程を踏むようで、その影響で symlink が途切れていたと AI 先生に解説いただきました。 ディレクトリごと symlink を張るのが良いとのことだったのでそのように修正しました。

Brewfile

絶対に入れると考えているものについては Brewfile で管理するようにしました。

以前すべてのアプリを Brewfile で管理しようとして dump を手動でするのも自動化するのも面倒だったため諦めていたのですが、必須かつ最小限に絞ればそもそもメンテがあんまりいらないと気づきました。 昔は mas を使って App Store 経由のものなども対象にしていた気がするのですが、すっぱりやめています。

知らぬ間に Brewfile で管理できるものが増えていたらしく、 npm やら go のツールも対象にできたようになったと言われた記憶がぼんやりあるのですが、先述の mise で細かいものは管理するようにしたので、特に使わなかったです。

1Password SSH Agent

Brewfile で 1password-cli なども入れるようにしたため、 1Password に依存した開発環境の構築をしても良いかと判断しました。 gitconfig などにそれ用の設定をくわえています。

若干面倒というか何をしているんだこれは?というような仕組みだったので AI に解説してもらいながら移行を行いました。

setup スクリプト

最重要だった項目です。

今は昔、 Linux 環境の開発環境を作っては壊しする必要があった際に重宝していたスクリプト群があって、ついでに Mac 用のものも並べていたのですが、 Linux 環境をほとんど使わなくなってからはメンテをしていない状況でした。 多分実行はできないけど環境構築の参考にはなるからいいかと思ってこれまで放置してきたのですが、新しい Mac を待つこのワクワクした状態のうちに整備も駆け抜ければ良いのではないかと思い、整理をスタートしました。

重要な調整項目は以下です。

  • setup スクリプトを回せば Terminal の環境構築が全部終わるように、 alacritty と SSH Agent の install も加えた
  • CI が現実的な時間で終わって flaky にならないように、スクリプトを core と full に分けて CI では core のみ回すようにした

chore

  • 手元で差分が出て煩わしかった settings.local.json の ignore
  • deprecated になった tree-sitter の言語の削除
  • AI にレビューさせたらわらわら見つかった typo や設定ミス
  • anyframe を削除して自作の薄い fzf ラッパーを作成

あたりを調整しました。 新居に行く前の掃除です。

データの確認

前述の通り、データはクラウドを原則としているものの、今回は古い Mac は手元に残さず Apple Trade In にて下取りしてもらう予定だったため、万が一ローカルにしかないデータがあれば大変ということで念のため PC 全体を確認しました。

結果として、クリティカルなデータは残っていませんでした。 チェックの途中で、 1 Password の SSH Agent への移行をずっと積み残していたことを思い出せたのは成果でした。

移行

端末設定

  • トラックパッドのカーソル移動速度
  • キーボードのリピート速度

あたりを最初に変更した記憶があります。 最速に設定しておかないと操作のたびにイライラしてしまうので。

setup スクリプト

驚くほどスムーズに進みました。 terminal を開いてとりあえず setup スクリプトを回したら普通に成功しました。

最初の alacritty 起動時に zplug がうまく plugin を install できなかったトラブルは確かあったような気がします。 その他は特に何も問題が起きず旧 PC と同じ構成が再現できました。

デスクトップアプリ

Google Chrome, 1Password, Raycast, Discord, Slack などなどデスクトップアプリの設定はそれぞれアプリを開いてからやる必要がありました。

操作自体は別に良いのですが、抜け漏れを考えるのが面倒臭かったです。 今思えば Brewfile を見せながら AI に指示して貰えば良かったですね。

だいたいはここの設定に時間がかかって、全部のセットアップが完了するまでに30分程度くらいはかかったかなと思います。

移行後のおまけ

dotfiles の調整

zplug -> sheldon

以前から zplug が開発されていないことは知っていたのでどこかで移行したいと思っており、今回の移行で意図しない挙動がでたこととを受けて、移行を行うことにしました。

zinit と sheldon が候補に上がったのですが、 zinit は何かコミュニティ周りがややこしそうだったので、 sheldon にしました。 sheldon の方が宣言的で好みだったみたいなのもあった気がするのですが、ちょっと覚えておらず...。

レガシーの削除

使っていない Linux の setup スクリプト、 .atom, .jupyter などを削除しました。

git 管理しているためいつでも参照できますし、 AI に渡すコンテキストが汚れるので不要なものは削除しておいた方が良いなと。

font size

font size を大きくしました。 最近視力は衰え乱視も酷いので...。

font size を大きくしたら、文字が大きくなって見やすくなったのでおすすめです。

今後やりたいこと

mise

mise の方で Mac の端末設定をやってくれたり、 dotfiles 管理をしてくれたりする機能があるっぽいので良さそうなら導入したいです。 特に端末設定はやる価値がありそうに感じています。

dotfiles 管理は symlink を片っ端から貼っていくシェルスクリプトを自前で管理していてそこまで困ってはいないのですが、一応キャッチアップはしておきたいですね。

AI ハーネスとしての dotfiles

AGENTS.md や .claude などのハーネスの設定ファイル管理は今できていません。 また、 AI エージェントに私の好みや設計思想を伝えたり、そのためのツールを作ったりすることはもしかしたらコスパが良い作業になるかもしれないと思っています。 dotfiles も AI の台頭によってどっと進化していく必要があるわけですね。

感想

dotfiles 盆栽はとても楽しいということを思い出してしまいました。 また時間が溶けていくかもしれません。

設定ファイルや設定のための簡単なスクリプトの調整において AI は最強でした。 AI がない時代にこの量の調整をしようと思うと、各アプリケーションのドキュメントをブラウザで調べたりブログをハシゴしたり最悪ソースコードを読んだりというふうになったと思うのですが、今は AI エージェントによろしく伝えるだけでどういう設定項目がどういう意図で存在するのかがわかります。

Vim 界隈では「設定しなくてもいい感じに動く」プラグイン流儀と「設定させていただける」プラグイン流儀が良く話に上がったりしますが、 AI エージェントが設定を調べてくれるので今後は設定項目が多いことのメリットが大きくなってくるかもしれないと感じました

最後に、 AI が調整をしてくれるようになって dotfiles 盆栽の楽しみが損なわれたかというと、むしろより楽しくなったように感じています。 盆栽の醍醐味は調整した環境を使ってあーでもないこーでもないとやることだと思っているので、調整作業自体を代打して高速で仕上げてくれる存在はフィードバックサイクルが高速化してとても良かったです。

Mac の買い替えを次いつできるか、できたとしておいくら万円になっているのか考えるのが怖いですが、その日が来ても移行が面倒という理由で先延ばしにならないように準備を続けようと思います。