M1 Apple Silicon Macの環境設定

最近、M1 SiliconのMacを入手してセットアップしたので、そのときの備忘録をまとめておく。

Homebrew

最新では、homebrew本体はM1に対応している。最低限だけインストールする。

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

> brew install coreutils bash-completion wget

git表示用のシェルをダウンロードしておく

> cd /opt/homebrew/etc/bash_completion.d/
> wget https://raw.githubusercontent.com/git/git/master/contrib/completion/git-prompt.sh
> wget https://raw.githubusercontent.com/git/git/master/contrib/completion/git-completion.bash

Terminal設定

Terminalのテーマを取得する。Solarizedが気に入っている。ホームディレクトリにインストールする。

> cd ~
> git clone https://github.com/seebi/dircolors-solarized.git
> git clone https://github.com/tomislav/osx-terminal.app-colors-solarized.git

ターミナルの環境設定で、osx-terminal.app-colors-solarized内のSolarized Dark.terminalまたはSolarized Light.terminalをインポートして、デフォルトにする。ウいhィンドウのサイズやフォントを適宜変更して、シェルを/bin/bashに変更しておく。

.bashrcを以下の内容にする

# .bashrc
#homebrew
#-------------
export HOMEBREW_PREFIX="/opt/homebrew"
export HOMEBREW_CELLAR="/opt/homebrew/Cellar"
export HOMEBREW_REPOSITORY="/opt/homebrew"

export HOMEBREW_HOME=${HOMEBREW_PREFIX}

if [ -n "$HOMEBREW_HOME" ]; then
  export PATH=${HOMEBREW_HOME}/bin:$PATH
  export PATH=${HOMEBREW_HOME}/sbin:$PATH
  export HOMEBREW_CACHE=${HOMEBREW_HOME}/cache
  export C_INCLUDE_PATH=${HOMEBREW_HOME}/include:$C_INCLUDE_PATH
  export CPLUS_INCLUDE_PATH=${HOMEBREW_HOME}/include:$CPLUS_INCLUDE_PATH
fi

if [ -n "$HOMEBREW_HOME" ]; then
  if [ -f "${HOMEBREW_HOME}/etc/bash_completion.d/git-prompt.sh" ]; then
    source ${HOMEBREW_HOME}/etc/bash_completion.d/git-prompt.sh
  fi
  if [ -f "${HOMEBREW_HOME}/etc/bash_completion.d/git-completion.bash" ]; then
    source ${HOMEBREW_HOME}/etc/bash_completion.d/git-completion.bash
  fi
  # option
  GIT_PS1_SHOWDIRTYSTATE=true
  if [ -f "${HOMEBREW_HOME}/etc/bash_completion.d/git-prompt.sh" ]; then
    # git ps1
    export PS1='\[\033[36m\]\u\[\033[37m\]@\h \[\033[32m\]\w\[\033[37m\]\[\033[31m\]$(__git_ps1)\[\033[00m\]\n\$ '
  fi
  if [ -f "${HOMEBREW_HOME}/bin/brew" ]; then
    if [ -f "${HOMEBREW_HOME}/etc/bash_completion" ]; then
      . ${HOMEBREW_HOME}/etc/bash_completion
    fi
  fi
  if [ -n "$(which gdircolors)" ]; then
    eval `gdircolors ~/dircolors-solarized/dircolors.256dark`
  fi
fi

#alias
#----------
if [ -n "$(which gls)" ]; then
  alias ls='gls -aF --color=auto'
  alias ll='gls -alF --color=auto'
fi

NVMとNode.jsインストール

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

> curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.38.0/install.sh | bash

.bashrcに以下の設定が追加されていること

> vi ~/.bashrc

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

> nvm --version
0.38.0

Node.jsをインストールする(ローカルでコンパイルが実行される)

> nvm ls-remote
:
  v12.20.0
:

> nvm install v12.20.2

Miniconda

https://github.com/conda-forge/miniforge

M1 Apple Silicon版のPythonモジュールがまだ整備されていないので、numpyですらエラーなる状況。

いろいろ検討した結果、MinicondaのIntel版が一番サポートされている状況なので、Pythonはこれでいく。ただし、arm64版はまだ対応パッケージが少ない(pyqt5など)。

pyqt5を必要とするアプリもあるので、intel版、arm版を両方インストールしておく。リポジトリの違いでインストールフォルダも違うので、Miniforge3とMambaforgeを選択。

platform miniforge
arm64 Miniforge3
intel Mambaforge
> bash Miniforge3-MacOSX-arm64.sh
> bash Mambaforge-MacOSX-x86_64.sh

.bash_profileに以下を追加。uname -mのプラットフォーム名で有効にするパスを変えるようにする。

HOGEを実際のユーザ名に変更して追加すること。${USER}だとうまく動作しなかった。

if [ "$(uname -m)" == 'arm64' ]; then
    # arm64 => Miniforge3
    # .bash_profile
    # >>> conda initialize >>>
    # !! Contents within this block are managed by 'conda init' !!
    __conda_setup="$('/Users/HOGE/miniforge3/bin/conda' 'shell.bash' 'hook' 2> /dev/null)"
    if [ $? -eq 0 ]; then
        eval "$__conda_setup"
    else
        if [ -f "/Users/HOGE/miniforge3/etc/profile.d/conda.sh" ]; then
            . "/Users/HOGE/miniforge3/etc/profile.d/conda.sh"
        else
            export PATH="/Users/HOGE/miniforge3/bin:$PATH"
        fi
    fi
    unset __conda_setup
    # <<< conda initialize <<<
else
    # x86_64 => Mambaforge
    # .bash_profile
    # >>> conda initialize >>>
    # !! Contents within this block are managed by 'conda init' !!
    __conda_setup="$('/Users/HOGE/mambaforge/bin/conda' 'shell.bash' 'hook' 2> /dev/null)"
    if [ $? -eq 0 ]; then
        eval "$__conda_setup"
    else
        if [ -f "/Users/HOGE/mambaforge/etc/profile.d/conda.sh" ]; then
            . "/Users/HOGE/mambaforge/etc/profile.d/conda.sh"
        else
            export PATH="/Users/HOGE/mambaforge/bin:$PATH"
        fi
    fi
    unset __conda_setup
    # <<< conda initialize <<<
fi

Intel環境を使う場合は、ターミナルでRossetaを使用して開くがONになっていればOK

ターミナルを起動したときに勝手に有効にならないようにする場合

> conda config --set auto_activate_base false