開発環境をクリーンアップするシェルスクリプトを書く

# 開発環境をクリーンアップするシェルスクリプトを書く

こんにちは、@studio_meowtoon です。この記事では Ubuntu で構築したローカルの開発環境を、シェルスクリプトを用いてクリーンアップする手順の一例を紹介します。
![linux_on_windows_11.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3206449/992dc7cd-d72d-1698-a82a-aef2863ee82c.png)

:::note warn
この記事の内容は予告なく内容が更新されることがあります。ご了承ください。
:::

## 目的

Windows 11 の Linux でクラウド開発します。

こちらから記事の一覧がご覧いただけます。

https://qiita.com/studio_meowtoon/items/6119ab05d8b13527efd8 

## 実現すること

Ubuntu 開発環境をクリーンアップするシェルスクリプトを書きます。

## 開発環境

+ Windows 11 Home 22H2 を使用しています。  

:::note info
[WSL](https://learn.microsoft.com/ja-jp/windows/wsl/about) の Ubuntu を操作していきますので macOS の方も参考にして頂けます。  
:::

<details>

WSL (Microsoft Store アプリ版) [※ こちらの関連記事からインストール方法をご確認いただけます](https://qiita.com/studio_meowtoon/items/2aaa6579cb8e4fa1d874)

```sh
> wsl --version
WSL バージョン: 1.0.3.0
カーネル バージョン: 5.15.79.1
WSLg バージョン: 1.0.47
```

Ubuntu [※ こちらの関連記事からインストール方法をご確認いただけます](https://qiita.com/studio_meowtoon/items/2aaa6579cb8e4fa1d874)

```sh
$ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description:    Ubuntu 22.04.1 LTS
Release:        22.04
```

Java JDK [※ こちらの関連記事からインストール方法をご確認いただけます](https://qiita.com/studio_meowtoon/items/4d11e94a2389758759cd)

```sh
$ java -version
openjdk version "11.0.18" 2023-01-17
OpenJDK Runtime Environment (build 11.0.18+10-post-Ubuntu-0ubuntu122.04)
OpenJDK 64-Bit Server VM (build 11.0.18+10-post-Ubuntu-0ubuntu122.04, mixed mode, sharing)
```

Maven [※ こちらの関連記事からインストール方法をご確認いただけます](https://qiita.com/studio_meowtoon/items/f4cdc4039158153365fb)

```sh
$ mvn -version
Apache Maven 3.6.3
Maven home: /usr/share/maven
Java version: 11.0.18, vendor: Ubuntu, runtime: /usr/lib/jvm/java-11-openjdk-amd64
```

Azure CLI [※ こちらの関連記事からインストール方法をご確認いただけます](https://qiita.com/studio_meowtoon/items/9721041f9e6e3e987cf0)

```sh
$ az --version
azure-cli                         2.45.0
core                              2.45.0
telemetry                          1.0.8
```

</details>

:::note warn
この記事では基本的に **Ubuntu のターミナルで操作**を行います。**Vim を使用してコピペする方法**を初めて学ぶ人のために、以下の記事で手順を紹介しています。ぜひ挑戦してみてください。
:::

https://qiita.com/studio_meowtoon/items/7771ad48676926e41463

## 作業フォルダについて

:::note warn
この記事では開発作業を **~/tmp** ディレクトリで行う体で説明しています。適時、**実際の作業ディレクトリ**に読み替えてください。
:::

作業ディレクトリに移動します。

```sh
$ cd ~/tmp
```

## Java 環境のクリーンアップ

![java_on_ubuntu.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3206449/5ac0176e-96f8-732a-39b2-a9124f169e1d.png)

### ローカル Maven リポジトリのクリーンアップ

#### なぜ必要ですか？

:::note info
**Maven** を **Java** アプリの**ビルドツール**として使用すると、**ローカル**の **Maven リポジトリ**がしばしば**十数ギガバイト**にもなります。そして、クリーンアップを定期的に実行することで、ディスク領域が増えます。
:::

シェルスクリプトを作成します。

```sh
$ vim delete_user_m2.sh
```

```sh:delete_user_m2.sh
#!/bin/bash

# delete an user .md directory. 
rm -fr ~/.m2
```

:::note alert
**rm -fr** は、**強制的**に、**再帰的**にディレクトリの内容を削除するという、**非常に強力**なコマンドです。誤ってご使用されないようにご注意ください。
:::

実行権限を付加します。

```sh
$ chmod +x delete_user_m2.sh
```

シェルスクリプトを実行します。

```sh
$ ./delete_user_m2.sh
```

### 作業ディレクトリ配下の target フォルダのクリーンアップ

#### なぜ必要ですか？

:::note info
Maven でビルドする Java のプロジェクトをたくさん作成して実行すると、プロジェクトごとに生成される **target** というフォルダが**ディスク領域を圧迫**することがあります。この場合、定期的にクリーンアップを実行することで、ディスク領域が増えます。
:::

シェルスクリプトを作成します。

```sh
$ vim delete_target_recursively.sh
```

```sh:delete_target_recursively.sh
#!/bin/bash

# delete target directories under this directory recursively.
shopt -s globstar
rm -rf **/target
```

実行権限を付加します。

```sh
$ chmod +x delete_target_recursively.sh
```

シェルスクリプトを実行します。

```sh
$ ./delete_target_recursively.sh
```

### ローカル Gradle リポジトリのクリーンアップ

#### なぜ必要ですか？

:::note info
**Gradle** を **Java** アプリの**ビルドツール**として使用すると、**ローカル**の **Gradle リポジトリ**がしばしば**十数ギガバイト**にもなります。そして、クリーンアップを定期的に実行することで、ディスク領域が増えます。
:::

シェルスクリプトを作成します。

```sh
$ vim delete_user_gradle.sh
```

```sh:delete_user_gradle.sh
#!/bin/bash

# delete an user .gradle directory. 
rm -fr ~/.gradle
```

:::note alert
**rm -fr** は、**強制的**に、**再帰的**にディレクトリの内容を削除するという、**非常に強力**なコマンドです。誤ってご使用されないようにご注意ください。
:::

実行権限を付加します。

```sh
$ chmod +x delete_user_gradle.sh
```

シェルスクリプトを実行します。

```sh
$ ./delete_user_gradle.sh
```

### 作業ディレクトリ配下の build フォルダのクリーンアップ

#### なぜ必要ですか？

:::note info
Gradle でビルドする Java のプロジェクトをたくさん作成して実行すると、プロジェクトごとに生成される **build** というフォルダが**ディスク領域を圧迫**することがあります。この場合、定期的にクリーンアップを実行することで、ディスク領域が増えます。
:::

シェルスクリプトを作成します。

```sh
$ vim delete_build_recursively.sh
```

```sh:delete_build_recursively.sh
#!/bin/bash

# delete build directories under this directory recursively.
shopt -s globstar
rm -rf **/build
```

実行権限を付加します。

```sh
$ chmod +x delete_build_recursively.sh
```

シェルスクリプトを実行します。

```sh
$ ./delete_build_recursively.sh
```

## .NET 環境のクリーンアップ

![dotnet_on_ubuntu.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3206449/8021c8ea-b982-6444-d2cd-5be7143809d2.png)

### 作業ディレクトリ配下の bin、obj フォルダのクリーンアップ

#### なぜ必要ですか？

:::note info
.NET のプロジェクトをたくさん作成して実行すると、プロジェクトごとに生成される **bin** と **obj** というフォルダが**ディスク領域を圧迫**することがあります。この場合、定期的にクリーンアップを実行することで、ディスク領域が増えます。
:::

:::note alert
このスクリプトを実行すると、配下の **bin** ディレクトリが**強制的、再帰的**に**削除**されます。ご注意ください。 
:::

シェルスクリプトを作成します。

```sh
$ vim delete_bin_and_obj_recursively.sh
```

```sh:delete_bin_and_obj_recursively.sh
#!/bin/bash

# delete build directories under this directory recursively.
shopt -s globstar
rm -rf **/bin
rm -rf **/obj
```

実行権限を付加します。

```sh
$ chmod +x delete_bin_and_obj_recursively.sh
```

シェルスクリプトを実行します。

```sh
$ ./delete_bin_and_obj_recursively.sh
```

## フロントエンド環境のクリーンアップ

![npm_on_ubuntu.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3206449/9919cfd4-e57d-d937-631e-c5ebd1c2ea09.png)

### 作業ディレクトリ配下の node_modules フォルダのクリーンアップ

#### なぜ必要ですか？

:::note info
フロントエンドのプロジェクトをたくさん作成して実行すると、プロジェクトごとに生成される **node_modules** というフォルダが**ディスク領域を圧迫**することがあります。この場合、定期的にクリーンアップを実行することで、ディスク領域が増えます。
:::

シェルスクリプトを作成します。

```sh
$ vim delete_node_modules_recursively.sh
```

```sh:delete_node_modules_recursively.sh
#!/bin/bash

# delete node_modules directories under this directory recursively.
shopt -s globstar
rm -rf **/node_modules
```

実行権限を付加します。

```sh
$ chmod +x delete_node_modules_recursively.sh
```

シェルスクリプトを実行します。

```sh
$ ./delete_node_modules_recursively.sh
```

## Azure 環境のクリーンアップ

![azure_on_ubuntu.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3206449/c668f43e-b181-a4a7-adf6-7893e986f8a7.png)

### なぜ必要ですか？

:::note info
**Microsoft Azure** は、初期の無料期間を経たのちに**従量課金プラン**に移行することができます。必要ないリソースをクリーンアップすることにより、**請求額**を抑えることができます。
:::

シェルスクリプトを作成します。

```sh
$ vim delete_resource_group.sh
```

:::note warn
次のパラメータは**ご自身の Azure リソースグループ**の名前に変更してください。

|No|行|パラメータ|内容|
|:--|:--|:--|:--|
|1|resource_group_name=rg-hello|**rg-hello**|リソースグループの名前です。|
:::

ファイルの内容

```sh:delete_resource_group.sh
#!/bin/bash

# set variables.
resource_group_name=rg-hello

# delete resource group
az group delete \
    --name $resource_group_name \
    --yes
```

実行権限を付加します。

```sh
$ chmod +x delete_resource_group.sh
```

シェルスクリプトを実行します。

```sh
$ ./delete_resource_group.sh
```

削除中は以下のように表示されます。

```sh
 / Running ..
```

## シェルスクリプトを書いたあとは

:::note info
一度、作業コマンドをシェルスクリプトに書いた後は、次回からはターミナルからそのシェルスクリプトを実行するだけで作業を行うことができます。
:::

## まとめ

どうでしたか？ **Windows 11** の **Linux** で、クラウド開発環境を手軽に構築することができます。ぜひお試しください。

:::note warn
**Ubuntu** を使うと **Linux の知識**も身に付きます。最初は難しく感じるかもしれませんが、徐々に進めていけば自信を持って書けるようになります。
:::

今後も **Ubuntu**、**Java**、**Spring**、**Docker**、**Azure** 開発環境の情報などを紹介していきますので、ぜひお楽しみにしてください。