Mac Stadioの購入後に実施した開発環境構築

# 目次
- [目次](#目次)
- [目的](#目的)
- [ハードウェア構成](#ハードウェア構成)
- [操作性のカスタマイズ](#操作性のカスタマイズ)
  - [OS側](#os側)
  - [マウス(Magic Trackpad)](#マウスmagic-trackpad)
    - [ドラッグ方法の修正](#ドラッグ方法の修正)
    - [タップでクリックに変更](#タップでクリックに変更)
  - [キーボード(HHKB)](#キーボードhhkb)
    - [ショートカット系](#ショートカット系)
    - [Bluetooth設定](#bluetooth設定)
- [開発環境セットアップ](#開発環境セットアップ)
  - [Homebrewのインストール](#homebrewのインストール)
  - [必要なツールのセットアップ](#必要なツールのセットアップ)
  - [Pythonのインストール](#pythonのインストール)
    - [pyenvのインストール](#pyenvのインストール)
    - [poetryのインストール](#poetryのインストール)
  - [Nodeのインストール](#nodeのインストール)
  - [必要なコマンドのインストール](#必要なコマンドのインストール)

# 目的
今回、メインPCをMac Book ProからMac Stadioに変更することとなったので、自分なりの開発環境、カスタマイズすることについて、備忘録として残す。

# ハードウェア構成
- PC: Mac Book Pro 2019 -> Mac Stadio
- キーボード: HHKB HYBRID Type-S US配列
- マウス: Magic Trackpad

# 操作性のカスタマイズ
## OS側
省エネのためディスプレイオフまでの時間を修正する。
![ロック画面.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/593337/608e4837-f4ca-3051-99eb-d583eb74bef5.png)

## マウス(Magic Trackpad)
### ドラッグ方法の修正
![ドラッグ.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/593337/bbd2d2a1-e039-4177-5914-7cfe0c87de59.png)
### タップでクリックに変更
![クリック.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/593337/7a3ac129-89ec-9dda-8829-77b9be19cfc4.png)

## キーボード(HHKB)
### ショートカット系
- 入力ソース切り替え
![入力ソース切り替え.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/593337/17b4ada5-521b-e0e1-eb6c-0641df6c0a53.png)
- Spotlight
![spotlight.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/593337/55f549cf-0335-4489-9ed3-2605294877af.png)
- Sleep
![sleep.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/593337/15134359-4903-fd8a-be95-7bff7d55a51d.png)

### Bluetooth設定
以下を参考にBluetooth接続できるようにする。
https://faq.pfu.jp/faq/show/3827?category_id=181&site_domain=hhkb


# 開発環境セットアップ
## Homebrewのインストール
基本的に[Homebrew](https://brew.sh/index_ja)を用いて開発環境をセットアップするため、まずはこれをインストールする。
インストールコマンドは以下。
```shell:install command
% /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
...
.
==> Next steps:
- Run these three commands in your terminal to add Homebrew to your PATH:
    echo '# Set PATH, MANPATH, etc., for Homebrew.' >> /Users/xxxxxxx/.zprofile
    echo 'eval "$(/opt/homebrew/bin/brew shellenv)"' >> /Users/xxxxxxx/.zprofile
    eval "$(/opt/homebrew/bin/brew shellenv)"
- Run brew help to get started
- Further documentation:
    https://docs.brew.sh

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

% 違うターミナルを開いて
% brew -v
Homebrew 3.6.16
Homebrew/homebrew-core (git revision 25888e29aac; last commit 2022-12-25)
```
上記のようにバージョンが確認できればOK

## 必要なツールのセットアップ
可能な限り全て、Homebrewでインストールする。

- [Slack](https://formulae.brew.sh/cask/slack#default)
- [Teams](https://formulae.brew.sh/cask/microsoft-teams#default)
- [VS Code](https://formulae.brew.sh/cask/visual-studio-code#default)
- [Docker](https://formulae.brew.sh/cask/docker#default)
- [Google Chrome](https://formulae.brew.sh/cask/google-chrome)
- [Postman](https://formulae.brew.sh/cask/postman#default)
- Microsoft 365
- [zoom](https://formulae.brew.sh/cask/zoom#default)
- LINE
- [Discord](https://formulae.brew.sh/cask/discord#default)
- [VLC](https://formulae.brew.sh/cask/vlc#default)
- Norton 360
- [Kindle](https://formulae.brew.sh/cask/kindle)

ソフトウェアパッケージが存在する場合、以下でパッケージを取得可能。
```shell:packageのinstall
% brew install --cask <パッケージ名>
```

## Pythonのインストール
### pyenvのインストール
以下を参考にする。
https://qiita.com/koooooo/items/b21d87ffe2b56d0c589b
開発環境ごとにPythonのバージョンを変えて実行する機会があるため、pyenvを導入する。
```shell: install pyenv
% brew install pyenv
```
ひとまず、グローバルのpythonを最新にする。
``` shell: upgrade python
% pyenv install --list
% 最新っぽそうなのが3.11.1なのでそれを利用する。
% pyenv install 3.11.1
% python --version
zsh: command not found: python
% pythonはインストールされていない？
% python3はインストールされているかも。
% python3 --version
Python 3.9.6
% which python3
/usr/bin/python3
% pyenvが反応しないのでエイリアスをはる。
% echo "alias python='python3'" >> ~/.zprofile
% python --version 
Python 3.9.6

```
エイリアス貼っても、pythonのバージョンが出力が変わらなかった。
pyenvがうまく効いていない？
以下を`~/.zprofile`に書き込んでターミナルを閉じて再度実行する。
```shell: For pyenv
export PYENV_ROOT="$HOME/.pyenv"
export PATH="$PYENV_ROOT/shims:$PATH"
eval "$(pyenv init --path)"
```

```shell: 確認
% python --version
Python 3.11.1
% pyenv versions
  system
* 3.11.1 (set by /Users/xxxxxx/.pyenv/version)
```
上手くいってそうだった。
### poetryのインストール
以下を参考にインストールする。

https://cocoatomo.github.io/poetry-ja/

```shell:poetry install
% curl -sSL https://install.python-poetry.org | python -
...
..
Add `export PATH="/Users/xxxxxxxx/.local/bin:$PATH"` to your shell configuration file.

Alternatively, you can call Poetry explicitly with `/Users/xxxxxxxx/.local/bin/poetry`.

You can test that everything is set up by executing:

`poetry --version`
```
指示通り、PATHにpoetryのパスを追加する。
`~/.zprofile`に以下を追記する。
```shell: For Poetry
export PATH="/Users/xxxxxxxx/.local/bin:$PATH"
```
以下のメッセージが出ていたら、インストールは完了。
```shell: 完了メッセージ
% poetry --version
Poetry (version 1.3.1)
```

## Nodeのインストール
AWS でIaCを構築しているが、それの前提がNode.jsのためインストールが必要。

以前は`nodebrew`というツールを利用していたが、最近は主流じゃなさそうだった。
以下記事で紹介されている`Node`のバージョン管理を比較をしているのを見たところ、`nvm`が良さそうなのかと思った。

https://cam-inc.co.jp/p/techblog/600182771498877993

以下ページを元に`nvm`をインストールしてみる。

https://github.com/nvm-sh/nvm

```shell:nvm install
% curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.3/install.sh | bash
```
新規terminalを開いて、以下を実行してみる。
```shell: nvm 確認
% nvm --version
0.39.3
```
以下が`~/.zprofile`に追加されていた。
```shell: ~/.zprofile
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
```

GlobalのNodeをインストールする。
```
% nvm install node
Downloading and installing node v19.3.0...
Downloading https://nodejs.org/dist/v19.3.0/node-v19.3.0-darwin-arm64.tar.xz...
################################################################################################################################################################################# 100.0%
Computing checksum with shasum -a 256
Checksums matched!
Now using node v19.3.0 (npm v9.2.0)
Creating default alias: default -> node (-> v19.3.0)
xxxxxxx@xxxxxxxxxx qiita % node -v
v19.3.0
xxxxxxx@xxxxxxxxxx qiita % cd ..
xxxxxxx@xxxxxxxxxx Private % node -v
v19.3.0
```
Globalで設定されていることを確認。
## 必要なコマンドのインストール
直近で必要なものだけ記載する。
- [awscli](https://formulae.brew.sh/formula/awscli#default)
  - AWSへコマンドラインからAPIを叩いたり疎通をとったりするために前提として必要になる。
```shell:動作確認
% aws --version
aws-cli/2.9.10 Python/3.11.1 Darwin/22.2.0 source/arm64 prompt/off
```
- [aws-sam-cli](https://docs.aws.amazon.com/ja_jp/serverless-application-model/latest/developerguide/serverless-sam-cli-install-mac.html)
  - ローカルで時々Lambdaを実行する機会があるので一応取得しておく。
  - `brew tap aws/tap`が必要だった。
```shell:動作確認
% sam --version
SAM CLI, version 1.67.0
```
- [aws-nuke](https://formulae.brew.sh/formula/aws-nuke#default)
  - awsのリソースを削除してくれるツール
```shell:動作確認
% aws-nuke version
version:     2.21.2
build date:  2022-12-09
scm hash:    e76d21c263477ebd6648fae19f9e539049ad2b51
environment: Homebrew
go version:  go1.19.4
```
- aws-cdk
  - AWS用のCloudFormationよりも使いやすいIaCツール。プログラミングしている感を持ちつつ、インフラを構築可能。
  - aws-cdkはローカルに定義されているバージョンを使用したいので、インストールしない。

## 感想
以外と開発する際に導入するツールって少ないんだなって感じた。
とにかく、PCが最新になったので、Happyなエンジニアワークを送れるようになって幸せになりそうです。
ディスプレイを42インチ+21インチで使用していたせか、時々、遅延が発生していたけどそのストレスがほとんどなくなり、今のところ気持ちよくできています。
頑張って開発します！

ここまで読んでくださってありがとうございました！