macOS 環境構築
更新履歴
- 2023/02/05 M2 Proの動作確認を実施
概要
新規購入したApple silicon版のmacOS上で開発環境を整えるための手順書
dotfilesによる自動化手法は認識していますが、アンコントローラブルはなるべく避けたいため、意図的に手順書としています。
事前準備
- 1. macOSの初回セットアップを行う
- 2. ファイアーウォールが有効にする
- 3. FileVaultを有効にする
- 4. セキュリティソフトをインストールする
前提
コマンドは特別な明記がない限り、一行ずつ実行していく。
「{...} >> ~/.zshrc」のような括弧で囲まれたブロックコマンドの場合は、全てコピーして実行してください。
手順
Jetbrains社製ソフトウェアのインストール
- 1. Jetbrains ToolBoxのインストール
- 2. ToolBoxからIntelliJ IDEAのインストール
- 3. ToolBoxからPycharmのインストール
- 4. ToolBoxからWebStormのインストール
- 5. ToolBoxからCLionのインストール
XCode Command Line Tool
- 1. terminal.appを起動
- 2. XCode Command Line Tool
xcode-select --install
- 3. ライセンスに同意
sudo xcodebuild -license
Zshフレームワークのインストール
Oh-My-Zsh
Oh-My-Zshの起動が遅いため、筆者はZInitに乗り換えました。
そのため、手順書から削除しています。
インストール手順については、Oh-My-Zsh公式サイトを参照してください。
ZInit
- 1. terminal.appを起動
- 2. ZInit本体のインストール
bash -c "$(curl --fail --show-error --silent --location https://raw.githubusercontent.com/zdharma-continuum/zinit/HEAD/scripts/install.sh)"
- 3. ZInitプラグインのインストール
{
echo "\n\n# Zinit Plugin"
echo "zinit light zsh-users/zsh-syntax-highlighting"
echo "zinit light zsh-users/zsh-history-substring-search # Need to write after highlighting"
echo "zinit light zsh-users/zsh-autosuggestions"
echo "zinit light zsh-users/zsh-completions"
echo "zinit light zdharma-continuum/history-search-multi-word"
} >> ~/.zshrc
- 4. Zshターミナルテーマのインストール
{
echo "\n# Terminal Theme"
echo "## Prune (https://github.com/sindresorhus/pure)"
echo "zinit ice compile'(pure|async).zsh' pick'async.zsh' src'pure.zsh'"
echo "zinit light sindresorhus/pure"
echo "zstyle :prompt:pure:path color cyan"
echo "zstyle :prompt:pure:git:branch color yellow"
echo "zstyle :prompt:pure:virtualenv color cyan"
echo "PURE_CMD_MAX_EXEC_TIME=180"
} >> ~/.zshrc
- 5. Zshスタイル設定
{
echo "\n# Zsh Style"
echo "zstyle ':completion:*' menu yes select"
echo "zstyle ':completion:*' file-list all"
} >> ~/.zshrc
- 6. エイリアスの設定(任意)
{
echo "\n# Alias"
echo "alias c='clear'"
} >> ~/.zshrc
-
7. ~/.zshrcの読み込み
どのパターンでも可能
# パターン1. zshを呼び出す
zsh
# パターン2. sourceで読み込む
source ~/.zshrc
# パターン3. ターミナルを再起動か新規ウィンドウを表示
Homebrew
- 1. terminal.appを起動
- 2. Homebrew本体のインストール
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
output
# パスワードの入力
# ==> Checking for `sudo` access (which may request your password)...
# Password:
# 文字通りEnterキーを押下
# Press RETURN/ENTER to continue or any other key to abort:
- 3. Homebrewの設定
{
echo "\n# Homebrew"
echo "# Set PATH, MANPATH, etc., for Homebrew."
echo "eval \"\$(/opt/homebrew/bin/brew shellenv)\""
} >> ~/.zprofile
- 4. Homebrewの読み込み
eval "$(/opt/homebrew/bin/brew shellenv)"
- 5. Homebrewの動作確認
brew --version
-
6. 「~/.Brewfile」として、下記内容を記入して保存する。
microsoft-edgeのインストール時にPasswordが要求されます。
長くなったので折りたたんでいます。
.Brewfile
# 前提環境
# - XCode CLI Toolがインストール済みである事
# - MacAppStoreで予めログインしている事
# - MacAppStoreで予め購入済みである事
###################
# 公式リポジトリ一覧 #
###################
tap "homebrew/bundle"
tap "homebrew/cask"
tap "homebrew/cask-versions"
tap "homebrew/core"
##########################
# Normal Depens Binaries #
##########################
####################
# 第0階層 (依存なし) #
####################
brew "ca-certificates"
brew "capstone"
brew "cmake"
brew "gdbm"
brew "gettext"
brew "gmp"
brew "gnu-sed"
brew "go"
brew "libatomic_ops"
brew "libpng"
brew "libtasn1"
brew "libunistring"
brew "libusb"
brew "lua"
brew "lz4"
brew "lzo"
brew "m4"
brew "mandoc"
brew "mas"
brew "mpdecimal"
brew "nodebrew"
brew "pcre2"
brew "pkg-config"
brew "readline"
brew "texinfo"
brew "xz"
brew "zlib"
########################
# 第1階層 (第0階層に依存) #
########################
brew "autoconf" # M4
brew "bdw-gc" # Libatomic_Ops, Pkg-Config
brew "docker-compose" # Go
brew "git" # GetText, Pcre2
brew "go-md2man" # Go
brew "isl" # Gmp
brew "jpeg-turbo" # Cmake
brew "libcbor" # Cmake
brew "libidn2" # GetText, LibuniString, Pkg-Config
brew "libnghttp2" # Pkg-Config
brew "libtool" # M4
brew "mpfr" # Gmp, TexInfo
brew "ncurses" # Pkg-Config
brew "nettle" # Gmp
brew "openssl@1.1" # Ca-Certificates
brew "pixman" # Pkg-Config
brew "snappy" # Cmake, Pkg-Config
brew "sqlite" # ReadLine
##########################
# 第2階層 (第0~1階層に依存) #
##########################
brew "automake" # AutoConf
brew "berkeley-db" # OpenSSL
brew "docker" # Go, Go-MD2Man
brew "libfido2" # Cmake, LibCbor, ManDoc, OpenSSL, Pkg-Config
brew "libmpc" # Gmp, Mpfr
brew "libssh" # Cmake, OpenSSL
brew "libssh2" # OpenSSL
brew "p11-kit" # Ca-Certificates, Pkg-Config, LibTasn1
brew "pyenv" # AutoConf, OpenSSL, Pkg-Config, ReadLine
brew "tig" # NCurses, ReadLine
brew "zstd" # Cmake, Lz4, Xz
##########################
# 第3階層 (第0~2階層に依存) #
##########################
brew "gcc" # Gmp, Isl, Mpfr, LibMpc, Zstd
brew "guile" # AutoConf, AutoMake, Bdw-Gc, GetText, Gmp, Gnu-Sed, LibTool, LibuniString, Pkg-Config, ReadLine
brew "libevent" # AutoConf, AutoMake, LibTool, OpenSSL, Pkg-Config
brew "libyaml" # AutoConf, AutoMake, LibTool
brew "oniguruma" # AutoConf, AutoMake, LibTool
brew "perl" # Berkeley-DB, Gdbm
brew "ruby-build" # AutoConf, AutoMake, LibTool
brew "vde" # AutoConf, AutoMake, LibTool
##########################
# 第4階層 (第0~3階層に依存) #
##########################
brew "jq" # Oniguruma
brew "mysql-client" # Cmake, LibEvent, LibFido2, OpenSSL, Pkg-Config, ZLib, Zstd
brew "rbenv" # Ruby-Build
brew "ruby" # LibYAML, OpenSSL, Pkg-Config, ReadLine
brew "unbound" # LibEvent, LibngHttp2, OpenSSL
##########################
# 第5階層 (第0~4階層に依存) #
##########################
brew "gnutls" # Ca-Certificates, Gmp, Guile, Libidn2, Libtasn1, LibuniString, Nettle, P11-Kit, Pkg-Config, Unbound
##########################
# Python Depens Binaries #
##########################
#########################################
# 第0階層 (Normal Depens Binaries に依存) #
#########################################
brew "python@3.11" # MpDecimal, OpenSSL, Pkg-Config, SqLite, Xz
##################################################
# 第1階層 (第0階層 + Normal Depens Binaries に依存) #
##################################################
brew "docutils" # Python@3.11
brew "ninja" # Python@3.11
brew "six" # Python@3.11
####################################################
# 第2階層 (第0~1階層 + Normal Depens Binaries に依存) #
####################################################
brew "aws-sso-util" # Python@3.11, Six
brew "meson" # Ninja, Python@3.11
brew "rust" # Cmake, LibSSH2, Ninja, OpenSSL, Pkg-Config, Python@3.11
####################################################
# 第3階層 (第0~2階層 + Normal Depens Binaries に依存) #
####################################################
brew "awscli" # Cmake, DocUtils, Python@3.11, Rust, Six
brew "glib" # GetText, Meson, Ninja, Pcre2, Pkg-Config
####################################################
# 第4階層 (第0~3階層 + Normal Depens Binaries に依存) #
####################################################
brew "libslirp" # GLib, Meson, Ninja, Pkg-Config
brew "vim" # GetText, Lua, NCurses, Perl, Python@3.11, Ruby
####################################################
# 第5階層 (第0~4階層 + Normal Depens Binaries に依存) #
####################################################
brew "qemu" # Capstone, Glib, GnutLs, JPEG-Turbo, LibPNG, LibSSH, LibSlirp, LibTool,
# LibUSB, Lzo, Meson, NCurses, NetTle, Ninja, PixMan, Pkg-Config, Snappy,
# Vde, Zstd
####################################################
# 第6階層 (第0~5階層 + Normal Depens Binaries に依存) #
####################################################
brew "lima" # Go, Qemu
#############
# Cask 一覧 #
############
cask "alfred"
cask "deepl"
cask "drawio"
cask "firefox-developer-edition", args: { language: "ja" }
cask "google-chrome-dev"
cask "iterm2"
cask "microsoft-edge"
cask "postman"
cask "the-unarchiver"
cask "visual-studio-code"
#####################
# Mac App Store 一覧 #
#####################
mas "Microsoft To Do", id: 1274495053
mas "RunCat", id: 1429033973
- 7. brew bundleを実行してインストール
brew bundle --global
- 8. Homebrewのキャッシュ削除
brew cleanup --prune=all
- 9. nodebrewのディレクトリ作成
nodebrew setup_dirs
- 10. zshrcへ追加
{
echo "\n# Nodebrew"
echo "export PATH=\$HOME/.nodebrew/current/bin:\$PATH"
echo "\n# Pyenv"
echo "export PYENV_ROOT=\"$HOME/.pyenv\""
echo "eval \"\$(pyenv init --path)\""
echo "eval \"\$(pyenv init -)\""
echo "\n# Rbenv"
echo "eval \"\$(rbenv init - zsh)\""
echo "\n# Mysql Client"
echo "export PATH=\"/opt/homebrew/opt/mysql-client/bin:\$PATH\""
} >> ~/.zshrc
- 11. 補完機能の設定
sed -i '' -e $'1s/^/autoload -Uz compinit \\&\\& compinit\\\n/' ~/.zshrc
-
12. ~/.zshrcの読み込み
どのパターンでも可能
# パターン1. zshを呼び出す
zsh
# パターン2. sourceで読み込む
source ~/.zshrc
# パターン3. ターミナルを再起動か新規ウィンドウを表示
nodebrew
- 1. NodeJSの最新版を控える
NodeJS Ver:
nodebrew ls-remote
# example) v17.2.0
- 2. NodeJSの最新版をインストール
nodebrew install [NodeJS Ver]
nodebrew use [NodeJS Ver]
- 5. NodeJSのバージョン確認
node -v
pyenv
- 1. Pythonの最新版を控える
Python Ver:
pyenv install -l
- 2. Pythonの最新版をインストール
pyenv install [Pythonバージョン]
pyenv global [Pythonバージョン]
- 3. Pythonのバージョンを確認
python -V
SDKMAN
- 1. terminal.appを起動
- 2. SDKMAN本体のインストール
curl -s "https://get.sdkman.io" | bash
source "$HOME/.sdkman/bin/sdkman-init.sh"
Java
- 1. Amazon Correttoの最新版を控える
最新版のバージョン:
sdk list java | grep amzn
#example) 17.0.1.12.1-amzn
- 2. Amazon Correttoの最新版をインストール
sdk install java [最新版のバージョン]
# globalにするのかを聞かれたら Y を入力。
# 聞かれていない場合は、下記コマンドを実行
sdk default java [最新版のバージョン]
- 3. Amazon Correttoのバージョンを確認
java -version
Sbt
- 1. Sbtの最新版を控える
最新版のバージョン:
sdk list sbt
#example) 1.5.7
- 2. Sbtの最新版をインストール
sdk install sbt [最新版のバージョン]
# globalにするのかを聞かれたら Y を入力。
# 聞かれていない場合は、下記コマンドを実行
sdk default sbt [最新版のバージョン]
- 3. Sbtのバージョンを確認
sbt about
Scala
-
1. Scalaの最新版を控える
最新版のバージョン:
sdk list scala
#example) 3.1.0
- 2. Scalaの最新版をインストール
sdk install scala [最新版のバージョン]
# globalにするのかを聞かれたら Y を入力。
# 聞かれていない場合は、下記コマンドを実行
sdk default scala [最新版のバージョン]
- 3. Scalaのバージョンを確認
scala -version
Lima Docker
- 1. limaのDockerテンプレートをダウンロード
curl -o docker.yaml https://raw.githubusercontent.com/lima-vm/lima/master/examples/docker.yaml
- 2. テンプレートを編集
# To run `docker` on the host (assumes docker-cli is installed):
# $ export DOCKER_HOST=$(limactl list docker --format 'unix://{{.Dir}}/sock/docker.sock')
# $ docker ...
# ===これを追記===
vmType: "qemu"
arch: "x86_64"
cpus: 4
memory: "4GiB"
disk: "10GiB"
# ==============
....
# writableをtrueにすると読み書きができる。
# デフォルトにも書いてある通り、「~」や「/」のみを指定してwritableをtrueにはしないこと。非常に危険。
mounts:
- location: "~"
writable: false
- location: "/tmp/lima"
writable: true
- location: "~/work"
writable: true
- location: "~/private"
writable: true
- 3. 仮想環境を新規作成
limactl start docker.yaml
# Proceed with the current configuration を選択
-
4.dockerの設定
※ 手順3の最後に出てくるものをコピペで実行。最後の行にあるdocker runは実行しない。
docker context create lima-docker --docker "host=unix:///Users/[username]/.lima/docker/sock/docker.sock"
docker context use lima-docker
- 5. dockerの動作確認
docker version
# macOS側
# Client: Docker Engine - Community
# ....
# OS/Arch: darwin/arm64
# ...
# Lima側
# Server: Docker Engine - Community
# Engine:
# ...
# OS/Arch: linux/amd64
# ...
ローレベルなDocker設定
- 2. limaのテンプレートをダウンロード
curl -o default.yaml https://raw.githubusercontent.com/lima-vm/lima/master/examples/default.yaml
- 3. テンプレートを編集
# ===================================================================== #
# 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
- 4. 仮想環境を新規作成
limactl start default.yaml
# Proceed with the current configuration を選択
# INFO[0036] READY. Run `limactl shell ...まで待機
- 5. 仮想環境が動いていることを確認し、インスタンス名を控えておく。
インスタンス名:
limactl list
# NAME STATUS SSH ARCH DIR
# default Running 127.0.0.1:60022 x86_64 /Users/[username]/.lima/default
# インスタンス名は、 NAME列の名前
- 6. Dockerホストの設定
echo "export DOCKER_HOST='tcp://127.0.0.1:2375'" >> ~/.zshrc
source ~/.zshrc
- 7. 仮想環境にDockerをインストール
curl -fsSL https://get.docker.com | limactl shell [インスタンス名]
- 8. 仮想環境のユーザー名を控える
ユーザー名:
limactl shell [instance名] whoami
- 9. dockerグループに追加
limactl shell [instance名] sudo gpasswd -a [ユーザー名] docker
- 10. 仮想環境を再起動
limactl stop [instance名] ; sleep 5; limactl start [instance名]
- 11. 仮想環境のDockerを確認
limactl shell [instance名] docker version
- 12. dockerのdeamon.jsonを作成
limactl shell [instance名] sudo vim /etc/docker/daemon.json
- 13. 下記を追記し、保存
{"hosts": ["tcp://127.0.0.1:2375", "unix:///var/run/docker.sock"]}
- 14. dockerサービスのoverride.confを作成
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
- 15. 下記を追記し、保存
[Service]
ExecStart=
ExecStart=/usr/bin/dockerd
- 16. dockerサービスを再起動
limactl shell [instance名] sudo systemctl daemon-reload
limactl shell [instance名] sudo systemctl restart docker.service
- 17. dockerの動作確認
docker version
# macOS側
# Client: Docker Engine - Community
# ....
# OS/Arch: darwin/arm64
# ...
# Lima側
# Server: Docker Engine - Community
# Engine:
# ...
# OS/Arch: linux/amd64
# ...
その他のDockerコマンド集
- Opensearch(or Elasticsearchの為に設定変更
limactl shell [instance名] sudo sysctl -w vm.max_map_count=262144
- docker-composeバルスコマンド
docker-compose down --rmi all --volumes --remove-orphans
Docker-compose - LocalStack
- docker-composeファイル
下記ファイルを作成後、このファイルがあるディレクトリで「docker-compose up」
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。
サービスによってポート番号が異なるので各自調べていただく。
aws s3 ls --endpoint-url=http://localhost:4566
- localstackの状態を取得
curl -s http://localhost:4566/health | jq
補足
ARP-SCAN
sudo arp-scan -I [ifconfigのインターフェイス] -l
# ex) sudo arp-scan -I en0 -l
システム設定
- キー入力の連打を有効化させる
defaults write -g ApplePressAndHoldEnabled -bool false
limaの基本コマンド
limactl ls # lima vm 一覧
limactl start xxxx(or xxxxx.yml) vm 起動
limactl stop xxxx vm 停止
limactl delete xxxx 削除
ecrの認証情報の取得
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 間 シンボリックリンク
ln -s /Volumes/BackUps/Buckup /Users/${USERNAME}/Library/Application\ Support/MobileSync
Terminal.appの背景を透明にする方法
- Terminal.appの環境設定→「プロファイル」タブを選択
- 「カラーとエフェクト」をクリック
- 出てきたウィンドウの「不透明度」を50~60%に、「ブラー」を0%にする
- Terminal.appを再起動
Apple Developerの証明リスト出力
security -v find-identity