Mac PCセットアップ手順

#  注意
- 趣味の範囲が大部分を占めているので、参考程度に。
- 開発環境はエンジニアにとって主戦場なので、こだわりたい。

# Mac & USキーボード特有の環境変更
## 環境設定編
- タッチだけでクリックできるようにする
- キーボード > キーのリピートを速くする
  - `a`長押しで文字種変換候補が表示される場合は、Google日本語入力でデフォルトの英数入力を削除することで出なくなる
- ファイアウォールを有効にする
- マルウェア対策ソフトを入れる
- 3本指ドラッグ
    - https://support.apple.com/ja-jp/102341
- ディスプレイのカラープロファイルを`Display P3`に変更
    - See https://karuna.dev/colormaxxing/
- 日付で秒数を表示させる

## USキーボード編
- Google日本語入力をインストール　→　Google英数とGoogleひらがなだけにする
  - デフォルトの英数入力を削除できない場合は、デフォルトのかな入力で以下の英字にチェックを入れることで、削除ができるようになる
  - ![キーボード.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/249168/f6f3d5ad-a39a-e802-daad-6a3659abd3e9.png)

- Karabinerをインストールして、
  - ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/249168/8d0e0f93-416a-4d16-a7df-fd59794ac6a1.png)
     - caps lock　→　left control に変更
     - left control　→　caps lock に変更
  - ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/249168/23b9d7ab-39f8-4efc-a9ba-1170f8b40606.png)
     - left-commandで英数、right-commandでひらがな　に変換できるようにする
     - Advancedから日本語用の選定をimportするのがいい
  - command押しっぱなしが効かなくなったら、`~/.config/karabiner/karabiner.json`を開き、`"lazy": true`だったら`"lazy": false`に（該当行すべて）変更して更新しておくといいです。（[参考](https://amitica.net/archives/1032)）
- [ファンクションキーキーのデフォルトの動作を変更する](https://support.apple.com/ja-jp/102439#:~:text=%E3%81%A6%E3%81%8F%E3%81%A0%E3%81%95%E3%81%84%E3%80%82-,macOS%20Ventura%E4%BB%A5%E9%99%8D,-Apple%E3%83%A1%E3%83%8B%E3%83%A5%E3%83%BC%EF%A3%BF%20%3E%E3%80%8C%E3%82%B7%E3%82%B9%E3%83%86%E3%83%A0)の手順を実施して、メディアコントロールキーを無効化する。
  - こうして、`F2`でスプレッドシートのセル編集する場合などのキーを使いやすくする。


### MD770キーボード
マニュアル

https://archisite.co.jp/wp-content/uploads/2020/10/MD770-web-manual.pdf

DIPスイッチはSW2以外を全部OFFにする。
Mac最適化配列をOFFにしているのは、ファンクションキーが`F1`→`F14`のように認識されるのがつらいため。

キーバインドを修正する
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/249168/62c3652b-c60a-44b0-bd76-c6cfaf0cf446.png)


# ターミナル環境設定
## Homebrewインストール
https://brew.sh/ja/

### よく入れるパッケージ
- anyenv
- gh
- git
- git-delta
- jq
- nkf
- tree
- apache-arrow
- dockle
- trivy


## Ghostty
https://ghostty.org/

設定は以下
https://github.com/HrsUed/my-pc-setup/blob/master/com.mitchellh.ghostty/config

## ~~iTerm２~~
https://iterm2.com/

## Oh My Zsh
zshがデフォルトになってからは、[Oh My Zsh](https://ohmyz.sh/)を使っています。
これでターミナルがキレイになります。

テーマには[agnoster](https://github.com/agnoster/agnoster-zsh-theme)を、iTerm2ではカラースキーマに[Ayu Mirage](https://github.com/mbadolato/iTerm2-Color-Schemes/blob/master/schemes/Ayu%20Mirage.itermcolors)を使っています。
この際にポイントをまとめておきます。

```diff:~/.zshrc
- ZSH_THEME="robbyrussell"
+ ZSH_THEME="agnoster"
```

- 別途、[powerline fonts](https://github.com/powerline/fonts)をインストールする
- ~~iTerm2の設定で、Profile > Text > Non-ASCII FontをGo Mono for Powerline等のpower line提供fontにしておく必要がある~~
- ~~iTerm2の設定で、Profile > Colors > Color PresetsからSolarizedを選択する（Solarizedに最適化されているテーマのため）~~
- `.zshrc`に`DEFAULT_USER prompt_context(){}`を追加してユーザー名を出さない


## デフォルトのターミナルの場合
Oh My Zshを使わないなら、自分はこんな感じにしています。

```sh:.bash_profile
function get_git-branch_name() {
  git branch --list > /dev/null 2>&1
  if [[ $? -eq 0 ]];then
    echo "($(git branch --list | grep '*' | awk '{print $2}')) "
  fi
}

export PS1='\[\e[0;36m\]\W $(get_git-branch_name)\$\[\e[0;0m\] '

alias ls='ls -FG'
alias ll='ls -l'
```

```sh:.zshrc
function get_git-branch_name() {
  git branch --list > /dev/null 2>&1
  if [[ $? -eq 0 ]];then
    echo "($(git branch --list | grep '*' | awk '{print $2}')) "
  fi
}

export PS1="%F{cyan}%1~ $(get_git-branch_name)%#%f "

alias ls='ls -FG'
alias ll='ls -l'
```


 参考
[【mac】ターミナルのプロンプトの変更](https://qiita.com/griffin3104/items/0d610ad1a57fa6ad6a09)

# gitのセットアップ
## 鍵の登録
自分の鍵を作成し、公開鍵をGitHubアカウントに登録しておきます。

参考：[Generating a new SSH key and adding it to the ssh-agent](https://docs.github.com/en/authentication/connecting-to-github-with-ssh/generating-a-new-ssh-key-and-adding-it-to-the-ssh-agent)

```sh
$ ssh-keygen -t ed25519 -C "your_email@example.com"
$ pbcopy < ~/.ssh/id_ed25519.pub # GitHubに貼り付け
```

また、`~/.ssh/config`に以下を追記。

```sh:~/.ssh/config
Host github.com
  Hostname github.com
  User git
  IdentitiesOnly yes
  IdentityFile ~/.ssh/秘密鍵
```

```
$ ssh -T git@github.com
```

でログインできたら成功。

## git config
```ini:~/.gitconfig
[column]
        ui = auto
[push]
        autoSetupRemote = true
[fetch]
        prune = true
        pruneTags = true
        all = true
[rerere]
        enabled = true
        autoupdate = true
[rebase]
        autoSquash = true
        updateRefs = true
[merge]
        conflictstyle = zdiff3
[diff]
        colorMoved = plain
        mnemonicPrefix = true
        algorithm = histogram
[tag]
        sort = version:refname
[branch]
        sort = -committerdate
```

以下コマンドで設定でもOK
```shell-session
# ブランチを列方向にも表示して、最新を先頭に出す
git config set --global column.ui auto
git config set --global branch.sort -committerdate

# タグの順序をアルファベット順ではなく数値として解釈するようにする
git config set --global tag.sort version:refname

# 最近導入されたdiffアルゴリズムに変更
git config set --global diff.algorithm histogram

# 移動による差分を別の色で表示。plain見た目が単純だから。
git config set --global diff.colorMoved plain

# diff時にa, bではなく、(i)ndex, (w)ork treeのような頭文字に置き換わってわかりやすい
git config set --global diff.mnemonicPrefix true

# upstreamの設定が不要になる
git config set --global push.autoSetupRemote true

# fetch時にお掃除
git config set --global fetch.prune true
git config set --global fetch.pruneTags true
git config set --global fetch.all true

# 連続でrebaseするとき、前回の修正を自動適用してくれる
git config set --global rerere.enabled true
git config set --global rerere.autoupdate true

# git rebase --auto-squashを省略する
git config set --global rebase.autoSquash true

# topicブランチの先祖のtopicブランチをrebaseしたときに、自動的に継承ブランチもrebaseしてくれる
git config set --global rebase.updateRefs true

# マージコンフリクト時に、相手のコミットが何を変えたのかも同時に表示するオプション
git config set --global merge.conflictstyle zdiff3
```

参考

https://blog.gitbutler.com/how-git-core-devs-configure-git/

## git-deltaのセットアップ
diffページャーであるdeltaもセットアップする

```ini:~/.gitconfig
[delta "my-delta-feature"]
        syntax-theme = Dracula
        side-by-side = true
        line-numbers = true
```

```zsh:~/.zprofile
# gd, glgp, 
alias gdd='GIT_PAGER="delta --features my-default-delta-feature" gd'
alias glgpd='GIT_PAGER="delta --features my-default-delta-feature" glgp'
alias gbld='GIT_PAGER="delta --features my-default-delta-feature" gbl'
```

# テキストエディタの導入
ここでは、Sublimetext4を導入します。
簡単なテキスト編集とかはSublimeでやることが多く、コードを書くときはRubyMine, Visual Studio Codeを使っています。

以下からインストールします。
http://www.sublimetext.com/download

設定から以下を追記

```
  {
    "draw_white_space": "all",
    "font_size": 12.0,
    "highlight_line": true,
    "ignored_packages":
    [
      "Vintage"
    ],
    "rulers":
    [
      80,
      120
    ],
    "tab_size": 2,
    "translate_tabs_to_spaces": true,
    "save_on_focus_lost": true,
    "ensure_newline_at_eof_on_save": true,
    "trim_trailing_white_space_on_save": true,
    "word_wrap": false
  }
```

Package Control機能を使うためのセットアップです。
SublimeText4からはすごく簡単になりました。
command + shift + pを押してコマンドパレットを開き、`Install Package Control`と入力してEnterを押します。

ここからはパッケージごとに繰り返しです。
command + shift + pを押す。
表示された入力バーに、「install package」と入力

自分の場合は、以下のパッケージを導入していく。

- TrailingSpaces・・・不要な半角、全角スペースに色を付ける
- SideBarEnhancements・・・サイドバーでファイル操作メニューが増えます
- Markdown Preview・・・HTML出力するときとかいい。
- ConvertToUTF8: CP932, SJISファイルを開くときに使う

SublimeText3のメニューバーより、「Sublime Text」→ 「Preferences」→ 「Package Settings」→ 「Trailing Spaces」→ 「Settings-user」を選択
表示されたファイルに以下のコードをコピーして貼り付け、保存する。

```json
{
  "trailing_spaces_regexp": "　|[ \t]+"
}
```
これで、全角スペースも検出できる。

参考：
https://tech-camp.in/note/technology/13394/
https://www.buildinsider.net/small/sublimetext/03

# 便利アプリ
- スクショ
    - https://shottr.cc/
- クリップボード
    - https://clipy-app.com/
- ミュージック起動停止
    - https://github.com/tombonez/noTunes
- Meeting bar
    - https://meetingbar.app/

# その他諸々
## SSH鍵の整理
`~/.ssh/config`を整理しましょう。

# Timemachine！！
バックアップとっておきましょう。
Macのバックアップはデフォルトでいい感じに定期差分バックアップやってくれるみたい。