DLLファイルの役割と作り方〜中身・作り方・使い方を、言語をまたいで確かめた〜
DLLとは何か、なぜDLLにするのか、何の言語で作れるのか。小さなDLLを実際に作って確かめました。★C++とRustは1つのDLLに同居できます。ただし「公開する関数を明示しない」ときの壊れ方がmacOSとWindowsで正反対でした(macOSは1,688個も漏れる/Windowsは5個しか出ず使えない)。理由は逆なのに、対処は同じです。
プログラミングや3DCGで何か作りたいと思っているエンジニアがいます
DLLとは何か、なぜDLLにするのか、何の言語で作れるのか。小さなDLLを実際に作って確かめました。★C++とRustは1つのDLLに同居できます。ただし「公開する関数を明示しない」ときの壊れ方がmacOSとWindowsで正反対でした(macOSは1,688個も漏れる/Windowsは5個しか出ず使えない)。理由は逆なのに、対処は同じです。
拡張子を並べても違いは分かりません。同じライブラリを静的・動的の両方で作り、macOSとWindowsで実測しました。軸は「いつ名前が解決されるか」の1つだけ。★静的リンクは関数ではなくオブジェクトファイル単位で取り込むため、呼んでいない関数が16KiB付いてきます。★.dylibを.soに改名しても読めるので、決めているのは拡張子ではなく中身の形式でした。
FlutterからネイティブへC++で架けた橋を、そのままRustで架け替えて比べました。生のC ABIならRust 0.0089µs・C++ 0.0091µsで一致し、橋の材質は速度に関係ないと分かります。一方 flutter_rust_bridge は既定で1,442倍。さらにWindowsでは「渡った先が支配的」という前提が崩れ、Smart App Controlに阻まれてビルドすらできませんでした。
互換レイヤーを使わず、Mac版Steamだけでどこまで遊べるのかを実測しました。ネイティブかRosettaかを見分ける手順と、同じゲームがSteam経由だとRosettaで動き、直接起動するとネイティブで動くという結果まで。CPU時間は1.44倍でした。
Whiskyの開発が終わったあと、Macで何を入れ直せばいいのかを実測でまとめました。移行先ごとの導入容量と所要時間、22GBのボトルのうち持ち出す価値があるのは2.7MBだけだったこと、そして同じWarframeがWine 11.14では起動すらしないのに11.13では動くという結果まで。
Whiskyの開発が終わって1年3か月。MacでWindowsゲームを遊ぶ手段は、Mac版ネイティブ・無料の互換レイヤー・CrossOver・クラウドゲーミング・仮想マシンの5つに整理できます。実測値と2026年8月時点の各ツールの版を並べ、目的別・予算別の判断表にまとめました。
AppleがGame Porting Toolkit 4で、AIコーディングエージェント向けのスキル24本をApache 2.0で配り始めました。中身を読み、その手順どおりにDirectXのシェーダ(DXIL)をMetalのライブラリへ変換し、実機のM4に読み込ませるところまで確認しています。前回のp967では動かせなかったGPTK 4ですが、シェーダ変換だけはWine不要でmacOS 26のまま動きました。再現できるようコマンドと版を全部載せています。
MacでWindowsゲームを動かすApple純正のGame Porting Toolkit。M4に導入して測ったところ、64bitのDirectXなら47〜48fpsで動く一方、32bitアプリはD3DMetalを一切通らずOpenGLに落ち、SteamはCEFの壁で今回も動きませんでした。公式のGPTK 4もライブラリ差し替えでは動かず。つまずいた原因を層で仕分けると、遊べるかどうかを決めていたのはD3DMetalではなくWineの側でした。
モデルを軽くする量子化は「賢さはほとんど落ちない」と言われます。本当かどうか、F16を1つ落として手元でQ8からQ2まで作り、perplexity・KL divergence・実際の出力の3つで測りました。数字の崖はQ3から。ところがQ2でもFizzBuzzは動き、17×24も当てます。崩れたのは日本語の説明文だけでした。さらに「日本語のほうが先に壊れるのでは」という予想を検証したところ、perplexityでは外れて見えたのにKL divergenceでは1.5倍脆いと出る——測り方で結論が変わる場面に行き当たった記録です。
AIの速さには tok/s・TTFT・スループットと色々な単位が出てきますが、「指示してから出力が終わるまで」は1つの数字では見られません。読み込む時間と書き出す時間に分けて足す、という見方を実測で確かめました。入力8千トークンでは最初の1文字まで39秒かかり、待ち時間の割合は7.9%から95.4%まで入れ替わります。さらに同時に使う人が増えると1人あたりは7分の1に落ちるのに全体の処理量は増える——同じ機械から3つの「速度」が出た記録です。
ローカルLLMで「モデルのどの部分をGPUに置き、どの部分をCPUに逃がすか」は自分で指定できます。llama.cppの -ngl / -ot / --n-cpu-moe を Apple M4・Radeon 780M・RTX 3060 の3構成で実測しました。統合メモリなら逃がしても損は小さいはず——という予想は外れ、M4では専門家をCPUへ回した瞬間に生成速度が37.77から2.53 tok/sへ、全部CPUに置くより10倍遅くなりました。真犯人はmmapで、--no-mmap を付けると6.6倍まで回復します。
どちらもCPUにGPUを内蔵しメインメモリを共有する「統合メモリ」構成。Apple M4(Mac)とRyzen 7 7840HSのRadeon 780M(ミニPC)で、同じQwen2.5-Coderの7B・14Bを同じ条件で走らせて比べました。生成速度は7BでM4が19.55 tok/s(MLXなら22.60)に対し780Mは13.37、14BはM4 10.69に対し780M 6.72。M4が約1.5倍速い一方、メモリ帯域の差は120GB/s対89.6GB/sの1.34倍しかありません。帯域だけでは説明できないこの差の正体を、iPhone由来のApple GPUとグラフィックボード由来のRDNA 3という両者の設計の出自から掘り下げます。
Macでゲームが増えた背景を調べました。2020年のApple Silicon移行で何が変わったのか、統合メモリがなぜゲームに効くのかを図解。「PCも内蔵GPUなら同じ構成では?」という疑問にも、メモリバスの太さ・タイル方式という描き方の違いから答えます。Metal 4のフレーム補間、2026年7月のGPTK 4 betaでGTA Vが106→176fps。一方でSteamのシェアはmacOS 2.21%とLinuxを下回っており、反チートのカーネル問題・DirectX資産・鶏と卵という3つの壁も正直に整理します。
MacでWindowsゲームを動かす無料ツールWhiskyは2025年4月に開発終了しました。では今、無料でどこまで遊べるのか。M4のMacで実際に試したところ、Whisky本体は最新のmacOSでも動くのに、Steamを起動した途端に自己更新が走って起動不能に。Wineを7.7から11.13へ入れ替えると復旧しましたが、今度はSteamもWarframeのランチャーも画面が黒や白のまま。日本語が豆腐になる問題の直し方と、Rosetta 2終了でこの方式に期限があることまで記録しました。
前回書いた「806MBの崖」は間違いでした。実物のQwen2.5をCore MLに変換したところ、943MBのモデルが演算の99.7%をANEで実行。原因を1つずつ切り分けると、正体は「約2GBのサイズの壁」と「特定の形だけ落ちる落とし穴」の2つでした。bisect_modelで分割すれば1.5B・3BもANEに載り、1.8倍速くなります。
ローカルLLMを動かす『推論エンジン』を、同じモデル・同じ量子化で比較。Mac(Apple M4)でllama.cpp(Metal)とMLXはほぼ互角(20.6 vs 21.1 tok/s、MLXはロードが速く省メモリ)。Windows(RTX 3060・CUDA)は同じllama.cppのコードで約3倍速の62.1 tok/s。量子化とは何か・VRAMに載るとは何かを図解し、自分のPCならどのサイズが最適かの判断表も作りました。
声で話せるローカルAIアシスタント(p936/p937)を実際に使うと『返事までの間』が長い。遅延を実測して内訳(文字起こし→LLM生成→音声合成)に分解し、LLMを逐次出力して文ができた端から音声合成・再生する『逐次パイプライン』で改善。最初の音までが実測13.5秒→2.7秒(約80%短縮)。Windows(CUDA)でも同じコードで動作し6.9→1.6秒。バッチと逐次の違いを図解+実装コード。
以前『MCPとは』を概念だけ解説しました(p909)。今回はその実践編。自作のローカルAIエージェント(p935)をMCPクライアントにして、自作の最小MCPサーバと公式のfilesystemサーバを道具として繋ぎます。ローカルLLM(Ministral 3・完全オフライン)が自律的にMCPの道具を呼ぶまでを実装コードつきで。道具名の衝突を名前空間で解決するなど、実際にやって初めてわかったハマりどころも正直に書きました。WindowsでもMac共通コードで動作確認済み。
Flutterから端末固有の機能(端末情報・ネイティブUI・バッテリー残量)を呼ぶ方法を、手書きのMethodChannel/コード生成のPigeon/dart:ffi+C++ディスパッチャの3構成で実装し、iOS・Android・macOS・Windowsの4つで往復時間を実測して比較しました。橋そのものの往復はFFIが約300倍速い一方、端まで行かせると差は縮みます。型安全性・呼び分けの置き場所・スレッドの扱い・ビルド配線まで、Dart/Swift/Kotlin/C++の実装コードつきで解説します。
Flutterで書いた1つのコードを、iPhone・Android・Web・Mac・Windowsの5つに出してみました。なぜ同じコードが動くのか(FlutterはOSの部品を借りず自前で画面を描く)を図解し、ビルド時間・成果物サイズを5つで実測。同じコードでもmacOSはサンドボックス、Androidはリリース時のINTERNET権限が必要で通信できず、Windowsは何もせず通信できた——OSごとに違う通信の作法や、戻るボタンの形の違いまで、実際に踏んだつまずきと対処を実装コードつきで紹介します。
自分のブログ全記事(66本)をローカルLLMに読ませて、"あの記事どこ?"を出典つきで答えるAI検索(RAG)を作りました。以前作ったローカルAIエージェント(p935)への機能追加として実装。記事本文を抽出→チャンク分割→multilingual-e5で埋め込み→ローカルDBに保存し、質問に近い記事を探して記事タイトルとURLつきで回答します。RAGの仕組みを図解し、本文抽出・チャンク分割・ベクトル検索・出典つき回答のキモになる実装コードも掲載。すべてローカル完結で記事データは外に出ません。Macで作ったインデックスDBはコピーするだけでWindowsでも動きました。
以前作ったローカルAIエージェント(p935)の画像機能を強化。写真を『ドラッグ&ドロップ』で複数まとめて渡すと、各画像を説明→タグ付け→画像内の文字起こし(OCR的)まで一括処理。『提案→確認→コピー』の安全なやり方でタグ別フォルダに整理しCSVにも出力。スクショ→画面説明も。すべてローカル完結でネット不要・写真が外に出ないのが強み。D&D/画像をローカルLLMに渡す/安全なコピー整理など再現用のコードも掲載。Mac/Windows同一コードで動作(Windowsの画面撮影はPySideに統一)。
ネット接続なしで動く“オフラインのコーディング相棒”を、以前作ったローカルAIエージェント(p935)への機能追加として作りました。コード特化モデル Qwen2.5-Coder を積み、GUIから使うモデルを切り替え(汎用⇔コード特化)、コーディングモードでコード生成・修正・説明。CLIからも呼べて将来VS Codeからも叩ける薄い入口も用意。クラウドAIとの違い、そして『14BはVRAM12GBのGPUには重く、7Bが最適(実測22 tok/s)』というつまずき、Mac/Windows同一コードで動いた話まで、実際の画面つきで解説します。
以前作ったローカルAIエージェント(p935・Ministral 3 14B)に、音声認識Whisperと音声合成VOICEVOXを統合。声で「◯◯を検索して」と話すと、エージェントが道具を実行して結果を声で返します。全部Macローカル。GPU/CPUの役割分担、音声用の工夫、Windows(RTX3060)でのSmart App Control対策(faster-whisper)まで解説します。
マイクで話す→AIが答える→声で返す、を全部Macローカルで。音声認識Whisper・ローカルLLM(Ollama+Qwen2.5)・音声合成VOICEVOXを1つのデスクトップアプリに統合しました。クラウドに送らないのでプライバシー安心・無料・オフラインOK。コード・モデル・設定値・つまずきまで再現できるよう解説します。
クラウド型AIエージェントの『有料・トークン消費が膨大』問題を、完全ローカルで解決できないか試作。Ministral 3 14B(Q4)をllama-cpp-pythonで動かし、Web検索・ファイル読み書き・PC操作(マウス/キーボード)・CLI/MCP・RAG記憶・画像理解を1つのデスクトップアプリに統合。緊急停止と重要操作の確認も実装。Mac(M4)で構築しWindows(RTX3060)でも検証。コード・設定値つきで解説します。
ネット接続なしで動くAIアプリをMacで自作。軽量LLM(Qwen2.5-3B・gguf)をllama-cpp-pythonでデスクトップアプリに直接組み込み、PySide6のGUIで文章生成・要約をオフライン実行。Apple SiliconのGPU(Metal)で約38トークン/秒。インストール・モデル・コード・設定値まで再現できるよう解説します。
Flutter 3.44.2でカウンターアプリを作り、iPhone 17 Pro(iOS 26.5)とPixel 7(Android 16)のシミュレータで動かしました。Dartの基本文法、Bundle ID等の設定値、ハマりポイント(CocoaPods・初回ビルド)、React Nativeとの比較まで実機検証で紹介します。
ComfyUIをMacのApple Silicon上で動かし、ノードベースで画像生成ワークフローを組んでみました。インストールから基本ワークフロー、実際の生成画像、img2imgでの作り変えまで実機で検証。WebUI(p914)との使い分けも紹介します。
OpenAI WhisperをMacのApple Silicon上で動かし、日本語音声を文字起こしするアプリを作りました。tiny/base/small/mediumの4モデルを実測比較。「AIが愛に誤変換される」など日本語特有のハマりポイントも紹介します。
MacでWindowsやLinuxを動かしたい人向けに、Parallels Desktop・VMware Fusion・UTMの3種類を実体験ベースで比較。無料版の制限やARM問題も正直にまとめました。
MacでWindows用ゲームを動かす方法をWhisky中心にまとめました。互換レイヤー・仮想マシン・Boot Camp・Mac対応版の違い、特に混同しやすい互換レイヤーと仮想化の差、ボトルの作り方、動くもの・動かないものの傾向、うまくいかないときに見るところ、開発終了後の選択肢まで扱っています。