Skip to content

macOS Tahoe 26.3.1を初期セットアップをする

M4チップを搭載したMac miniへmacOS Tahoe 26.3.1を初期セットアップする手順をメモしておきます。

検証環境

対象 バージョン
ハードウェア Mac mini 2024
Chipset Apple M4 Chip
メモリ搭載量 16GB

OSの再インストール

macOS Tahoe 26.3.1インストール用USBメモリの作成

現時点で最新のmacoSであるmacOS Tahoe 26.3.1の新規クリーンインストール用USBメモリを作成します。以前のmacOSであればApp Storeからインストーラをダウンロードできたました。ですがmacOS 26.3.1はApp Storeからダウンロードできません。その為、CLIでインストーラをダウンロードします。インストール可能なOSバージョンは以下のコマンドで確認できます。

softwareupdate --list-full-installers

実際の実行例は以下の通りです。

% softwareupdate --list-full-installers
Finding available software
Software Update found the following full installers:
* Title: macOS Tahoe, Version: 26.4, Size: 17811245KiB, Build: 25E246, Deferred: NO
* Title: macOS Tahoe, Version: 26.3.2, Size: 17514167KiB, Build: 25D2140, Deferred: NO
* Title: macOS Tahoe, Version: 26.3.1, Size: 17509994KiB, Build: 25D2128, Deferred: NO
* Title: macOS Tahoe, Version: 26.3, Size: 17102233KiB, Build: 25D125, Deferred: NO
* Title: macOS Tahoe, Version: 26.2, Size: 16975578KiB, Build: 25C56, Deferred: NO
* Title: macOS Tahoe, Version: 26.1, Size: 16890687KiB, Build: 25B78, Deferred: NO
* Title: macOS Sequoia, Version: 15.7.5, Size: 15288972KiB, Build: 24G624, Deferred: NO
* Title: macOS Sequoia, Version: 15.7.4, Size: 15284807KiB, Build: 24G517, Deferred: NO
* Title: macOS Sequoia, Version: 15.7.3, Size: 15286709KiB, Build: 24G419, Deferred: NO
* Title: macOS Sequoia, Version: 15.7.2, Size: 15285166KiB, Build: 24G325, Deferred: NO

インストーラはファイルサイズが大きい為、ダウンロード完了までにはかなり時間がかかります。

sudo softwareupdate --fetch-full-installer --full-installer-version 26.3.1

インストールがダウンロードできたらインストール用USBメモリを作成します。

sudo /Applications/Install\ macOS\ Tahoe.app/Contents/Resources/createinstallmedia --volume /Volumes/USB-VOL-NAME

macOSの再インストール

リカバリーモードで起動し、macOSをクリーンインストールします。リカバリーモードで起動する方法はアーキテクチャによって異なります。Apple Silicon搭載モデルの場合、電源オフ状態から電源ボタンを押したまま待っているとリカバリーモードで起動できます。ただ、macOSのインストーラからはディスクユーティリティを起動することもできず、「上書きインストール」になってしまうようです(クリーンインストールする方法がわかりませんでした)。その為、以下の順序で作業します。

  1. リカバリーモードで起動
  2. Optionを選択。その後にディスクユーティリティで既存パーティションを「消去」する
  3. 電源オフ
  4. 再度、リカバリーモードで起動する
  5. USBメモリを選択。macOSをインストールする

OS再インストール後の初期設定

SIPの一部無効化

yabaiを使って仮想デスクトップの切り替えを行うのですが、yabaiの機能をフル活用するにはSIP(System Integrity Protection)を一部無効化する必要があります。

タイルベースなウインドウマネージャの代表格としてi3があります。macOSの場合はAeroSpaceAmethystなどが有名です。ですが、これらは仮想デスクトップを切り替える際にmacOSの仕組み上、「画面切り替えのアニメーション」が挿入されます。このアニメーションは最近のmacOSだと通常の方法では無効化できなくなっているそうです。ただし、yabaiであればセキュリティレベルは低下するもののSIPを無効化し、スクリプトを追加(挿入)することで画面切り替えのアニメーションを無効化することができます。

SIPを無効化する手順はDisabling System Integrity Protectionに記載されています。具体的にはリカバリーモードで起動した後、ユーテリティからターミナルを起動して以下を実行します。

csrutil enable --without fs --without debug --without nvram

実際の実行例は以下の通りです。

# csrutil enable --without fs --without debug --without nvram
 csrutil: Requesting an unsupported configuration. This is likely to break in the future and leave your machine in an unknown state.
 Turning off System Integrity Protection. requires modifying system security.
 Allow booting unsigned operating system and any kernel extentions for OS "Macintosh HD"? [y/n]: y

 Authorized user: USERNAME
 Password       :
[System Integrity Protection is on.
 Restart the machine for the changes to take effect.

設定が完了したらmacOSを再起動します。

パスワード無しでのsudoを許可する

(セキュリティを弱体化させる為、自己責任での設定です) パスワード無しでsudo出来るように設定します。visudo を実行します。

sudo visudo

パスワード無しでsudoさせたいユーザにNOPASSWD:ALL設定を追加します。

USERNAME         ALL = (ALL) NOPASSWD:ALL

ディスプレイ

私は2枚のディスプレイを以下のように使い分けています。

場所 向き 役割 用途
左側 メインディスプレイ エディタ、ターミナル、メーラ、動画視聴など
右側 サブディスプレイ Webブラウジング、チャットなど

具体的にはディスプレイを以下の配置設定にしています。

image

image

壁紙

壁紙は単色にします。

image

スクリーンセーバ

スクリーンセーバは無効化します。

image

アクセシビリティ

視認性を上げる為、マウスカーソルの表示サイズを大きくしておきます。

image

デスクトップとDock

以下のように設定しました。

image

ホットコーナーの設定は好みです。

image

ロック画面

以下のように設定しました。セキュリティは低下してしまいますが、ディスプレイをオフしないようにします。

image

Finder

以下のように設定しました。

一般

image

サイドバー

image

詳細

ファイルの拡張子を表示するように設定します。

image

ステータスバーとパスバー

Finderにステータスバーとパスバーを表示するように設定しておきます。

image

image

インストール

Homebrew

パッケージマネージャとして定番のHomebrewをインストールします。まず、XCodeのCommand Line Toolsをインストールします。

xcode-select --install

次にHomebrewをインストールします。

/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"

JankyBorders

JankyBordersでウインドウの枠を強調表示するを使うとアクティブウインドウの枠線を太くしたり、色を変えたり、強調表示できます。Homebrewでインストールします。JankyBordersの設定はyabaiから行います。

brew tap FelixKratz/formulae
brew install borders

yabaiとskhd

yabaiでウインドウ管理を行います。また、skhdでyabaiの操作にショートカットを割り当てます。まずHomebrewでyabaiとshkdをインストールします。

brew install \
  asmvik/formulae/yabai \
  asmvik/formulae/skhd

yabaiが管理者権限でコマンドを実行できるようにする為、/private/etc/sudoers.d/yabaiに設定を追加します。以下を実行して表示されたワンライナーをコピーしておきます。

echo "$(whoami) ALL=(root) NOPASSWD: sha256:$(shasum -a 256 $(which yabai) | cut -d " " -f 1) $(which yabai) --load-sa"

コピーした内容を/private/etc/sudoers.d/yabaiというファイルを新規作成し、このファイルに貼り付けます。

sudo visudo -f /private/etc/sudoers.d/yabai

次に設定ファイルを新規作成します。以下の内容で~/.config/yabai/yabaircを新規作成します。

~/.config/yabai/yabairc
1
2
3
4
5
#!/usr/bin/env sh
sudo yabai --load-sa
yabai -m signal --add event=dock_did_restart action="sudo yabai --load-sa"
yabai -m config layout float
borders active_color=0xcc00ff80 width=6.0 &

同様に以下の内容で~/.config/skhd/skhdrcを新規作成します。

~/.config/skhd/skhdrc
1
2
3
4
ctrl - 1 : yabai -m space --focus 1 && yabai -m space --focus 5
ctrl - 2 : yabai -m space --focus 2 && yabai -m space --focus 6
ctrl - 3 : yabai -m space --focus 3 && yabai -m space --focus 7
ctrl - 4 : yabai -m space --focus 4 && yabai -m space --focus 8

この状態では、まだyabaiは正しく動作しません。macOS 26 Tahoe blocks setting -arm64e_preview_abi boot-arg → scripting addition cannot load #2741に書かれているいますが、以下を実行します。

sudo nvram boot-args=-arm64e_preview_abi

これで設定は完了です。yabaiをサービスとして開始します。

yabai --start-service

次いでskhdをサービスとして開始します。

skhd --start-service

よく利用するツール群

よく利用するツールをHomebrewでインストールします。

brew install \
  awscli \
  axel \
  container \
  eza \
  ffmpeg \
  fping \
  jq \
  mas \
  mypy \
  neovim \
  nmap \
  node \
  pyinstaller \
  pytest \
  ripgrep \
  ruff \
  sheldon \
  skopeo \
  sshpass \
  telnet \
  tree \
  uv \
  xh

caskもインストールします。

brew install --cask \
  alt-tab \
  antigravity \
  biscuit \
  claude \
  claude-code \
  cleanshot \
  cmux \
  discord \
  font-udev-gothic-nf \
  fork \
  gimp \
  google-chrome \
  google-japanese-ime \
  go-task \
  karabiner-elements \
  keycastr \
  obsidian \
  openmtp \
  parallels-client \
  raycast \
  slack \
  the-unarchiver \
  tigervnc \
  tigervnc-viewer \
  transmit \
  vlc \
  voiceink \
  webex \
  wireshark-app \
  zoom

uncmnt

uncmntは対象ファイルからコメントなどを除外するツールです。これをインストールします。

sudo curl -fsSL https://github.com/sig9org/uncmnt/releases/download/v0.0.2/uncmnt_v0.0.2_darwin_arm64 -o /usr/local/bin/uncmnt
sudo chmod +x /usr/local/bin/uncmnt

Apple Storeからのインストール

App Storeからアプリケーションをインストールします。

ID アプリケーション
1230249825 VMware Remote Console
1295203466 Windows App
1368204906 ScreenPointer
1444383602 Goodnotes
1459748650 CompareMerge2
302584613 Kindle
539883307 LINE
mas install \
  1230249825 \
  1295203466 \
  1368204906 \
  1444383602 \
  1459748650 \
  302584613 \
  539883307

アプリケーションの設定

Google日本語入力

IMEとしてGoogle日本語入力を追加します。Google IMEはメンテナンスされなくなって久しいソフトウェアです。その為、一時期はmacOS標準のIMEを使っていたのですが、私には使いづらかった為、Google日本語入力に戻してしまいました…

image

image

zsh

zshの設定も(~/.zshrcではなく)~/.config配下で行うように変更します。設定ファイル用のディレクトリを作成します。

mkdir -p ~/.config/zsh

zshは起動時に必ず~/.zshenvを読み込みます。ここで「設定ファイルは~/.config/zsh配下にある」ことを設定します。

~/.zshenv
export ZDOTDIR=$HOME/.config/zsh

if [[ -f "$ZDOTDIR/zshrc" ]]; then
    source "$ZDOTDIR/zshrc"
fi

sheldon

zshのプラグインはsheldonで管理します。sheldonはRustで実装されており、高速に動作します。まずはじめにsheldonを初期化します。以下を実行すると設定ファイルである~/.config/sheldon/plugins.tomlが作成されます。

sheldon init --shell zsh

zshの起動時にsheldonを読み込むように設定します。

echo 'eval "$(sheldon source)"' >> ~/.config/zsh/zshrc

sheldonでzshのプラグインをインストールします。

sheldon add zsh-autosuggestions --github zsh-users/zsh-autosuggestions
sheldon add zsh-syntax-highlighting --github zsh-users/zsh-syntax-highlighting 
sheldon add zsh-completions --github zsh-users/zsh-completions

ssh

sshクライアントはデフォルトで~/.sshを参照します。これを~/.config/sshに変更します。

mkdir -p ~/.config/ssh
chmod 700 ~/.config/ssh
ln -s ~/.config/ssh ~/.ssh

Antigravity

Antigravityのマーケットプレイス設定はデフォルトだとOpenVSXが設定されています。これをMicrosoftのマーケットプレイスに変更します。Preferences -> Antigravity Settingsを開きます。

image

以下のように設定変更します。

項目
Marketplace Item URL https://marketplace.visualstudio.com/items
Marketplace Gallery URL https://marketplace.visualstudio.com/_apis/public/gallery

image

設定ファイルでは以下のように設定されます。

~/.config/antigravity/settings.json
{
    "antigravity.marketplaceExtensionGalleryServiceURL": "https://marketplace.visualstudio.com/_apis/public/gallery",
    "antigravity.marketplaceGalleryItemURL": "https://marketplace.visualstudio.com/items"
}

続けてプラグインをインストールします。初期状態でも幾つかのプラグインがインストールされていました。

初期状態でインストールされていたプラグイン
% agy --list-extensions
[createInstance] extensionManagementService depends on antigravityAnalytics which is NOT registered.
devsense.composer-php-vscode
devsense.phptools-vscode
devsense.profiler-php-vscode
golang.go
llvm-vs-code-extensions.vscode-clangd
meta.pyrefly
ms-python.debugpy
ms-python.python
ms-python.vscode-python-envs
redhat.java
shopify.ruby-lsp
vscjava.vscode-gradle
vscjava.vscode-java-debug
vscjava.vscode-java-dependency
vscjava.vscode-java-pack
vscjava.vscode-java-test
vscjava.vscode-maven

以下をインストールします。

agy \
  --install-extension 3w36zj6.textlint \
  --install-extension 4ops.terraform \
  --install-extension charliermarsh.ruff \
  --install-extension csholmq.excel-to-markdown-table \
  --install-extension davidanson.vscode-markdownlint \
  --install-extension devsense.intelli-php-vscode \
  --install-extension esbenp.prettier-vscode \
  --install-extension johnnymorganz.stylua \
  --install-extension ms-azuretools.vscode-containers \
  --install-extension pkief.material-icon-theme \
  --install-extension tamasfe.even-better-toml \
  --install-extension tomoki1207.vscode-input-sequence

設定ファイルは以下のように設定しました。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
{
  "editor.formatOnPaste": false,
  "editor.formatOnSave": false,
  "editor.formatOnType": false,
  // JSON
  "[json][jsonc]": {
    "editor.autoIndent": "advanced",
    "editor.defaultFormatter": "esbenp.prettier-vscode",
    "editor.formatOnSave": true,
    "editor.insertSpaces": true,
    "editor.tabSize": 2,
    "files.insertFinalNewline": true,
  },
  "json.schemaDownload.enable": true,
  // LUA
  "[lua]": {
    "editor.defaultFormatter": "JohnnyMorganz.stylua",
  },
  // Markdown
  "editor.codeActionsOnSave": {
    "source.fixAll.markdownlint": "explicit",
  },
  "[markdown]": {
    "editor.defaultFormatter": "DavidAnson.vscode-markdownlint",
    "editor.formatOnPaste": true,
    "editor.formatOnSave": true,
    "editor.formatOnType": true,
  },
  "markdownlint.config": {
    "MD007": { "indent": 4 },
    "MD010": false,
    "MD024": false,
    "MD025": false,
    "MD033": false,
    "MD034": false,
    "MD040": false,
  },
  "markdownlint.run": "onSave",
  // Python
  "[python]": {
    "editor.formatOnSave": true,
    "editor.codeActionsOnSave": {
      "source.fixAll": "explicit",
      "source.organizeImports": "explicit",
    },
    "editor.defaultFormatter": "charliermarsh.ruff",
  },
  // TOML
  "[toml]": {
    "editor.defaultFormatter": "tamasfe.even-better-toml",
    "editor.formatOnSave": true,
    "editor.insertSpaces": true,
    "files.insertFinalNewline": true,
  },
  // YAML
  "[yaml][dockercompose][github-actions-workflow]": {
    "editor.autoIndent": "advanced",
    "editor.defaultFormatter": "esbenp.prettier-vscode",
    "editor.formatOnSave": true,
    "editor.insertSpaces": true,
    "editor.quickSuggestions": {
      "other": true,
      "comments": false,
      "strings": true,
    },
    "editor.tabSize": 2,
    "files.insertFinalNewline": true,
  },
  // Other
  "editor.fontFamily": "UDEV Gothic NFLG",
  "editor.fontSize": 18,
  "editor.minimap.enabled": false,
  "editor.wordWrap": "on",
  "security.workspace.trust.untrustedFiles": "open",
  "sequence.replaceSelection": true,
  "editor.detectIndentation": false,
  "workbench.startupEditor": "none",
  "[dockercompose]": {
    "editor.insertSpaces": true,
    "editor.tabSize": 2,
    "editor.autoIndent": "advanced",
    "editor.defaultFormatter": "ms-azuretools.vscode-docker",
  },
  "editor.defaultFormatter": "esbenp.prettier-vscode",
  "terminal.external.osxExec": "Ghostty.app",
  "antigravity.marketplaceGalleryItemURL": "https://marketplace.visualstudio.com/items",
  "antigravity.marketplaceExtensionGalleryServiceURL": "https://marketplace.visualstudio.com/_apis/public/gallery",
  "workbench.iconTheme": "material-icon-theme",
  "python.languageServer": "Default",
  "window.autoDetectColorScheme": true,
}

cmux

設定に記載されていますが、cmuxの設定ファイルは~/.config/ghostty/configです。まず、空のファイルを作成します。

mkdir -p ~/.config/ghostty
touch ~/.config/ghostty/config

設定ファイルにはフォントだけ、指定しました。

~/.config/ghostty/config
1
2
3
4
5
font-family = "UDEV Gothic NFLG"
font-size = 22
copy-on-select = clipboard
term = xterm-256color
scrollback-limit = 10000000

タブを前後に移動するショートカットは押しやすいものが好みである為、以下のように変更します。

アクション ショートカットキー
次のサーフェス Ctrl+]
前のサーフェス Ctrl+[
次のワークスペース Cmd+]
前のワークスペース Cmd+[

変更前

image

変更後

image

KeyCastrの設定

KeyCastrの設定を行います。

image

Terraform

Install Terraformに記載されている手順でインストールします。

brew tap hashicorp/tap
brew install hashicorp/tap/terraform

OfficeとOneDrive for Business

Microsoft OfficeとOneDrive for Businessをインストールしておきます。