組込み環境におけるCI/CDについて
組込み環境におけるCI/CDについて
従来、汎用的なPCなどのシステムと、組み込み環境のシステムとでは求められる要件が異なっていました。
しかしどちらもそのハードウェア的なスペックの向上と、要求される機能などが増えていくにつれ、開発人員の増大化、コストの増大化など様々な弊害が出てきました。開発者達は日々開発環境の改善などに取り組み、CI/CDと呼ばれる開発方法を考案しました。
組込みソフトウェアとは
組込みソフトウェアとは
組込みシステムとは、家電製品や産業機械などを操作するために生まれたオペレーティングシステム(OS)を意味します。オペレーティングシステムは、その機器を動かす為の基本的なソフトウェアの集合体です。
組込みソフトウェアの代表例は、TVの制御システムや、スマートフォンの基本OSであるAndroidやiOSがあげられます。製造工場にて製品を作るロボットの制御をしているのも組込みソフトウェアです。
パソコン等の汎用環境と組み込みソフト環境の違いについて
一般的なシステムと言われた際に、私たちが想像するものはパソコンでしょう。私たちが生活する中で、一番身近ともいえる存在だからです。
パソコンは絵を描いたりホームページを閲覧したり表計算をしたり、様々な用途を満たすために汎用的な動作が求められます。インターネットに接続し、データのやりとりなどの通信が発生する場合、その情報量は膨大でその情報を処理するために快適なネットワーク環境を構築する必要があります。
それに対して組み込みシステムは、活用される用途が限定的であるため、機能としても限定的となっています。膨大な情報量の処理は必要とされないため、要求される機械のスペックもパソコンに比べて少なくて済みます。
その分決まった動作を決まった時間で完了させる必要があります。また、安全性が求められます。決まった動作を決められた通りに実行するために、その動作全てを設計しているため、その動作に異常が起こると、その異常を検出し、正常終了することも求められます。
近年求められる環境・内容の変化について
しかし、近年ハードウェアの性能向上が著しくなってきています。
今までは組み込みソフトウェアで使用する機械に、一般的なパソコン用のOSをインストールすると、その扱う情報量の差で正常な動作が出来ませんでした。その状況も、ハードウェアの性能向上という面で支障が無くなってきています。
しかも、従来ネットワークに接続することがなかった機器などが、スマート家電というかたちでネットワークに接続する事も出てきました。扱う情報量が増え、ネットワークに接続する以上セキュリティの対策もしておかないと、もし脆弱性が発見された場合セキュリティの穴として攻撃されるきっかけにもなりかねません。
そのため、従来の組み込みシステムとしての開発作業にプラスして、パソコンなどの汎用環境用の各種対応もせざるを得なくなり、その作業負担は増えている現状があります。
システムの開発環境について
パソコン等の汎用的な環境での開発と組込み環境での開発について
パソコンなどの汎用環境と、組み込みソフトウェア環境では、開発に関する作業は違いがあります。
個々のプログラム開発言語は違いますが、要件定義などの設計作業や開発作業自体は大きな意味では同じです。
一般的なパソコンで行うパソコン用の開発環境として、代表的なものにMicrosoft株式会社の提供するVisual Studio .NETがあげられます。
この場合、あくまでもリリース後の使用環境としてWindowsを想定していることがほとんどであるため、シームレスに開発作業やテスト環境などを実行することが可能です。
しかし、組み込み環境での開発についてはどうでしょうか?
やはり開発部分に関してはVisual Studio .NETのような統合開発環境が存在していますので、先述のパソコン用のアプリケーションの開発と同じように、開発作業を行う事ができる場合が多くなっています。
しかし組み込み機器の場合はテスト環境が変わってきます。組み込み機器で動作させるソフトウェアをまずはWindows上で上記の開発環境を使用して開発します。そしてプログラムを組み込み機器に組み込んだ後、プログラムを1行ずつ実行するように組み込み機器の制御を行い、結果をWindowsパソコンで読み込み表示する、という作業を行わなくてはなりません。
このことにより、汎用的なパソコンでのソフトウェアの開発よりも、一段と開発作業自体のハードルが高く、時間がかかってしまうことになります。
ウォーターフォール開発とアジャイル開発について
開発方法に関しても、いろいろな方法があります。
代表例をあげると、従来採用されている「ウォーターフォール開発」という開発方法があります。ウォーターフォールというものはその名前の通り「滝」です。つまり、上から下に落ちる滝のように工程が流れ、決して逆流することはない。要件定義から設計、開発、テスト、そしてリリースといった一連の流れを順々に行っていくのがウォーターフォール開発です。
この開発方法のメリットは、昔から存在し採用されることが多かったため、例が豊富にあること。また、工数が見積やすいということ、一つ一つ工程を積み重ねていくことが、その品質の向上などの堅実性という部分で利点になります。逆にデメリットとしては、一つの流れで作業を行うため、長期化しやすく、仕様などの変更がしづらいこと。何かトラブルがあった際に、大幅に時間がかかることがあげられます。
ただ、この開発方法は組み込みシステムの開発においてはメリットが多かったのです。それは、組み込み開発においては何より重用されるものが安定性であったからです。ウォーターフォール開発の堅実性という利点が生かされてきました。
しかし、やはりその開発方法のデメリットに関しても大きく影響が出ました。開発に時間と費用がかかってしまうことです。昨今の頻繁なハードウェアの設計工程や要件の増加に、この開発方法では耐えられなくなってきていたのです。
その現実から、「アジャイル開発」と呼ばれる開発が採用されることも多くなってきました。これは、どんなシステムを作りたいか、の企画を立てた後、計画、設計、開発、テストの流れを繰り返していく開発方法です。
ウォーターフォール開発と違い、あくまで前工程に戻る事を前提としている為、その柔軟性や開発速度に関してはメリットが大きいです。デメリットとしてはやはりウォーターフォール開発の逆で管理がしづらい、ということがあります。それは、組み込みシステムの重要な堅実性という部分と、ある意味相反してしまう部分でもあります。
只でさえ、組み込みシステムは一度パソコンなどの開発環境でテストをした後に実際の機器にシステムを移してテストをする必要があります。ですので、その環境の維持や管理などが、逆にデメリットとして存在するため、アジャイル開発には不向きとされてきました。
CI/CDと呼ばれる開発方法について
そこで最近新たな開発方法が生まれました。
それは、CI/CDと呼ばれる開発方法です。CIは「Continuous Integration(継続的インテグレーション)」の略、CDは「Continuous Delivery(継続的デリバリー)」もしくは「Continuous Deployment(継続的デプロイメント)」です。
CI/CD自体は、一つの開発方法を意味している訳ではありません。計画→設計→開発→テストの一連の流れを途切れさせずに、安定した環境を維持するために、「自動化」することを意味していて、これを「継続」と定義しています。
基本的にプログラム開発は汎用的なパソコン上のソフトウェアであっても、組み込みソフトウェアと呼ばれるものであっても複数人で開発をします。そしてそれぞれで開発したソフトをマージして纏め、きちんと動作するかのテストを行います。
もちろん、開発している人個々人でもテストは実施していますが、それが一つに纏まる際に重複する箇所などが発生します。そこの箇所が他の人の開発している部分などであれば、その部分も開発で変更される場合がありますし、マージをするたびに帳尻を合わせるような、煩雑な作業が発生します。
そこで生まれたのがこのCI/CDと呼ばれる開発方法です。これは常にテスト作業を自動化し、リリースできる状態にしておくというものです。
CIはシステムの修正作業を実施すると、その箇所のテストを自動的に実施します。これで修正箇所のマージ作業が不要になります。このことは、バグやエラーの早期発見や開発の効率化につながるのです。
そして、CDですが、こちらは2つの意味があります。CIで最新の状態にした状態で、リリースまでを自動化してしまうものと、リリースの手前で止めて最新の状態にしておき、手動でリリースを行うというものです。
このCI/CDという開発方法は、とてもアジャイル開発において優位に働きます。複数人で開発を行う際に何よりも煩雑になりがちな管理という項目を、システム的に自動で行ってくれるからです。
DevOpsとCI/CDについて
DevOpsとは何か?
ここでもう一つ、新たな考え方について記載します。それは、DevOpsという考え方です。これは、開発(developmentの略)と運用(operationの略)を意味しますが、通常システムの開発と運用は相対する事になってしまう事が多くなってしまいます。そこで、開発と運用の垣根を減らし、双方の担当者が協力していこうという考え方をDevOpsと言います。
開発チームと運用チームが協力しながら開発を進め、両者の間での認識共有や意見の調整がより円滑になり、密度も上がるでしょう。この結果、従来よりも柔軟かつ速いペースで製品を開発・運用していくことが可能となるのがDevOpsの特徴です。
組込みソフトにおけるCI/CDで求められる内容について
汎用的なパソコンなどのアプリケーション開発においてはCI/CDを活用しアジャイル開発を実施していくという流れがメインになってきていますが、組込みシステムでは不要という考え方が根深くありました。それは要望される機能が少なく限られていたことや、ハードスペックがそれを実施する事にむかなかったせいでもあります。
しかし、ハードウェアの機能向上や機能要望は組込み機材においても向上し、スピード感を持って開発することが求められはじめています。
例を挙げるとするとスマートフォンです。内部に導入されているAndroidやiOSはそのスマートフォンを動作させるための組み込みソフトですが、電話をするという本来の携帯電話としての機能以上にアプリケーションを搭載し、遊んだり交流をしたりする事が可能です。そして電話回線だけではなくインターネット環境にもアクセスしデータのやりとりを行うので、セキュリティのアップデートも必須となります。
昨今ではセキュリティのアップデートの迅速さは何よりも重要となっています。そのため、組込みソフトでもCI/CDの環境を整えることは重要になってきています。
より一層効率化を求められるシステム開発について
先述の通り、CI/CDは開発工程を自動化するメカニズムを指します。これに対し、DevOpsは開発と運用の連携を強化し、円滑なプロセスを実現する全体の仕組みを指します。どちらも開発をスムーズに進めるという目的は共通していますが、DevOpsは開発の進め方に対する「考え方」である一方、CI/CDは開発手法の一つです。
そのため、DevOpsにおいて開発と運用の協力関係を強化するための手段として、CI/CDが導入されることがあります。
また、DevOpsが考え方である以上、導入するに当たり、その影響範囲は開発運用部門だけではなく、企業としての考え方の変化も求められます。むしろその考え方の変化自体が、重要であり、それは組込みソフトウェアでも変わらないのです。
まとめ
組込みソフトウェアと汎用的なPCソフトウェアは、従来の考え方では対立構造的に語られる事が多かったように思います。
しかし、昨今のハードウェアスペックの向上や、ネットワークに接続する等の要求される機能の増加により、その差は少なくなってきています。それは同じく求められる開発環境の変化にも及びます。
そしてそれは開発だけに留まることなく、運用や企業としての環境も変化させる必要があり、今後も様々な変化を伴うでしょう。その変化を受け止めつつ、より一層快適な開発環境や仕組みの構築を目指していく必要があるかと思います。