使用する言語

組み込みソフト開発では、ハードウェアの制約やリアルタイム性、信頼性、長期的な保守性など、一般的なアプリケーション開発とは異なる観点でプログラミング言語が選ばれます。単に書きやすい言語を選ぶのではなく、「確実に動作するか」「長期間安心して使えるか」といった点が重要になるのが特徴です。

本記事では、組み込み開発で中心的に使われるC言語をはじめ、C++、Python、MicroPython、Javaといった代表的な言語について、それぞれの特徴や適した用途を解説します。

また、JavaScriptやRust、Ada、アセンブリ言語など、特定の用途で用いられる言語についても紹介し、組み込みソフトにおける言語選択の考え方を整理します。

組み込みソフト開発に使用されるプログラミング言語

C言語をはじめ、組み込み開発に適した9つの言語

組み込みソフトの開発では、対象となるハードウェアの制約や、リアルタイム性、信頼性、長期的な保守性などを考慮して、使用するプログラミング言語が選択されます。一般的な業務アプリケーションやWeb開発とは異なり、「どの言語が書きやすいか」だけでなく、「確実に動かせるか」「長期間安心して使えるか」といった点が重視されるのが特徴です。そのため、用途に応じてさまざまな言語が使用されますが、最もよく使われるのはC言語です。加えて、C++、Python、MicroPython、Javaも使われることが多く、この5つが組み込みソフト開発に用いられる代表的な言語と言えます。本記事では、この5つの言語について、それぞれの特徴や用途、メリット・デメリットなどを整理します。また、これらの言語以外にも、用途によって組み込みソフト開発に利用される言語として、JavaScript、Rust、Ada、アセンブリ言語についても紹介します。

本記事で紹介する9つの言語
C言語 組み込み開発における代表的な言語。家電や産業機器、車載システムなど、非常に多くの製品で使われている。
C++ C言語をベースとした「オブジェクト指向」言語。組み込みソフトでは、制御ロジックが複雑な装置や、長期間にわたって機能追加や改良を続ける製品での採用が多い。
Python 開発効率が高く世界的に人気の言語。産業用装置の操作パネルやスマート家電の画面付きリモコンといったユーザインタフェース(UI)開発で頻用。試作や実験、評価用の装置などにおいても有用。
MicroPython Pythonを小型のマイコン向けに軽量化したもの。電子工作や教育用途、簡単な制御装置などで使われる。
Java 汎用性や移植性が高く、用途が広い言語。組み込み分野では、家電の操作画面や業務用端末など、画面表示やアプリケーション処理をおこなう装置でよく使われる。
JavaScript 組み込み機器の画面表示やWeb技術と連携する部分で使われることがある。
Ada 医療機器や航空機、軍事分野など、高い信頼性が求められる分野において有用。
Rust 安全性を重視した設計の言語。現状、組み込み分野ではまだ普及していないが、高い潜在力を持つとされる。
アセンブリ言語 機械語に近い「低級言語」。かつてはアセンブリ言語を直接記述する方法でプログラムが作られていたが、近年では直接アセンブリ言語を記述することは稀。

C言語 ― 組み込み開発の中心となる言語

ハードウェアを制御しやすく、動作も軽い

C言語は、組み込みソフトの世界で最も広く使われている言語です。家電や産業機器、車載システムなど、非常に多くの製品においてC言語で書かれたソフトが動いています。その理由の一つは、ハードウェアを細かく制御しやすい点にあります。C言語では、メモリや装置内部の状態を直接扱うことができるため、センサの読み取りやモータ制御のような処理を無駄なく実装することが可能です。動作が軽く、必要とするメモリ量が少ないこともC言語の大きな特徴です。性能や資源に余裕のない小さな装置でも使いやすく、動作のタイミングを予測しやすいことから、安全性や信頼性が求められる分野でも重宝されます。加えて、すでに長年組み込みソフト開発に使われてきたために資産が膨大ということも、C言語が選ばれやすい理由の一つと言えるでしょう。

難易度が高く、経験が求められる

一方で、C言語は難易度が高く、習得するのが簡単ではない言語とも言われます。そしてメモリを直接制御することができるため、操作を誤ると不具合を起こしやすく、プログラムの規模が大きくなると構造を保つのが難しくなるという面もあります。そのため、経験や設計力が求められる点は注意が必要です。

C++ ― Cの性能を保ちつつ、構造化しやすくした言語

「オブジェクト指向」のため、大規模なソフトと高相性

C++は、C言語をベースとしてより便利になるように拡張された言語です。Cの持つ高速性やハードウェアへの近さを保ちながら、「オブジェクト指向」(=モノ(オブジェクト)ごとにひとまとまりと捉える)の考え方などを取り入れることで、より整理された書き方ができるようになっています。プログラムを部品の集まりとして構成しやすく、大規模なソフトでも見通しを保ちやすいのが特徴です。

便利な機能を適切に使うことが重要

組み込みソフトでは、制御ロジックが複雑な装置や、長期間にわたって機能追加や改良を続ける製品においてC++が採用されるケースも多くなっています。ただし、便利な機能(標準ライブラリや動的メモリ管理など)を使いすぎると、処理が重くなったり、動きが分かりにくくなったりすることもあります。そのため、組み込み開発では、C++の機能をどこまで使うかを慎重に検討しながら利用することが一般的です。

Python ― 開発効率を重視した言語

開発効率が高く、UI開発など幅広く使われる

Pythonは、短いコードで分かりやすく書くことができ、開発効率が高い言語として知られています。近年世界的に人気のある言語としても有名で、Webアプリケーションやスマホアプリ、データ分析など、さまざまな用途で使われています。組み込みソフトの分野では、産業用装置の操作パネルやスマート家電の画面付きリモコンといったユーザインタフェース(UI)の開発でよく使われます。また、開発のプロセスで重要となる試作や実験、評価用の装置などにおいても有用です。プログラムを書いてすぐに動かせるため、動作確認を素早くおこなえる点が大きな魅力です。

リアルタイム制御には不向き

一方、処理速度やメモリ使用量の点ではCやC++に比べて不利な面があります。そのため厳しい時間制約があるリアルタイム制御や非常に小さな装置には向いておらず、そうした用途でPythonが使われるケースは多くありません。

MicroPython ― 小さな機器向けのPython

低リソース環境にも対応する

MicroPythonは、Pythonを小型のマイコン向けに軽量化したものです。メモリ容量が限られているなどの低リソースの環境でも、Python同様に直接ハードウェアを制御したりできるのが特徴です。電子工作や教育用途、簡単な制御装置などで使われることが増えています。Pythonと似た書き方でプログラムを書けるため、初心者でも比較的取り組みやすいこともメリットと言えます。

自由度は大きくない

ただし、使える機能は制限されており、処理性能や安定性の面ではC言語ほどの自由度はありません。そのため、製品として大量生産される機器よりも、試作や学習、比較的単純な制御用途での利用が中心となります。

Java ― 安定性と移植性を重視する場合に

プラットフォームに依存せず、エラーも起きにくい

Javaは、異なる環境でも同じように動くことを重視して設計された言語です。プラットフォームに依存せず、汎用性や移植性が高いため、さまざまな分野の開発現場で使われています。組み込み分野では、家電の操作画面や業務用端末など、画面表示やアプリケーション処理をおこなう装置で使われることがあります。特にAndroidを搭載した装置では、ユーザインタフェースやアプリケーション部分にJavaがよく用いられます。また、大規模なソフトでも管理しやすく、エラーが起きにくい仕組みが整っている点も特徴です。

小さなマイコンには不向き

その一方で、実行にある程度の計算資源を必要とするため、小さなマイコンには向きません。リアルタイム性が厳しい制御よりも、表示や通信、業務処理といった用途で選ばれることが多い言語です。

用途に応じて使われるその他の言語

このほかにも、用途や目的に応じて組み込みソフト開発で使われる言語があります。ここではJavaScript、Ada、Rust、最後にアセンブリ言語の4つを紹介します。

JavaScript、Ada、Rustの特徴と用途

JavaScriptは、組み込み機器の画面表示やWeb技術と連携する部分で使われることがあります。Adaは、広く一般的に使われる言語ではありませんが、高い信頼性が求められる分野において有用で、医療機器や航空機、軍事分野などにおいて使われています。そして2010年代に開発されたRustは、安全性を重視した設計で知られる言語です。まだ組み込み分野で普及するには至っていないものの、その潜在力から今後の発展が期待されています。

他の「高級言語」に対して、「低級言語」と呼ばれるアセンブリ言語とは

最後に、機械語に近い言語として、アセンブリ言語を紹介します。ここまで紹介してきた言語は、「高級言語」と呼ばれます。それに対してアセンブリ言語は「低級言語」と呼ばれます。「高級」とは「人間にとって理解しやすい(がCPUは直接読むことはできない)」ということで、「低級」は「CPUが直接理解することができる(が、人間にとっては理解しにくい)」ということです。高級言語で書かれたプログラムは、コンパイルという作業によって低級言語であるアセンブリ言語に変換され、CPUが理解できる状態でメモリに格納されます。このアセンブリ言語を読み込むことでCPUは決められた動作をすることができます。高級言語が発達する以前は、アセンブリ言語を直接記述する方法でプログラムが作られていました。近年ではさまざまなプログラミング言語が発達したため、直接アセンブリ言語を記述することは稀で、一般的には高級言語によるプログラムを人間がおこない、それをコンパイラというソフトウェアでアセンブリ言語に変換して使用されています。

目的と制約を見極めて言語を選ぶことが大切

組み込みソフトで使われるプログラミング言語には、それぞれ得意分野があります。どれが優れているかではなく、どの装置で、何を実現したいか、また、今までの資産としてどのようなものがあるかによって最適な言語は変わります。現場では複数の言語を組み合わせて使うことも珍しくありません。目的と制約を見極めながら言語を選ぶことが、良い設計への第一歩となります。

組み込みソフトの世界 トップへ戻る