VirtualBox + Ubuntu(Xfce4)でJava + Springの開発環境構築

# まえがき
壊しても良いLinux環境をひとつもっておくと何かと便利なので用意する。
Xfce4はUbuntuのデスクトップ環境の中で比較的軽いので採用。

# ゴール
UbuntuでJava + SpringのWebアプリケーション開発ができるような状態を目指します。

# 前提：筆者の環境
- MacBook Pro (Retina, 15-inch, Mid 2015)
- OS：MacOS Catalina 10.15.4
- プロセッサ：2.2 GHz クアッドコアIntel Core i7
- メモリ：16 GB 1600 MHz DDR3
- グラフィックス：Intel Iris Pro 1536 MB

# 環境構築手順
## VirtualBoxのDL
https://www.virtualbox.org/wiki/Downloads
※今回はVirtualBox 6.1.6 を利用

## UbuntuイメージのDL
https://www.ubuntulinux.jp/download
※今回はUbuntu 20.04 LTSを利用。


## VMの初期設定

### 解像度設定
MacのRetinaの場合、動きがもっさりすることがある。
表示倍率200%が足を引っ張っているらしいので、これを100%にし、VirtualBoxの解像度を下げて起動するといい感じになる。

/Applications/VirtualBox.app/Contents/Resources/VirtualBoxVM.app
→ Finderで開く
→ 情報を見る
→ 「低解像度で開く」にチェック

VirtualBoxの設定から、「ディスプレイ」→「表示倍率」を100%に変更

### 新規作成時
HDDを10GB -> 32GBに変更

### 新規作成後
|  大項目 |  中項目  |  小項目  |
| ---- | ---- | ---- |
|  一般  |  高度  |  クリップボードの共有：双方向  |
|  一般  |  高度  |  ドラッグアンドドロップ：双方向  |
|  システム  |  マザーボード  |  メインメモリー：8192MB  |
|  システム  |  マザーボード  |  起動順序：フロッピーを外す  |
|  システム  |  マザーボード  |  チップセット：ICH9  |
|  システム  |  プロセッサー  |  プロセッサー数：2  |
|  システム  |  アクセラレーション  |  準仮想化インターフェース：KVM  |
|  ディスプレイ |  スクリーン  |  ビデオメモリ：256MB  |
|  ディスプレイ |  スクリーン  |  ディスプレイ数：1 |
|  ディスプレイ |  スクリーン  |  アクセラレーション：有効化 |
|  ディスプレイ |  スクリーン  |  アクセラレーション：有効化 |
|  ストレージ |  コントローラ:IDE |  ※初期起動時のみ：DLしてきたUbuntuのisoイメージ |
| 共有フォルダー |  共有用のフォルダを選択 | マウントにチェックを入れる |

## Ubuntuのインストール
VMを起動したら、画面の指示に従ってインストール。
最初の言語選択で日本語を選ぶ。
-> 再起動

## Ubuntuの各種設定
各種アップデート対応とGuestAdditionのインストールを済ませる。

### Xfce4のインストール
```
# Synapticパケージマネージャをインストール
$ sudo apt install synaptic

# conky プロセスをキル
$ killall conky

# 検索窓に`xfce4`と入れて以下をインストール
・xfce4
・xfce4-goodies
```

-> 再起動
## Ubuntu(Xfce4)起動
ログイン画面で、※マークからxfce4セッションを選択、ログイン

※画像はUbuntu 20.04の例
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/197517/f9d75ce6-ac03-6f79-2b46-ece62908df37.png)

###  日本語の設定(Option)
IBus-Mozcを参照：http://www.fuukemn.biz/page74-ubuntu-xfce.html

### ユーザー配下を英語に
```
$ LANG=C xdg-user-dirs-gtk-update
```

## 各種開発ツールをインストール

### コマンド類

- curl
- vim

### Java / SDKMAN
公式：https://sdkman.io/install
公式：https://sdkman.io/jdks

```
# SDKMANのインストール
$ curl -s "https://get.sdkman.io" | bash
$ source "$HOME/.sdkman/bin/sdkman-init.sh"

# Javaのインストール
$ sdk list java
$ sdk install java

※ MavenやGradeもこれでOK
$ sdk install maven
$ sdk install gradle
```

### VSCode
公式：https://code.visualstudio.com/docs/setup/linux
※今回はコマンドラインからインストール

```
$ curl https://packages.microsoft.com/keys/microsoft.asc | gpg --dearmor > packages.microsoft.gpg
$ sudo install -o root -g root -m 644 packages.microsoft.gpg /usr/share/keyrings/
$ sudo sh -c 'echo "deb [arch=amd64 signed-by=/usr/share/keyrings/packages.microsoft.gpg] https://packages.microsoft.com/repos/vscode stable main" > /etc/apt/sources.list.d/vscode.list'

$ sudo apt-get install apt-transport-https
$ sudo apt-get update
$ sudo apt-get install code
```

### Git / Github

```
# インストール
$ sudo apt install git

# 初期設定
$ git config --global user.name "ottoman"
$ git config --global user.email "ottoman@email.com"

# sshキーの生成&Githubに登録
$ cd ~/.ssh(なければ作る)
$ ssh-keygen -t rsa
 -> 公開鍵(id_rsa.pub)の中身をGithubに登録

# commit エディタをvimに
$ git config --global core.editor vim
```

### SpringToolSuite(STS) + 日本語化

#### インストール
公式：https://spring.io/tools よりダウンロードし解凍 ※今回はsts-4.6.1.RELEASE

```
# STS用のディレクトリをopt配下へ作成
$ sudo mkdir /opt/sts

# 配置
$ cp -r sts-4.6.1.RELEASE /opt/sts/
```

#### 起動用シェルを作成
```sts.sh
#!/bin/bash
JDK_VERSION=11.0.7.hs-adpt
STS_VERSION=4.6.1

export JAVA_HOME=/home/swat/.sdkman/candidates/java/$JDK_VERSION
export PATH=$PATH:$JAVA_HOME/bin

cd /opt/sts/sts-$STS_VERSION.RELEASE/
./SpringToolSuite4
```

#### ランチャーを作成
先程のシェルを呼び出すように設定
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/197517/c463ceb8-ab24-f51b-8929-ec6a30be4ca8.png)

#### 日本語化
公式：https://mergedoc.osdn.jp/ よりLinux版をダウンロード
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/197517/51a6d6b1-0623-452d-6796-86a6683294cb.png)

```
# 解凍した中にあるfeaturesとpluginsの中身をsts-4.6.1.RELEASEのfeaturesとpluginsにコピー
$ sudo cp -r ./features/jp.sourceforge.mergedoc.pleiades/ /opt/sts/sts-4.6.1.RELEASE/features/
$ sudo cp -r ./plugins/jp.sourceforge.mergedoc.pleiades/ /opt/sts/sts-4.6.1.RELEASE/plugins/

# iniファイルに下記を追記(sts-4.6.1.RELEASE/SpringToolSuite4.ini)
-Xverify:none
-javaagent:plugins/jp.sourceforge.mergedoc.pleiades/pleiades.jar
```

これで起動すれば日本語化している
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/197517/677a09d4-5faf-7a9c-f3c9-3f4e87191c27.png)

### Postmanのインストール

```
sudo snap install postman
```

### NVM / Node.js (おまけ)
公式：https://github.com/nvm-sh/nvm#install--update-script

```
# NVMのインストール
$ curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.35.3/install.sh | bash

# .bashrcを確認
$ cat .bashrc | grep -A3 'export NVM_DIR'
export NVM_DIR="$HOME/.nvm"
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"  # This loads nvm
[ -s "$NVM_DIR/bash_completion" ] && \. "$NVM_DIR/bash_completion"  # This loads nvm bash_completion

# .bashrcを反映
$ source ~/.bashrc

# nvmのバージョン確認
$ nvm --version
0.35.3

# Node.jsのインストール
$ nvm ls-remote
$ nvm install v12.16.3
```

## 最後に
こんなのもいれるかも

- DBクライアント