Tech Racho エンジニアの「?」を「!」に。
  • IT Tips
  • ライフ

M1 Macbook Proの値上げ前に購入間に合いました

Macbook Pro 2021 14インチに移行しました

参考: 14インチMacBook Proを購入 - Apple(日本)

買い替えの主なモチベは、昨今のエネルギー事情です。

本当はメモリ32GBにしたかったけど16GBにしました😢。でもSSDは以前の倍の512GBになったので、よしとしておくことにします。既にあちこちで言われていますが、以前のMacbookよりも厚みと重さはちょい増しです。

これまで所有していた旧Intel版Macbook Pro 2019のLCDは15インチにしていましたが、今回のM1 Macbook Pro 2021は13インチか14インチか16インチという謎のバリエーションで、なぜか15インチはなしです。

考えた末、16インチにしても価格に見合わない気がしたので14インチに決めました。画面は1インチ狭くなりましたが、気になるのはKindle for Macを読むときぐらいです。

値上がり前に買えてよかった😂

円安と供給不足で7月に価格が一斉に5万円も上昇しましたが、ぎりぎり巻き添え食わずに済みました。M2はそのうちこなれると思いたいので今は考えないことにします。

でも旧Intel Macbookの売却価格は悲しかった

じゃんぱらで4万円😢。

せっかく無償修理の範囲内でバッテリーとキーボードを交換した後だったのに、蓋を閉めたときにピッタリ合ってない(ボディに歪みがある)という名目でごっそり引かれてしまった。8万円じゃないのか〜

今度無償修理するときは、ボディに歪みがないかどうか厳重にチェックする所存です。

パフォーマンス

正直、Intel -> M1の差は思ったより大きく、体感ではビルドもネットワークアクセスも速くなっています。(M1 -> M2はそこまで大きく変わらない予感)

以下は過去記事のRubyベンチマークもどきを元にした超雑な比較です。

  • Late 2013(Parallels Desktop上のUbuntu VM)
Warming up ————————————–
Block 7.317k i/100ms
Symbol#to_proc 8.042k i/100ms
Calculating ————————————-
Block 70.244k (± 6.8%) i/s – 351.216k in 5.026038s
Symbol#to_proc 76.526k (± 6.5%) i/s – 386.016k in 5.068287s

Comparison:
Symbol#to_proc: 76525.7 i/s
Block: 70243.9 i/s – same-ish: difference falls within error
  • Mid 2019(Parallels Desktop上のUbuntu VM)
Warming up ————————————–
Block 9.839k i/100ms
Symbol#to_proc 11.267k i/100ms
Calculating ————————————-
Block 98.313k (± 3.4%) i/s – 491.950k in 5.009973s
Symbol#to_proc 112.389k (± 3.0%) i/s – 563.350k in 5.017148s

Comparison:
Symbol#to_proc: 112389.2 i/s
Block: 98313.5 i/s – 1.14x slower
  • M1 Pro 2021(ただしVMなし)
Warming up --------------------------------------
               Block    15.054k i/100ms
      Symbol#to_proc    18.164k i/100ms
Calculating -------------------------------------
               Block    150.913k (± 0.8%) i/s -    767.754k in   5.087700s
      Symbol#to_proc    181.634k (± 0.7%) i/s -    908.200k in   5.000416s

Comparison:
      Symbol#to_proc:   181634.0 i/s
               Block:   150912.6 i/s - 1.20x  (± 0.00) slower

温度・消費電力の改善すごい

今回の買い替えで一番感動した部分です。

こんなヒンヤリしたMacbook初めて体験した🎐。Intelのときは夏場で90度超えとか普通にあってファン回りまくっていましたが、M1ではビルドやbrew upgradeをめいいっぱいやってもファンがまったく回りません。以下はアイドリング時で48度、上はせいぜい60度。

参考: MacBook Air(13-inch, 2020, Intel版)の発熱について - 猫とマグロのその日ぐらし

キーボードがまともになった😂

以前のペチペチキーボードから元のまともなタッチに戻ってくれて感激です。TouchBarに未練はありません。
なお私は一貫して英語キーボードを選んでます。

escキーが親の仇のようにでかくなったのは、TouchBar時代のescが評判悪かった反動でしょうか。

F1〜F12が普通のキーと同じ縦幅なのがちょっとモヤモヤします。

HHKのfnキーが🌏キーとして認識されない

唯一、9年前に購入したHappy Hacking Keyboard(Professional2)のFnキーを押しても、本体の🌏キー(Fnと兼用)として認識されないのが残念です。おかげでHHKでは画面の明るさやボリュームをFnで変えられず、本体キーボードで操作する必要があります。
HHKが古いのが問題なのか、それともAppleの問題なのかよくわかりません。

Karabiner-Elementsを入れれば修正できそうな気もしますが、🌏キーとFnキーの対応付けだけのために入れるのは大げさな気がして、まだやっていません。

参考: Karabiner-Elements

ノッチは少々残念

ノッチは噂通りですね。メニューバーの項目を増やさなければ気にならないといえば気になりませんが、心頭滅却を迫られているとも言えます。

移行作業

IntelからM1への移行だったので慎重にやりたい気持ちでした。今回はなるべく以下のクラウドアカウントに任せてそれ以外はクリーンインストールすることにしました。

  • iCloudアカウント(ただしホームディレクトリや写真の複製はオフにしてあります)
  • Chromeプロファイル(プロファイル作っておいてよかった)
  • あとはVSCodeのプロファイルぐらい

以前書いた記事が今回も参考になりました。

Macbook Proをクリーンインストール&環境復元したよ

移行が必要だったコンフィグ(うろ覚え) :

  • iTerm2コンフィグ
  • ESETコンフィグ
  • BetterTouchToolコンフィグ

Intel版でバックアップしたTimeMachineデータをM1で復元できなかったという話もいくつか見かけたので、TimeMachineはストレージとして考えることにしました。なお、Intel版でバックアップしたTimeMachineデータをM1でマウントするのは問題なくできました。

参考: Intel MacからM1 (Pro・Max) Macへ(出来る限り)滑らかに開発環境を移行する -- 一番参考になりました

ファイルコピー

TimeMachineは直接当てにせず、基本的にscpでホームディレクトリ以下のファイルを選択的にzipで固めてコピーしました(コピー元の旧型機でシステム環境設定の「共有」でファイル共有をオンにしておきます)。

  • アプリケーションは極力homebrew caskでインストールした
    • それ以外はApp Storeまたは直接インストール

今回、移行前にhomebrewでインストールしていたパッケージは、brew listのリストだけ保存しておいて、後は必要になったらその都度インストールすることにしました。理由は、パッケージ構成を丸ごと移行してもしょうがないと思えたからです。おかげでbrew listが随分スリムになりました。移行後真っ先にhomebrewでインストールしたのはgitぐらいです。

なお、今回の移行には間に合いませんでしたが、移行後にchezmoiでドットファイルを管理するようにしてみました。.ssh/以下を暗号化して管理することも可能です。

twpayne/chezmoi - GitHub

chez moi(シェモア): フランス語で「at home」

シェル環境の復元はそれなりに手間でしたが詳細は略します。とりあえずPowerline-goが動くようになればよかったレベルでした。

justjanne/powerline-go - GitHub

Bash: .bashrcと.bash_profileの違いを今度こそ理解する

移行アシスタントはやめておきたい

移行アシスタントも怖いもの見たさで試してみましたが、やはり開発者向けにはおすすめできないと思えました。

  • 当然ながら、Intel版MacbookでビルドしたバイナリはM1で再ビルドしないといけないのでことごとく動かない
  • それ以前に、ESETのネットワークプロキシがまったく動かなくなり、ネットに接続できなくなってしまったのが致命的

ブラウザやMusicアプリぐらいしか使わない個人ユーザーなら移行アシスタントでもいいと思いました。

参考: 新しい Mac にコンテンツを移動する - Apple サポート (日本)

M1環境で有料アップグレードが必要だったアプリ

うろ覚え。少なくともM1で動かなくて困ったアプリやツールは今のところありません。

なお、移行で一番ハマったのはAdobe XDでした。

移行を諦めたアプリ

TotalFinderのoptionキー2回押しで下からFinderウィンドウが生えてくる機能は名残り惜しかったのですが、macOSで緩めないといけないセキュリティ設定がIntel版のときより1項目増えてしまったので、やめることにしました。

代わりにAlfred(ランチャー)のワークフローを使い、optionキーを2回押すとキーマクロでAppleScriptを呼ぶようにしてごまかしました。なお機能キー2回押しはBetterTouchToolで認識できません。

  • Parallels Desktop for Mac

バージョン14のライセンスはDockerを使うようになってからさっぱり出番がないので、バージョン17には移行しないことにしました。

一番心配だったDocker

実は一度3月にクーリングオフ前提で同じ機種を買って、Dockerが動くかどうかを事前に確認していました(そのまま買っておけばよかった😅)。

Intel版Macbook Pro 2019 MidよりDockerの起動が明らかに速い🚀。(後述)

DockerではTechRachoのDockerのMySQLだけが動かなかったのですが、compose.ymlに以下を記述することで動くようになりました。今ならMariaDBにする方がいいんでしょうか?

  db:
     image: mysql:5.7
+    platform: linux/x86_64
     environment:
       MYSQL_DATABASE: wordpress
       MYSQL_USER: username

参考: M1 mac で MySQL コンテナを使う方法 - あしたからがんばる

それ以外はすべて問題ありませんでした。なおDockerボリュームは移行先ですべて作り直しました。

...と思ったら、その後WordPress用のnodejsコンテナでoptipngという画像圧縮パッケージのビルドがM1で失敗していたことに気づきました。
これもMySQLと同じくplatform: linux/x86_64を追加することでビルドされるようになりました。

  nodejs:
    build: ./frontend
+   platform: linux/x86_64
    volumes:
      - ./frontend/src:/app/src
      - ./web_root/wp-content/themes/techracho:/app/public

次に心配だったESET

ESETは、旧Intel Macbookでライセンス無効化処理を行えば、移行後も同じライセンスキーが問題なく使えました🎉。
なお、移行前のESETコンフィグをエクスポートしておいて移行後のESETにインポートするのをお忘れなく。さもないとファイアウォールで通したいポートの設定をやり直すはめになります。

参考: パソコン買い替え時など、新しいパソコンでESET製品を継続して利用したい | ESETサポート情報

ESETは未だにM1ネイティブではなくRosetta2ベースですが、幸いインストール後に重くなった感じはありません(個人の感想です)。

Rosetta2で動いているアプリは今のところ3つだけ

  • ESET
  • Google IME
  • 英かな

アクティビティモニタで「種類」がIntelになっている項目はRosetta2で動いています。

Docker Desktop fo MacやiTerm2やAdobe XDなども知らんうちにひととおりM1ネイティブになっています。これもアーリーアダプタの皆さんのおかげです🙏

他のものはともかく、ESETは早くM1ネイティブになって欲しい気持ちです。

Docker for MacとRailsを組み合わせたときのパフォーマンス(その後解決)

今回気になったのは、Docker for MacでRailsを実行したときのパフォーマンスでした。

Docker Composeで動かしているRails 7アプリのレスポンスタイムをよく見ると、移行前は300ms程度だったのが3倍ほど遅くなっていました↓。特にActive Recordがなぜか遅くなっていて、developmentログを見ると単純なSELECT COUNTすら200ms近くかかっています(Intel Macbookのときは1ms程度)

02:39:06 web.1        | Completed 302 Found in 978ms (Views: 35.0ms | ActiveRecord: 557.7ms | Allocations: 76853)

Intelのときと比べると、M1ではDockerイメージのサイズも小さいし起動もビルドもマウントもきびきび動くし、アプリのレスポンスのアロケーションも改善されているし、アプリのビューはまったく遅くなっていないにもかかわらず、Active Recordだけ遅くなっています🤔。Railsコンソールでクエリを直接実行してみましたが、この場合は遅くなりません。

移行前のIntel環境ではRuby 3.1のYJITを有効にしていました。3.1のYJITはM1では無効なので、そのせいかもしれませんが、ESETなど他にも原因がありそうな気もします。わからぬ...3月でお試しで買ったときはこうではなかったと思うのですが、目ぼしい記録が見つかりませんでした😢。今後調べてみます。

以下のフォーラムを見ると、M1でDocker for Macが遅いという話が盛り上がっています。自分のRailsアプリがしょぼいので体感はほとんどありませんが。

参考: Docker on M1 Max - Horrible Performance | MacRumors Forums

追記(2022/08/15)

その後調べた結果、単純なコンフィグミスだった(環境変数で誤って外部DBサーバーを参照していた)ことが判明しました。コンフィグを修正すると以下のように本来の爆速を取り戻しました。

21:32:25 web.1        | Completed 302 Found in 156ms (Views: 6.9ms | ActiveRecord: 3.1ms | Allocations: 10439)

その他

内蔵カメラの解像度が明らかに以前のMacbook Pro 2019 Midより高く、Zoomで自分の姿を見るとぎょっとするほどです。服のしわや白髪や顔のシミもがっつり映るレベルなので、人によっては気になるかもしれませんね(私は気にしませんが)。聞くところによると、Zoomのときにカメラにわざと指で指紋をつけてぼやかす人もいるそうです。

また、前よりもスピーカーユニットの幅が小さくなっていますが、サウンドのドスの利き具合は変わらずです。サウンドは相変わらず気合入っていることを痛感しました。

Macbook Pro(Mid 2019)を買ったらサウンドのよさにぶったまげた



CONTACT

TechRachoでは、パートナーシップをご検討いただける方からの
ご連絡をお待ちしております。ぜひお気軽にご意見・ご相談ください。