ノンホー! どうもこんにちは、きにゃです。
製造業で働く現役サラリーマンのエンジニアです。
入社以来約20年、組み込みソフトウェアの仕事に従事してきました。
現在も組み込みソフトウェアの上流工程部分の仕様設計や、プロジェクトマネージメントを担当しています。
そもそも組み込みって何?っていうところから説明することになるのですが、実は、組み込みというのは、非常に範囲が広く、定義がとても曖昧なんです。
Microsoft IMEの変換結果からして、「組み込み」だったり、「組込み」だったり、「組込」だったりします。どれを使うのが正解ということは無いのですが、記事中では、「組み込み」で統一することにします。
組み込み系とは
今の会社に就職するまでは、組み込みなんて言葉は知りませんでした(笑) でも、あなたの身の回りは組み込み系でいっぱいですよ。
大概の電化製品は組み込み系です。冷蔵庫、洗濯機、エアコン、テレビ、などなど。どれかは持っていますよね。
これらの製品は、マイコンと呼ばれる小さなコンピュータが内蔵されていて、マイコンの中でソフトウェアが実行されています。
このソフトウェアの実行によって、製品の様々な機能を実現しています。これが、組み込み系の特徴です。
では、PC(パソコン)は、どうでしょう? PCは組み込み系とは言いません。
これは、組み込み系が特定の用途(例えば、ご飯を炊くとか)向けの製品を指し示すのに対して、PCは汎用性を持った製品だからです。
組み込み系の製品を組み込みシステムと呼び、組み込まれるソフトウェアを組み込みソフトウェアと呼びます。
組み込みソフトウェアを開発する人を、組み込みエンジニアと呼びます。それぞれについて、詳しく説明します。
組み込みシステム
電気で動く製品のほとんどが組み込みシステムと言っても過言ではないくらいです。具体的例を表にまとめました。
白物家電 | 冷蔵庫、洗濯機、エアコン、炊飯器、電子レンジ など |
AV機器 | テレビ、ビデオ、レコーダー、デジタルカメラ、デジタルオーディオ機器 など |
運輸・航空・宇宙 | 自動車、カーナビ、エレベータ、航空機、船舶、宇宙船、人工衛星 など |
産業・医療・工業機械 | POSレジ、自動販売機、医療用機器、プラント制御、工業用ロボット、など |
現実世界のリアルな機器の動作や機能が、中に組み込まれたマイコン上で実行されるソフトウェアによってコントロールされる点が組み込みシステムの特徴です。
あまり認識されてませんが、電機メーカー、自動車メーカーなどの大手製造業のほとんどが、組み込みシステムの開発を行っているのです。
では、組み込みシステムでは無いものも紹介しておきます。
- PC・スマホ上で動作するアプリケーションソフト
- 懐中電灯、スピーカ
- アナログオーディオ機器、アナログ目覚まし時計
- 電動工具、一般的な照明器具
などです。
組み込みソフトウェア
組み込みソフトウェアは、処理自体はそれ程複雑ではありませんが、PC上で実行されるアプリケーションソフトと比べるとかなり異質です。
まず、始まりがmain( )関数から始まるのでは無く、もっと前のマイコン(PCでいうところのCPU)の電源が入った瞬間の処理から作成します。
そんなわけで、マイコンのスタートアップルーチンをゴリゴリ書くわけです。大体、マイコンのマニュアルとにらっめこして、お作法を守りながら作っていきます。
この辺は、レジスタとかスタックポインタ、ベクターテーブルとかバリバリにいじるので、アセンブラが登場してきます。
そして、組み込みシステムのマイコンは、製品コストの制約から、必要最低限の処理性能やメモリー容量しか備えていません。
こうしたマイコンのリソースを意識したソフトウェアを作成するために、ほぼ全ての開発でC言語が使われます。
また、製品に組み込まれたソフトウェアはほとんどの場合簡単に更新することが出来ないので、非常にシビアな品質、バグのない開発が求められます。
組み込みエンジニア
組み込みエンジニアは、組み込みソフトウェアを開発するのですが、そのソフトウェアは製品であるハードウェアを動かすものです。
したがって組み込みエンジニアは、マイコンや電気・電子回路といったハードウェアの知識が必要となります。
ソフトウェアの開発は、PC上で行いますが、最終的な動作確認は、製品であるハードウェアを用いて行う必要があります。
動作に何か問題が起きた場合などには、やはりハードウェアの知識が無いと、ソフトウェアが原因なのかハードウェアが原因なのかの切り分けが困難になります。
ソフトウェア・ハードウェア両方の知識が必要になるということもあって、組み込みエンジニアは人材不足の状況が長年続いています。
組み込みエンジニアに向いている人
- ロボットや自動車のようなハードウェアに興味がある人
- C言語やアセンブラが苦にならない人
- ソフトウェア作成⇒製品で動作確認というサイクルをコツコツまわせる人
組み込みエンジニアに向いていない人
- PC・スマホや、インターネット上でサービスを開発したい人
- デザイン性に拘りたい人
- 最新技術を取り入れて開発速度を重視したい人
組み込みエンジニアの仕事について
組み込みエンジニアの仕事の範囲は、はっきり言ってかなり広いです。
組み込みエンジニアの仕事と、そのやりがいについて解説します。
組み込みエンジニアの仕事内容
組み込みソフトウェア開発でしばしば用いられるウォーターフォール型の開発は次のような流れで行われます。
- Step.1ソフト要求分析
要求仕様書を分析してソフトウェアとして必要な機能や性能などを把握する
開発手法、開発スケジュール、開発コストなどを見積もる - Step.2ソフト基本設計
ソフトウェアの機能をいくつかのサブ機能に分割する
サブ機能間のインターフェイスなどの設計を行う - Step.3ソフト詳細設計
サブ機能をさらに詳細なモジュールに分割し
モジュール機能を具体的に設計する - Step.4実装(コーディング)
ソフト詳細設計に基づきコーディングを行う
作成したプログラムを管理する - Step.5単体テスト
作成したプログラムのモジュール単体が機能を満たすかどうかテストする - Step.6結合テスト
モジュールを結合して、サブ機能やソフトウェア全体として
正しく動作するかテストする - Step.7総合テスト
製品環境において、ソフトウェアが要件どおりに動作するかテストする
この一連の流れを全て一人で行うこともあるし、複数人で分担して行うこともあります。
一連の流れの中で、最も時間をかけて行うのがテストで、その次がソフト要求分析~ソフト詳細設計のステップです。
この流れの中で、コーディングを行う時間の割合は、わずか20%程度にとどまります。ほとんどが、設計ドキュメントのアウトプットであったり、テストデータの取得や解析であったりというわけです。
組み込みエンジニアは、ハードウェア設計者とのコミュニケーションも欠かせません。そのため、コミュ力もそれなりに必要です。
また、近年は、マイコンをコストの安い海外から調達することも多くなってきました。その場合、マニュアル類は基本的に英語仕様となります。
そのため、技術的な単語の意味が理解できる程度の英語力を身に着けていることが要求されるシーンが多くなりつつあります。
組み込みエンジニアの仕事のやりがい
スマホやPC上での動きではなく、現実に存在するモノを狙った通りに動作させるのは、組み込みエンジニアにしか味わえない醍醐味と言えます。
自分で設計した制御や、開発したソフトウェアが、世の中に製品として広まって、消費者や利用者の方に喜んでいただけたときは、組み込みエンジニアとして何事にも代えがたい瞬間です。
プロジェクトが終盤に差し掛かり、いよいよ製品がリリースされる際には、まるで我が子を送り出すような気持になります。
一方で、組み込みシステムは、一歩間違えれば人命にかかわるようなシーンで利用される場合もあり、特に製品やそこに組み込まれるソフトウェアに関しては厳しい品質が求められます。
求められる高い要求水準へのチャレンジと、それを達成した際に得られる利用者の喜びや笑顔が仕事を支えています。
まとめ
今後AI(人工知能)を使った自動運転技術や、IoT(Internet of Things)の拡大に伴って、組み込みエンジニアのニーズは高まると予想されます。
Pythonなども学習して、エンジニアとしての市場価値を高めておくことで、この先も長きに渡って戦って行けそうですね。
組み込みエンジニアを目指される方や、組み込みエンジニアに興味を持たれた方の参考になれば幸いです。
コメント