Macのセッティング

Mac買ったらやることリスト（2022年3月版）。
自分用だけど、誰かの役に立つかもしれない。


# 環境確認

 * プロセッサの確認
    * アプリケーションのダウンロード、インストールの際に必要となる情報
    * メニューバー > 🍎 > このMacについて
        * 「チップ Apple M1」など(Apple系)
        * 「プロセッサ 3.4 GHz クアッドコアIntel Core i5」など(Intel系)
 * shellの確認
    * ターミナルで設定等を書く場所に関わる
    * `echo $SHELL`
        * bashの場合: `~/.bash_profile`か`~/.bashrc`
        * zshの場合: `~/.zshrc`
        * どっちにしても`.bashrc`を読む設定にしておいても良い
    * 何かしら入れたものがどこにあるか困ったら`which brew`のようにすると、どこに置かれているものが使われているか分かる


# システム環境設定

 * ネットワーク: Wi-Fi
 * サウンド: 
    * 出力:
        * 内蔵スピーカーの主音量をゼロにして消音（外で急に爆音とか鳴らないようにする）
        * ヘッドフォンを挿して主音量を調整
 * ソフトウェアアップデート
 * Touch ID: 指紋を複数追加（何か片手に持ってたりすると指がつりそうになるので左右とか）
 * キーボード:
    * ユーザー辞書: 自分の名前追加（社名とか）
    * ショートカット: スクリーンショット以外オフ
    * 入力ソース: 「日本語 - ローマ字入力」が無かったら追加
 * メニューバーの辞書ツール:
    * ライブ変換: オフ
 * トラックパッド:
    * ポイントとクリック: 全オフ
    * スクロールとズーム: 全オフ
    * その他のジェスチャ:
        * フルスクリーンアプリケーション間をスワイプ: 3本指で左右にスワイプ
        * 他: 全オフ
 * Mission Control:
    * ショートカット: 全オフ
    * ホットコーナー: 全オフ
    * 適当なウィンドウを画面上端に持ち上げて「＋」でスクリーン追加（旧Spaces）
 * Dockとメニューバー:
    * バッテリー: 割合（%）を表示
 * Siri: オフ
 * ユーザとグループ:
    * ログイン項目: Automatorで`source ~/.zshrc`のアプリを作って追加
 * スクリーンタイム: オフ
 * プリンタとスキャナ: プリンタを追加
 * セキュリティとプライバシー: 適宜、FileVaultとファイアウォールを設定

ほか、Finderの「よく使う項目」や画面下のドックの内容などを整理しておく。

# アプリケーション

 * 自分のユーザーのアプリケーションフォルダに入れるとアップデートの時に管理者パスワードを求められずに済むものとかがある
    * 「何とか.dmg」みたいのをダウンロードして「アプリケーション」にドロップさせられるヤツを自分のユーザーの「アプリケーション」（`~/Applications`）に入れる、みたいなこと
 * Chrome: https://www.google.com/chrome/
 * Firefox: https://www.mozilla.org/ja/firefox/new/
 * Xcode: App Storeから
 * XcodeのCommand Line Tools:
    * `xcode-select --install`
    * Xcodeを開いて「メニューバー > Xcode > Preferences... > Locations > Command Line Tools」を設定
 * Homebrew: https://brew.sh/index_ja
    * 権限等が厳しい場合はデフォルトのところにインストールせず、別のフォルダにする
    * `mkdir ~/opt`
    * `cd ~/opt`
        * 「Mac M1」とかでググる記事だと正統派な`/opt`だが、ここではいろいろ面倒なので`~/opt`にしている
        * とにかく`sudo`したくない場合のやり方
    * `mkdir homebrew`
    * `curl -L https://github.com/Homebrew/brew/tarball/master | tar xz --strip 1 -C homebrew`
    * `vi ~/.bashrc`
    * `export PATH="$HOME/opt/homebrew/bin:$PATH"`
        * $PATHを後ろに書くのがポイント
    * `source ~/.bashrc`
    * `which brew`で確かめる
    * 以降、`brew install ***`したものは`~/opt/homebrew`に入る（他サイトの記事を見る時はインストール先やPATHが自分と違うことに注意）
    * 自分のユーザーフォルダにあるので、/Libraryの権限がどうとかで怒られない
 * n: `brew install n`
 * Node.js: https://nodejs.org/ja/
    * `n lts`
 * Git: https://git-scm.com/download/mac
    * `git --version`
    * `git config core.filemode false`
    * `git config core.autocrlf false`
 * Sourcetree: https://www.sourcetreeapp.com/
 * FileZilla: https://filezilla-project.org/
    * 前のPCの設定を「エクスポート」しておいて`Filezilla.xml`内の自PCのフォルダの設定などを書き換えて「インポート」する
 * Visual Studio Code: https://azure.microsoft.com/ja-jp/products/visual-studio-code/
    * 拡張機能（プラグイン）
        * Japanese Language Pack for Visual Studio Code
        * ESLint
        * new-zenkaku
        * IntelliSense for CSS class names in HTML
        * EditorConfig for VS Code
        * ほかHTML,CSS,JS系のLintやFormatter
 * Adobe Creative Cloud: https://www.adobe.com/jp/creativecloud.html
 * Office365: https://www.office.com/
 * Slack: https://slack.com/intl/ja-jp/
    * `~/Applications`に入れておくと何となく行儀が良さそう
    * https://slack.com/intl/ja-jp/help/articles/360035635174-macOS-%E3%81%A7-Slack-%E3%82%92%E3%83%87%E3%83%97%E3%83%AD%E3%82%A4%E3%81%99%E3%82%8B
    * すでに`/Applications`に入っている人が後から移動して大丈夫かは、やや不安
 * Docker: https://www.docker.com/get-started
 * Zoom: https://explore.zoom.us/ja/products/meetings/
 * rbenv:
    * `brew install rbenv`
    * `rbenv install -l`
    * `rbenv install 3.1.1`
    * `rbenv init`
    * `echo 'eval "$(rbenv init -)"' >> ~/.bashrc`
    * `source ~/.bashrc`
 * Android Studio: https://docs.expo.dev/workflow/android-studio-emulator/
 * Java: https://www.java.com/ja/download/
 * OpenJDK: あえて11を入れる（最新だと動かないものもあるので）
    * `brew install openjdk@11`
        * 上のほうで`~/opt/homebrew`にHomebrewを入れた人は、ここのパスとかも`~/opt/homebrew`に変える
    * `sudo ln -sfn /opt/homebrew/opt/openjdk@11/libexec/openjdk.jdk /Library/Java/JavaVirtualMachines/openjdk-11.jdk`
    * `echo 'export PATH="/opt/homebrew/opt/openjdk@11/bin:$PATH"' >> ~/.bashrc`
    * ``export CPPFLAGS="-I/opt/homebrew/opt/openjdk@11/include"
export JAVA_HOME=`/usr/libexec/java_home -v 11` ``
 * SDKMAN(まだ試してない): https://sdkman.io/usage
    * Java系のバージョン管理をできるようにする目的


# ターミナルから設定


## 隠しファイルの表示（cmd+shift+.）

 * `defaults write com.apple.finder AppleShowAllFiles TRUE`
 * `killall Finder`


## 秘密鍵作成

 * `mkdir ~/.ssh`
 * `cd ~/.ssh`
 * `ssh-keygen -t rsa`
 * `chmod 600 ~/.ssh/id_rsa`


### 秘密鍵の読み込み

 * `ssh-add --apple-use-keychain ~/.ssh/id_rsa`


#### 自動読み込み設定（.bash_profile, .bashrc, .zshrc）

ここでは`.bashrc`に書いておいて`.bash_profile`と`.zshrc`はそれを読み込んで使う

 * `vi ~/.bash_profile`

```shell:~/.bash_profile
if [ -f ~/.bashrc ]; then
    . ~/.bashrc
fi
```

 * `vi ~/.zshrc`

```shell:~/.zshrc
if [ -f ~/.bashrc ]; then
    . ~/.bashrc
fi
```

 * `vi ~/.bashrc`

```shell:~/.bashrc
# 鍵の読み込み（後述のGithubの鍵登録で不要になっているかも）
ssh-add --apple-use-keychain ~/.ssh/id_rsa

# nのPATHなど設定
export N_PREFIX="$HOME/.n"
export PATH="$PATH:$N_PREFIX/bin"
```

 * `source ~/.zshrc`

 * Finder > アプリケーション　> Automator.app
    * アプリケーション
        * シェルスクリプトを実行
            * `source ~/.zshrc`
            * 保存
            * 「環境設定 > ユーザとグループ > ログイン項目」に追加


## GitHubの鍵登録

 * `vi ~/.ssh/config`

```shell:~/.ssh/config
# Macのキーチェーンアクセスを利用する設定
Host *
  UseKeychain yes
  AddKeysToAgent yes

# GitHub用の設定
Host github.com
  HostName github.com
  User git
  Port 22
  IdentityFile "~/.ssh/id_rsa"
```

 * `cat ~/.ssh/id_rsa.pub`
 * 内容をコピー
 * GitHubに鍵登録(SSH keys)
 * Two-factor authentication
 * テスト:
    * `ssh -T git@github.com`
    * SourceTreeで適当に自作プロジェクトをクローン


# 作成しておくコマンドファイル


## 普段の自分用


### フォルダ内のzip内の不要ファイル削除

```shell:remove_needless_zip.command
cd `dirname $0`
find . -name "*.zip" -exec zip --delete {} "*.DS_Store*" \;
find . -name "*.zip" -exec zip --delete {} "*__MACOSX*" \;
```


### フォルダ内の不要ファイル削除

```shell:remove_needless.command
cd `dirname $0`
find . -name ".DS_Store" -print -exec rm {} ";"
```


### ファイルリストの出力

```shell:filelist.command
cd `dirname $0`
find . -name "*.*" | sort 1>filelist.txt
```


## Node系プロジェクトに入れてメンバーにダブルクリックさせる用

ファイル名をgulp.batのようにしてしまうと`npx gulp`でgulp.batが呼ばれてループする。
多少長くなってもきちんとしたファイル名をつけること。


### Mac


#### インストールコマンド

```shell:npm_install.command
cd `dirname $0`
npm install
```


#### Gulpの起動コマンド

```shell:gulp_run.command
cd `dirname $0`
npx gulp
```


### Windows


#### インストールコマンド

```shell:npm_install.bat
cd %~dp0
npm install
```


#### gulpの起動コマンド

```shell:gulp_run.bat
cd %~dp0
npx gulp
```


## SourceTreeのカスタムアクション登録用

エディタでファイルを作成したら良さそうな場所に保存。
「メニューバー > 操作 > カスタムアクション > 編集...」から追加。


### 差分をzip

履歴で起点を選択し、更新コミットをCmd+クリックで選択してから実行すると archive.zip ができる。

```shell:export_diff_zip.sh
#!/bin/sh
if [ "$2" = "" ]; then
    git archive --format=zip --prefix=archive/ HEAD `git diff --name-only --diff-filter=AMCR HEAD $1` -o archive.zip
else
    git archive --format=zip --prefix=archive/ $1 `git diff --name-only --diff-filter=AMCR $2 $1` -o archive.zip
fi
```
パラメータ: $SHA


### 差分リスト

履歴で起点を選択し、更新コミットをCmd+クリックで選択してから実行すると diff.txt ができる。

```shell:export_diff_list.sh
#!/bin/sh
if [ "$2" = "" ]; then
    git diff --name-only --diff-filter=AMCR HEAD $1 > diff.txt
else
    git diff --name-only --diff-filter=AMCR $2 $1 > diff.txt
fi
```

パラメータ: $SHA

# .editorconfig

作っておくと、あちこちで使いまわせる。
チームやプロジェクトで共有して使うと、コーディングルールの一部を口伝に頼らなくて済む。
個人で使っても便利。
対応しているエディタはサイト参照。
（VS Codeの場合は拡張機能がある）

他のエディタの場合も何らかこういう仕組みはありそう。

```ini:.editorconfig
# EditorConfig is awesome: https://EditorConfig.org
# このファイルがある場所がプロジェクトのルートという意味
root = true

# 通常はインデントをスペース2個、UTF-8、行末の余分な空白を削除、最終行に改行追加、改行コードLF
[*]
indent_style = space
indent_size = 2
charset = utf-8
trim_trailing_whitespace = true
insert_final_newline = true
end_of_line = lf

# HTMLにインデントを適用するとheadとかがうるさいのでオフ、最終行の空行も不要にした
[*.{html,htm,shtml,shtm}]
indent_size = 0
insert_final_newline = false

# Markdownではインデントを使ったコードブロックなどがあるので、インデントだけの行（コード上の空行）などが途切れないようにする
[*.md]
trim_trailing_whitespace = false

# Pythonの推奨はインデント4つらしい
[*.py]
indent_style = space
indent_size = 4
```

（おわり）