【開発環境】2022年 Mac book M1 環境構築で初めにやること

開発環境

M1チップが出始めた頃は、brewやDocker,,,色々と設定が大変だったようですが、2022年2月現在ですと開発環境の設定もだいぶ楽になったようです。(コントリビュータの皆様に感謝)
自分のメモ用に、Mac M1チップ初期設定を記録していきます。

OS: Monterey 12.2
チップ: Apple M1
メモリ: 16MB

Xcode インストール

何はともあれXcodeがなければ始まりません。
インストールは簡単、コマンド一つで問題なくインストールできました。

xcode-select --install

バージョン確認

xcode-select -v
# xcode-select version 2392.

Home-brew インストール

こちらも、M1チップ対応済みで簡単にインストールできました。
Home brew 公式サイト

$ /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
$ echo 'eval "$(/opt/homebrew/bin/brew shellenv)"' >> /Users/dc/.zprofile
$ eval "$(/opt/homebrew/bin/brew shellenv)" 

$ echo $path
# /opt/homebrew/bin /opt/homebrew/sbin /usr/local/bin /usr/bin /bin /usr/sbin /sbin
$ brew -v
# Homebrew 3.4.2

PATHに[/opt/homebrew/bin /opt/homebrew/sbin]が通っていればOK。

git インストール

gitは最初っからインストールされていました。
バージョンを確認すると、(Apple Git-XXX)とあるのはMacにデフォルトで入っているもの。このままでも問題なく使えますが、今回はbrew経由でのgitをインストールします。

$ git --version
# git version 2.32.0 (Apple Git-132)

brew経由でgitをインストールする

brewでインストールします。

$ brew install git
#zsh completions and functions have been installed to:
#  /opt/homebrew/share/zsh/site-functions
#
#Emacs Lisp files have been installed to:
#  /opt/homebrew/share/emacs/site-lisp/git

#バージョン情報が確認できればOK
$ brew info git
#git: stable 2.35.1 (bottled), HEAD
# ...

brew経由のgitにパスを通す

現在は、Apple経由のgitにパスが遠ている状態です。

$ git --version
# git version 2.32.0 (Apple Git-132)

これを、brew経由でインストールしたgitに変更します。私はzshを使用しているので、~/.zshrcへPATHをエクスポートします。gitバージョンが先ほどインストールしたものになっていればOKです。

$ echo 'export PATH="/opt/homebrew/bin:$PATH"' >> ~/.zshrc
$ source ~/.zshrc
% git --version
# git version 2.35.1

zshを気持ちよく使うための設定

基本の設定

まずは基本の設定を~/.xshrcに書き込みます。

# ファイルやディレクトリの色指定
export LSCOLORS=cxfxcxdxbxegedabagacad
alias ll='ls -lGF'
alias ls='ls -GF'

#プロンプト設定
PROMPT='(%c):%F{green}$%f '

プロンプトはシンプルにカレントディレクトリのみの表示にしました。
プロンプトの設定についてはこちらに(少し)詳しく記述しています。

補完機能の強化:zsh-completions

zshを使う理由がこの補完機能です。機能はたくさんありますが、自分に必要なものだけ設定していきます。まずはインストール。

$ brew install zsh-autosuggestions

インストールすると、次にああしろこうしろと丁寧に教えてくれるので、指示に従って.zshrcに下記を記述します。

#zsh-completions setting
if type brew &>/dev/null; then
  FPATH=$(brew --prefix)/share/zsh-completions:$FPATH
  source /opt/homebrew/share/zsh-autosuggestions/zsh-autosuggestions.zsh
  autoload -Uz compinit
  compinit
fi

環境に応じて、groupとotherの書き込みの権限を削除します。

chmod go-w '/opt/homebrew/share'
chmod go-w '/opt/homebrew/share/zsh'

リビルドでエラーが出なければOK

rm -f ~/.zcompdump; compinit

.zshrcにお好みの設定を記述します。

  #cdなしでもディレクトリ移動
  setopt auto_cd

  #cd - で以前移動したディレクトリを表示
  setopt auto_pushd

  #コマンドをミススペルした時に候補を表示
  setopt correct

  #補完で小文字でも大文字にマッチさせる.ただし、大文字で検索文字列を入力した場合、大文字でのマッチを先に検索する.
  zstyle ':completion:*' matcher-list '' 'm:{a-z}={A-Z}' '+m:{A-Z}={a-z}'

  # 補完候補を詰めて表示
  setopt list_packed
 
  # 補完候補一覧をカラー表示
  autoload colors
  zstyle ':completion:*' list-colors ''

  #コマンド履歴の保存先指定
  HISTFILE=~/.zsh_history

  #履歴ファイルに保存するコマンド履歴の件数
  export SAVEHIST=10000

  #historyに保存する時余分なスペースを削除する
  setopt hist_reduce_blanks

  #メモリに保存されるコマンド履歴の件数
  export HISTSIZE=1000

gitリポジトリの状態をプロントに表示する

zsh-git-promptをインストールします

$ brew install zsh-git-prompt
# ==> Caveats
# Make sure zsh-git-prompt is loaded from your .zshrc:
#  source "/opt/homebrew/opt/zsh-git-prompt/zshrc.sh"

指示に従い.zshrcに下記を記述します

source "/opt/homebrew/opt/zsh-git-prompt/zshrc.sh"

前述したプロンプトの設定にgit_super_statusを展開します。

#プロンプト設定
PROMPT='(%c):$(git_super_status) %F{green}$%f '

このままでは、gitリポジトリ以外でも何かしら表示されてしまいます。
gitリポジトリかどうかの判定関数を作成して、precmd()へフックさせます。先ほど記述したプロンプト設定の部分を書き換えます。

#プロンプト設定
PROMPT='(%c):$(git_super_status) %F{green}$%f '
git_prompt() {
  if [ "$(git rev-parse --is-inside-work-tree 2> /dev/null)" = true ]; then
    PROMPT='(%c):$(git_super_status) %F{green}$%f '
  else
    PROMPT='(%c):%F{green}$%f '
  fi
}

precmd() {
  git_prompt
}

これで、カレントディレクトリがgitリポジトリの時だけリポジトリが表示されるようになりました。

pyenv + pipenv インストール

仮想環境を立てて、pythonのプロジェクトを開発するときはpipenvを使うのですが、システムのpythonバージョン管理としてpyenvを使うことにします。

pyenv インストール

brewでpyenvをインストールして、パスを通します。

$ brew install pyenv
$ echo 'eval "$(pyenv init --path)"' >> ~/.zshrc. #パスを通して
$ echo 'eval "$(pyenv init -)"' >> ~/.zshrc       #これで切り替え     
$ source ~/.zshrc
$ pyenv -v
# pyenv 2.2.5

インストール可能なバージョンを表示する

$ pyenv install --list

新しめの3.10.3をインストールします。

$ pyenv install 3.10.3
# ..
# Installed Python-3.10.3 to /Users/dc/.pyenv/versions/3.10.3

バージョンの切り替え方法

# システム全体で切り替える時
$ pyenv global 3.10.3
$ source ~/.zshrc

# フォルダ内のみで切り替える時
$ pyenv local 3.10.3
$ source ~/.zshrc

$ pyenv versions
#  system
#* 3.10.3 (set by /Users/dc/.pyenv/version). <-- *が付いてるのが現在のバージョン

$ python -V
# Python 3.10.3

pipenv インストール

brewでpipenvをインストールします。

$ brew install pipenv
# ==> Caveats
# ==> pipenv
# zsh completions have been installed to:
#  /opt/homebrew/share/zsh/site-functions

$ pipenv --version
# pipenv, version 2022.1.8

pynvimインストール

neovimにpython環境を渡すためのもの。neovimでpythonを開発するためにインストールしておく。

$ pip install pynvim
# Successfully installed greenlet-1.1.2 msgpack-1.0.3 pynvim-0.4.3

Dockerインストール

Apple chip(M1チップ)用のインストーラーとマニュアルが公式に出ています。
Dockerをインストールする前に、Rossetta2をインストールする必要があるようです。

$ softwareupdate --install-rosetta
# ...
# Install of Rosetta 2 finished successfully

 Docker.dmgをダウンロードして、Docker.appをApplicationsにドラッグ&ドロップ。
あとは、こちらのサイトを参考にしました。

Node.jsとnpmをインストールする

今のところNode.jpを使う予定はないのですが、npmをインストールしたいので諸々インストールします。(Node.jsをインストールするとnpmもインストールされるので)

nodebrewをインストールする

nodebrewはNode.jsのバージョン管理システム。複数インストールされたNode.jsのバージョンを指定することができる。

$ brew install nodebrew
#You need to manually run setup_dirs to create directories required by nodebrew:
#  /opt/homebrew/opt/nodebrew/bin/nodebrew setup_dirs
#
#Add path:
#  export PATH=$HOME/.nodebrew/current/bin:$PATH
#
#To use Homebrew's directories rather than ~/.nodebrew add to your profile:
#  export NODEBREW_ROOT=/opt/homebrew/var/nodebrew
#
#zsh completions have been installed to:
#  /opt/homebrew/share/zsh/site-functions

指示通りディレクトリを作成します。

$ /opt/homebrew/opt/nodebrew/bin/nodebrew setup_dirs

.zshrcにパスを記述します。

$ export PATH=$HOME/.nodebrew/current/bin:$PATH

確認。バージョン1.2.0が無事インストールできました。

$ source ~/.zshrc
$ nodebrew
# nodebrew 1.2.0

Node.jsとnpmをインストールする

インストール可能なバージョンを確認します。

$ nodebrew ls-remote
# ...
# v16.0.0   v16.1.0   v16.2.0   v16.3.0   v16.4.0   v16.4.1   v16.4.2   v16.5.0
# v16.6.0   v16.6.1   v16.6.2   v16.7.0   v16.8.0   v16.9.0   v16.9.1   v16.10.0
# v16.11.0  v16.11.1  v16.12.0  v16.13.0  v16.13.1  v16.13.2  v16.14.0  v16.14.1
# v16.14.2
# ...

v16が最新の安定版らしいので、v16.14.2をインストールします。

$ nodebrew install-binary v16.14.2

インストールしたNode.jsバージョンを有効化する

インストールされたバージョンを全て表示させます。(1つしかインストールしていませんが)
まだどのバージョンも有効化してないのでcurrent: noneとなっています。

$ nodebrew ls       
# v16.14.2
# current: none

v16.14.2を有効にします。current: v16.14.2になりました。
Node.jsのとnpmのバージョンが確認できたらOK。インストール完了です。

$ nodebrew use v16.14.2
# use v16.14.2

$ nodebrew ls          
# v16.14.2
# current: v16.14.2

$ source ~/.zshrc
$ node -v
# v16.14.2

$ npm -v 
# 8.5.0

Neovimインストール

鬼門のneovim。インストールはサクッと終わっても長い長い設定の道のりが続きます。

$ brew install neovim
$ which nvim  
#/opt/homebrew/bin/nvim
$ nvim -v
#NVIM v0.6.1
#Build type: Release
#LuaJIT 2.1.0-beta3
#Compiled by brew@HMBRW-A-001-M1-004.local

#Features: +acl +iconv +tui
#See ":help feature-compile"

#      システム vimrc: "$VIM/sysinit.vim"
#       省略時の $VIM: "/opt/homebrew/Cellar/neovim/0.6.1/share/nvim"

#Run :checkhealth for more info

インストールは完了しました。設定は長くなるので別に書きます。

neovim0.7にがリリースされたので、バージョンアップします。

$ brew reinstall neovim
$ which nvim  
#/opt/homebrew/bin/nvim
$ nvim -v
#NVIM v0.7.0
#Build type: Release
#LuaJIT 2.1.0-beta3
#Compiled by brew@HMBRW-A-001-M1-004.local
#
#Features: +acl +iconv +tui
#See ":help feature-compile"
#
#      システム vimrc: "$VIM/sysinit.vim"
#       省略時の $VIM: "/opt/homebrew/Cellar/neovim/0.7.0/share/nvim"

nerd font インストール

ターミナルやneovimでアイコンを使うためにnerd fontをインストールします。フォントはメジャーなHackを選択しました。
公式サイトからもダウンロード出来ます。下記はbrewを使ったインストールです。

$ brew tap homebrew/cask-fonts
$ brew search /font/ --cask.                 # インストール可能なフォントが表示される 
$ brew install --cask font-hack-nerd-font    # hack-nerd-fontをインストール   

==> Downloading https://github.com/ryanoasis/nerd-fonts/releases/download/v2.1.0/Hack.zip
==> Downloading from https://objects.githubusercontent.com/github-production-release-asset-2e65be/27574418/0a32bc80-4532
######################################################################## 100.0%
==> Installing Cask font-hack-nerd-font
==> Moving Font 'Hack Italic Nerd Font Complete.ttf' to '/Users/dc/Library/Fonts/Hack Italic Nerd Font Complete.ttf'
==> Moving Font 'Hack Bold Nerd Font Complete.ttf' to '/Users/dc/Library/Fonts/Hack Bold Nerd Font Complete.ttf'
==> Moving Font 'Hack Bold Italic Nerd Font Complete Mono.ttf' to '/Users/dc/Library/Fonts/Hack Bold Italic Nerd Font Co
==> Moving Font 'Hack Bold Italic Nerd Font Complete.ttf' to '/Users/dc/Library/Fonts/Hack Bold Italic Nerd Font Complet
==> Moving Font 'Hack Regular Nerd Font Complete.ttf' to '/Users/dc/Library/Fonts/Hack Regular Nerd Font Complete.ttf'
==> Moving Font 'Hack Regular Nerd Font Complete Mono.ttf' to '/Users/dc/Library/Fonts/Hack Regular Nerd Font Complete M
==> Moving Font 'Hack Italic Nerd Font Complete Mono.ttf' to '/Users/dc/Library/Fonts/Hack Italic Nerd Font Complete Mon
==> Moving Font 'Hack Bold Nerd Font Complete Mono.ttf' to '/Users/dc/Library/Fonts/Hack Bold Nerd Font Complete Mono.tt
🍺  font-hack-nerd-font was successfully installed!

ターミナルで使用するフォントを「hack-nerd-font」に設定すればOK

iterm2インストール

Macに既存でインストールされているterm.appはTrue colorが使えないという致命的な欠陥があるのでiterm2をターミナルとして使うことにします。(Ture colorが使えないとneovimのカラースキームが正常に動作しません)
インストール簡単で細かい設定も可能なのでこちらをお勧めします。

$ brew cask install iterm2

フォーマッターインストール(prettier, Black, flake8)

prettierインストール

prettierはインデントの数やスペースの位置などを自動整形してくれるツールです。Node.js上で動作し、JavaScript、HTML, CSS, TypeScript, GraphQLなどをサポートしています。

$ cd <プロジェクトフォルダ>
$ npm i -D prettier    # インストール

$ npm fund    # バージョン確認
dc
└── https://github.com/prettier/prettier?sponsor=1
    └── prettier@2.6.2

実行コマンド

# 指定したファイルを自動形成する
$ npx prettier --write <ファイル名>

# ディレクトリないのファイルを自動形成する
$ npx prettier --write .

インストールするとpackage.jsonファイルが作成されるので、それを編集して独自のコマンドを設定できる。下記の例は。コマンドformatで./srcディレクトリ配下の.jsファイルを自動整形します。

{
  "scripts": {
    "format": "prettier --write 'src/**/*.js'"
  },
  "devDependencies": {
    "prettier": "^2.6.2"
  }
}

pythonフォーマッターBlack, flake8インストール

flake8はpythonのコーディングチェックをしてくれますが、修正まではしてくれません。修正をしてくれるのがBlackになります。flake8は以下のコードチェックツールのラッパーとなります。

PyFlakes(pyflakes : コードのエラーチェック)
pycodestyle(pycodestyle : PEP8に準拠しているかチェック)
Ned Batchelder’s McCabe script(mccabe : 循環的複雑度のチェック)

# flake8インストール
$ pip install flake8
Collecting flake8
  Downloading flake8-4.0.1-py2.py3-none-any.whl (64 kB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 64.1/64.1 KB 1.8 MB/s eta 0:00:00
Collecting pycodestyle<2.9.0,>=2.8.0
  Downloading pycodestyle-2.8.0-py2.py3-none-any.whl (42 kB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 42.1/42.1 KB 1.3 MB/s eta 0:00:00
Collecting pyflakes<2.5.0,>=2.4.0
  Downloading pyflakes-2.4.0-py2.py3-none-any.whl (69 kB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 69.7/69.7 KB 2.3 MB/s eta 0:00:00
Collecting mccabe<0.7.0,>=0.6.0
  Downloading mccabe-0.6.1-py2.py3-none-any.whl (8.6 kB)
Installing collected packages: mccabe, pyflakes, pycodestyle, flake8
Successfully installed flake8-4.0.1 mccabe-0.6.1 pycodestyle-2.8.0 pyflakes-2.4.0

flake8単体で使用する機会はあまりないかと思いますが、使い方を記しておきます。

# コーディングチェック結果を表示します 
$ flake8 <ファイル名>

# 修正箇所の提示
$ flake8 --show-source <ファイル名>

次にBlackをインストールします。

$ pip install black
Collecting black
  Downloading black-22.3.0-cp310-cp310-macosx_11_0_arm64.whl (1.2 MB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 1.2/1.2 MB 9.2 MB/s eta 0:00:00
Collecting tomli>=1.1.0
  Downloading tomli-2.0.1-py3-none-any.whl (12 kB)
Collecting click>=8.0.0
  Downloading click-8.1.3-py3-none-any.whl (96 kB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 96.6/96.6 KB 3.1 MB/s eta 0:00:00
Collecting mypy-extensions>=0.4.3
  Downloading mypy_extensions-0.4.3-py2.py3-none-any.whl (4.5 kB)
Collecting pathspec>=0.9.0
  Downloading pathspec-0.9.0-py2.py3-none-any.whl (31 kB)
Collecting platformdirs>=2
  Downloading platformdirs-2.5.2-py3-none-any.whl (14 kB)
Installing collected packages: mypy-extensions, tomli, platformdirs, pathspec, click, black
Successfully installed black-22.3.0 click-8.1.3 mypy-extensions-0.4.3 pathspec-0.9.0 platformdirs-2.5.2 tomli-2.0.1

Blackを実行するにはpyproject.tomlを作成して、、、とか面倒ですが、ここでインストールしたflake8とBlackはneovimで使う予定なので、pyproject.tomlの設定方法は省きます。
neovimでの設定方法はまた別に記載します。

コメント

タイトルとURLをコピーしました