【🔰初心者向け】頼むからホームディレクトリは汚さないでくれ🙏

## はじめに
こんにちは！ITスクールRareTECHにてCS（Customer Support）を担当している池村です。今回の記事はLinuxやMacにおけるターミナルのホームディレクトリについてです。

私も初学者の頃、ホームディレクトリを汚しまくって挙動がおかしくなった事がありますので、今回は初心者がやりがちな事例を上げつつ解説します。

![324bb65f-7bdb-4a9d-b872-294f1f934bac_720.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3798971/d71ccf4e-b2cd-63ab-d4de-825d4f7ab2a3.png)


## Gitの管理について
GitHubの活用はエンジニアにとって必須なのですが、こちらが少々厄介で、ホームディレクトリで`git init`を行うと面倒なことになります。

### `git init`コマンド
`git init`コマンドは、コマンドを叩いたディレクトリをGit管理下に置きます。Gitの特徴は、ファイルの更新や削除などのバージョンを管理してくれることにあります。

ホームディレクトリは大事な設定ファイル等が多々あり、特にSSH接続をするための.sshディレクトリなどがGit管理下に置かれることは、**セキュリティリスク**になってしまいます。
#### git status
あとは`git status`というコマンドがあるのですが、このコマンドを叩いた時に膨大な量のファイルが出てくることになり、本来確認したいファイル類がよくわからなくなります。

#### git clone
ホームがGit管理下にある状態で、ホーム以下のディレクトリに`git clone`を行うと、うまくクローンできない可能性があります。

### 解決方法
Gitコマンドの練習のために、ホームディレクトリで誤って`git init`をしてしまった場合は解決方法があります。

#### ①`ls -a`を行う
`ls -a`を叩いてみて、**ホームディレクトリに.gitという隠しディレクトリがある場合**、誤って`git init`しています。

```Bash:.gitディレクトリはあるのか？
ls -a
```

#### ②.gitディレクトリを削除する
もし.gitディレクトリがあった場合、こちらのディレクトリを削除することで、Git管理が解除されます。

```Bash:削除方法
rm -rf ~/.git
```

:::note alert
ホームディレクトリで`git init`は絶対にしない！
:::

## Pythonの仮想環境について
次にPythonの仮想環境について解説します。
Pythonを触り始めたばかりの人は、仮想環境の概念に混乱すると思います。ホームディレクトリに仮想環境を作ると、その他のPythonプロジェクト内の仮想環境と競合する可能性が高いです。特に最初に学習するであろう、venvという仮想環境作成コマンドには注意です。

### 仮想環境とは何か？
Pythonの仮想環境とは、とあるディレクトリの中でアプリを作成する場合に、そのディレクトリの中だけで必要なライブラリを反映・使用することができる、***薄い膜***のようなものです。この膜を張っておくことで、他のディレクトリにある他のPythonアプリで使っているライブラリと**競合することなく**安全に利用することができます。

### venv仮想環境作成方法
※Python3が入っている前提です。

```Bash:venvでの仮想環境作成
python3 -m venv test
```

:::note alert
上記をホームディレクトリで叩くのはやめてください。
:::

```Bash:理想的なvenvでの仮想環境の作成
mkdir test_project && cd test_project
python3 -m venv venv
source venv/bin/activate  # macOS/Linux
venv\Scripts\activate  # Windows
```
上記のように、ホームディレクトリに一つ新規ディレクトリを作成した上で、その中で仮想環境を作りましょう。

### ホームで仮想環境を作ってしまった場合
仮想環境で厄介なのは、仮想環境の命名が自由なことです。
```Bash:testの部分は命名自由
python3 -m venv test
```
これが厄介で、気づかないうちに適当な名前でホームに仮想環境を作って、その存在を忘れている可能性が高いんですね。

ホームによくわからない隠しディレクトリがあった場合は、そのディレクトリに入って中を確認しましょう。

中身が以下のようになっていたら、それは仮想環境です。
```Bash:仮想環境内
test/
├── bin/           # 実行ファイル (Windows では Scripts/)
├── include/       # C ヘッダファイル (拡張モジュール用)
├── lib/           # インストールされた Python パッケージ
└── pyvenv.cfg     # 仮想環境の設定ファイル
```

私が前にClaudeのAPIをテストした際も、以下のように作っていました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3798971/880b82d4-a892-8232-ebe9-e45787591b27.png)

:::note info
私はこの時、claude-envという名前を付けていたようですね。
:::

#### 解決方法
これはGitの時と一緒で、このディレクトリを削除してしまえば解決します。
```Bash:削除方法
rm -rf test # 仮想環境名がtestの場合
```


## その他を表でまとめておきます

| コマンド | 理由・リスク |
|---------|------------|
| **`git init`** | `~/.git/` が作成され、誤って `git add .` でホーム全体を管理する危険がある |
| **`python -m venv ~/venv`** | `~/venv` に仮想環境を作ると、複数のプロジェクトで管理しづらくなる |
| **`terraform init`** | ホームに `terraform.tfstate` や `.terraform/` ができ、設定が混乱する |
| **`docker-compose up`** | ホームにコンテナデータ (`docker-compose.yml` の影響) を作ってしまう可能性がある |
| **`npm init`** | `package.json` がホームにでき、どのプロジェクトにも影響する可能性がある |
| **`yarn init`** | `npm init` と同様、意図しないパッケージ管理になる |
| **`cargo init`** | Rust のプロジェクトをホームに作成し、`.git` などができる |
| **`go mod init example.com/mymodule`** | `go.mod` をホームに作成し、Go の依存管理が壊れる可能性がある |
| **`make`** | ホームに Makefile があると、意図しないコマンドが実行される可能性がある |
| **`cmake .`** | ビルド設定がホームにでき、設定ファイルが散らばる |
| **`dotnet new console`** | `.csproj` などのプロジェクトファイルがホームに作られ、管理が面倒になる |

:::note info
結論、ホームディレクトリは汚さないで！
:::

## ついでにダウンロードフォルダも
ダウンロードフォルダは何かしらダウンロードすると、貯まっていきますよね。
これも定期的に掃除しましょう。アプリ等をダウンロードするための.dmgや、画像とか、一度使ったらほぼ使わないものが貯まりに貯まって、目的のものが瞬時にわからなくなります。

定期的なお掃除を推奨します。
私は10個くらいになったらゴミ箱に入れて、完全削除する習慣がついています。
※この記事執筆時の私のダウンロードフォルダ👇
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3798971/48214bd2-d4af-e495-96d1-2b43bd603153.png)


## おわりに
最後のダウンロードフォルダに関しては、細かいことやってんな〜くらいで見てもらっていいですが、**環境を綺麗にしておくことはとても大事**です。

なぜこの記事を書こうと思ったかですが、私はITスクールのメンターもやっていまして、受講生が誤って作ったものがホームに蓄積しており、その掃除・復旧をする事が多かったからです。

この作業に終止符を打ちたく、この記事を書きました。

まあとはいえ、自分が購入した初代のMacも相当汚れていました。2台目はかなり丁寧に使っています。

まとめ記事に戻るにはこちら👇

https://qiita.com/ikemura-ren/items/3e7b6ec1b0cd9b3928d6

## 余談
デスクトップのお掃除もしましょう！せっかくの美しい壁紙見えません！