組込み開発におけるCI/CD
昨今、組込み開発においても重要度を増してきているCI(Continuous Integration:継続的インテグレーション)/CD(Continuous Delivery:継続的デリバリー)についてわかりやすく解説します。
CI/CDとは
2019年頃から組込み開発関連の展示会などでもちらほら見かけるようになった単語としてCI/CDというものがあります。Windowsアプリケーションなどの汎用PC上で動作する業務系アプリケーション開発においては、2018年頃から盛り上がりをみせている言葉で、CIは”Continuous Integration”、CDは”Continuous Delivery”の頭文字をとったもので、日本語ではそれぞれ”継続的インテグレーション”、”継続的デリバリー”と訳されています。これらは、巨大化、複雑化するソフトウェアを効率よく開発、品質確立し、本番環境に投入していくことを目的としたプロセスとなります。継続的インテグレーションは、開発工程における各開発者が開発したソースコードのマージから総合テストまでを自動化し、継続的デリバリーは結合テストを通過したソフトウェアを顧客や本番環境にリリースする部分を自動化したプロセスを言います。
業務系、組込み系に限らずあらゆる分野の機器においてソフトウェアへの要求は高まりつつあり、その結果開発する必要があるソフトウェアは、開発する機能が肥大化することにより、機能ごとに複数人で開発することが当たり前となっています。また、当初はウォーターフォール型という要件定義で全ての要件を洗い出した後、必要となる機能の全てを設計、実装、評価し、最終的にリリースするプロセスが主流だったのですが、ここ最近では、アジャイル型開発が主流となっており、必要な機能を優先付けし、優先度の高いものから設計、実装、評価、リリースし、これを機能ごとに繰り返して実施していく開発手法となります。
複数人でアジャイル型の開発を行おうとした際に問題となるのが、各自の開発したソースコードのマージです。既に動作しているシステムに各担当者が機能を追加する例を考えてみましょう。多くの場合、各自は自分のPC上にある環境(ローカル環境)で動いている既に動作しているシステムに対して自分の担当機能を実装して正しく動作するかを確認します。動作が確認できたら、これをマスターとなる環境にマージするのですが、複数人で開発している場合には他の人と編集部分が重なってしまったりしてマージすることが困難となります。またマージするたびにテストを行う必要が出てくるため大きな手間を要します。
そこでCI/CDでは、このマージやテストの作業を自動化することで、毎日マージ、テストすることを可能とします。より早く問題点の抽出が出来るため、開発効率は向上し、品質の確保も可能となるわけです。
組込み開発におけるCI/CD
組込み機器開発におけるCI/CDは不要という考え方もありました。もともと組込み機器というのは、ある機能を実現するために最低限のハードウェアとソフトウェアで構成された機器であり、アップデートするということを考慮していないものが殆どなのです。これにより、パソコン1台20万円程度だった頃から2000円の温度計や、2万円のインターフォンが実現できたわけです。よって、例えばこのような組込み機器に機能を追加しようとすると、CPUのパワーや搭載メモリーが不足してしまったり、ハードウェアインタフェースの追加(基板の再製作)が必要になったりするものが殆どだったため、一度市場にリリースしたら基本的にはアップデートすることはしない、つまり継続的なデリバリーは行わないのが組込み機器でした。
しかしながら昨今の組込み開発では、パソコンで使われてもおかしくないような高性能なハードウェアが低価格で入手可能となり、PC用OSであるLinuxを代表とするようなソフトウェアを組込み機器に搭載するようになってきています。またIoT化の流れの中で、多くの組込み機器がネットワークにつながるようになってきています。昨今の組込み機器は一昔前のパソコンと変わらないような性能を持ち、機能を実現できるようになってきているのです。実際に皆さんが所有しているスマホ、テレビ、ルーターなど多くの機器は、購入後まずはアップデートするのが当たり前という組込み機器も増えているのは実感いただけるかと思います。
このような流れの中で、組込み機器の開発プロセスも当然変化してきています。市場の声に併せながら必要となる機能をアップデートしていったり、バグが見つかり次第改修したりすることが当たり前となっており、多くのソフトウェアが継続的に供給されるようになっています。継続的にリリースを行わないにしても、大規模なソフトウェアの品質確立を効率的に行うためには、CIは有効となります。この開発と評価、リリースを繰り返し実施する流れは今後ますます加速していくことが考えられ、業務用アプリケーション開発と比べるとハードウェア的な制約はまだまだあるものの組込み機器開発においてもCI/CDの重要性は高まっていくと予想されます。
組込み開発におけるCI/CDの難しさと今の流れ
では組込み機器にCI/CDを導入しようと考えても、そう簡単にできるわけではありません。自動化する際には、複数の開発ツールを連携させて、自動化スクリプトからのビルドや、テストパターンスクリプトの実行といったようなことが必要となります。
他のコラムでも述べましたが、組込み機器開発では搭載するCPUによって利用する開発環境が変わります。それぞれの開発環境は、誰もが使いやすいようにGUI(グラフィカルユーザーインタフェース)での操作を採用している場合が殆どなのですが、他の開発ツールと連携しようとなるとGUIでの操作以外に対応していないものが数多く存在します。実際CI/CDを導入しようとした際に候補となる有力なツールとしてはJenkinsやBambooなどがあげられますが、これらと連携して自動化できないものがあるからです。
しかし、これらの問題もCI/CDのニーズの拡大とともに解決する方向に向かっています。組込み機器にも多く利用されているLinuxを取りまとめるLinux Foundationは、2019年3月に開催された米国でのイベント「Open Source Leadership Summit」において、継続的インテグレーション/継続的デリバリ(CI/CD)分野の新たな組織「Continuous Delivery Foundation」(CDF)を発表し、Jenkins、Jenkins X、Spinnaker、TektonなどのCI/CDツールをとりまとめる旨の発表をしております。組込み向けLinuxOSを提供するWindriver社もCI/CDをサポートするLinuxの提供を行っていたりします。最近では、組込み機器開発における統合開発環境であるIAR Embedded Workbenchを提供するIARシステムズ社が、従来からWindows環境でサポートしていたCI/CDをLinux環境にも拡張し、CI (Continuous Integration) エンジンとして有名なJenkinsやBambooならびにCMakeやNinjaといった異なったビルドシステムとの連携が可能となっています。
このように組込み機器開発においてもCI/CDが普及しつつあり、今後はますます重要度が増してくると考えています。
まとめ
ソフトウェアの大規模化や継続的なアップデートの流れの中で、効率的な開発、早期での品質確立は業務系アプリケーションだけではなく、組込み機器開発においても確実に普及していく流れとなってきています。この流れを受けて、組込み機器開発に利用するソフトウェアや開発環境はCI/CDに対応したものを選択していくのが重要になってくると考えます。今回例としてご紹介したLinux搭載機器でいえばまだまだプリントデバッグをしている人も多くいるのではと思っておりますが、CI/CDに取り組んでいくことは、今後の組み込み機器開発においても重要であると私は思います。まずは第1歩としては、CI/CDに対応するソフトウェアや開発環境を利用し一度体験してみてはいかがでしょうか。
個別相談も承っております。下記よりお申し込みください。