組み込みソフト開発にCI/CDやコンテナを活用、IaCで開発基盤を最適化組み込み開発環境

組み込み機器のIoT化やコロナ禍によるリモートワークへの対応などによって、組み込みソフトウェアの開発基盤の新たなトレンドへの移行が加速している。さまざまなコーディング規約への対応で高い評価を得てきた、テクマトリックスが販売するテストツール「C++test」は、最新バージョンの「2021.2」でこれらのトレンドに対応する新機能を搭載した。

» 2022年03月08日 10時00分 公開
[PR/MONOist]
PR

 近年、組み込み機器の開発で強く求められているのがIoT(モノのインターネット)化への対応である。これまでスタンドアロンで用いられることが当たり前だった組み込み機器はコネクテッドデバイスに変化しており、インターネット経由で外部に接続するのが当たり前になりつつある。セキュリティへの対応は当然必要であり、ソフトウェア開発の現場で言えばCERT(Computer Emergency Response Team)やCWE(Common Weakness Enumeration)といった、セキュアなコーディングによって安全性を高めることは必須になりつつある。

 その結果として開発対象は複雑化/大規模化しており、手作業によるコーディングのチェックや単体テストの実施は現実的とはいえず、適切なツールを活用する必要が出てきている。特にこの傾向が顕著なのが自動車向けの組み込みソフトウェア開発だ。そもそも開発規模が非常に大きい上に、MISRA(Motor Industry Software Reliability Association)やAUTOSARといった自動車関連のコーディング規約では静的解析ツールを使って検証を行うことが求められており、自動車業界はいち早く対応してきた。現在は、こうした流れが他の業界向けの組み込み機器にも次第に押し寄せてきているのである。

CI/CD環境の利用拡大とリモートワーク対応

 これらの開発の大規模化に伴って利用が広がっているのがCI/CD(Continuous Integration/Continuous Delivery:継続的インティグレーション/継続的デリバリー)環境である。テクマトリックス ソフトウェアエンジニアリング事業部 ソフトウェアエンジニアリング技術部 ソフトウェエンジニアリング技術1課 課長代理の藤澤克貴氏は「エンタープライズやWeb系のシステム開発では既に常識となっているCI/CDですが、組み込み機器の開発でも自動車向けなどは既にCI/CDといった自動化は当たり前になってきています。近年では、その他の組み込み業界でも浸透が始まっているのです」と語る。

 さらには、長く続くコロナ禍によって、リモートワークや在宅勤務などで職場から物理的に離れた場所での開発が避けられなくなってきた。この場合、これまで当たり前のように行っていた、手元に実機を置いての開発やテストが物理的に不可能になるため代替する開発手段が必要になってくる。

 なお、このリモートワークにおける組み込み機器開発では、実機の有無だけでなく、開発環境で用いられるクロスコンパイラやIDEなどのライセンスの問題も出てくる。しばしばこれらのツールは、特定のPCにインストールしていたり、USBドングルをライセンスキーとして利用していたりするため、リモートワークで組み込み開発を行うときの足かせになっているという問題もあった。

IaCによって開発環境を全社横断で一気に展開

 コロナ禍が引き続く中で、これらの問題に対応できている企業とできていない企業の格差が拡大しつつある。先進的な企業では、例えば、開発ホストのLinux移行、Dockerを用いた開発環境のコンテナ化、Visual Studio Code(VS Code)など軽量なIDE(統合開発環境)での開発、これらを利用してのCI/CDまで含めた開発基盤の構築を進めるとともに、IaC(Infrastructure as Code)と呼ばれるような形でより最適な自動化環境を整備するための取り組みが広がっているのだ。

 このIaCでは、開発者本人が開発基盤を用意するのではなく、全社横断で一気に展開する専任チームがまとめて行うのが一般的だ。藤澤氏は「この専任チームに積極的に投資を行い、開発基盤の構築を一元化することで、これまで開発者が開発環境の構築に費やしていた負荷を減らせます。また開発チームが独自に自動化などの開発基盤を用意するといった負荷も減ります。結果として、開発者はプログラミングに専念できますし、経営陣にとっても、開発者が製品価値の向上に注力できる環境を作れるというメリットがあります」と説明する。

 このような先進的な体制構築に取り組んでいる企業は、コロナ禍に伴うリモートワークにも比較的スムーズに対応できており、現在もソフトウェア開発においてそれほど大きな支障が起きていない。その一方で、旧来の手法で組み込みソフトウェア開発を行っている企業は、リモートワークを十全に行えず一定程度の出勤が必要になるため、コロナ禍にまつわる不必要なリスクが避けられない状況に直面している。

C/C++言語向けテストツールとしての総合力で高い評価を得る「C++test」

 これらの問題解決の第一歩になるのが、テクマトリックスが提供する「C++test」である。C++testは、C/C++言語向けの静的解析・単体テストツールであり、MISRAやAUTOSAR、CERTやCWEといったさまざまなコーディング規約のチェックや、単体テストケースの作成、カバレッジ計測が可能なオールインワンテストツールである。ソフトウェア品質の向上に必要なさまざまな機能を搭載していることから、特にミッションクリティカルな開発を必要とする自動車業界で広く利用されている。

 テクマトリックス ソフトウェアエンジニアリング事業部 ソフトウェアエンジニアリング営業1部 ソフトウェアエンジニアリング営業1課 課長代理の岩淵敏之氏は「他にも、産業機器向けの機能安全規格であるIEC 61508や、医療機器向けのFDA(米国食品医薬品局)規格など、さまざまな業界の規格対応を支援するための機能も用意しており、自動車業界にとどまらない形で組み込み機器のソフトウェア開発で利用されています」と強調する。

 また、解析精度、MISRA Complianceへの対応、C/C++の言語規格対応の追従、独自ルールの作成、カバレッジ向上のための支援機能など、C++testが評価を得ているポイントは多数ある。ソフトウェアテストの領域で必要とされている機能をこれほど広くカバーできるツールはあまりないと言っていいだろう。

組み込み機器開発環境の新たなトレンドに対応する新機能を追加

 2022年2月には、C++testの最新版となる「2021.2」の国内販売開始が発表された。岩淵氏は「2021.2では、さまざまなコーディング規約への対応をさらに拡充するとともに、組み込み機器開発環境の新たなトレンドに対応するための機能を大きく2つ追加しました」と述べる。

 1つは、インストール方式の変更である。これまで、Windowsならインストーラー実行、LinuxならShell Scriptなどを使ってインストールする必要があったが、この場合開発者が自身の利用する環境に手動でインストールを行う必要がある。コマンドによるサイレントインストールも可能だが、ツール固有のコマンドやオプションを指定する必要があるためシンプルなデプロイ方法とはいえない。そこで2021.2では、配布方式をzipやtar.gz形式に変更。解凍のみでインストールが完了するため自動インストールやDocker環境へのデプロイが非常に容易になった。

 もう1つは、クラウドベースのCI/CD環境との統合である。これまでもJenkinsをはじめとするCI/CDプラットフォームでスクリプトを記述しての自動実行は可能だったが、2021.2からは、GitHub、GitLab、Azure DevOpsという3つのプラットフォームとのシームレスな統合が可能になった。これにより、簡単にC++testによるテストをCI/CDのPipelineに組み込めるようになった。さらにSARIFやSASTの形式でレポートを生成できるようになり、使い慣れたインタフェースで静的解析の結果を確認できるようになった。

 例えば、Dockerコンテナ上に構築した開発環境でGitHubと連携する事例を見てみよう。開発者がGitHubから最新のソースコードをプルし、フューチャーブランチを作った上で変更を行い、それをプッシュするケースである。

コンテナ上に構築した開発環境でGitHubと連携する事例 ここではC++testのみを行うイメージで説明しているが、Pipelineの実装次第で通常この前に行うビルド確認や、単体テストまで含めて自動で行える[クリックで拡大]

 ここでは、GitHub Actionsを使ってC++testの実行やSARIF形式レポートの登録をPipelineに実装している。GitHub Actionsを用いることで、簡単にかつ汎用性の高い実装が可能だ。GitHubからC++testが動作するマシンに通知を行い、C++testを実施して、その結果をGitHubに返すことで、GitHub側で「テストに通ればマージ許可、失敗したらマージ拒否」という一連の処理が可能になる。C++testの結果はGitHub側でも、IDEとして利用しているVS Codeからインポートしても参照できる。

GitHub Actionsを使ってPipelineに実装 変数iの範囲を静的解析した上で、配列を超える可能性があることを指摘している。これはC++testの出力だが、これをGitHubのCode scanning alerts上でも確認できる[クリックで拡大]
開発者のVS Codeの画面におけるエラー表示の例 開発者のVS Codeの画面におけるエラー表示の例。VS CodeのC++test拡張機能を使用するとGitHubから結果をインポートすることができる。もちろん、VS Code上で静的解析を実行することも可能だ[クリックで拡大]

 これら一連の作業が優れているのは、VS Codeの中からソースをGitHubにプッシュするだけで後は全て自動で実行される点になるだろう。この事例は、開発者のローカルマシン上にGitHub Actionsを飛ばしているが、これはC++testがローカルマシンで動いているからであり、実際の開発環境ではC++testを稼働する別のサーバを用意して、そこで一元的に動かすといったことも可能である。この辺りは、実際の利用環境に合わせて環境整備の専任チームの作業ということになるだろう。

従来の開発手法ではいずれ行き詰まりが生じる

 これまで組み込み機器向けの開発と言えば、開発者が自身で環境を構築し、足りない部分はLinuxならShell Script、Windowsならバッチファイルを作ってカバーするといった形が一般的だった。しかし、リモートワーク対応や開発の大規模化などを考えると、そうした従来の開発手法ではいずれ行き詰まりが生じるのは目に見えている。

 もし、従来の開発環境や開発プロセスからの脱却を目指しているのであればこの機会にC++testの導入を検討してみるべきだろう。C++testが全ての問題を解決するわけではないが、組み込みソフトウェア開発の新たなトレンドを取り入れるために、C++testが提供する機能は大いに役立つはずだ。

 また、幸いなことにテクマトリックスはC++testの提供だけでなく、ソフトウェア開発基盤構築ソリューションという形で、現状や将来のニーズに合わせたCI/CD環境の構築やクラウドプラットフォームの導入を支援する事業も行っている。同事業は、テクマトリックスが手掛けるC++testをはじめとするさまざまな開発支援ツールに加え、それらの取り扱い製品にとどまることなく顧客の求める自動化を支援するためのソリューションを提供していることが最大の特徴になっている。リモートワークへの対応を含めて、開発環境の刷新が必要と感じている方は一度テクマトリックスに相談をしてみてはいかがだろうか。

Copyright © ITmedia, Inc. All Rights Reserved.


提供:テクマトリックス株式会社
アイティメディア営業企画/制作:MONOist 編集部/掲載内容有効期限:2022年3月26日