組み込み開発にAIを活用して感じたメリットと限界|ChatGPT・Codexの実践例

開発・デバッグ

AIを使うと、組み込み開発はどれくらい効率化できるの?
AIが生成したプログラムって、そのまま使っても大丈夫?
AIが発達しても、組み込みエンジニアの経験や技術は必要なの?

この記事では、こうした疑問や不安について、実際にChatGPTとCodexを組み込み開発に活用している経験をもとにお答えします。

AIは積極的に導入するべき

まず結論としては、開発にAIを導入したことで、大幅な効率化が期待できます。

使い方は、プログラムの作成だけに限らず、

  • プログラムの実装方法の検討
  • エラーや不具合の原因調査
  • マイコンや開発環境の仕様確認
  • 技術的な問題に対する解決策の検討
  • 既存のプログラムの読み解き

など開発全般に使えます。

以前であれば、インターネットで情報を検索し、複数の技術記事や公式ドキュメントを読み比べながら解決策を探していましたが、AIがそれを代替してくれる感じです。

特に便利だと感じるのは、自分が原因を特定できていない段階でも、解決につながる手掛かりを提案してくれることです。

AIの回答が常に正しいとは限らず、すごく遠回りをさせられることもありますけど、まあ速いですね。

いや、けど実際使ってみたら微妙なんだけど?

と感じる方もいるでしょう、もし無料版で試みているなら有料にしてみてください、性能が全然違います。

私のCodexの使い方

Codexを利用していますが、原則としてソースコードを出力してもらうものの、直接ファイルを編集させないようにしています。

その理由は、AIが提案した変更内容を自分自身で理解し、納得したうえで反映したいからです。

githubで差分見れるし、直接編集でいいじゃん

先輩の皆さんはどうやってるか分かりませんが、私はソースコード読んで書いて全体を理解しておきたい派なので、勝手にコード変えてほしくないんですよね。

一見うまくいったとしても、長時間動作させると、codexの書いたコード部分で思わぬエラーにはまることがあり、時間がかかったとしてもコードへの反映は自分でやりたいです。

最終的に製品の品質に責任を持つのは開発者自身だし、AIが作ったところなんで、何て言えるわけないのでね。

そのため、私はAIに修正案を提案してもらい、その内容を確認したうえで、自分でソースコードに反映する方針にしています。

AIによって最も効率化したのは不具合の原因調査

組み込み開発でAIを使うようになって、特に大きな変化を感じているのは、プログラムの不具合を解決するまでの時間です。

もちろん、AIによってコードを書く作業そのものも効率化しています。

しかし、それ以上に恩恵を感じるのは、原因がなかなかわからない不具合に遭遇したときです。

ESP32のウォッチドッグ問題を半日程度で解決

実際に、ESP32を使った開発で、電源立ち上げ後に存在しないウォッチドッグタイマーのオブジェクトを削除しようとして再起動を繰り返す問題に遭遇したことがあります。

ウォッチドッグタイマーは、プログラムが正常に動作しなくなった場合などに、その異常を検出するための仕組みです。

一般的には、長時間処理を占有していないか、タスクの実行状態に問題がないかなどを確認することになりますが、今回遭遇した問題は、通常のアプリケーションコードを確認するだけでは原因にたどり着けないものでした。

ネットで調べて、データシート見て、単機能にコード改造して、レジスタ情報出力して…原因が分かるまで何度も小さく変更して結果見て、を延々と繰り返さないといけません。

ところが、AIに問題の状況を伝えて調査を進めたところ、ESP-IDFのより低いレイヤーにある、物理層に関係する設定を変更する、という類似事例やその設定を手掛かりに、半日程度で解決しました。

もしAIを使わず、自分一人で原因を調査していたら、1週間程度はかかっていたのではないかと思います。

こりゃAIに勝てないわ、と思った瞬間ですね…

原因調査に必要な時間を大幅に短縮できることは、大きなメリットです。

AIによって設計や実機検証が不要になったわけではない

AIによる設計や実機検証に必要な時間については、私自身、それほど変わっていないと感じています。

組み込み開発では、ソフトウェアだけでなく、ハードウェア依存の可能性もあります。

例えば、I²C通信でセンサーからデータを取得できない場合、次のような原因が考えられます。

  • プログラムの設定が間違っている
  • I²Cアドレスが間違っている
  • 信号の電圧レベルが適切でない
  • プルアップ抵抗に問題がある
  • 通信波形が正常に出力されていない

AIは原因の候補を提案できますが、実際にどのような信号が出ているかまでは、測定結果を与えなければ判断できません。

そのためテスターやオシロスコープなどの測定器は、AIが発達した現在でも必須です。

AIは原因を考えるうえで強力な道具ですが、実機で何が起きているのかを確認する作業はずっと残るでしょう。

AIは単機能の実装が得意だが、システム全体の例外処理には課題がある

現在のAIは例外処理まで対応するには至っていないです。

単機能の機能を実装することには非常に優れていますが、複数の機能が組み合わさったときに、システム全体を俯瞰して必要十分な例外処理を実装することは、まだ難しいと感じています。

測定値をWi-Fiで送信する場合を考える

例えば、センサーで測定した温度を、Wi-Fi経由でサーバーに送信するシステムを考えてみます。

正常に動作しているときの処理は単純です。

  1. センサーから温度を取得する
  2. 取得した測定値をWi-Fiで送信する
  3. サーバーで測定値を受信する

しかし、実際の製品では正常な状態だけを考えていればよいわけではありません。

例えば、
・Wi-Fiでデータを送信するタイミングで、まだセンサーの測定が完了していない
・センサーの測定に失敗した

さらに、測定処理とWi-Fi送信処理が別々に動作している場合、測定値を更新している途中に送信処理が実行される可能性もあります。

このような状況では、測定処理もWi-Fi送信処理も、それぞれ単独では正常に動いていても、組み合わせたときに不具合が発生することがあります。

組み込み開発で難しいのは、こうした複数の処理が重なるタイミングで発生する不具合です。

AIに例外処理を洗い出してもらったこともある

以前は、AIに対して「このプログラムで発生し得る不具合や、必要な例外処理を洗い出してほしい」と依頼することもありました。

しかし、実際に提案された内容を見ると、必要な例外処理が不足していたり、反対に冗長な処理が追加されていたりすることがありました。

例外処理は、多く実装すればよいというものではありません。

例えば、センサーから測定値を取得できなかった場合でも、製品によって適切な対応は異なります。

前回取得した値を使ってもよい場合もあれば、測定値が取得できるまで待つべき場合もあります。測定失敗を通知する必要がある製品もあるでしょう。

これらの判断には、製品の仕様や使用環境を理解する必要があります。

また、不要な例外処理を増やすことで、プログラムが複雑になり、かえって別の不具合を生む可能性もあります。

こうした経験から、現在はAIに例外処理の洗い出しを一括して依頼することはなくなりました。

もちろん、AIの性能は今後も向上していくでしょう。

ただ、少なくとも私が実際に使用している現時点では、個別の機能の実装や不具合の解決には非常に強い一方、システム全体を俯瞰した品質の作り込みには課題があると感じています。

AI時代だからこそ、不具合につまずく経験が重要になる

品質を確保するために、起こり得る問題を事前に想像できる能力が重要です。

そして、その能力を身につけるうえで役立つのが、過去に不具合につまずいた経験です。

例えば、以前にセンサーの測定値が更新される前に送信されてしまう不具合を経験していれば、次に同じようなシステムを開発するとき、測定処理と送信処理のタイミングを意識するようになります。

通信が突然切断される不具合を経験していれば、通信が切れたときの動作を事前に考えるようになります。

こうした経験は、一つひとつのプログラムを書く技術とは少し異なります。

「こういう場合はどうなるだろう?」と、正常ではない状態を想像できることが重要なのだと思います。

AIを使えば、以前よりも短時間でプログラムを作成したり、不具合を解決したりできます。

しかし、AIが提案した修正をそのまま反映するだけでは、なぜ不具合が発生したのかを十分に理解できないかもしれません。

だからこそ、これから組み込み開発を学ぶ人には、早いうちにさまざまな不具合を経験してほしいと考えています。

AIの助けを借りて解決すること自体は、まったく問題ありません。

大切なのは、解決策だけを知るのではなく、なぜその問題が起きたのか、どうすれば防げたのかを理解することです。

その経験の積み重ねが、将来の開発で不具合を未然に防ぐ力につながると思います。

まとめ

  • AIは積極的に活用するべき! コーディングだけでなく、技術調査や不具合の原因究明にも非常に有効。
  • 特にデバッグの効率化は大きい! 自力では1週間かかりそうな問題を、AIの活用によって半日程度で解決できたことも。
  • AIが生成したコードを鵜呑みにしない! 提案された処理を理解し、納得したうえで採用することが重要。
  • 実機検証は今後も必要! テスターやオシロスコープを使い、実際の電圧や信号波形を確認することは欠かせない。
  • AIは単機能の実装が得意! 一方で、複数の機能が連携する際の例外処理や、システム全体の品質保証にはまだ課題がある。
  • 不具合につまずく経験を大切に! さまざまな失敗を経験し、原因を理解することが、将来の不具合を予測・防止する力につながる。

今回は、AIを組み込み開発に活用して感じたメリットと限界について紹介しました。

これからの組み込みエンジニアには、AIを使いこなす能力に加えて、システム全体を俯瞰し、起こり得る不具合を想像できる経験と技術が、ますます重要になると考えています。

KUMITATE

読むだけでなく、
実際に動かして学びませんか?

クミタテは、組み込み開発や電子工作を 実践しながら学べる学習プラットフォームです。 ESP32を使ったプログラミングから、電子回路、センサー、 通信、基板設計まで、自分のペースで学習できます。

  • 無料で学べる実践的な教材を掲載
  • すぐに試せるサンプルプログラム付き
  • Googleアカウントですぐに登録可能
クミタテに無料登録する
開発・デバッグ
スポンサーリンク