M1 Mac環境構築メモ

nozzle

まとめ

個人ブログとか Qiita の記事は参考になるが情報が古いことがある。複数のソースを探したり更新日を確認したりするのも大事だが、公式を見た方が良い。
1 ユーザがなんとかできる問題じゃないことが多いので、できない時は素直に諦めた方が良い。

Homebrew

公式

Today I’d like to announce Homebrew 3.0.0. The most significant changes since 2.7.0 are official Apple Silicon support and a new bottle format in formulae.

引用:3.0.0 | Homebrew

ARM 版と x86 版が混在してた時期もあったが、ver3.0.0 で正式に対応したらしい。

メモ

公式のインストール方法をやりました。

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

brew/opt/homebrew/bin/brewに入った。
これは ARM 版らしい。 x86 なら/usr/local/bin/brewに入るから。

lipo -archs $(which hoge)でアーキテクチャを調べられるらしいけど、

fatal error: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/lipo: can't figure out the architecture type of: /opt/homebrew/bin/brew

って出て怒られた。 ちなみにmvとかlsとかvimとかgitとかは universal(どっちも OK)だった。

brew の PATH を追記しろって言われるので追記しよう

.zshrc
eval $(/opt/homebrew/bin/brew shellenv)

なにこれ?
export PATH=$PATH:/opt/homebrew/bin で良くね?

bash
echo $(/opt/homebrew/bin/brew shellenv)
# export HOMEBREW_PREFIX="/opt/homebrew"; export HOMEBREW_CELLAR="/opt/homebrew/Cellar"; export HOMEBREW_REPOSITORY="/opt/homebrew"; export PATH="/opt/homebrew/bin:/opt/homebrew/sbin${PATH+:$PATH}"; export MANPATH="/opt/homebrew/share/man${MANPATH+:$MANPATH}:"; export INFOPATH="/opt/homebrew/share/info:${INFOPATH:-}";`

どうやら brew の PATH 以外にもいろいろやってくれるらしいので、素直に公式の言うことに従いましょう。

Anyenv

pyenv とか nodenv とか rbenv とかの全部入りパック。

インストール

zsh
brew install anyenv

PATH を通す

.zshrc
eval "$(anyenv init -)"

プラグインのインストール

anyenv が参照するバージョンをアップデートしてくれる

zsh
mkdir -p $(anyenv root)/plugins
git clone https://github.com/znz/anyenv-update.git $(anyenv root)/plugins/anyenv-update

これでanyenv updateをターミナルに打つだけでアプデできる。

Python

最初から入ってたやつ

  • python … 2.7.16
  • python3 … 3.8.2

公式

3.9.1 is the first version of Python to support macOS 11 Big Sur. With Xcode 11 and later it is now possible to build “Universal 2” binaries which work on Apple Silicon.

引用:Python 3.9.1 | python

3.9.1 が初めて Apple Sicion で動くバイナリをビルドできるバージョンらしい。

pyenv

pyenv は python のバージョンを切り替えられるパッケージ。
詳しくは、pyenv と venv で仮想環境構築 ラズパイ編を見よう。

pyenv はbrew install pyenvでインストールできる。
anyenvを導入した人はanyenv install pyenvでインストールできる。

トラブルシュート:pyenv install で 3.9.0 以前の python がインストールできない

エラー文

zsh
$ pyenv install 3.8.8
python-build: use openssl@1.1 from homebrew
python-build: use readline from homebrew
Downloading Python-3.8.8.tar.xz...
-> https://www.python.org/ftp/python/3.8.8/Python-3.8.8.tar.xz
Installing Python-3.8.8...
python-build: use readline from homebrew
python-build: use zlib from xcode sdk

BUILD FAILED (OS X 11.2.2 using python-build 1.2.23-54-gabcbf6e1)

Inspect or clean up the working tree at /var/folders/ng/t866684x2y301n0c8mqgwj0c0000gn/T/python-build.20210310163954.14672
Results logged to /var/folders/ng/t866684x2y301n0c8mqgwj0c0000gn/T/python-build.20210310163954.14672.log

Last 10 log lines:
checking size of _Bool... 1
checking size of off_t... 8
checking whether to enable large file support... no
checking size of time_t... 8
checking for pthread_t... yes
checking size of pthread_t... 8
checking size of pthread_key_t... 8
checking whether pthread_key_t is compatible with int... no
configure: error: Unexpected output of 'arch' on OSX
make: *** No targets specified and no makefile found.  Stop.

確かに、3.9.1 が Xcode で build できる最初のバージョンという声明に嘘偽りはありませんでした。

対処法

pyenv でパッチを当ててインストールすればできる。
正直どうしてできるか分かってない。

zsh
PYTHON_CONFIGURE_OPTS="--enable-framework" pyenv install --patch 3.8.7 <<(curl -sSL "https://raw.githubusercontent.com/Homebrew/formula-patches/9811be33170a8f31a684fae6955542e31eb4e61e/python/3.8.7.patch")

参考:M1 MacBook での開発環境構築 | Qiita

mac setting memo 01 誰だお前は!?

この方法でインストールするとアプリ版もついてくるらしい。やめてほしい。

poetry

poetry とは

Poetry is a tool for dependency management and packaging in Python. It allows you to declare the libraries your project depends on and it will manage (install/update) them for you.

引用:Introduction | poetry

python のパッケージ管理を便利にしてくれるやつ。
venvみたいなやつだけど、仮想環境の情報が残ってくれるのであとから見ても使いやすいのでこっちに乗り換えた。

インストール方法

curl -sSL https://raw.githubusercontent.com/python-poetry/poetry/master/get-poetry.py | python -

いつもの PATH 通すやつをやる

.zshrc
export PATH="$HOME/.poetry/bin:$PATH"

poetry の使い方とかもメモしたいけど、とりあえずインストール方法と.zshrc の追記内容に留める。

プロジェクト内に仮想環境フォルダを作る

zsh
poetry config virtualenvs.in-project true

もう仮想環境作っちゃってしまった人は、 poetry config virtualenvs.pathで仮想環境の保存場所を調べて、そのディレクトリごと消せばいい。

トラブル:poetry add opencv-python するとエラーを吐く

エラー文

zsh
EnvCommandError

(中略)

  at ~/.poetry/lib/poetry/utils/env.py:1074 in _run
      1070│                 output = subprocess.check_output(
      1071│                     cmd, stderr=subprocess.STDOUT, **kwargs
      1072)
      1073│         except CalledProcessError as e:
    → 1074│             raise EnvCommandError(e, input=input_)
      10751076return decode(output)
      10771078│     def execute(self, bin, *args, **kwargs):

解決してません。

Node.js

nodenv

インストール

node のバージョン管理してくれるやつ。
nodenv には nodebrew と nvm というライバルが 2 人いる。
anyenv はぶっちゃけ名前で nodenv を選んでそうに思える。

nodenv はbrew install nodenvでインストールできる。
anyenvを導入した人はanyenv install nodenvでインストールできる。

使い方

zsh
nodenv install --list       # インストール可能なnodeのバージョンを一覧表示
nodenv install x.x.x        # バージョン x.x.x をインストールする
nodenv versions             # インストールしたnodeのバージョンを一覧表示
nodenv global x.x.x         # どのシステムでもバージョンx.x.xのnodeを使う
nodenv local x.x.x          # 現在のディレクトリではバージョンx.x.xのnodeを使う

トラブルシュート:“FATAL ERROR: wasm code commit Allocation failed - process out of memory”とでて、パッケージを入れられない

対処法

node のバージョンを 15.3.0 以降にすると治る
安定版っていうから 14.16.0 を入れたのに…
参考:wasm code commit Allocation failed - process out of memory | stack overflow

Git

基本設定

git config --global user.name "Yamada Hanako"
git config --global user.email "yamahana@takaka.com"
git config --global color.ui auto
git config --global core.editor "vim"

git 備忘録 | NARAZUKE

補完

zsh
mkdir ~/.zsh
cd ~/.zsh
curl -o git-prompt.sh https://raw.githubusercontent.com/git/git/master/contrib/completion/git-prompt.sh
curl -o git-completion.bash https://raw.githubusercontent.com/git/git/master/contrib/completion/git-completion.bash
curl -o _git https://raw.githubusercontent.com/git/git/master/contrib/completion/git-completion.zsh

.zshrc に追記する

.zshrc
source ~/.zsh/git-prompt.sh
fpath=(~/.zsh $fpath)
zstyle ':completion:*:*:git:*' script ~/.zsh/git-completion.bash
autoload -Uz compinit && compinit
GIT_PS1_SHOWDIRTYSTATE=true
GIT_PS1_SHOWUNTRACKEDFILES=true
GIT_PS1_SHOWSTASHSTATE=true
GIT_PS1_SHOWUPSTREAM=auto
setopt PROMPT_SUBST ; PS1='%F{green}%n@%m%f: %F{cyan}%~%f %F{red}$(__git_ps1 "(%s)")%f\$ '

メモとはいえまるパクリで申し訳ない。
Qiita サービス終了に備えて書き置きしておきます。 下の参考記事を読もう。

これやるとユーザ名が緑になるし、ディレクトリもフルパスが出るようになって最高!zshrc の設定ものちのちやりたい。

参考:【zsh】絶対やるべき!ターミナルで git のブランチ名を表示&補完【git-prompt / git-completion】| Qiita

SSH

秘密鍵と公開鍵の作成

zsh
ssh-keygen -t rsa -b 4096 -C "hoge@hogenomacbookair"

-Cでつけるコメントには、“github のアカウントのユーザとメアド”派と、“端末のユーザ名とホスト名”派がいる。

参考:お前らの SSH Keys の作り方は間違っている | Qiita

github の setting に登録したらあとはssh -T git@github.comしてちゃんとできてるか確認すればいい。

config を作る

.ssh/config
Host hoge
  HostName 192.168.1.x
  User foo
  Port 10022
  IdentityFile ~/.ssh/id_rsa

こんな感じで作れる

VS Code

(2021 年 3 月 13 日追記)

We are happy to announce our first release of stable Apple Silicon builds this iteration. Users on Macs with M1 chips can now use VS Code without emulation with Rosetta, and will notice better performance and longer battery life when running VS Code.

引用元:February 2021 (version 1.54) | Visual Studio Code

2021 年 2 月のアップデートで Apple Silicon に対応した VSCode が入手できる。
起動したらCmd+Shift+pcodeと入力して、ターミナルにcodeコマンドを導入しよう。

(追記おわり)

VS Code はまだ Apple Silicon に対応していないが、Insiders 版が対応している。
とはいえ、Insiders 版にしなくても支障がないと思われます。

どうしても Insiders 版を使いたい人は以下からダウンロードできる。

Download Visual Studio Code Insiders | Visual Studio Code

zsh
lipo -archs /Applications/Visual\ Studio\ Code\ -\ Insiders.app/Contents/MacOS/Electron
# arm64

確かに、arm64 版であることを確認しました。

Insiders 版はターミナルから起動する時、code-insidersと入力する。長いので.zshrc でエイリアスを登録する。

.zshrc
alias code='code-insiders'