見出し画像

MacBook Air冷却クラムシェルスタンドを作った

MacBook Airを買った

WWDC2024で発表されたApple Inteligenceが良さそうだったので、期待をこめてついにMacBookを買った。

これまでずっとWindows機を使い続けていて、はじめてのMacOSデビューということになる。

このタイミングまでMacにしなかった理由はいくつかあって、

①ゲームができない
PCゲームをまあ少しはやる身としては、多くのPCゲームがWindowsのみ対応という現状においてMacを選ぶのは明確にデメリット

②拡張性が低い
MacというかノートPC自体に言えることだけど、性能の不足を感じてきた時にパーツの増設や交換でグレードアップしにくい

③自作できない
ある意味②と同じだけど、こちらの意味合いとしては「PC自作の楽しさが味わえない」という感じ

④値段が高い
同程度の性能のWindowsデスクトップと比べて倍ぐらいの値段がかかる、ノートと比べても1.5倍ぐらいに感じる
特に、DTMをやる身としてはストレージ容量は最重要で、2TBぐらいは余裕で欲しいのにMacでそれをやるとべらぼうに高くなる

と、まあ色々理由があった。

ただ、もともとiPhoneとiPadユーザーでもあり、それが理由で身の回りのサービスなどをappleに集約していきつつあるところなので、その流れで「MacBook欲しい〜」はずっと思っていたことで、色々検討自体はしていた。PCとiPhone/iPad間でAirDrop使いたいし、ユニバーサルクリップボードとか、Sidecarとか、Apple製品同士のネイティブ連携はめちゃくちゃ魅力的なので。

自分はブラウザのタブ大量に開きっぱなしとかソフト多重起動とか平気でやるし、DTMとかそれなりにメモリ食う作業もするので、さすがにデフォルト構成の8GBメモリは論外、16GBでも不安。これまで作業に使っていたWindows機はメモリ32GB、Macのメモリ管理が優秀だといっても半分しかないのではさすがに……と思っていたので、M2までのチップだとpro以上がほぼ必須条件になっていた。そしてそれは当然値段が高いので買うのあほくさくなってたが、M3になってメモリが上限24GBになったので、いい機会だと思ったというのもある。

あと、元々自分はノートPCアンチというか、「デスクトップPCで最強のデスク環境を整えつつ、取り回しはタブレットで確保すれば、ノートパソコンなんて不要教」の信者で、というのもタブレットでできない作業はたいていデュアルディスプレイとか追加の入力デバイスとかの追加のデスク環境がないと快適性が低く、デスクに縛られるならデスクトップPCの方が安く済む、逆にそういうのがあんまりいらない作業は、iPadがあればだいたいできる、という考えを持っていたから。
ただこれ、コーディングに関しては全く当てはまらないことに過去の自分は気づいておらず、コードを書く機会が最近増えてきたことで「あるぇ……?? ノートPCの方がいいのでは……???」となってきた。ハード・ソフト両面でコーディングをするのに向いてないんだよね、iPadは。
あとは最近ちょこちょこ出先で作業する機会とか、メインデスク以外で作業したくなるタイミングが増えてきて、PCをNintendo Switchみたいに軽く取り回したい願望が出てきた。そこで「やっぱMacBookだよなぁ〜」みたいなことを思うようになった。M3になって2画面出力にも対応したので、クラムシェル運用がかなり現実的になった。

そこに冒頭のWWDC2024、Apple intelligence の発表があってMacBook欲しい欲が最大に達し、改めていろいろAppleのウェブサイトなんかを観てたタイミングでふと思った。

ワンチャンメルカリとかで安く買えるんじゃね?

そう思って久々にメルカリを開いたら、あるじゃあないか。ぴったりのやつが。

M3チップ搭載のMacBook Airでメモリが24GB。充電回数が3回のほぼ新品で、その値段が定価で買うのより2割以上安い20万円。メルカリの相場から見てもかなり安く、何よりメモリ24GBのカスタムは他に出品されておらず、本当に奇跡のような巡り合わせだったので、ほぼ即決で購入してしまった。
ストレージ容量は512GBでこの点はまあ妥協だが、Macのストレージ増量はこちらも あ ほ く さ となるレベルの殿様商売なので、現実的なラインといえる。音源とかは外付けSSDを使うしかない。持ち歩くものが2つに増えるのは取り回しの良さが壊滅的に下がるというのは実体験として持っていたが、諦めるしかない。

MacBook Proにしなかった理由???

値段に決まってんだろ。
モニタのリフレッシュレートとかは気にしないし。

……さて、こうしてMacbook Airを買ったが、ここで一つ問題がある。

こいつ、ファンレスなのだ。
静音だし、防塵とかを考えるとメリットではあるが、しかし一方で発熱の問題はけっこうシビアになってくる。キーボード面からの放熱が期待できないクラムシェル運用では特に。調べたところクラムシェル運用のM3 MacBook airは長時間高負荷状態が続くとサーマルスロットリングにより性能が半分ほどにまで低下してしまうこともあるという情報を見てしまって、冷却をどうにかしなきゃいけないなぁとは思うようになった。
ところが市販のノートPC冷却台はクラムシェル運用する前提ではなく、普通に開いて使う用のスタンドばかり。まあそりゃそうだよなとは思うが、マジで立てた状態で冷やすスタンドは見つからない。
MacBook Airをクラムシェル運用するとかいう物好きがおそらく自分しかいないということなのだろう。だってProは高えんだもん!!!メルカリにも安いのなかったしね。

というわけで、冷却スタンドを仕方なく自作することにした
クラムシェルスタンドにMacBookを立ててる間、USB給電でファンを回して裏側を冷却するのだ。

せっかく自作するんだから、CPU温度に応じて自動でファンの回転数を調整できる機能をつけてやろうと思った。が、これが泥沼になるとは当時の自分は全く予想できていなかった。

色々下調べをした結果、
PC用の12V DCファンを、マイコンからPWM制御する方向で行くことにした。

ChatGPTに色々質問をしまくり、半日かけて構成を練った。ラズパイなどを使うことも考えたが、オーバースペックなものを使わずに必要なものを最小限で作る、という方向でいく。
使用するマイコンとして選定したのはATtiny85。値段としては1つ200円台。プログラムメモリが8kB、RAMは512B、8ピンで電源とリセットピンを除くと5ピンしかI/Oに使えない本当にコンパクトなマイコンだが、ファンの回転数を制御するだけなので十分と判断した。こいつをArduino化して使う。すでにATtiny85とPCファンでモバイル扇風機を作っていた先人のブログがあり、それを踏襲すれば概ね問題なさそうなのも選定理由の1つ。
おそらく現代ならATtiny202とかの方が良いんだろうけど、似たものを作った実例を見つけた方をとった。202は85より容量がかなり小さいっぽいけど、50円ぐらいで買えるみたいね。
手動調整モードもつけられそうだ。

というわけで、構成が決まった。

用意したもの

  • ATtiny85

  • 昇圧器(USBからの給電は5Vだがファンは12Vを要求するので)

  • USBシリアル変換器(CPU温度によって回転数を変えるのでUSB経由で通信ができるように)

  • スイッチと抵抗とボリューム(可変抵抗)

  • 12VのPC用DCFAN

ATtiny85の入出力もスイッチ、ボリューム、PWM制御信号出力、シリアル通信の入力と出力でちょうど5ピン使い切る形だ。

あとは、ATtinyにファームウェアやスケッチを書き込む用のUSBaspも用意した。

……さてここで第一の問題発生。
ArduinoIDEにATtiny85のサポートを追加するとき、オンライン上にあるJSONを読み込んでくるのだが、なんとリンク先のSSL証明書が期限切れになっており、ArduinoIDEにURLを打ち込むのでは失敗してしまう。
結局、JSONをローカルに落としてきてそっちを参照することで強引に突破した。原始的だけど、この方法に気づくのに3時間ぐらいかかってる。なんというか、こういうのに時間とられるのほんと嫌だ。しゃーないけど。

さてようやくATtinyを動かせる段階にきた。回路図は……回路図への造詣がまだまったく深くないので、たぶん書けと言われても大変だしどっか間違えそう。というわけで省略します。ごめん。
ざっくり説明すると、
USBから電力供給、分岐させ片方を昇圧器に、もう片方をATtinyに。もちろんシリアル接続もATtinyに繋ぐ。
ATtinyへの入力はシリアルの2ピンのほかには手動モード切り替えスイッチ(プルアップ抵抗を用いてOFF時は+5Vにプルアップ)、と手動回転数調整ボリューム。出力はアナログ出力(PWM)をそのままFANに接続。そんなところです。

ATtiny側のスケッチ(プログラム)は、シンプルに、接続時にATtiny85 startと出力して、あとはシリアル通信で値が送られてくるたびにその値にファンに送信するPWMのDuty比を設定する、というだけ。
ATtiny85はsoftware serialはできるがUSBはできないので、変換器を使ってシリアル接続する必要がある。
USB-Vというものを使ってUSB接続をシミュレートすることもできるようで、それをやっているdigisparkという製品もあるようだが、今回は裸のATtiny85を買ったので素直にsoftware serialを使う。
接続がない間、もしくはスイッチで手動モードにしている間は、ボリュームのアナログ入力の値に応じてPWM信号のDuty比を変える。

あとはPC側のプログラム。
CPU温度を取得して目的のファンの出力に変換してシリアル通信で送信するだけ、と思っていたら、まさかのここでどハマりすることになった。

最初は「てきとーにPythonでスクリプト書くか〜〜」とか考えていた。

が、CPU温度を取得する方法が思ったより無い。

調べて出てくる情報はどれも古く、現在では使えないものばかりだった。Apple Siliconになったからなのか、セキュリティの強化なのか知らないがPythonからCPU温度を取る方法は見つからなかった。

調べる過程で、HotというCPU温度を表示してくれるアプリは見つけたので、不可能ではなさそう。Hotはどうやって情報を取ってるんだ?とGitHubのサブモジュールを辿っていくと、IOHIDKitというフレームワークに行き着いた(Hotと同じ作者によるもの)。
これはObjective-Cで書かれていて、まあ当然Obj-CやSwiftから利用されることを前提にしているっぽい。これの中身をさらに調べると、IOKitというApple公式から配布されているSDKに行き着く。うーーーん、どちらにせよObj-CやSwiftを使った方がよさそうだな。

というわけで、

Swift とXCodeと向き合う羽目になりました。

Swiftなんて1ミリも見たことも書いたこともないし、XCodeも今回はじめて触れるが、ChatGPTに全面的にご協力いただいて頑張ることに。
必要な機能はIOHIDKitにあるもので充分なので、
GitHubからcloneしてきたこのフレームワークを使えるようにするやり方を調べて、あとはシリアル通信用のライブラリを使うやり方を調べて……と、環境構築でたくさんエラーを出しながらなんとか進めた。
CocoaPodsとかなんやねん(npmみたいなものという理解であってる?)。
困ったのはIOHIDkitはドキュメントがなく、使い方が全くわからなかったことで、しかもObjective-Cなんて全く読めないのでソースコードを見てもなにもわからない。長いコードではなかったので、結局ChatGPTにソースコードを投げて使い方を予測してもらった。おおむね合っててすごい。

というわけでようやく目的のコードが書けた。書いたのほぼChatGPTだけど。
3秒ごとにCPU温度に応じて出力するPWM信号のduty比を送信するだけ。あとは、シリアル通信はポート名が接続するたびに変わりうるのと、どのポート名がATtiny85に繋がっているのかがわからないので、全部いったん接続をして、「ATtiny85 start」を送ってきたポートがそれである、という検出もするようにした。接続が見つからないか、接続中に切断された場合はプログラムを終了する。終了したらMacOSが自動で再起動してくれるように設定すればいい。

動作も問題なく、あとはこいつをバックグラウンドで実行(要するにdaemon)できるようにするだけ……というところで問題が発生した。

ビルドした実行ファイルが動かない(字余り)。

XCode上では問題なく動くのに。

エラーメッセージで検索しても解決策はわからずじまい。見た感じフレームワークへのリンクが解決できてないというのはわかるが、どう直せばいいのかぜんぜん見当がつかない。

Library not loaded、no LC_RPATH is foundとあるので、LC_RPATHなるものが見つからずライブラリがロードされていないっぽいが、それ以上の情報がない。LC_RPATHというのがなんなのかもわからない。なんかのパスっぽいけど。

こういう時にChatGPTは調べて出てくるような当たり障りのない回答をするか、出鱈目な回答をする傾向があるので、調べて出てこないものはChatGPTに聞いてもあんまり解決しない。

というわけで色々設定を変えたりしながら試行錯誤するも全く解決せず。

なかば諦めかけたころ、改めてChatGPTの返答を見ていたら、
「otoolを使ってLC_RPATHが設定されてるのを確認しろ」という記述を見つけた。
これで確認できるんかな?と思ってそのコマンドを入れたら、LC_RPATHなんてものは設定されていないという結果が。この時点でまだChatGPTが出鱈目のそれっぽいことを言っているだけの可能性(=LC_RPATHなる項目自体がここにはない)を疑っていたが、一応ということで「出ないんだけど?」とChatGPTに伝えたところ、
install_name_toolを使ってランタイム検索パスを追加しろと言われた。で、藁にもすがる思いで提示されたコマンドを入れた。すると、

これまで何をしても変わらなかったエラーメッセージが変わった!!!

これは光明である。そのあとは、出たエラーをChatGPTに投げて、言われたことを確認して実行していくだけ。
コード署名の問題を解決したところで、ついに動くようになった!!!!

結局最初からChatGPTの言うことを聞いてりゃよかったのである。変に疑ったのがよくなかった。

……ところで、今回は実行ファイルにあとから設定を足す方法で解決したが、XCodeからビルドしたばかりの状態だとLC_RPATHが設定されていないの自体はどうすればいいんだい???あとそのままだとディレクトリ構成も違うし。なにかセットアップ間違ってるんかなあ。教えて有識者。
なんの知識もないまま調べて出てきた情報とかをそのまま試すフェーズ、まあだいたいのことははじめてすぐはこうなんだけど、自分でも何やってるかわかんない状態が気持ち悪いのでさっさと脱却したい……

とはいえ。今後iOSアプリ開発とかするんならXCodeやswift系の技術も身につけなきゃいけないけど、今のところはまだそれは考えていないので、しばらくはVSCodeでPythonやTypeScriptなんかを書きます。TSも触り始めたばっかだしね。

というわけで、ようやくクラムシェル冷却スタンドが完成した。

え、肝心のスタンド本体はどう作ったのかって?

百均の金属製まな板スタンドにハンカチ被せて、金網をくくりつけてその金網にさらにファンをくくりつけただけっすよ。全部で1500円ぐらいちゃうかな。

クラムシェル冷却スタンド。
実際に使うとこんな感じ

いざベンチマーク!

さて冷却ができるようになったところで、ベンチマークを回す。CineBench2024だぜ。

Multi Coreのスコアで比較します。
特にクラムシェル運用で高負荷状態が長時間続くとサーマルスロットリングによりかなりの性能低下が起こる、ということで4回連続で測定。

冷却ファンあり : 603pt / 561pt / 529pt / 536pt
冷却ファンなし : 560pt / 482pt / 508pt / 487pt 

約7〜10%の性能向上といっていいんじゃないか。

ファンなしで4回計測したあと、もう一度ファンを回して計測したら577ptが出たので、間違いなく効果はある。

ちなみに、いちばん熱くなるポイントに保冷剤を押し当てて計測したら630pt出た。たぶんこれがM3チップの本当の実力。MacBook Proとかはこの水準を保つんかな?

たぶん、本当にちゃんと冷却するなら熱くなるところにヒートシンクとかあててちゃんと熱を移した上で風を当てるべきなんだと思う。ただ持ち運ぶノートPCの裏側にそんなことできようはずもなく。
MacBookの底面のパネルを一回外してサーマルパッドを挟むことでさらに底面側に熱を逃がせるようだけど、それをやると膝上で使う時熱くて使えなくなりそうだし、修理も効かなくなりそうだからさすがにそれはしない。まあここらが限界か。
……メルカリで買ったMacBookってAppleの修理サービス使えるの?使えはするか

あとは外付けSSDを背面にマグネットで貼り付けられるようにすればメイン作業環境をいつでも持ち出せる体制が整うぞ。
DTMが快適にできるかどうかは、まあまた使いながら判断してみようかと思う。

ゲーム用Windows機とキーボードやマウス、モニタを共用できるようにKVMスイッチも導入したので、比較的無理なく環境共存ができてるんじゃないですかね。

……マウススクロールの向きが逆なの、どうにかならん??????(Mac側の動作に統一したい)

この記事が気に入ったらサポートをしてみませんか?