開発環境構築手順書2022

# macOS 環境構築

最新版はこちら[リンク](https://qiita.com/devchrist/items/e77476b3ce8db89ef76e)
## 更新履歴

- 2022/07/27: Docker-composeでLocalStackの動かし方を追記
- 2022/06/17: Terminal.appの背景を透明にする設定方法の追記
- 2022/3/26: Lima テンプレートのリンク修正、一部文言の変更

## 概要
新規購入したApple silicon版のmacOS上で開発環境を整えるための手順書

## 前提
コマンドは特別な明記がない限り、一行ずつ実行していく。

## 手順


### oh-my-zsh
- [ ] 1. terminal.appを起動
- [ ] 2. oh-my-zsh本体のインストール

```bash
sh -c "$(curl -fsSL https://raw.github.com/ohmyzsh/ohmyzsh/master/tools/install.sh)"
```

### Homebrew
- [ ] 1. terminal.appを起動
- [ ] 2. HomeBrew本体のインストール

```bash
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"

echo 'eval "$(/opt/homebrew/bin/brew shellenv)"' >> ~/.zprofile

eval "$(/opt/homebrew/bin/brew shellenv)"
```
- [ ] 3. ソフトウェアをインストール(不要なモノは無視すること)

```bash
brew install --cask clipy
brew install --cask iterm2
brew install --cask visual-studio-code
brew install --cask jetbrains-toolbox
brew install --cask alfred
brew install --cask fig
brew install vim
brew install tig
brew install arp-scan
brew install imagemagick

brew install zsh-syntax-highlighting
echo '# zsh-syntax-highlighting' >> ~/.zshrc
echo 'source /opt/homebrew/share/zsh-syntax-highlighting/zsh-syntax-highlighting.zsh' >> ~/.zshrc

brew install zsh-completions
echo '# zsh-completions' >> ~/.zshrc
echo 'if type brew &>/dev/null; then' >> ~/.zshrc
echo '  FPATH=$(brew --prefix)/share/zsh-completions:$FPATH' >> ~/.zshrc
echo '  autoload -Uz compinit' >> ~/.zshrc
echo '  compinit' >> ~/.zshrc
echo 'fi' >> ~/.zshrc

brew install zsh-autosuggestions
echo '# zsh-autosuggestions' >> ~/.zshrc
echo 'source /opt/homebrew/share/zsh-autosuggestions/zsh-autosuggestions.zsh' >> ~/.zshrc

source ~/.zshrc
rm -f ~/.zcompdump; compinit
```

### Docker(有償回避)
- [ ] 1. Dockerに必要なソフトウェアのインストール

```bash
brew install lima docker docker-compose
```
- [ ] 2. limaのテンプレートをダウンロード

```bash
curl -o default.yaml https://raw.githubusercontent.com/lima-vm/lima/master/examples/default.yaml
```
- [ ] 2. テンプレートを編集

```yaml
# ===================================================================== #
# BASIC CONFIGURATION
# ===================================================================== #

# Arch: "default", "x86_64", "aarch64".
# "default" corresponds to the host architecture.
arch: "null" # ← defaultをx86_64に書き換える

....

# writableをtrueにすると読み書きができる。
# デフォルトにも書いてある通り、「~」や「/」のみを指定してwritableをtrueにはしないこと。非常に危険。
mounts:
  - location: "~"
    writable: false
  - location: "/tmp/lima"
    writable: true
  - location: "~/work"
    writable: true
  - location: "~/private"
    writable: true
```
- [ ] 3. 仮想環境を新規作成

```bash
limactl start default.yaml
# Proceed with the current configuration を選択
# INFO[0036] READY. Run `limactl shell ...まで待機
```
- [ ] 4. 仮想環境が動いていることを確認し、インスタンス名を控えておく。

インスタンス名:

```bash
limactl list
# NAME       STATUS     SSH                ARCH      DIR
# default    Running    127.0.0.1:60022    x86_64    /Users/[username]/.lima/default
# インスタンス名は、 NAME列の名前
```
- [ ] 5. Dockerホストの設定

```bash
echo  "export DOCKER_HOST='tcp://127.0.0.1:2375'" >> ~/.zshrc
source ~/.zshrc
```
- [ ] 6. 仮想環境にDockerをインストール

```bash
curl -fsSL https://get.docker.com | limactl shell [インスタンス名]
```
- [ ] 7. 仮想環境のユーザー名を控える

ユーザー名:

```bash
limactl shell [instance名] whoami
```
- [ ] 8. dockerグループに追加

```bash
limactl shell [instance名] sudo gpasswd -a [ユーザー名] docker
```
- [ ] 9. 仮想環境を再起動

```bash
limactl stop [instance名] ; sleep 5; limactl start [instance名]
```
- [ ] 10. 仮想環境のDockerを確認

```bash
limactl shell [instance名] docker version
```
- [ ] 11. dockerのdeamon.jsonを作成

```bash
limactl shell [instance名] sudo vim /etc/docker/daemon.json
```
- [ ] 12. 下記を追記し、保存

```json
{"hosts": ["tcp://127.0.0.1:2375", "unix:///var/run/docker.sock"]}
```
- [ ] 13. dockerサービスのoverride.confを作成

```bash
limactl shell [instance名] sudo mkdir -p /etc/systemd/system/docker.service.d/
limactl shell [instance名] sudo vim /etc/systemd/system/docker.service.d/override.conf
```
- [ ] 14. 下記を追記し、保存

```txt
[Service]
ExecStart=
ExecStart=/usr/bin/dockerd
```
- [ ] 15. dockerサービスを再起動

```bash
limactl shell [instance名] sudo systemctl daemon-reload
limactl shell [instance名] sudo systemctl restart docker.service
```
- [ ] 16. dockerの動作確認

```bash
docker version
# macOS側
# Client: Docker Engine - Community
# ....
#  OS/Arch:           darwin/arm64
# ...

# Lima側
# Server: Docker Engine - Community
#  Engine:
# ...
#   OS/Arch:          linux/amd64
# ...
```

- [ ] 17. Opensearch(or Elasticsearchの為に設定変更

```bash
 limactl shell [instance名] sudo sysctl -w vm.max_map_count=262144
```

#### Docker-compose - LocalStack

- docker-composeファイル

下記ファイルを作成後、このファイルがあるディレクトリで「docker-compose up」

```yaml
version: '3'

services:
  localstack:
    image: localstack/localstack:latest
    ports:
      - "127.0.0.1:4566:4566"
      - "127.0.0.1:4510-4559:4510-4559"
      - "127.0.0.1:443:443"

```

- localstackの動作確認

何かしらのAWSコマンドでエンドポイントをローカルホストにすればOK。
サービスによってポート番号が異なるので各自調べていただく。

```shell
aws s3 ls --endpoint-url=http://localhost:4566
```

- localstackの状態を取得

```shell
curl -s http://localhost:4566/health | jq
```
### nodebrew
- [ ] 1. terminal.appを起動
- [ ] 2. nodebrew本体のインストール

```bash
brew install nodebrew
mkdir -p ~/.nodebrew/src
echo '# Nodebrew' >> ~/.zshrc
echo 'export PATH=$HOME/.nodebrew/current/bin:$PATH' >> ~/.zshrc
```
- [ ] 3. NodeJSの最新版を控える

NodeJS Ver: 

```bash
nodebrew ls-remote
# example) v17.2.0
```
- [ ] 4. NodeJSの最新版をインストール

```bash
nodebrew isntall [NodeJS Ver]
```
- [ ] 5. NodeJSのバージョン確認

```bash
node -v
```

### SDKMAN
- [ ] 1. terminal.appを起動
- [ ] 2. SDKMAN本体のインストール

```bash
curl -s "https://get.sdkman.io" | bash
source "$HOME/.sdkman/bin/sdkman-init.sh"
```
#### Java
- [ ] 1. Amazon Correttoの最新版を控える

最新版のバージョン: 

```bash
sdk list java | grep amzn
#example) 17.0.1.12.1-amzn
```
- [ ] 2. Amazon Correttoの最新版をインストール

```bash
sdk install java [最新版のバージョン] 
# globalにするのかを聞かれたら Y を入力。
# 聞かれていない場合は、下記コマンドを実行
sdk default java [最新版のバージョン]
```
- [ ] 3. Amazon Correttoのバージョンを確認

```bash
java -version
```
#### Sbt
- [ ] 1. Sbtの最新版を控える

最新版のバージョン: 

```bash
sdk list sbt
#example) 1.5.7
```
- [ ] 2. Sbtの最新版をインストール

```bash
sdk install sbt [最新版のバージョン] 
# globalにするのかを聞かれたら Y を入力。
# 聞かれていない場合は、下記コマンドを実行
sdk default sbt [最新版のバージョン]
```
- [ ] 3. Sbtのバージョンを確認

```
sbt about
```
#### Scala
- [ ] 1. Scalaの最新版を控える
最新版のバージョン: 

```bash
sdk list scala
#example) 3.1.0
```
- [ ] 2. Scalaの最新版をインストール

```bash
sdk install scala [最新版のバージョン] 
# globalにするのかを聞かれたら Y を入力。
# 聞かれていない場合は、下記コマンドを実行
sdk default scala [最新版のバージョン]
```
- [ ] 3. Scalaのバージョンを確認

```
scala -version
```

### Rust


```
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
echo '# Rust' >> ~/.zshrc
echo 'source $HOME/.cargo/env' >> ~/.zshrc
```


## 補足
### ARP-SCAN

```bash
sudo arp-scan -I [ifconfigのインターフェイス] -l
# ex) sudo arp-scan -I en0 -l
```

### システム設定
- キー入力の連打を有効化させる

```bash
defaults write -g ApplePressAndHoldEnabled -bool false
```

### limaの基本コマンド
```bash
limactl ls # lima vm 一覧

limactl start xxxx(or xxxxx.yml) vm 起動

limactl stop xxxx vm 停止

limactl delete xxxx 削除
```

### ecrの認証情報の取得
```bash
aws ecr get-login-password --region ap-northeast-1 | docker login --username AWS --password-stdin [accountID].dkr.ecr.ap-northeast-1.amazonaws.com
```

### iOSバックアップ - NAS 間 シンボリックリンク
```bash
ln -s /Volumes/BackUps/Buckup /Users/${USERNAME}/Library/Application\ Support/MobileSync 
```

### Terminal.appの背景を透明にする方法

1. Terminal.appの環境設定→「プロファイル」タブを選択
1. 「カラーとエフェクト」をクリック
1. 出てきたウィンドウの「不透明度」を50~60%に、「ブラー」を0%にする
1. Terminal.appを再起動

### Apple Developerの証明リスト出力

```shell
security -v find-identity
```


### 参考文献

- [Docker Desktop for Macの実用的な代替手段: lima + Docker](https://qiita.com/yoichiwo7/items/44aff38674134ad87da3)