ぼくのかんがえたさいきょうのmacOS環境構築(makoto-developerの場合)

# Inspire

https://zenn.dev/hasehiro0828/books/setup-awesome-environment/viewer/applications

↑これを見ていて「足りねーなぁ」と思ったので私のmacOSの環境設定を公開します。

# コンセプト

- 余計なアプリは入れない
- アプリの元々の機能を最大限まではっきさせる
    - Alfredとか入れると色々便利になることは認めますが、例えばブックマーク検索とかはchromeの機能で検索できます(後で解説)
- マウスを可能な限り使わない
- ショートカットを覚える

# dotfilesディレクトリを用意する

デベロッパーであればみんな持っているものなので説明は省略。

↓は私の設定です。

https://github.com/makoto-developer/dotfiles

# System

1. 言語は英語(US)にする
    General -> Language & Resion -> Preferred Language -> +ボタンで英語を追加
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/684725/c5dfee20-de28-8415-132e-9ca1235d77cc.png)
1. SpotlightをOnにする
    普段、アプリを切り替える時はSpotlightで探して開きます。
    こうすることのメリットは、
    - マウスをDockに当てて、アプリを探して、クリックする動作を省略できる
    - Dockにないアプリでもアプリ名さえわかっていればすぐに呼び出せる
    - 2文字目から候補が出てくるので、アプリ名全てを打ち込まなくても呼び出せる
    - タブ切り替えやMission Controlで目的のウィンドウを探す手間が省ける
        下↓の画像のようにウィンドウ一覧から目的のウィンドウを(例えばitermを)探すのがスマートではない。
        `Ctrl + Space` -> `it` -> Enterでitermを呼び出せます。システムの言語を`English`にしているのは、Spotlightでアプリを探すときに日本語だとローマ字で入力して変換という手間が省けて、英語だと入力したスペルの頭文字2-3文字くらいで省略して呼び出せるからです。
        業務だともっと開いているアプリが増えて探す手間がかかるのでSpotlightによるアプリ探しをおすすめします。
        ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/684725/0bddf83c-a379-244a-640f-31111de08aa2.png)
        例えばitermだと`itと入力, Enter`だけで呼び出せる。
        ![Screenshot 2023-12-10 at 22.13.39.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/684725/ce29bb31-fecc-0abf-ceb4-54170439b716.png)

    デメリットは、
    - アプリ名を入力しないといけない -> 慣れてください(スパルタ)


1. アニメーションなど余計な機能をオフにする
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/684725/2274782a-fc8c-95a0-77d3-efd405e27dcf.png)
1. Spotlightで余計な検索を排除
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/684725/f15ab6af-c7db-2401-fab8-2e460c0523df.png)
1. その他余計な機能をOffに
    1. Siri -> Off(みんな使っている？私は全然使っていない。英語の練習くらい？)
    1. Accessibility -> Shortcut -> 全てOff
        ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/684725/0b2727c6-64d0-42f3-fdcc-e987d9c4ac42.png)
1. Dockを左寄せ(これは好みで)
    - 自動で表示するように設定
    - Show Indicators -> Off(見えていると気になってしまうためOffに)
    - Stage Manager -> 使っていません。Offに
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/684725/e5726092-6949-b211-b472-b348f7dad83d.png)
1. Keyboard
    - Press `fn`key to -> Nothing
    - キーはあまり変えていない
        Spotlightを`ctrl + space`に
        ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/684725/1a3a3546-b697-7842-b0f1-2f5e374ef9d9.png)
        言語切り替えはoffに(Karabinerで割り当てたので必要ない)
        ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/684725/cab9ea39-c774-d769-6379-5218ea525190.png)
        あと、中国語に変換とか使わないのでOff
        ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/684725/836da5d9-69b9-5bed-46a2-96824f1c5a91.png)
    - Text Input -> Input Sources -> Edit
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/684725/c887a47c-9a26-70f7-6b57-225f3a4dc77c.png)

1. TrackPad
    - 通知を開くをOffに(あまり見ることはないでしょう)
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/684725/168d1ae3-d102-4ff3-a1ca-1831f73280fa.png)
1. Dockにある余計なアプリを削除する
    本当に必要なアプリだけ表示
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/684725/f343bbfb-fa1c-c6d7-5a0d-84601b4f1a29.png)



# ディスプレイ

外部モニターに繋いで作業しています。

設定をMacBookの画面を**外部ディスプレイにミラーリング**で設定しています。

複数ディスプレイで作業しません(なぜかは後で説明)

よくある、拡張画面にして外部モニターは開発の画面、MacBookはSlackなどチャットツールを表示、のスタイルを放棄しました。

# デスクトップを増やすのを禁止！`Cmd + Ctrl + F`によるウィンドウ最大化禁止！拡張ディスプレイ禁止！

スワイプで画面移動するのがだるいです。

スワイプとは、3本指で左右にトラックパッドを動かしてデスクトップを移動する、あれです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/684725/6267dff4-6104-423e-5a46-e5dfb8df0d58.png)

以下の操作を私自身に禁止させています

- Desktop1, Desktop2とデスクトップを増やす
- `cmd + ctrl + f`ウィンドウを最大化して別のデスクトップで作業する

ひとつのモニターだけで、1つのデスクトップエリアのみだけで開発をしています。

なぜか？macOSを使いたての頃はデスクトップをアプリごとに最大化してスワイプによって探して作業していました。しかし、

- デスクトップが増えるとトラックパッドのSwipe操作や`Cmd + 1/2/3/...`で切り替えることができるものの、探す手間がかかる
- 画面視差がうざい
- 新しくアプリを開くとどこのデスクトップに出てくるのかわからなくなる

解決に至った流れとしては、

マルチデスクトップだと目的のウィンドウを探しているうちに何をしていたか忘れる
-> じゃあ、1つのウィンドウだけで作業すればいい(`cmd + ctrl + f`を禁止)
-> 次に、どこのモニターにいるかわからないにイラつく(外部モニターとMacBookのディスプレイはミラーリング)
-> `cmd + tab`で同じアプリの別のウィンドウをすぐに見つけられない(AltTabで解決)
-> 画面最大化したいけど`cmd + ctrl + f`が禁じられている(Rectangleで解決)
-> ひとつのウィンドウだと`cmd + tab`やMission Controllで目的のアプリをすぐに表示できない。ごちゃごちゃ。(Spotlightで呼び出せばいい)

ウィンドウを最大化したい場合はRectangleで`opt + Enter`によって最大化しています。

Spotlightで検索する対象をApplicationとSystem Settingだけにしているのも、なるべく2-3文字でアプリを呼び起こしたいため必要最低限に検索対象を押さえている。ちなみに`ctrl + space`で呼び出せるようにショートカットを変えている。

拡張ディスプレイに設定していない理由も

- マウスポインターがどこにいったかわからなくなる
- マウスを外部ディスプレイに移動させる手間
- アプリを新規で開いたら別のディスプレイに出てきた

こういった問題を解決する策が、ひとつのモニターだけでひとつのデスクトップだけで開発するに繋がっていきます。

# セットアップ

突然の端末故障に備えて、macOSのセットアップ手順をGithubで整備・公開しておく

https://github.com/makoto-developer/pc-setup/blob/main/README.md

:::note warn
シークレット情報を公開しないように十分注意すること
:::

# brewで管理

可能な限り、`brew install --cask xxxx`でGUIをインストールしています。そうすることで`brew upgrade`によって一撃でアップグレードしてくれるので。

基本的にどのGUIアプリも`--cask`でインストール可能なのでbrewコマンドで入れることをおすすめします。
-> 参考 https://github.com/makoto-developer/pc-setup



# asdfで言語を管理

Flutter以外は全てのプログラミング言語をasdfで管理しています。`terraform`や`kubectl`などプロジェクトごとに異なることがあるケースではasdfでコマンドのバージョンも管理していたりします。

# ターミナルの設定

- itermを使用(イケイケなナウでヤングなターミナルもあるが、私は余計な仕事をしないでほしい派なのでitermで十分だと思っている)
- フォントをHackgen
- `cmd + Enter`でウィンドウの最大化するのを無効化している

# GUIアプリを紹介

## Karabiner

- USキーボードは日本語切り替えができないので、Karabinerで`right command`キーと`right option`キーを`日本語`キーと`英語`キーとで割り当てている
- 基本、vi(NeoVim)で作業しているので`esc`が小指の近いところにあって欲しいので`Fn`キーと`Esc`キーを逆にしている。ホームポジションを崩したくないのが目的

Karabinerの設定

1. MacBook本体のキーボードをカスタマイズ
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/684725/107ef3b3-76f2-4687-a7b4-e95444ff8654.png)

2. 外付けキーボードの現在の設定
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/684725/66a68929-a93f-755b-201c-7a12d5cea311.png)

## AltTab

macOSの最大のイライラポイントである、同じアプリの別のウィンドウを`cmd + tab`で開けない。Windowsみたいにウィンドウを全部表示してくれたらいいのに💢

これを解決してくれるのがAltTabです。

https://alt-tab-macos.netlify.app/

```shell
brew install --cask alttab
```

設定を変えたのが、デフォルトでは`opt + tab`でAltTabのウィンドウ切り替えで、馴染めなかったので`opt`を`cmd`に上書きしました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/684725/e96beabe-9ba1-48cc-2e03-b1a61f40638a.png)

これでいつものウィンドウ切り替えで全てのウィンドウが表示されるようになりました。

(こんな便利なツールなのにあまり知られていないようだけどなぜなんだろう？？？)

## Clipy

クリップボードに履歴を持たせることができます。これで、さっきコピーしたやつが間違って上書きしちゃってまたウィンドウを探しにいく、といった問題を解決してくれます。普通に便利です。

https://clipy-app.com/

```shell
brew install --cask clipy
```

スニペットでよく使うメールアドレスとか、コマンドとか、コードのテンプレートとかをすぐに呼び出せます

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/684725/c775ad07-4508-dc03-e174-9c94c27e7285.png) 

## Rectangle

ウィンドウの位置やサイズを操ることができます。

https://rectangleapp.com/

```shell
brew install --cask rectangle
```

例えば、Windowsだと`Windowsキー + →`で右寄せとかできましたよね？Rectangleを入れるとmacOSでも`opt + →`で右寄せができるようになります。マウスでウィンドウ幅を広げて縮めて右寄せ〜のような無駄な作業を減らせます。

よく使うコマンド

|key|value|
|:---|:---|
|key|value|
|`opt + ←/→`|左右にウィンドウを寄せる|
|`opt + c`|ウィンドウを中央に|
|`opt + enter`|ウィンドウを画面いっぱいに広げる|
|`opt + -/+`|ウィンドウをちょっと小さく/大きくする|

## エディタ

基本はitermでvi(NeoVim)ですが、時と場合によって使い分けています

- Intellij製品
    - Goland -> Golangの開発
    - Rust Rover -> Rustの開発
    - DataGrip -> SQLを実行
    - WebStorm -> React.js/Remix.jsなどフロントエンドの開発
    - Idea -> その他(ElixirとかOCamlとか)
- VSCode
    - ちょっとテキスト編集したとき
- AppCode/Android Studio 
    - モバイル開発(React Native/Flutter)
- Notion
    - 興味ある言語のメモとか、個人タスクをここで管理

# チャットツール

- Slack
- Discord

# CLIの設定を紹介

Fish shellを使っています。私の設定はこちらから -> https://github.com/makoto-developer/dotfiles/tree/main/fish

# Jetbrains製品

- フロントエンドはテーマをホワイト、バックエンドやモバイルの開発はテーマをダークにして判別しやすいようにしています
- Setting SyncをKeymapsだけJetbrains製品全体に共有してどの製品でも自分のカスタマイズしたコマンドを実行できるようにしています。
  ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/684725/e58af4e8-9e75-d084-fa05-6d46713005b9.png)
- UIはnew UIでCompactを設定
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/684725/64fee1cf-9d98-0c97-cf54-6ef883367e87.png)
- PluginsはIdeaVimを入れる
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/684725/bfc80fce-00b4-c7d2-104c-3e4ff71a5ff5.png)

# Vimをマスターする

`:help`でvimのマニュアルが表示されます。私は隅から隅まで全部読みました。

# 工夫していること

Chrome

- アドレスバーの力を発揮させる
    ツールを入れなくても検索可能
    `cmd + l`でアドレスバーに移動、`@bookmark <検索したい文字>`で検索できる
    ちなみにタブを検索することも可能`@tab <検索したい文字>`
:::note warn
システムの言語が日本語だと`@タブ`、`@ブックマーク`と日本語を入力しないといけない手間が発生する。そのため、最初から言語を英語にしている。
:::

そんなことしなくても、Chromeの拡張機能Vimiumを入れれば`o`または`b`を押すだけでブックマークやヒストリーを検索することが可能。実務ではほぼこれに頼っている。

|command|effect|
|:---|:---|
|`yy`|URLをコピー|
|`/`|サイト内検索|
|`b/B`|ブックマークを検索(大文字のBだと新しいタブで開いてくれる)|
|`k/j`|上/下にスクロール|
|`g/G`|先頭/最後にスクロールを移動|
|`i`|画面上のformにカーソルをフォーカスしてくれる|
|`o/O`|ヒストリーやブックマークを検索(大文字のOだと新しいタブで開いてくれる)|

## サイトをmacOS上のアプリとして扱う

Chromeの３点リーダからMore Tools -> Create Shortcutsでサイトをアプリ化できます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/684725/b75f87fd-8dc9-04a9-5d51-1c6ecd4ca610.png)


- Jira
- Confluence
- Github
- Github Gist
- Gitlab
- Twitter

などをアプリ化して、ブラウザとは別で起動しておくことでSpotlightですぐにそのサイトにアクセスできるようにしています。ブラウザのどこのタブで開いていたっけ？と探す手間を省く工夫です。

で、例えばGithubアプリを開きたいときはSpotlightで`gi`と入力するだけですぐに開けます。Chromeを開く -> アドレスバーに`github.com`を入力、といった労力を削減できます。

![Screenshot 2023-12-11 at 0.53.54.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/684725/35c1816d-278a-c3c0-45b9-87589b950679.png)

:::note warn
やりすぎるとChromeが落ちやすくなることがあるので(私だけかもしれないが)、アプリ化は必要最低限で。
:::

ちなみにアプリは自由に名前を書き換えられます。インストールしたアプリは`/Users/user/Applications/Chrome Apps.localized`に保管されているのですが、ここにあるアプリ名を`enter`して名前を変えるとspotlightでrename後の名前で呼び出し可能です。

私の場合、`X`を`twitter`に変えています。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/684725/b8b6575c-6a9b-f834-e072-d3a3a6c78618.png)

## バックアップ

- Time Machine
- Google Drive
    いつ端末が壊れてもいいようにGoogle Driveで同期

# キーボード

直接macOSとは関係ないかもだけど

- USキーボードを使用
    - 今まで生きていてJISキーボードを使ったことがない
    - USにするとちょっとコーディングが早くなる(らしい)
    - USキーボードだと日本語入力のキーがないのでKarabinerで割り当てる
- Ergodozを使用 -> https://ergodox-ez.com/
- Orxyの設定 私のキーボードレイアウト -> https://configure.zsa.io/ergodox-ez/layouts/Da7jE/latest/0

レイアウトで工夫しているのは
左の親指にLayer1を置き、Layer1キーを押している間はLayer1になり右のキーボードでViのカーソル移動を再現しているところです。可能な限りホームポジションを崩さないことで余計な動きを防いで入力速度を向上させています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/684725/9605f691-edf0-9958-5eac-02e7c09790ef.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/684725/f687c4e7-51d8-ae31-5210-fee398a018c3.png)

- Layer1は`hjkl`を`←↓↑→`で移動、`n;`が`[]`に対応、`m,..\`が`12345`、`uiop=`が`67890`に対応させることでキーボードの上の数字キーが届きにくいという問題を解決させています。
- Viは`esc`キーを多用するので左下の小指ですぐにタッチできるようにしています。また、Layer1に切り替えて`g`キーを`esc`に割り当てています。このとき、入力ソースが日本語だとうざいのでenキーを押してからescを押すというマクロを使っています。こうすれば日本語モードでもすぐに操作モードに移ることができます。
などなどこだわりがあります。

# 終わりに

Alfredとか入れなくてもなんとかなります。
無料の小さなアプリを組み合わせて快適なmacOSライフを送るために日々改善しています。

他にも書きたいことがあった気がする。思い出したら追記します。

異論は認めます。叩かないでください。以上！