Windowsを再インストールしたので開発環境を再構築した時の内容をざっくりメモ。

Windowsを再インストールしたので開発環境を再度構築しました。その時のメモをまとめてみました。
誰かの参考になればと思います。

# いろいろインストールした(使ってないのも含む)
インストールしたものをざっと列挙します。
- VSCode
- WSL2
- docker
- docker-compose
- asdf
- Node.js
- TypeScrpt
- Java
- Scala
- Gradle
- Erlang
- Elixir
- PostgreSQL

など

# WSL2インストール

Windows の機能の有効化または無効化　で以下を有効する。
・Linux 用 Windows サブシステム
・仮想マシンプラットフォーム
・Windows ハイパーバイザー プラットフォーム


Microsoft Storeからそれぞれインストール。
Windows Subsystem for Linux
https://apps.microsoft.com/store/detail/windows-subsystem-for-linux/9P9TQF7MRM4R

WSL2で起動するUbuntu
https://apps.microsoft.com/store/detail/ubuntu/9PDXGNCFSCZV


起動後にユーザとパスワードを入力し完了
(メニューにLinux用Windowsサブシステムという項目が追加されているのでそこから起動可能)

Ubuntuを更新する。

```
sudo apt update && sudo apt upgrade
```

VSCodeをインストール。(今回はやってないけどMicrosoft Storeからインストールでも良いかも) 
https://code.visualstudio.com/download
https://apps.microsoft.com/store/detail/visual-studio-code/XP9KHM4BK9FZ7Q

VSCodeの拡張機能をインストールして接続
Remote Development
https://marketplace.visualstudio.com/items?itemName=ms-vscode-remote.vscode-remote-extensionpack

WSLだけいれても接続はできる。
WSL
https://marketplace.visualstudio.com/items?itemName=ms-vscode-remote.remote-wsl


汎用的なミドルウェアをインストールする。
```
sudo apt install build-essential zip pkg-config libssl-dev language-pack-ja manpages-ja manpages-ja-dev -y
sudo update-locale LANG=ja_JP.UTF-8
```


# dockerインストール
```
sudo apt install apt-transport-https ca-certificates gnupg lsb-release -y
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
echo "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt update
sudo apt install docker-ce docker-ce-cli containerd.io
```

# Docker-compose,補完機能インストール
バージョンは以下で確認する。
https://github.com/docker/compose/releases

```
sudo curl -L "https://github.com/docker/compose/releases/download/v2.17.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
```

そのままだとrootにならないとコマンド実行できない。
```
$  docker container ls 
permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Get "http://%2Fvar%2Frun%2Fdocker.sock/v1.24/containers/json": dial unix /var/run/docker.sock: connect: permission denied
```

```
# 現在ログインしているユーザーをdockerグループへ追加
sudo gpasswd -a $(whoami) docker

# docker.sock にグループでの書き込み権限を付与
sudo chgrp docker /var/run/docker.sock

# docker daemonを再起動
sudo service docker restart
```

VSCodeを開きなおす。



# Git設定
```
git config --global user.name ユーザ名
git config --global user.email "メールアドレス"
```

--globalで設定した場合、全リポジトリで有効。情報は、「~/.gitconfig」に書き込まれる。
--localを指定した場合、特定のリポジトリで有効。「.git/config」に書き込まれる。


# asdfのインストール
```
git clone https://github.com/asdf-vm/asdf.git ~/.asdf --branch v0.11.3
echo '. $HOME/.asdf/asdf.sh' >> ~/.bashrc
echo '. $HOME/.asdf/completions/asdf.bash' >> ~/.bashrc
source ~/.bashrc
```

# Node.js,TypeScriptのインストール

## Node.jsインストール
https://github.com/asdf-vm/asdf-nodejs

```
asdf plugin add nodejs https://github.com/asdf-vm/asdf-nodejs.git

asdf list all nodejs
asdf install nodejs latest
asdf list nodejs

asdf list nodejs
  19.8.1

asdf global nodejs latest

node -v
v19.8.1
```

バージョンのアンインストールは以下のコマンドで実行できる。
(アンインストールするとグローバルインストールしたライブラリも消えるので再インストールが必要。)
```
asdf uninstall nodejs 19.8.1
```

## TypeScrptのインストール
```
npm install -g typescript
npm install -g ts-node

npm ls -g typescript
npm ls -g ts-node
npm install -g react-scripts
```

# Java,Scalaをインストール

## Java
https://docs.scala-lang.org/overviews/jdk-compatibility/overview.html
JDKとScalaの対応表を見てバージョンは決定する。

https://github.com/halcyon/asdf-java
```
asdf plugin-add java https://github.com/halcyon/asdf-java

asdf list all java
asdf list all java | grep adoptopenjdk

asdf install java adoptopenjdk-17.0.6+10
asdf list java
asdf global java adoptopenjdk-17.0.6+10

java --version
javac --version
```

JAVA_HOMEを設定する。
```
echo '. ~/.asdf/plugins/java/set-java-home.bash' >> ~/.profile
source ~/.profile
```



## Gradle
https://github.com/rfrancis/asdf-gradle
```
asdf plugin-add gradle https://github.com/rfrancis/asdf-gradle.git
asdf list all gradle

asdf install gradle 8.1
asdf local gradle 8.1
```

## sbt
https://github.com/bram2000/asdf-sbt.git
```
asdf plugin-add sbt
asdf list-all sbt

asdf install sbt 1.8.2
asdf global sbt 1.8.2
sbt --version

project/ target/ が勝手に作成されるので不要なら削除する。
rm -rf project target
```

## scala
https://github.com/asdf-community/asdf-scala

```
asdf plugin-add scala
asdf list-all scala

asdf install scala 2.13.10
asdf global scala 2.13.10

scala --version
```

# PostgreSQLのインストール
直接Ubuntuにインストールしているけど、
Dockerをインストールしているのでコンテナで起動して使用するでもよかったかもしれない。
とりあえず、メモとして残す。

以降の手順(リポジトリを追加)でなくてもインストールは可能。ただし古いバージョンなる。

apt-keyは廃止になるらしい。
今(Ubuntu 22.04.2 LTS)はまだ使えるけど、今後は使えなくなる予定なのでwikiの方の手順でインストールする。
https://wiki.postgresql.org/wiki/Apt

apt-keyはなぜ廃止予定となったのか
https://gihyo.jp/admin/serial/01/ubuntu-recipe/0675

```bash
# Create the file repository configuration:
sudo sh -c 'echo "deb http://apt.postgresql.org/pub/repos/apt $(lsb_release -cs)-pgdg main" > /etc/apt/sources.list.d/pgdg.list'

# 確認
$ ls /etc/apt/sources.list.d/pgdg.list
/etc/apt/sources.list.d/pgdg.list
$ head -n 10 /etc/apt/sources.list.d/pgdg.list
deb http://apt.postgresql.org/pub/repos/apt jammy-pgdg main


# Import the repository signing key:
curl https://www.postgresql.org/media/keys/ACCC4CF8.asc | gpg --dearmor | sudo tee /etc/apt/trusted.gpg.d/apt.postgresql.org.gpg >/dev/null

# 確認
$ ls /etc/apt/trusted.gpg.d/apt.postgresql.org.gpg
/etc/apt/trusted.gpg.d/apt.postgresql.org.gpg

# Update the package lists:
sudo apt-get update

# インストールされるバージョン確認
$ apt info postgresql 

# Install the latest version of PostgreSQL.
# If you want a specific version, use 'postgresql-12' or similar instead of 'postgresql':
sudo apt-get install postgresql -y


# 確認
psql --version
apt list --installed | grep postgresql
sudo -u postgres -i
psql -U postgres
select version();

# postgresqlが起動しているか確認、停止している場合は起動。
service postgresql status
sudo service postgresql start
```

# Erlang,Elixirのインストール

https://github.com/asdf-vm/asdf-erlang#before-asdf-install

https://github.com/asdf-vm/asdf-elixir

インストールするバージョンは以下を参考にする。

https://hexdocs.pm/elixir/compatibility-and-deprecations.html#compatibility-between-elixir-and-erlang-otp

## ライブラリをインストール

```
sudo apt update
sudo apt -y upgrade

sudo apt-get -y install \
  automake \
  autoconf \
  m4 \
  libncurses5-dev \
  libwxgtk3.0-gtk3-dev \
  libwxgtk-webview3.0-gtk3-dev \
  libgl1-mesa-dev \
  libglu1-mesa-dev \
  libpng-dev \
  libssh-dev \
  unixodbc-dev \
  xsltproc \
  fop \
  libxml2-utils \
  libncurses-dev \
  libreadline-dev \
  zlib1g-dev \
  inotify-tools
```

## Erlangインストール

```bash
# オプションを設定。
export KERL_CONFIGURE_OPTIONS="--enable-jit --without-javac --without-odbc"
```

```
asdf plugin add erlang https://github.com/asdf-vm/asdf-erlang.git
asdf list all erlang
asdf install erlang 25.3.2
asdf global erlang 25.3.2
```
## Elixirインストール
```
asdf plugin add elixir https://github.com/asdf-vm/asdf-elixir.git
asdf list all elixir
asdf install elixir 1.14.4
asdf global elixir 1.14.4
```

# 補完が重いので対策
/etc/wsl.conf を編集する。(無い場合は新規作成)
Windowsのパスを無効にしている。
```
[interop]
appendWindowsPath = false
```

必要なWindowsのコマンドは個別でパスの通っている場所にリンクを作成。
```
sudo ln -s '/mnt/c/Users/ka/AppData/Local/Programs/Microsoft VS Code/bin/code' /usr/local/bin/code
sudo ln -s /mnt/c/Windows/System32/cmd.exe /usr/local/bin/cmd.exe
sudo ln -s /mnt/c/Windows/explorer.exe /usr/local/bin/explorer.exe
```

# VSCode拡張機能いろいろインストールした
※色々インストールしていて全て列挙出来てないかも

Extension Pack for Java（https://marketplace.visualstudio.com/items?itemName=vscjava.vscode-java-pack
Gradle for Java（https://marketplace.visualstudio.com/items?itemName=vscjava.vscode-gradle
Spring Boot Extension Pack（https://marketplace.visualstudio.com/items?itemName=vmware.vscode-boot-dev-pack

Scala (Metals)（https://marketplace.visualstudio.com/items?itemName=scalameta.metals

設定 - Metals - Java HomeにJAVA_HOMEを設定する。
Metalsのインストールが始まる。

ElixirLS: Elixir support and debugger (https://marketplace.visualstudio.com/items?itemName=JakeBecker.elixir-ls

Japanese Language Pack for Visual Studio Code（https://marketplace.visualstudio.com/items?itemName=MS-CEINTL.vscode-language-pack-ja
Git Graph (https://marketplace.visualstudio.com/items?itemName=mhutchie.git-graph
GitLens — Git supercharged（https://marketplace.visualstudio.com/items?itemName=eamodio.gitlens
indent-rainbow（https://marketplace.visualstudio.com/items?itemName=oderwat.indent-rainbow
Annotator（https://marketplace.visualstudio.com/items?itemName=ryu1kn.annotator
Rainbow CSV（https://marketplace.visualstudio.com/items?itemName=mechatroner.rainbow-csv
Path Autocomplete（https://marketplace.visualstudio.com/items?itemName=ionutvmi.path-autocomplete

Code Spell Checker（https://marketplace.visualstudio.com/items?itemName=streetsidesoftware.code-spell-checker
Live Preview（https://marketplace.visualstudio.com/items?itemName=ms-vscode.live-server

Thunder Client (https://marketplace.visualstudio.com/items?itemName=rangav.vscode-thunder-client

Tailwind CSS IntelliSense (https://marketplace.visualstudio.com/items?itemName=bradlc.vscode-tailwindcss

# 参考

https://chigusa-web.com/blog/wsl2-win11/

https://www.microsoft.com/en-gb/search/shop/apps?q=wsl&devicetype=pc&category=Developer+tools&Price=0

https://zenn.dev/lfz/articles/b87a4668922b3b

https://learn.microsoft.com/ja-jp/windows/wsl/setup/environment

https://zenn.dev/shibe23/articles/97b5bcd46e82b7

https://www.postgresql.org/download/linux/ubuntu/

https://wiki.postgresql.org/wiki/Apt

https://github.com/kerl/kerl#configure-options

https://www.erlang.org/doc/installation_guide/install#Advanced-configuration-and-build-of-ErlangOTP_Configuring

https://amaya382.hatenablog.jp/entry/2019/12/27/120057

https://tkr911.hatenablog.com/entry/2020/05/06/113846

# おわり
とりあえずインストールした時のメモをまとめてみました。
多分大丈夫だとは思いますが、メモが間違えている可能性は捨てきれない・・。
(記事作成後、手順の再確認をしていない)

Scalaとかは当時勉強しようと思ってインストールしたけど、
結局やっていないのでアンインストールしてもいいかもしれない。

一先ず誰かの参考になればと思います。

今回は以上です。