ギーク向けMac整理ルール

# 概要
これはMacで遊んでいるナード向けのMac整理ルールです。個人的な備忘録の側面が強いですが、皆様からのアドバイス等頂きたいと思いましたので共有します。

## カテゴライズ・シミュレーション
最初に頭の中で、今パソコンで扱っているファイルと将来的に扱う可能性のあるファイルがどのようにカテゴライズされるか把握しておくことが肝要です。整理術に関するネット記事はたくさんありますが、開発者やナードでなければ開発環境構築の話は不必要ですし、営業や請負をしていないのであればクライアント用のフォルダを用意する必要もありません。事前に自分専用のおおよそのファイル分類体系を脳内に構築しておきましょう。

## `$HOME`を乱さない
Unix系のOSではなにかソフトウェアをインストールすると、そのソフトウェアが`$HOME`ディレクトリ内にディレクトリを作成しそこをソフトウェアの幹(設定ファイル、コード、依存ライブラリ、キャッシュ etc.)として利用する場合が多いです。これを放置すると`$HOME`ディレクトリがそれらディレクトリで溢れ返り、ユーザーの[認知負荷](https://en.wikipedia.org/wiki/Cognitive_load)が高くなってしまいます。`$HOME`ディレクトリから積極的にフォルダを削減するように努めましょう。

## `XDG`仕様への準拠
例外もありますが、多くのソフトウェアが[XDG仕様](https://specifications.freedesktop.org/basedir-spec/basedir-spec-latest.html)に準拠しています(または準拠可能な仕様になっています)。積極的にXDG仕様に準拠させることでMac内が整頓されます。
#### 環境変数の利用
XDG仕様に準拠可能な仕様となっているソフトウェアでは、そのソフトウェアが利用するディレクトリを環境変数で設定できるようになっている場合があります。その場合はそれを利用しXDG仕様に準拠させましょう。
#### `xdg-ninja`の利用
`$HOME`にあるディレクトリで環境変数によって別の場所へ移動可能なものを教えてくれるソフトウェアです。`brew info xdg-ninja`をチェック。

## must-have dirs
以下にMac内で設定した方がいいディレクトリを列挙します。

#### メイン
:::note info
実際にはソフトウェアをインストールすると勝手に作成されるものが含まれているので、能動的に作成というよりはむしろ、勝手に作成されてしまうディレクトリをその流儀に従う形で積極的に利用してやろうということです。
:::

<details><summary>~/.config</summary>
設定ファイルを格納するディレクトリです。
</details>
<details><summary>~/.local</summary>
ここは主にサードパーティソフトウェアが利用するディレクトリです。
go, cargo, bunなどの主要なソフトウェアのディレクトリはここに直接配置し、それ以外のサードバーティソフトウェアは~/.local/optに格納しています。
</details>
<details><summary>~/.local/share</summary>
ソフトウェアが利用するデータが格納されます。
</details>
<details><summary>~/.local/opt</summary>
XDG仕様にはこのディレクトリはありませんが、Macで/optや/usr/local/optが利用されていることに倣って、~/.local配下にoptを設置してそこにサードパーティソフトウェアの本体を格納しています。
</details>

#### `~/Library/Application Support`ディレクトリの利用について
MacではサードパーティーアプリがXDG仕様に従い各種ファイルを分散配置(`~/.config`, `~/.local/share` etc.)するケースと`~/Library/Application Support`にバンドルディレクトリを作成して利用するケースとがあります。ここは統一できませんが、どちらも直接ユーザーがいじる頻度は低いのでそこまで問題ではありません。個人的なアプリ開発でどちらのディレクトリを利用するかという話ですが、私の場合は`foobar`アプリを作成する場合`~/Library/Application Supoort`配下に`local.foobar`のような名前でディレクトリを作り利用しています。

#### その他
全部紹介しきれてはいません。
<details><summary>~/Developer</summary>
昔のMacではデフォルトで作成されていたディレクトリだそうですが、最近のMacではありません。自分で mkdir して利用可能になります。~/Developer ディレクトリはFinderで歯車アイコンで表示されます。個人プロジェクト・個人開発環境用のディレクトリとして用いています。私の場合、ターミナルでの利便性を考え ~/dev にこのディレクトリのシンボリックリンクを貼っています。
</details>

<details><summary>~/orgs</summary>
個人的なファイルと区別するため、組織関係のファイルはここに格納しています。学校や会社の資料など。
</details>

<details><summary>~/var</summary>
~/Documents に格納している各種論文・PDF以外の個人的なデータのほとんどはこのディレクトリに格納しています。各種バックアップなどをここに入れています。
</details>

#### 各種`bin`の置き場
ターミナルで日常的に使う実行ファイル・対話的コマンドの置き場は、それらの属性に基づいて別々にしておくと混乱を避けられます。まず、`/usr/local`はHomebrewに占領されているので、`/usr/local/bin`はHomebrewでインストールしたコマンドオンリーにしておくのが無難です。次に、Homebrew以外のサードパーティの実行ファイルは`~/.local/bin`に入れることにします。そして、個人開発した実行ファイルは`~/dev/bin`に入れて`.zshrc`や`.bashrc`でパスを通して利用します。

## `README`ファイルの利用
`README.md`でも`README.txt`でもどちらでも構わないのですが、READMEファイルをディレクトリに配置しておくと都合がいいです。
- 用途が分かる
`README`ファイルの存在により、そのディレクトリの用途が一目瞭然になります。
- 長いパス名を避けられる
`README`ファイルに用途を書いておけば、多少パス名が短すぎて一見用途が分からなくても問題になりません。

## シンボリックリンクの利用
同じファイルやフォルダを複数のプロジェクトから参照したい場合、シンボリックリンク(symlink)は便利です。

:::note info
Finder で作成できる symlink とターミナル上で`ln -s`コマンドを用いて作成できる symlink とは仕様が異なっており、それぞれ長所・短所があります。

後者はターミナル上で`ls -l`コマンドを実行した際に実際のパスがリンク先として表示されて便利な反面、相対パスを設定していた場合、場所を不適切な場所に移動してしまうとその symlink は動かなくなる場合があります。

前者は場所を移動してもリンク先のファイルへの参照が無効になることはありませんが、ターミナル上では`ls -l`を実行してもその symlink のリンク先が表示されることはありません。
:::

## タグ付けとスマートフォルダの利用

## 参考資料

---