組み込みのRTOS事情2026〜Zephyr・FreeRTOS・組み込みLinux、いつどれを選ぶ?〜
RTOSとは何か、ベアメタルや組み込みLinuxと何が違うのか。Zephyr 4.4.0とFreeRTOS 11.3.0をQEMUで動かし、同じ仕事を3通りで書いて比べました。焼かれるサイズは31倍に増えるのに、手で書く行数は180→207→46と山になります。「重い処理に周期を壊される」のはRTOSの有無ではなく置き場所の問題で、ベアメタルでも12バイトで直りました。
プログラミングや3DCGで何か作りたいと思っているエンジニアがいます
RTOSとは何か、ベアメタルや組み込みLinuxと何が違うのか。Zephyr 4.4.0とFreeRTOS 11.3.0をQEMUで動かし、同じ仕事を3通りで書いて比べました。焼かれるサイズは31倍に増えるのに、手で書く行数は180→207→46と山になります。「重い処理に周期を壊される」のはRTOSの有無ではなく置き場所の問題で、ベアメタルでも12バイトで直りました。
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に阻まれてビルドすらできませんでした。
Cyclesを速くする11の設定を1つずつ足して、「何倍速くなったか」と「絵がどれだけ変わったか」を同時に測りました。絵をほぼ変えずに速くなったのは「ノイズ除去をGPUで走らせる」と「アダプティブのしきい値を緩める」の2つだけで、この2つだけで屋内1.71倍・屋外2.85倍になります。Fast GIは1.89倍速いが絵のズレが+52、タイル分割はむしろ遅い、ライトツリーは5000灯でも逆転しない、OptiXとCUDAの差は1.19倍——さらに「絵は変わらない」を画素単位で確かめ、差が反射・屈折の面に集中していることまで追いました。
BlenderのEEVEEとCyclesを、自作の屋内シーンとp973の街の2つで焼き比べました。Cyclesの高サンプルを「正解」に置いてズレを数値化したところ、EEVEEはサンプルを1から256に増やしてもズレが64.8→64.8とまったく動かず、Cyclesだけが40.9→4.5と下がりました。さらにノイズ除去を入れたCyclesは8サンプル・3.59秒でズレ2.8に到達します。ライトプローブの大きさとベイク時間の逆説、初回だけ15秒かかるシェーダキャッシュの正体まで、Blender 5.2 LTS・RTX 3060の実測で確かめた記録です。
組み込み開発でRustはどこまで実用になったのかを、①書けるか ②安全認証を通せるか ③現場が乗り換えるか の3層に分けて整理しました。Cortex-M3向けに「素のベアメタル」「cortex-m-rt」「Embassy」の3つの書き方で同じプログラムを作り、QEMUで動かして実測。短く書けるほど焼かれるサイズが大きくなる関係や、Ferroceneの認証、AUTOSAR互換RTOSが無い問題まで、目的別の判断表にまとめています。
MediaPipeで mp.solutions が無くなり、昔のコードが動かなくなった人向けのガイドです。0.10.21・0.10.31・0.10.35・1.0.0 の4バージョンを実際に入れて、いつ消えたのか、同梱モデルが22個から0個になったこと、face_landmarker.task や hand_landmarker.task をどこから入手してどう使い分けるのかを実測でまとめました。.taskファイルを自分で作る方法まで。
BlenderのGeometry Nodesで作った街に、道路の実体・地面の高低差・建物4種の作り分けを段階的に足しながら、そのたびに「ノードの再計算」と「ビューポート描画」を分けて実測しました。面数が減ったのに描画が2.3倍になった話、Raycastの重さが隣のノードに計上される話、実体化すると描画は10倍速いのに再計算は3.6倍になる話まで、480m四方・78,809個の街で確かめた記録です。
Blender 5.2 LTSの新機能をRTX 3060で実際に触りました。ノードベース物理で板が布になる様子、Cyclesのテクスチャキャッシュでメモリが70.6%減った実測、Mesh BevelとThin Wallのbefore/afterまで画像つきで。1か月前に調べただけで書いた予測記事の答え合わせでもあります。
ゲームのNPCに、決められた台詞ではなくその場で考えた返事を喋らせたい。UnityからローカルLLMを呼んでNPCに人格と記憶を持たせ、ゲームループを止めずに動かせるかを実測しました。同期呼び出しは描画フレーム0枚、平均fpsは2.4%しか落ちないのに1% Lowは20%落ちる、記憶を切り詰めると入力が半分なのに待ち時間は1.8倍——予想が2つ外れた記録です。
ボードを1枚も買わずに、OSの無い世界のプログラムをMacで動かしました。QEMUとクロスコンパイラをHomebrewで入れて、スタートアップ・リンカスクリプト・UARTだけの最小構成でARMを起動(text 1,242バイト)。同じものをRISC-V(886バイト)とRustのno_std(870バイト)でも書いて比較。GDBでレジスタとメモリを覗く手順、そして「QEMUでは動くのに実機では一文字も出ない」UART未初期化のつまずきまで、全コードと実測ログ付きで記録します。
CPUの命令セットが「オープン」であるRISC-Vを調べました。無償なのは使用許諾だけで実物の回路設計は有料が主流という誤解のほどき方、長年の「バラバラ問題」に決着をつけた2024年10月のRVA23批准、電子工作でおなじみのESP32-C3/C6が実はRISC-Vだったこと、Bosch・Infineonら6社のQuintaurisが2026年1月に出した車載向けRT-Europa、Ubuntu 26.04 LTS。6千円台のボードから0円のQEMUまで試す方法と、周辺機器ドライバやデバッグの弱点も正直に整理します。
前回書いた「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共通コードで動作確認済み。
ブログ初期にPythonのMediaPipeで顔・手・姿勢を検出しUnityのアバターを動かしたシリーズ(p610〜p880)から約1年。MediaPipeは今どうなっているのかを調査。旧Solutions APIの終了と新Tasks APIへの移行、顔の52ブレンドシェイプ、OpenPose・MoveNet・YOLO-Pose等との比較、用途別の選び方、過去のUDP連携が今も通用するかまで整理します。
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同一コードで動いた話まで、実際の画面つきで解説します。
Unreal EngineのMetaHumanでフォトリアルなデジタルヒューマンを制作。2025年にブラウザ版が廃止されUEエディタに統合された“新Creator”で、プリセット→顔→肌→髪を編集し、Lumenで肌のサブサーフェスや髪のグルームの質感を出すまでを実画面つきで解説。無料で使える範囲(年商100万ドル未満)・他エンジンにも書き出せるライセンス、そして『造形はローカルでも自動リギングとテクスチャ取得はEpicログイン必須』という最大の落とし穴、コアデータ6GB・メモリ・アセンブルの詰まりどころまで、Windows(RTX3060)の実制作で紹介します。
重いと言われるUnrealの3DシーンをAndroidに書き出して軽量化。UEが要求するNDKバージョンの壁、そして『Androidエミュレータは本物のスマホGPUを積まずUEをまともに描画できない』という大きな落とし穴の実話つき。軽量化手法(Mobile HDRオフ・影・ポストプロセス・スケーラビリティ・解像度スケール等)を採否に関わらず詳しく解説し、モバイル描画パス(ES3.1)で軽量化前後の負荷を実測(FPS+58%/GPU-56%)。Lumen/Naniteはモバイルでは元々使われない=『UEはそれで重い』は誤解、も検証します。Windows(RTX3060)で制作。
ARは実機がないと試せない…と思っていませんか。UnityのAR FoundationとXR Simulationなら、スマホ実機なしでもエディタの“仮想の部屋”でARを検証できます。平面を検出してタップした面に3Dモデルを置く最小サンプルを、仕組み・コード・XR Simulationの有効化・つまずきまで解説します。
以前作ったローカル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トークン/秒。インストール・モデル・コード・設定値まで再現できるよう解説します。
p928(Unityで丸の内を夜景化)のUnreal版。PLATEAUの丸の内を広域取り込み(約16,477コンポーネント=東京駅・皇居・堀込み)し、月明かり・星空・ビルの窓・街灯をUnreal流で制作。Lumen・MegaLights・Bloom・Volumetric Fogでリッチな夜景に。窓はプロシージャルEmissiveを5,179棟一括、街灯は3,721灯を自動配置。各機能の設定値とCPU/GPU/メモリ負荷まで実測し、『Unrealの夜景が重い本当の理由=街の物量(ドローコール)』も検証します。
p924でUnrealがMacで重かったのは“全部盛り”が原因。今回はUnreal(5.7)で同じ1シーンの描画設定(Lumen・Nanite・スケーラビリティ)を切り替え、見た目と重さ(GPU時間)がどう変わるかをWindows(RTX3060)で実測。LumenオフでGPUは約3倍軽く、Naniteは見た目そのままでプリミティブ218分の1、スケーラビリティはEpicに落とすだけで見た目ほぼ同じで約2倍速。「Unrealは重い」は誤解だと確かめます。
p929の宿題「Unityも上位パイプラインならUnrealとの差は縮む」を実証。同じシーンをビルトインRP・URP・HDRPの3つで作り、反射・ブルーム・光の回り込み・光芒の見た目と、GPU時間で測ったFPSを同一Windows(RTX3060)で比較。設定は画像+数値で再現でき、いちばん軽いのはURPだった意外な結果やHDRPの露出・ライト単位のクセも解説します。
p921〜923でUnityに取り込んだ丸の内(東京)を、今度はUnreal Engineに「PLATEAU SDK for Unreal」で直接インポート。Blender経由+手作業のUnityと、SDK直接取込を比較。画質(Lumen)は公平な土俵で並べ、同一Windows(RTX3060)で性能も実測しました。
p927で地面・道路・橋梁まで整備したPLATEAUの丸の内を、Unity(ビルトインRP)で夜景化。月明かり・街灯・ビルの窓の光の作り方、窓を計算で光らせる専用シェーダー(簡易版と本格版の比較)、Bloom有り/無しの比較まで、設定値つきで解説します。
建物だけで宙に浮いて見えたPLATEAUの丸の内(東京)に、地形(地面)・道路・橋梁を足して“本物の街並み”に整備。広域データを街の範囲に切り出すコツ、形だけの道路をアスファルト質感で道路らしくする方法、建物との座標・高さ合わせの注意点までUnityの画面付きで解説します。
落ちてくる玉をタップして得点する2Dミニゲームを、Unity(C#)とXcode(Swift/SpriteKit)で全く同じに作成。iPhoneシミュレータで動かし、見た目・操作感・アプリサイズ(164MB vs 240KB)・起動・開発の手間を徹底比較。ゲームエンジンとネイティブの使い分けを結論します。
天気アプリ風を iOS(Swift)・Android(Kotlin)・Flutter(Dart) で全く同じに作り、制作手順・コード・見た目を比較。各シミュレータで何が検証でき何が実機必須か(Bluetooth・カメラ・位置情報・通信)も早見表に。
ライティング・影・反射のある3D空間でボールを発射し、積み上げた箱を物理で崩す——全く同じミニゲームをUnity(6000.4.5f1)とUnreal Engine(5.7.4)で作り徹底比較。Mac vs Windows(RTX3060)の実機FPS検証つき。
前編で読み込んだPLATEAUの東京・丸の内データをUnity向けに最適化します。約4万5千個のオブジェクトを1つに結合(Unity最大の軽量化)、デシメートでのポリゴン削減と見た目への影響、FBX/glTFの書き出し比較、そしてUnityで真っ白になったときのマテリアル再設定(テクスチャ抽出)まで、全3回シリーズの中編です。
BlenderのGeometry Nodesで広大なビル群を自動生成。グリッドに点を並べてビルを配置し、高さのランダム化・道路や空き地・窓のemissionまでノードで作成。最後は街を作り直さずローポリ昼→Cycles夜景へ変身させる手法と、窓表現の失敗や夜景の明るさ調整の試行錯誤まで紹介します。
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が愛に誤変換される」など日本語特有のハマりポイントも紹介します。
Unity ML-Agentsを使って強化学習エージェントを育ててみました。環境構築のハマりポイント(Python 3.10.12固定・grpcio・protobuf競合)から、RollerBallシーンの作り方、PPO学習の実測ログまで一部始終を記録しています。
GitHub Actionsを使ってCI/CDパイプラインを構築してみました。コードをpushするだけでテストとデプロイが自動で走る仕組みは、開発体験を大きく変えてくれます。
GPUなし・クラウドなし。Apple M4のMPS機能を使ってStable Diffusion 1.5をMacで動かしました。セットアップの落とし穴(lzmaエラー・黒画像問題)から、ステップ数比較・ネガティブプロンプト・CFG Scaleの実測まで徹底的に検証します。
Dockerとは何か、仮想マシンとの違いをわかりやすく解説。コンテナの仕組みからDockerfileの書き方、ParallelsやUTMとの使い分けまで、組み込み系エンジニア目線で紹介します。
組み込み系エンジニアがRustに入門!AndroidカーネルやWindowsへの採用で注目のRustを、C言語使いの目線で解説。所有権・借用・ライフタイムの概念からC言語との文法比較まで。
RAG(Retrieval-Augmented Generation)とは、LLMが知らない情報を外部ドキュメントから検索して補う仕組みです。OllamaのローカルLLM(llama3.2:3b)とnumpyだけで最小構成のRAGを実装し、実際に動かしてみました。
UnityのNavMeshを使って、プレイヤーを自動で追いかける敵キャラクターを実装します。NavMeshのベイク方法から、NavMeshAgentのC#スクリプト、ハマったポイントまで実体験を交えて解説します。
MCP(Model Context Protocol)はAIツールに「外の世界」をつなぐ仕組みです。Claude CodeでのMCP活用例を交えながら、エンジニア以外にも伝わるよう丁寧に解説します。
Blenderに組み込まれたPythonを使って、3Dモデルをコードで自動生成する方法を紹介します。ループで立方体をグリッド配置する基礎から、マテリアル設定・プロシージャルな塔の生成まで、実際に動かしながら解説します。
「Vibe Coding」というAIに自然言語で指示してコードを書かせる開発スタイルを実際に試してみました。メリットも多い一方、現実的な限界も感じた体験をエンジニア目線で正直にレポートします。
GitHub Copilot・Cursor・Claude Codeの3大AIコーディングツールを実際に使って比較!料金・特徴・得意なことを組み込みエンジニア目線でまとめました。
Pythonの画像処理ライブラリOpenCVを使って、グレースケール変換・エッジ検出・顔認識に挑戦!組み込みエンジニア目線で丁寧に解説します。
Claude CodeでUnityとBlenderを連携させようと試みたところ、軸の扱いの違いによる予期せぬ動作や、細かい修正を繰り返すうちにコンテキスト制限・5時間制限に到達するなど、いくつかの壁に直面しました。その実体験をまとめます。
UnityのURP(Universal Render Pipeline)でShader Graphを使ったシェーダー制作に入門しました。ノードベースで視覚的に作れるShader Graphで波紋エフェクトを実装する手順を紹介します。
BlenderのGeometry Nodesを使って、ノードを組み合わせるだけで複雑な3Dモデルを自動生成する方法を実際に試してみました。初心者でも取り組みやすい基本的な使い方から応用まで紹介します。
Claude CodeからBlender MCPとUnity MCPを使って、AIに3Dモデル生成やムービー制作を任せてみました。モルディブの水上コテージをBlenderで自動生成し、UnityでオープニングとエンディングムービーをC#スクリプトごと作ってもらった体験記です。
MediaPipeで取った顔・手のランドマークをUDPでUnityへ送り、アバターを動かした記録です。JSONで送る設計、別スレッドで送受信してフレーム落ちを防ぐ書き方、Unityのメインスレッド制約、顔の輪郭4点から向きを計算する方法、ブレンドシェイプでの表情反映、UnityからPythonを起動する仕組み、Blenderとの座標系の違いまでまとめています。
PythonのMediaPipeで顔・手・姿勢のランドマーク検出を試した記録です。現在のTasks APIの書き方を軸に、モデルファイル(.task)の渡し方、顔478点・手21点・姿勢33点の検出、表情の度合い52種類、Webカメラでの動かし方までをまとめ、削除された旧APIとの違いも対比しています。
Pythonの変数とデータ型、print関数とf文字列、条件分岐(match文を含む)、繰り返し、関数、クラスと継承までを1本にまとめました。インデントで書くブロック、リストと辞書とタプルの使い分け、selfの意味など、他の言語から来た人がつまずきやすい点も添えています。
C言語の開発環境の用意からHello World、変数・条件分岐・繰り返し・関数・配列、そして最大の関門であるポインタ、文字列操作、ファイル入出力、関数マクロ、ビット演算、動的メモリ確保、構造体までを1本にまとめました。ポインタは図で仕組みから説明し、配列の範囲外アクセスやmalloc/freeの対応など、つまずきやすい点も添えています。
プログラミングを始めるにあたっての言語の選び方、主要言語の特徴と使いどころ、習得の難しさの目安、VS Codeと実行環境の用意、Hello Worldの書き方、最初につまずきやすいエラーの原因までを1本にまとめました。