前に使っていたMacBookPro(Intel)がだいぶガタついてきたので、
Mac mini(M2)に買い替えた。
IntelプロセッサからAppleシリコンに変わるので、
移行アシスタントだとうまくいかないようだったので、
クリーンインストールするようにした。
ただ、愚直にやっているとつらいので、
簡単に環境構築できないかといろいろ調べてみたときの備忘録(*´ω`*)
Homebrew BundleとGitで整えた感じ。
これが意外によく、あとで外出用のサブ機としてMac Book Air(M2)を買ったけど、
そのまま利用できるようになった(*´ω`*)
利用したツール
開発中のソースやドキュメントは、Gitやクラウドストレージにある前提。
Homebrew Bundleでアプリなどを管理
Homebrew Bundleは、Brewfile
というファイルに指定したアプリなどを一括インストールできるツール。
対応しているのはこのあたり。
Homebrew (on macOS or Linux) for installing dependencies.
Homebrew Cask is optional and used for installing Mac applications.
mas-cli is optional and used for installing Mac App Store applications.
Whalebrew is optional and used for installing Whalebrew images.
Visual Studio Code is optional and used for installing Visual Studio Code extensions.
Brewfile
の例はこんな感じ。
# 'brew tap' tap "homebrew/cask" # 'brew install' brew "imagemagick" # 'brew install --cask' cask "google-chrome" # 'mas install' mas "1Password", id: 443987910 # 'whalebrew install' whalebrew "whalebrew/wget" # 'vscode --install-extension' vscode "GitHub.codespaces"
基本的にはアプリはHomebrewでインストールするようにしてる。
Gitで設定ファイルを管理
.bashrc
などの設定ファイルはGitで管理する形。いわゆる、dotfiles。
必要なものとしては、
.bashrc
などの管理する設定ファイル- 設定ファイルを配置する
install.sh
できないこと/しないこと
基本はこの2つでできるけど、
- Homebrew Bundleでインストールできないアプリなど
.ssh/
など機密性の高いファイル- キーチェーンの証明書
- 各種アプリの設定
- ソースコード中の
.gitignore
に指定しているファイル
などは手動で対応しないといけない。
キーチェーンについてはこちらでできるっぽい。
移行の流れ
移行元: 対象のファイルを特定/整理する
まずは、いるもの/いらないものを整理する
不要なアプリなどはこのときに削除するのもいい。
移行元: Brewfileを作成する
インストール済みのアプリから.Brewfile
を作成できる。
# ~/.Brewfileの作成 $ brew bundle dump --global -f $ head .Brewfile tap "dart-lang/dart" tap "heroku/brew" tap "homebrew/bundle" tap "homebrew/cask-versions" tap "leoafarias/fvm" brew "act" ...
移行元: dotfilesをリポジトリを準備する
移行・管理するファイルをdotfiles/
にまとめ、
リポジトリを作成しておく。
$ mkdir ~/.dotfiles $ cd ~/.dotfiles $ git init ~/dotfiles
対象としてはこんな感じ。
. ├── .aws │ ├── config │ └── credentials ├── .bash/ ├── .config │ ├── configstore/ │ ├── firebase/ │ ├── flutter/ │ ├── gcloud/ │ ├── gh/ │ └── tabtab/ ├── .vim/ ├── bin │ └── install.sh ├── solarized │ ├── dircolors.256dark │ ├── dircolors.ansi-dark │ ├── dircolors.ansi-light │ ├── dircolors.ansi-universal │ ├── solarized_dark.terminal │ └── solarized_light.terminal ├── .Brewfile ├── .actrc ├── .bash_profile ├── .bashrc ├── .gitconfig ├── .gitignore ├── .gitignore_global ├── .vimrc └── README.md
.bashrc
などはもちろんだけど、
.aws
や.config
配下などにCLIツールの設定ファイルがあるので注意。
credentialsなど認証情報や資格情報もあるので、
gitで管理ではなく、手動で移行するほうが安全なので、
中身はよく確認しておく。
移行元:
こちらの記事を参考にbin/install.sh
はこんな感じ。
#!/usr/bin/env bash set -ue helpmsg() { command echo "Usage: $0 [--help | -h]" 0>&2 command echo "" } link_to_homedir() { command echo "backup old dotfiles..." if [ ! -d "$HOME/.dotbackup" ];then command echo "$HOME/.dotbackup not found. Auto Make it" command mkdir "$HOME/.dotbackup" fi local script_dir="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd -P)" local dotdir=$(dirname ${script_dir}) if [[ "$HOME" != "$dotdir" ]];then for f in $dotdir/.??*; do [[ `basename $f` == ".git" ]] && continue if [[ -L "$HOME/`basename $f`" ]];then command rm -f "$HOME/`basename $f`" fi if [[ -e "$HOME/`basename $f`" ]];then command mv "$HOME/`basename $f`" "$HOME/.dotbackup" fi command ln -snf $f $HOME done else command echo "same install src dest" fi } while [ $# -gt 0 ];do case ${1} in --debug|-d) set -uex ;; --help|-h) helpmsg exit 1 ;; *) ;; esac shift done link_to_homedir git config --global include.path "~/.gitconfig_shared" command echo -e "\e[1;36m Install completed!!!! \e[m"
動きとしては、
.dotfiles/
配下のファイルを${HOME}
直下にln -snf
でリンクしている感じ。
また、同じファイルがあったら、$HOME/.dotbackup
に退避しておいてくれる。
移行先: 環境構築
# zshからbashに戻す $ chsh -s /bin/bash # Homebrewのインストール $ /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)" $ echo 'eval "$(/opt/homebrew/bin/brew shellenv)"' >> ~/.bash_profile $ eval "$(/opt/homebrew/bin/brew shellenv)" # GoogleJapaneseInput用にRosettaをインストール $ sudo softwareupdate --install-rosetta # dotfilesのclone: PATを使ってhttpでチェックアウト $ git clone https://github.com/my-dotfiles-repo/dotfiles.git
- Xcodeのインストール&許諾に同意する
- 「システム設定>一般>共有」のファイル共有やリモートログインをONにし、
.ssh/
などを手動で移行- システム設定 > 一般 > 共有 > リモートログイン
ssh user@192.168.x.x
でログインできるscp -r user@192.168.x.x:~/.ssh .ssh
でコピーできる
- キーチェーンのファイルを移行
# change permission $ chmod 600 ~/.ssh/* # deploy dotfiles $ ~/.dotfiles/bin/install.sh # install brew $ brew bundle --global # change repo url $ cd ~/.dotfies $ git remote set-url origin git@github.com:my-dotfiles-repo/dotfiles.git
- 再起動して設定を反映する
移行先: 各種アプリのセットアップ
再起動したら、各種アプリのセットアップしていく。
設定が同期できるものはいいけど、手動設定するものが割とある。。
以下は個人的なメモ。
- terminal の設定
- 全体の設定: ターミナルの設定からインポート(
.dotfiles/solarized/*.tarminal
) - Solarized Color Scheme for Mac OS X Terminal - Qiita
- 全体の設定: ターミナルの設定からインポート(
- Google IMEの設定
- システム設定 > キーボード > 入力ソースから
- 英語・日本語にある全ソースを追加
- デフォルトの「ABC」が消せないので、「日本語-ローマ字入力」を追加して、「英字」をチェック後に削除
- 【Mac】デフォルト日本語入力ソースが消せない場合の対処方法 | chiliblog
- Spotlight の設定: 不要な検索結果を OFF
- システム設定 > Siri と Spotlight から
- アプリケーション / システム設定 / デベロッパ / 計算機を選択
- デスクトップと Dock の設定:
- システム設定 > デスクトップと Dock から
- 自動非表示を ON
- 最近の APP を OFF
- 自動スリープの OFF: システム設定>ディスプレイ>詳細設定
- Finder
- 隠しフォルダの表示(`Command + Shift + .)
- 一般: 新規ウィンドウ = HOME ディレクトリ
- 一般:タブで開くを OFF
- サイドバー: 不要な項目を OFF にする
- 詳細: すべての拡張子を表示を ON
- Google Drive/Slack など cask でインストールしたアプリの起動と設定
- fvm で flutter のバージョンのインストール(
fvm list
で確認) - fnm で Node のバージョンをインストール(
fnm list
で確認) - Android Studio/Lombok plugin/ADV
- AVDはエクスポートできないので手動で対応
- 最新のAndroid StudioではLombok pluginがインストールできない
- Boost Note(旧)のインストール
- Homebrewだと新Boost Noteがはいってしまう。。
などなど。
ハマったポイント
やはりすんなりうまくはいかず、いくつかはまった
- XCodeのインストール
- node-gypがインストールできないっぽい(pythonとXCodeが必要)
- nodejs/node-gyp: Node.js native addon build tool
- node-gypでpythonが必要だけど、バージョン縛りがある
- pyenvで古いバージョンをインストールできるがM1では入れられないものがある
- M1 Mac (macOS Monterey 12.2.1)でpyenv/Python開発環境構築
brew install pyenv pyenv-virtualenv && pyenv global 3.7.13 && pyenv local 3.7.13
- 最新のAndroid StudioでLombok pluginがインストールできない
- lombok-plugin-0.34.1-2019.1.zipをダウンロード
- zipを展開し、Android Studioのpluginsディレクトリ配下に配置
open /opt/homebrew/Caskroom/android-studio/2022.1.1.20/Android\ Studio.app/Contents/plugins/
brew
でインストールしたのでこの場所
- Android Studioを起動
- Android Studio 最新版で Lombok plugin が使えなくなったときの対処法 - Qiita
- Cannot find Lombok plugin in Android Studio 2021.1.1 (build of 2022) - Stack Overflow
- Android StudioのFlutterが組み込みのjavaを認識しない
cd /Applications/Android\ Studio.app/Contents && sudo ln -nfs jbr jre
- Unable to find bundled Java version · Issue #118502 · flutter/flutter
- Android StudioのFlutterで「cmdline-tools component is missing」
- SDK Tooksから「Android SDK Command-line Tools(latest)」をインストール
- 【Mac M1】「flutter doctor」実行時の「cmdline-tools component is missing」の解決法
まだ、全部はさわれていないので、出てきたら追加していく。
以上!! これでだいぶ楽になった。。(*´ω`*)
家でも外でもがんばるぞ(*´ω`*)
参考にしたサイトさま
- 【2022年版mac移行】M2 MacBook Airへ移行アシスタントを使わずに1から作業環境を作り上げる(CUI編)
- Intel MacからM1 (Pro・Max) Macへ(出来る限り)滑らかに開発環境を移行する
- 旧Macから新Macへの移行メモ
- Homebrew/homebrew-bundle: 📦 Bundler for non-Ruby dependencies from Homebrew, Homebrew Cask and the Mac App Store.
- mas-cli/mas: Mac App Store command line interface
- Brew Bundleの使い方
- dotfiles を使った環境構築の時短術(M1 Mac 向け) - SMARTCAMP Engineer Blog
- ようこそdotfilesの世界へ - Qiita