🍎

パフォーマンスを最大化するためのMac初期設定

2024/04/19に公開

5年ぶりにMacを買いました。
備忘録を記すにはいい機会なので、初めにやっておくべき初期設定や環境構築をまとめておきます。

前提としてミニマリズムを尊重します。使わないものは入れないし設定しません。その関係で、極力デフォルト設定を優先します。最適なUXのために開発者が考え抜いた結果をまずはリスペクトしたい。

最初から全ての環境や設定の最適化を目指すことは困難ですが、可能な限りエッセンシャルな環境設定を目指します。

修正や追加があれば随時更新します。

デバイス環境

  • Mac
    • Mac Mini / Apple M2 Pro / 16GB / 512GB / Ventura 13.5
  • ディスプレイ
    • LG 40WP95C-W
  • キーボード
    • HHKB Professional2
  • マウス
    • logicool MX ERGO
  • スマホ
    • Google Pixel 8

他にもありますが、今回の設定に関連するのはこんなもんです。
Macは好きですがiPhoneは好きになれません。

システム設定

MacOS標準のシステム設定アプリの基本的な動作設定から始めます。

  • 外観
    • 外観モード: 自動
  • アクセシビリティ
    • キーボードショートカットを使ってズーム: オン
  • SiriとSpotlight
    • Siriに頼む: オフ
  • デスクトップとDock
    • Dockを自動的に表示/非表示: オン
    • ホットコーナー: 右下に ディスプレイをスリープさせる
  • ディスプレイ
    • Night Shift
      • スケジュール: 日の入りから日の出まで
  • キーボード
    • キーのリピート速度: 最速
    • リピート入力認識までの時間: 最短
    • キーボードショートカット
      • キーボード
        • 次のウィンドウを操作対象にする: ⌘ Esc
  • マウス
    • 軌跡の速さ: 最速

Zsh

Zshフレームワークを入れます。フレームワーク使っても使わなくてもいいと思いますが、僕は管理コストを最小限にするため入れてます。

以前はPreztoを使ってましたが、より高速と言われるzimを使います。

https://github.com/zimfw/zimfw

インストールするとホームディレクトリ配下に以下の隠しファイル群が作成されていることが確認できます。

-rw-r--r--   1 yukichi  staff   54782  4  4 12:47 .zcompdump
-rw-r--r--   1 yukichi  staff   57881  4  4 12:47 .zcompdump.dat
-r--r--r--   1 yukichi  staff  131344  4  4 12:47 .zcompdump.zwc
drwxr-xr-x   7 yukichi  staff     224  4  4 12:47 .zim
-rw-------   1 yukichi  wheel    1574  4  4 12:47 .zimrc
-rw-------   1 yukichi  staff    1105  4  4 13:35 .zsh_history
drwx------   7 yukichi  staff     224  4  4 13:16 .zsh_sessions
-rw-------   1 yukichi  wheel    3587  4  4 12:47 .zshrc

.zim .zimrc .zshrc あたりをバージョン管理したいですね。

zimのmodulesやZshの更なる設定については今回必須ではないため割愛。

Package Manager

アプリのインストールは可能な限りHomebrewを使ってコマンドラインから行います。
理由はApp Store経由でインストールできるアプリが少ないからです。App Storeによるアプリ管理方法を主体としてもカバーしきれません。
また、インストールしたアプリやコマンドラインツールの一覧(Brewfile)をバージョン管理したいというのも理由にあります。

https://brew.sh/ja/

インストールすると次の指示が出力されます。

==> Next steps:
- Run these two commands in your terminal to add Homebrew to your PATH:
    (echo; echo 'eval "$(/opt/homebrew/bin/brew shellenv)"') >> /Users/yukichi/.zprofile

指示に従い .zprofile を作成して完了です。

Applications

前述の通り、アプリのインストールは原則Homebrew経由で実行し管理します。

Google Chromeをインストール
brew install --cask google-chrome

ものによっては、HomebrewのCaskに登録されていないものもあります。
ではどうインストールするかというと、パターンとしては以下のいずれかになります。

  1. App Storeでダウンロード可能
  2. 製品サイトからダウンロード可能

では、個人的マストアプリをリストアップします。

Apidog

https://apidog.com/jp/
API開発における業務全てを任せられます。
以前は、HTTPクライアントとしてPostman、API設計ツールとしてStoplightの2つを使っていました。

AppCleaner

https://freemacsoft.net/appcleaner/
アプリをアンインストールしたときに残るゴミファイルを検出して削除してくれます。
アンインストールはHomebrewでやりますが、以下のSmartDelete設定を有効にしておくと、アプリ削除を検知して勝手に関連ゴミファイルをクリーンアップしてくれます。

変更した設定

  • Preferences
    • SmartDelete: ON

Arc

https://arc.net/
至高のブラウザ。
エンジニアに関わらず大抵のPCユーザーは、ブラウザアプリを触っている時間長いですよね。これ使うためにMac買うべきと言っても過言ではない。
Google Chromeを長年使っていましたが、とにかくタブがごちゃごちゃする問題が発生します。これを解決するためにworkonaというタブマネジャー拡張機能を使っていて満足してましたが、Arcは全てを解決しさらに期待を超えてきました。
ChromiumをベースにしているためChrome拡張機能も普通に使えます。設定周りもほぼChromeと同様です。ブックマークや拡張機能、保存パスワードなどが同期されるわけではなくインポートする形式なのは注意です。

変更した設定

  • Preferences
    • Max: Turn on all

Bitwarden

https://bitwarden.com/
Google ChromeからArcブラウザに移行してからパスワード管理が問題になってしまいました。というのもChromeのパスワードマネジャーを使っていたため、前述の通りArcと同期が取れません。
これといってこだわりがないので、無料でオープンソースのBitwardenに注目。
PCのArc/Chromeでも、スマホのChromeでも、クラウド同期による同じようなユーザー体験が可能となります。
フォルダ整理もできるし、ID/PASSWORD以外の第三の入力フォームがあるようなケースにも対応できるし、一つのアカウントに複数のサイトURLを設定できてログインページとアプリページのURLが異なるケースにも対応できるし、Chromeのそれより全然よかった。

Cursor

https://cursor.sh/
次世代AIエディタ。
Visual Studio Codeをforkして開発されているため見た目・操作感ともにとっつきやすい。
これまでは有料ライセンスのJetBrainを愛用してきましたが、VSCodeに移ろうかなと思ってたところだったので、さらに進化したCursorを使うことにします。

DeepL

https://www.deepl.com/
多言語翻訳ツール。
テキスト選択からのグローバルホットキーで素早く起動翻訳できます。
そんなに使ってないが、必要ないかと言われると必要。

Docker

https://www.docker.com/ja-jp/products/docker-desktop/
ローカル環境で開発するなら昨今コンテナは必須でしょう。

Dropbox

https://www.dropbox.com/
MacOS標準のFinderアプリとリンクしてオンライン同期フォルダを扱えるようになるので、ファイルバックアップやデバイス間同期に重宝します。

Finder (MacOS標準)

変更した設定

  • 表示
    • パスバーを表示
    • ステータスバーを表示

Kindle (App Storeのみ)

https://www.amazon.co.jp/kindle-dbs/fd/kcp
Amazonの電子書籍リーダー。
技術書はKindleデバイスで読むのは無理があるので、PCで読みます。
ブラウザでも読めますが、コード書きながら読んだりするとアプリ切り替えしたくなります。

Linear

https://linear.app/
開発者じゃなければ使う必要がないが、開発者ならば使うしかない、プロジェクトマネジメントツール。
ほぼ全てのアクションにエンジニアが大好きなショートカットが使えます。
GithubやFigmaなどの主要な開発サービスとも連携可能。

Logi Options+

https://www.logicool.co.jp/ja-jp/software/logi-options-plus.html
Logicool製品のソフトウェアカスタマイズができるアプリ。
MX ERGOというトラックボールマウスを使う上では必須です。
一つのマウスで数十のアクションをこなせます。超基本的な操作だけならキーボード使わなくても間に合います。
もう手放せなくなってしまいました。

Notion

https://www.notion.so/
個人でも法人でも最強の情報整理ツール。
色々な用途に使える汎用性の高さゆえに、あらゆる情報をここに集約することが可能です。メモ、ドキュメント、タスク、カレンダーなどなど。
こうまでなんでもできるとあらゆる情報をNotionで管理したくなりますが、あえて用途ごとに複数のアプリを利用することでコンテキスト境界を分けた方が、結果的に頭が整理され使いやすくなると思います。
僕の場合、PIM(Personal Information Management)の道具として利用しています。

Notion Calendar

https://www.notion.so/product/calendar
Googleカレンダーを見るためのデスクトップアプリとして使用。
デザインがすっきりしていて無駄なく好印象です。
Notionのデータベースと連携できるが、別に連携しなくても困らないかな。プロジェクトや仕事の予定をNotionで管理しているなら活用できそうです。
ブラウザのGoogleカレンダーとの違いで残念だったのは、ToDoリストが表示できないこと。他のカレンダーは表示できるんですけどね。

Obsidian

https://obsidian.md/
第二の脳を形成するためのノートアプリ。
個人的にNotionとは用途を区別していて、PKM(Personal Knowledge Management)用途。
類似サービスのScrapboxよりは使いやすく感じるが、データのクラウド同期が有料機能であるため、基本的にはダウンロード型のツールとなります。
なので、僕はVault(保管庫)にDropboxフォルダを指定し、スマホと同期できるように設定しています。

変更した設定

  • Preferences
    • Files and links
      • Default location for new attachments: In the folder specified below
      • Attachment folder path: attachments
    • Core plugins
      • Properties View: ON

Pocket (App Storeのみ)

https://getpocket.com/ja/about/
旧称:Read It Later。ブクマツールとして使用している人も多い印象だが、リーディングリスト管理ツールとしてのみ使用。

Raindrop.io

https://raindrop.io/
ブックマークマネジャー。
Chromeのブックマークはもう使ってないし、Arcはブックマークの概念がありません。

Raycast

https://www.raycast.com/
ランチャーアプリ。
RaycastとかAlfredとかのランチャーアプリはとかく機能が多く、効率とか生産性を上げることに最も貢献できるアプリです。
UIはとてもスッキリしており、ひたすら設定が必要なアプリにも関わらず、苦になるどころか楽しい。
便利なのは、スニペット、クリップボード、画面分割、ショートカットによるアプリや設定項目の呼び出し、電卓など。
なお、Extensionをストアからダウンロードすればより多くの機能が使えるし、Extensionを自分で開発すれば社内ツールとか個人用のツールまで用意できます。
ちなみに僕は元々AlfredClippyMagnetを使ってましたが、全ての用途をRaycastに乗り換えました。

変更した設定

  • Commands
    • Raycast
      • Create Quicklink: 適宜作成。Web URLを開くショートカットキーを設定できる。URLに変数を持たせて実行時に指定することもできる。
    • Snippets
      • Create Snippet: 適宜作成。一般入力との衝突を避けるため ;mail などプレフィックスに記号 ; を使って設定する。
  • Settings
    • Extensions
      • Add
        • Install From Store
          • Arc
          • Obsidian
          • Raindrop.io
      • Applications
        • Bitwarden: ⌥ B
        • Finder: ⌥ F
        • Slack: ⌥ S
        • Spark Desktop: ⌥ M
        • Twitter: ⌥ X
        • Warp: ⌥ W
      • Arc
        • Search Arc: ⌥ A
      • Clipboard History: ⇧ ⌘ V
      • Quicklinks
        • Search Google: ⇧ ⌘ G
      • Raindrop.io
        • Search Bookmarks: ⌥ R
      • Snippets
        • Search Snippets: ⇧ ⌘ S
      • Window Management: 画面分割のホットキーを設定。原則Magnetのデフォルトキーを参考にする。
    • Advanced
      • Auto-switch Input Source: ABC

Slack

https://slack.com
ビジネスコミュニケーションツールのデファクトスタンダードですね。

TablePlus

https://tableplus.com/
あらゆるデータベースに接続可能なクライアントアプリ。
これまでデータベースの種類に応じて、MySQL WorkbenchSquel ProPosticoMedis、JetBrainの機能などを使ってきたがこれら全て置き換えてしまう。
公式サイトにも

Supports a whole set of relational databases (and some NoSQL)

とあり、Amazon REDSHIFTやGoogle BigQueryなどのクラウドDWHまでカバーしている。
これだけのことができるとだけあって有料ライセンスが必要です。

Twitter (App Storeのみ)

https://twitter.com
言わずと知れた鮮度のいい情報メディア。
ホームはノイズも多いのでリスト機能を使ってタイムラインを区分してます。
以前はTweetDeckというアプリがあって使い勝手が良かったですが今ではTwitter本体に吸収され残念ながら有料機能となりました。

Warp

https://www.warp.dev/
AI搭載のモダンなターミナルアプリ。
見た目もおしゃれでこれまでのターミナルの概念を覆します。
iTerm2をずっと使ってきましたが、快適さとか生産性を上げるために設定いじったりtmuxtmuxinator入れたりしてました。
Warpはとりあえず使い始めるだけでも、欲しい機能やデザインが備わってます。
Rustで書かれていてサクサク動くのもいい。

変更した設定

  • Settings
    • Appearance
      • Prompt: Warp prompt
      • Text
        • Font size: 12
    • Keyboard shortcuts
      • Move Forward One Word: ⌥ F
      • Move Backward One Word: ⌥ B

Wrike

https://www.wrike.com/apps/mobile-and-desktop/desktop-app/
タスクおよびプロジェクトマネジメントツールです。
開発以外の業務でのタスク管理で使っています。
UI/UXが洗練されていて、柔軟性が非常に高いです。有料プランもありますが、無料でも十分使えます。
有料で嬉しい機能は、ダッシュボード機能、動的ガントチャート、カレンダー機能あたりかな。

Command Line Tools

前述の通り、コマンドのインストールも原則Homebrew経由で実行し管理します。
もっとありますがマストだと思うものを厳選しました。

git

https://github.com/git/git

プライベートレポジトリに接続するために認証鍵をGithubに登録します。

  1. SSHキーを作成
    ssh-keygen -t ed25519 -C "メールアドレス"
    pbcopy < ~/.ssh/id_ed25519.pub
    
  2. GithubアカウントにSSHキーを追加
    Key typeは「Authentication Key」を選択。
  3. 接続確認
    git clone git@github.com:プライベートレポジトリ.git
    

それから、初期設定もやっておく。

git config --global user.name "お名前"
git config --global user.email メールアドレス
git config --global core.editor vim

ghq

https://github.com/x-motemen/ghq
GitのようなVCSのレポジトリを一つのフォルダで一元管理できます。
デフォルトではホームディレクトリ配下の ghq ディレクトリにcloneしたレポジトリが格納される。
こんな感じ

/Users/yukichi/ghq/github.com/uqichi/dotfiles

fzf

https://github.com/junegunn/fzf
コマンドの出力結果などをインタラクティブにフィルタできます。
pecoよりもファジーに検索可能。
ghq や history コマンドと組み合わせて、ショートカットでインクリメンタルに選択した結果をバッファに呼び出すtipsが有名ですね。

jq

https://github.com/jqlang/jq
JSONデータの値の抽出や整形を容易にします。
シンタックスハイライトありで見やすくなります。

tig

https://github.com/jonas/tig
CUI gitクライアント。

eza

https://github.com/eza-community/eza
高級な ls であるexaの後継。
exaはメンテが終了してます。代わりにezaを使えとのこと。

bat

https://github.com/sharkdp/bat/tree/master
ファイルの閲覧、連携。シンタックスハイライトついてcatより見やすいです。

ripgrep

https://github.com/BurntSushi/ripgrep
多機能で高速な grep

fd

https://github.com/sharkdp/fd
find の一部機能がより使いやすくなります。

direnv

https://github.com/direnv/direnv
ディレクトリごとに環境変数を自動でset/unsetできます。
グローバル変数を汚さなくて済むので便利。

pwgen

https://github.com/jbernard/pwgen
パスワード生成に最適なランダム文字列生成ツール。

Discussion