組み込みシステム開発は、20年前と現在とでどう変わったのか?
はじめに
組み込み開発の世界は、この20年間で劇的な変化を遂げました。2000年代初頭の開発現場と、2020年代半ばの開発現場を比べると、使用しているツール、開発者の働き方、そして「現場」と呼ばれる場所の意味までもが大きく変わっています。
かつて組み込みエンジニアは、実機を前にして波形を測定し、マイコンに直接命令を書き込んでいました。今では、ネットワーク経由で遠隔デバッグし、クラウド上のビルドサーバーで自動テストを回すことが当たり前になっています。同じ「組み込み開発」という言葉で呼ばれながら、その実態は20年前とはまるで別物です。
本稿では、過去20年間における組み込み開発の変化を、測定・デバッグ環境の変遷、開発ツールの仮想化、ソフトウェア構造の進化、エンジニアの働き方の変化 といった観点から整理し、なぜこの変化が起き、どこに向かっているのかを考察します。
ハードウェアツールの変化:測定器からシミュレータへ
20年前の組み込み開発の現場は、まるで理科実験室のようでした。机の上にはオシロスコープ、シグナルジェネレータ、ロジックアナライザが並び、開発者はそれらを駆使して「信号を見て、信号を出す」作業を繰り返していました。
当時は、センサ入力やモータ制御といった処理が主にアナログ領域で行われており、波形そのものを観測して挙動を理解するしか方法がありませんでした。したがって、測定器こそが開発の中心であり、デバッグツールでもあったのです。
しかし現在では、シグナルジェネレータを使う機会は激減しました。理由は明確です。
センサの多くがデジタル化され、CAN、LIN、Ethernetなどの通信プロトコルを通じてデータが伝わるようになったからです。これにより、「アナログ波形を生成して入力する」という物理的手段が不要になり、代わりに通信を模擬するシミュレータやHIL(Hardware-in-the-Loop) が活躍するようになりました。
つまり、「物理信号を再現する」から「通信プロトコルを再現する」へと進化したのです。今では実機テストの多くが、仮想環境上で実行されます。オシロスコープの役割も変化しました。波形解析の道具ではなく、物理層の最終確認――立ち上がり時間、ジッタ、ノイズなど、「ソフトウェアでは再現できない現実の境界」を確認するための道具として位置づけられています。
デバッグ環境の進化:ICEからOCDへ
2000年代初頭のデバッグ環境の主役は、ICE(In-Circuit Emulator) でした。ICEは、実際のマイコンをエミュレートする専用ハードウェアで、メモリ内容やレジスタ、命令実行をリアルタイムでトレースできました。
しかし、ICEには問題がありました。専用ソケットが必要で、チップごとに異なる高価な機材を使い分けなければならなかったのです。さらに、ソケット実装のために基板を改造しなければならない場合も多く、開発スピードやコストの面で限界を迎えていました。
やがて登場したのが、OCD(On-Chip Debug) です。JTAGやSWDといったインタフェースを通じて、実チップ自体を直接デバッグできるようになりました。この仕組みは、まさに「マイコンの中にICEを埋め込んだ」ような構造です。
OCDの登場は、デバッグ文化を根底から変えました。開発者はもはや専用ハードを必要とせず、ノートPCと安価なUSBデバッガ(J-Link、ST-Linkなど)があれば、量産チップそのものをデバッグできるようになったのです。
この変化により、組み込み開発は“ハードウェア主導の世界”から“ソフトウェア主導の世界”へと転換しました。ICEの時代は、ハード屋がプログラムを「覗かせてやる」構図でした。OCDの時代は、ソフト屋がチップを「自由に覗く」構図です。つまり、主導権がハードからソフトへ移ったのです。
開発環境の変化:デスクトップからクラウドへ
かつて、組み込み開発用のPCといえばデスクトップが当たり前でした。理由は単純です。RS-232Cポート(シリアルポート)が必要だったからです。UART通信でモニタプログラムを操作したり、デバッグログを取得したりするためには、物理ポートが備わったPCが欠かせませんでした。
しかし今では、ノートPCが開発の主流です。USB-UART変換器や仮想COMポートが一般化し、LANやWi-Fi経由でリモートシェルにアクセスすることも可能です。さらに、開発環境そのものがクラウドに移行しました。
ビルドやテストをクラウド上のサーバーで行い、CI/CDパイプラインで自動化する。このように、開発者のローカルPCは「端末」に過ぎなくなったのです。コード管理もGitリポジトリで統一され、成果物はクラウド上で共有される。もはや職場の物理環境は、開発の必須条件ではなくなりました。
20年前は「実機を触れないなんて仕事にならない」と言われていましたが、今では「実機を触らずに開発できるように設計する」ことが正しい姿です。テレワークが成立したのは、開発環境の仮想化が徹底されたからにほかなりません。
OSレス文化とクラウド文化の共存
興味深いことに、こうして開発環境がどんどん抽象化されている一方で、実行環境の多くはいまだにベアメタルです。
車載、産業機器、医療機器などの分野では、MMUを持たないマイコン上で、リアルタイム性を重視した制御を行う必要があります。このため、Linuxのような汎用OSを載せることは少なく、RTOSや完全なOSレス構成が今も主流です。
つまり、実行側は「20年前のまま」なのに、開発側は「2020年代のクラウド」です。このアンバランスな構造こそ、現代組み込み開発の特徴です。
開発者は、C言語でレジスタを直接叩く一方で、Dockerでクロスコンパイラを動かし、GitLab CIで成果物を自動配信します。実装はローレベル、運用はハイレベル――まるで二つの時代を同時に生きているような環境です。
アセンブルコードの衰退―高級言語とハードワイヤードの併用
20年前、組み込み開発ではアセンブリ言語が日常的に使われていました。性能を出すには、ハンドアセンブルで命令を並べ、パイプラインやレジスタの癖を把握して最適化するのが当然だったのです。特に信号処理やモータ制御など、周期精度が要求される分野では、人間が命令を手で最適化することが性能の鍵でした。
しかし今では、状況が一変しています。コンパイラ最適化が驚異的に進化し、命令スケジューリング、レジスタ割り当て、ループ展開、SIMD命令化など、かつて人間が手で行っていた最適化をツールが自動でこなすようになりました。
その結果、アセンブリコードは、IPL(初期化プログラム)やRTOSのコンテキスト切り替え処理など、ほんのわずかな領域にしか残らなくなりました。
一方で、信号処理の世界では、FPGAやASICによるハードウェア実装が一般化しています。かつてソフトで最適化していた領域を、今はハードで固定化(ハードワイヤード化) してしまう。高級言語でアルゴリズムを書き、ツールで論理合成して回路に落とし込む。つまり、手作業のアセンブル最適化は「ハードウェアによる並列化」に取って代わられたのです。
しかし、アセンブラの知識は依然として重要です。スタック破壊や最適化バグを解析するには、**生成されたアセンブリコードを読める力が欠かせません。**もはや「アセンブラを書く技術」ではなく、「アセンブラを読む技術」が必須の時代になりました。
働き方の変化:現場からクラウドへ
20年前、組み込みエンジニアは必ず“現場”にいました。実機を触り、LEDを確認し、波形を測りながら、
「動いた」「動かない」を自分の目で確かめるのが日常でした。
しかし今では、ビルドもテストもデバッグもクラウド経由で実行できます。リモートHIL装置や仮想ターゲット環境が整備され、実機への書き込みや検証を自動化できるようになりました。開発者は、自宅のノートPCでその結果を確認するだけです。
この変化によって、エンジニアは地理的制約から解放されました。分散チームによる同時開発が容易になり、CI/CDによって成果物が即座に全世界で共有される。組み込み開発は、もはや「現場仕事」ではなく「ネットワーク仕事」になったのです。
エンジニア像の変化:職人からシステム思考者へ
かつての組み込みエンジニアは、“はんだごてを握る職人”でした。電圧や波形を体で理解し、トランジスタの動作を直感的に把握する。そこにこそ「熟練の価値」がありました。
しかし現在のエンジニアは、物理よりも抽象を扱います。ハードを直接触るより、システム全体のデータフローを設計し、ソフトウェアとネットワークを通じて動作を最適化します。
つまり、“回路を理解する人”から“システムを設計する人”へと進化中なのです。ハードとソフト、現実と仮想、個人技とチームワーク。そのすべてを統合して考える「構造的思考力」が求められています。
まとめ
この20年間、組み込み開発は「物理中心の時代」から「仮想中心の時代」へと大転換を遂げました。
- シグナルジェネレータやICEといった測定器主導の時代は終わり、
シミュレータやOCDによるソフトウェアデバッグの時代へ。 - 実機を触ることが前提だった開発環境は、
クラウドビルドとリモートHILでどこでも動かせる環境へ。 - ハンドアセンブルに代表される手作業最適化は、
コンパイラやFPGAによるツール最適化に取って代わられた。
これらすべてが示すのは、エンジニアリングの重心が「物理」から「抽象」へ移ったという事実です
組み込みエンジニアは、もはや特定の機器をいじる人ではなく、「現実世界と仮想世界を橋渡しする設計者」となって来ているのです。
Discussion