Macbook proの「俺カスタマイズ」設計書

ジャンクのMacBook Air(MBA)をこの夏に衝動買いしたのはいいけれど、設定をしたり使っていくうちに「いかんともしがたい」問題が発生し、業務に差し支えるまでになってしまったので、MacBook Pro(MBP)買っちゃった、というお話から始まります...。

「いかんともしがたい」問題の一番大きな理由はジャンクとして売られていた理由であるWi-Fiが使えないこと。

Wi-Fiカードを入れ替えても使えず、OSをMontereyにアップグレードしたところ外付けWi-Fiカード(USBドングル)も使えなくなり、修理センターに持ち込んだところロジックボード異常と診断され、修理なら10万越えと言われ、「新品買った方が安いですよ」とまで言われてしまい悶々としていたのだが、たまたま通りがかった某店*1で見かけた中古MBPを、年末に「ボーナス」と称して購入することに。ちなみにヨメには内緒*2

MBPを買った理由はMBAの購入動機と同じで、Windowsとのデュアルブート(BootCamp)でWindowsノートの代替品とするため、そしてたまに使うiOS用のアプリ開発*3。そんな特殊用途なのでカスタマイズが少し「複雑」になってしまう。購入したMBPの紹介がてらカスタマイズの備忘録として何をするのかをまとめておく。

購入した「ブツ」

一部繰り返しになるが、現状Mac(ノート)に必要なスペックとして、

  • Intel Macであること(Windows/BootCampの利用が前提になるため)
  • 記憶領域(SSD/メモリ)が十分確保できること、または拡張性があること
  • CPUのスペックが十分であること(上記2点は開発のために必要)
  • 英語(US)キーボードであること(自宅でのキーボードに合わせる)
  • 欲を言えばOSがあと数年は最新版を使うことができるといいな

と言うのがあって、特に「吊るし」で買わないといけないのである程度拡張性を考えて今までは購入していたのだが、今回は拡張性に目をつぶっても十分なくらいハイスペックな出物があったので購入を決めた。

買ったのは、MacBook Pro 2016、13インチのTouch Barモデル。

support.apple.com

主要スペックはこんな感じ。

主要パーツ スペック
CPU 3.3GHz デュアルコア Core i7
ストレージ 512GB
メモリ 16GB

CPUとメモリは標準スペックからアップグレードされたものなので、しばらくはこのまま使い続けることができそう。OSに関しては2021年発表のMontereyまで、となっているが、現時点では別段大きな問題にはならないはず*4

Touch Barは出た頃に興味を持っていて、かっちょえぇなぁ、使ってみたいなぁ、とは思っていたのだが、期せずして入手できた感じ。また、これもたまたまではあるが、USキーボードの中古品はそうそう出回っておらず、そこそこいい感じに使えそうである。

開封の儀とかは今さら中古品でやるのもいかがなものかと思うので、ここでは紹介しない*5

必要な作業

やりたいことは決まっているので、あとはセッティングだけ、というところだが、MBAのセッティングでも結構抜け漏れがあったり難易度が高かったり、逆に余計なことをしたこともあったので、ミニマルでかつ使いやすくカスタマイズをしていく。

言うまでもないが、外装系のカスタマイズについては今回触れない。ステッカーは適当にベタベタと貼る予定だし、ペリフェラル(周辺機器)については都度必要なモノを買い足していく予定なので、今回のカスタマイズ(設計)はソフトウェアレベルのみ。ハードウェアの拡張も今回はないのでそこを考えなくていいのはある意味楽ちんです…。

BootCampの設定

一番最初にやるのは、MacOSの領域を減らすこと。これを最初にやらないと、あとで(各OSにインストールする)アプリケーションインストールの領域が足らなくなったりするかもしれない。

SSDは今回512GBなので、MacWindowsを半分ずつ(256GBずつ)に分けてパーティションを切る。

イマドキのノートを(新品で)買って使う人たちはOSあたり256GBの領域では少ないと感じるかもしれないが、クラウドストレージや外部記憶装置を有効利用すれば256GBの領域でも十分使える。

で、パーティション切って、Windows入れて、で終わり、といきたいところなのだが、実はWindowsに関しては11を入れたい、というわがままがあって*6Windowsの導入にはひと手間を加えないといけない。

言うまでもなく、2016年当時のIntelMacはWindows11に正式には対応しておらず*7、いわゆる『TPMチェック解除』版のWin11をインストールしなくてはならず、さらにWin10からのアップグレードではなく、一度Win10をインストールしたうえで、さらにWin11をクリーンインストールする、という面倒な手はずをとらないといけない。

詳しくはこの辺を参考に。

pcmanabu.com

要約すると、「(MacOS)BootCampでWindows領域を確保」→「(Win10)インストール」→「(Win11)Win10領域にWin11を上書き(クリーンインストール)」というやり方。なかなか面倒です。特に、Win11はクリーンインストールになり、Win版のBootCampアシスタントは再インストールしなくてはならないので(そしてインストール後にさらにアップデートも必要)、メディアをいくつか用意しておかないといけなかったりする*8

もう一つ、これはBootCampの「バグ」らしいのだが、BootCampアシスタントでMacWindowsに切り替えると、Windowsでの仮想化(Hyper-V)が無効化されてしまうらしく、後述するWindowsのアプリの一部が使えなくなることがある*9。もっとも、「後述」と書いているけれど、Windowsの仮想化を使うアプリはWSLとDockerだけなので(Windows Subsystem for Androidの導入も検討中なのでおそらくこれも該当するはずだが現状導入しない)、普段使いならアシスタント経由で、開発業務で仮想化環境を使いたければ起動時に起動ディスクの切り替えをするという手順をとれば事足りる。

MacOS側の開発環境構築準備

現状Macでは主にこれらのアプリを導入している。

  • Xcode(iOS開発環境に必須のIDE:たまに使う)
  • Visual Studio Code(俺デフォルトのコードエディタ)
  • Homebrew(もろもろ開発環境の導入に使うパッケージ管理アプリ)
  • Flutter SDK(Flutter開発環境)
  • Adobe Creative Cloud Suite(Photoshopを業務で使うため)
  • Vagrant/VirtualBox(たまにクライアントの要請で使うことがあるため)
  • 細かいユーティリティ系アプリいくつか

そもそも業務のメインマシンはWindows(およびWSL)なので、iOS開発に特化した環境が揃っていればOKなのだが、Vagrantに関してはDockerだったかWSLだったかとの相性が悪く*10メインマシンに導入できないのでMacに入れている。

また、Flutter開発と言えば、のAndroid Studioに関しては、MABでは当初導入していたのだが、とにかく『クソ』重いし、Androidシミュレーターの動作に難ありなので今回は導入を見送る*11

もう一つ、これはMacOSそのものの環境構築時にすべきことなのだが、Adobe Creative Cloud Suiteのインストール要件として、「ファイルシステムが『大文字・小文字の区別なし』でないとインストールできない」というのがあるので注意が必要*12

ここまでの手順をおさらいすると、

  1. MacOSを初期化(クリーンインストール)。その際ファイルシステムは(暗号化有無はともかく)大文字・小文字を区別しないAPFSで初期化し、OSをクリーンインストールする
  2. BootCampの導入をし、Windows10をインストール→Win11のインストール(アップグレードではなく上書きインストール)→BootCampインストール→AppleソフトウェアアップデートでBootCampアシスタントを最新版にアップグレード*13
  3. MacOSへの各種アプリインストール
    1. インストール順は好みだと思うが、俺流は「Xcode(およびAppStoreでインストールできるもの)」→「Homebrew」→「VSCode」→「Flutter」、合間や終わってからほかのアプリをインストール
    2. Xcodeはインストールが終わったら一度起動する(追加コンポーネントをインストールさせ、Welcome画面が表示されたらいったん終了)
    3. Homebrewをインストールすると合わせてCommand Line Tools for Xcodeがインストールされる*14。Homebrewはcocoapodのインストールでも使うので(Macでの)Flutter開発には必須かも
    4. VSCodeはHomebrewからインストールしてしまう。brew install —cask visual-studio-codeただし起動はまだ待つ
    5. FlutterSDKについては別項にて

Flutter開発環境の構築

基本的にはFlutterのサイトにある通りに構築すればいい。

docs.flutter.dev

  1. FlutterSDKをダウンロードし、任意のフォルダに解凍、パスを通す。サイトでは~/developmentディレクトリを(作って)そこに展開しているが、個人的には~/Library(個人フォルダ内のライブラリフォルダ)でもよさそう((と言うか個人開発ディレクトリを~developmentとして作るのが俺流なので))。
  2. flutter doctorを実行。Xcode関連エラーが出ていればそれを修正。手元の環境では下記エラーが出ているので、それぞれ対処
    1. Xcode instllation is incomplete(対処方法:エラーメッセージにあるxcode-selectとかの実行)
    2. CocoaPods not installed(対処方法:brew install cocoapods)
  3. Android toolchain関連エラーは、AndroidSDKがインストールされていないため発生する。目的(iOS向け開発のみに使用)だけであればこのままでも問題なさげだが、エラーが気持ち悪いのでいつもインストールしている。

Android toolchain関連のインストール

ダウンロードについてはGoogle(Android)の公式のやり方で行う。

developer.android.com

ただしここでダウンロードするのはAndroid Studioではなく、「コマンドラインツール(Command line tools onlyの下にあるリンク)」。ダウンロードして、flutterSDKと同様に任意の場所~/Librarycmdline-toolsディレクトリを作成しその中に解凍、解凍したディレクトリ名をlatestと変更し、そのlatestディレクトリまでパスを通す。

.zshrcはこんな感じになる。

export PATH="$PATH:$HOME/Library/android_sdk/cmdline-tools/latest"

export ANDROID_SDK_ROOT="$HOME/Library/android_sdk"
export PATH="$PATH:$ANDROID_SDK_ROOT/cmdline-tools/latest/bin"

次にその他ツールをインストールする。パスが通っていればsdkmanagerで実行可能になっているので、sdkmanager —install toolsを実行。

ライセンス許諾画面ではyを入力し、インストールが完了するとANDROID_SDK_ROOTの下にplatform-toolsディレクトリができているので、ここもパスを通す。

export PATH=”$PATH:$ANDROID_SDK_ROOT/platform-tools”

最後にSDKをインストールする。

sdkmanager install “build-tools:33.0.1”

ここまで環境を作ってみて、少しまとまりがなくなってしまったので、Android開発関連のディレクトリを~/Library/android_sdkとしてまとめ(実際に当該ディレクトリにすべての開発環境がまとまっている)、ANDROID_HOMEとして環境変数にする。それを踏まえてパスを通し直す。すると、.zshrcはこんな感じで書き直せる。

export ANDROID_HOME="$HOME/Library/android_sdk"
export PATH="$PATH:$ANDROID_HOME/cmdline-tools/latest/bin"
export PATH="$PATH:$ANDROID_HOME/platform-tools"
export PATH="$PATH:$ANDROID_HOME/tools"
export PATH="$PATH:$ANDROID_HOME/tools/bin"

Visual Studio Codeの設定

最後にVSCodeを起動し、プラグインを導入。Lint系は入れていないので、Flutterプラグインだけ入れる(自動でDartプラグインも入ってくれる)

Windows11側の各種設定

MacOSの設定が基本的に限定された開発環境の設定になっているのに比べ、Windows側はどちらかというとメインマシンの縮小版のような設定にしている。言い換えれば、メインのデスクトップを持ち出すに当たって必要最低限の作業ができればいい、という考えで設定している。

そのため、インストールするのは、

これくらいだろうか。他にも細かいアプリ(メッセージング系だったりブラウザだったり)は入れるのだけれど、特に記憶領域が少ないノートPCに関しては必要なければ入れないというのが基本ルールとしてあって、クラウドストレージ(OneDrive/Googleドライブ)を活用してできるだけローカルにはファイルを置かないようにしている。

ただ、どうしてもコードを書くとファイルが増えて容量圧迫に繋がるので、一応今後の課題としてそういった生成物をどうするか(ローカルに置く場合の場所など)はMac/Windows共に検討しなくてはならない。

手順に関しては「WSL」→「Docker(Desktop)」が順番を守りたいところ。また、VSCodeに関しては、WSLのDistro(Ubuntu)にのみ入れてもいい気はするのだが、普段使いのメモでも使うことがあるのでWindowsにもUbuntuにも入れることを考えれば、「VSCode(Win)」→「VSCode(Ubuntu)」という順番で入れることになる(今回は省略)。

また、Windows側にもFlutter環境を構築したいところだが、どちらのOSにも同じ開発環境があっても同時並行で使えるわけではなく、またどちらかのOSのみ機能を増やしたいというケースが今のところないので、WindowsのFlutter開発環境構築は今回行わない(自宅での開発はWin、外出先での開発はMac、という使い分け)。

それから、ほかの注意事項があるとすれば、今回WSLについては(2022年11月から)WSLがWindowsストアからダウンロード・インストールすることができるようになったのでそちらを使う。

また、BootCamp設定の項でも記載したとおり、Hyper-Vを使うアプリに関してはBootCampでMacWindows起動を行うと仮想化が無効化されてしまうようなので、一度OSをシャットダウンし、電源ONのタイミングでオプションキーを押しながら起動、Windows起動ディスクを選択する、という方法を取る必要がある。

手順のまとめ

ここまで長々と書いたので、もう一度簡単なおさらい。大前提としてIntel MacでBootCampを使ってWindows11を使えるようにし、開発環境を各々構築する、という手順になる。

  1. BootCamp
    1. MacOSの「BootCampアシスタント」でWindows領域を確保、インストール
      1. Win10までの導入ならこれだけでOK
      2. Win11導入時はTPMチェック解除版でWin10領域を上書き
    2. WindowsのBootCampアシスタントを最新版にアップデートする
  2. MacOS開発環境のセットアップ
    1. Xcodeをまずインストールする(最優先)
    2. Homebrewインストール
    3. VSCodeインストール
    4. Flutter開発環境構築
      1. Android Studioをインストールすると簡単
      2. コマンドラインツールだけのインストールは少し面倒
    5. その他必要なアプリケーションをインストールする
  3. Windows開発環境のセットアップ
    1. WSLのインストール(Distroも含めWindowsストアから)
    2. Docker Desktopのインストール
    3. その他必要なアプリケーションをインストールする

片手間で作業をしていたり、途中でインストールするWindowsのエディションを間違えたなど*15、また、この投稿用のメモを記していたりと、フルタイムではなかったまでも3日間(時間にすると11時間くらい)要している。

最後に

「まぁ言うてもサブマシンなんで~」、という割り切りはもともとって、購入自体も結構割り切ったところがあるし、Flutterアプリのデバッグなどで使用頻度もそれなりにはあるとは思うのだけれど、自宅で過ごす間はまぁ月イチ程度しか使わない気はしている。

ちなみに、実際にセッティングをしながら使った使用感のインプレッションは、どちらかと言うと使いにくいという印象だったりする。

まず第一に、キーボードのペラッペラな感じ(バタフライキーボード)は今まで使ってきたどのキーボードよりもイケてない。いや、SurfaceのTouch Coverのほうがイケてなかった気もするが、Type Coverと比べると使用感は全然劣る。

あと、トラックパッドがデカすぎて使い慣れない。私は特に右クリックをMacでも多用するし、Windowsと合わせて明示的に右クリックができるように右下端にアサインをするのだけれど、キーボードを使いながらトラックパッドで右クリックをしようとしてもその「右下端」が遠すぎて右クリックできないことが多い。

Touch Bar周りに関してはそれほど使っていないので評価までは難しいが、キーボード入力のサジェスト機能やアプリによって変わるボタンなど、慣れてくると面白いのかもしれない。少なくともescキーは何度か押したことがあるが、感度に関しては問題なさそう。

Touch IDは少し惜しいなぁと思うところはあって、

  1. 再起動後はTouch IDでのログインができない
  2. (BootCamp環境の)WindowsではTouch ID機能が使えない

これは普段の私の使い方から考えれば今ひとつ感がある。外に持ち出して使うことが今のところないので、外出するようになれば印象が変わるのかもしれないが、これなら普通のパスワード入力ログインでいいじゃん、と思う。

USB-C(Thunderbolt3)のみの端子になっているのは、自宅での利用で外部接続をしなくてはならない環境下ではちょっとツラいところ。たまたまGPD Pocket2を持っていて、USB-Cハブも持っているのでなんとかなったが、LAN環境への有線接続はUSB-Cハブを経由してEthernetアダプターを接続、という何ともダサい(そして危険な)つなげ方をせざるを得ない。かと言ってEthernetもUSB-Aも使えるかっちょいいアダプターを買うつもりもないのだけれど*16

この記事をまとめるにあたり、何年も前に見てかっちょえぇなぁ、と思ったきっかけになった、Touch BarモデルのMacbook pro発表会(この年の13インチを買っている)を見ながら、「そこまで褒めたたえるようなマシンでもないよね...」と思わずツッコミをいれてしまった。

youtu.be

*1:今回はいつものハードオフではなくPC工房さんでした

*2:もっともブログに公開した時点でバレるのですが

*3:実際にはFlutterでの開発なのでコンパイル用途にしか使わない

*4:XcodeのバージョンによってiOSの対応上限が多少変わるが数年程度は問題ないはず

*5:もともと開封の儀系の紹介は好きじゃないから絶対にやらないけど

*6:普段使っているWindowsを11にした関係もあり

*7:理由はTPM未対応なのがメインだが、CPUもちょっと古い第6世代と思われ、第8世代以降のCore iシリーズを必須とするWin11は動作対象外

*8:MBAでこれをやった時にここでハマった

*9:これもMABを使ってハマった箇所のひとつ

*10:確かHyper-Vが複数の仮想マシンをハンドルできないとかそんな理由

*11:FlutterSDKに加えてAndroidSDKをCUI導入することで対応可

*12:この記事を書きながら必要なアプリの洗い出しをしていて気が付いた

*13:ここまでしないと「なぜか」BootCamp経由でのOS切り替えができない

*14:Xcodeインストール後にソフトウェアアップデートでインストールしてもいい

*15:何を勘違いしたかPro版で最初インストールをしてしまい、Win環境構築開始直前に気づき、BootCampアシスタントでWindowsを入れ直した

*16:USB-C→Ethernetのみのアダプターのいい出物があれば買っちゃうかも