LoginSignup
3
4

More than 1 year has passed since last update.

開発環境構築手順書 2023

Last updated at Posted at 2023-02-05

macOS 環境構築

更新履歴

  • 2023/02/05 M2 Proの動作確認を実施

概要

新規購入したApple silicon版のmacOS上で開発環境を整えるための手順書
dotfilesによる自動化手法は認識していますが、アンコントローラブルはなるべく避けたいため、意図的に手順書としています。

事前準備

  • 1. macOSの初回セットアップを行う
  • 2. ファイアーウォールが有効にする
  • 3. FileVaultを有効にする
  • 4. セキュリティソフトをインストールする

前提

コマンドは特別な明記がない限り、一行ずつ実行していく。
「{...} >> ~/.zshrc」のような括弧で囲まれたブロックコマンドの場合は、全てコピーして実行してください。

手順

Jetbrains社製ソフトウェアのインストール

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の背景を透明にする方法

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

Apple Developerの証明リスト出力

security -v find-identity

参考文献

3
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
4