組み込みシステムの開発をGitHubでスピードアップ
ソフトウェアやハードウェアが普及した世界で、GitHubはミッションクリティカルな組み込みシステムを安全に開発できるよう支援します。 ソフトウェアやハードウェアが普及した世界で、GitHubはミッションクリティカルな組み込みシステムを安全に開発できるよう支援します。 私たちが生きているこの世界は、想像以上にソフトウェアとハードウェアが密接しています。ハードウェアというと、まず何を思い浮かべますか?スマートフォン?ノートPC?洗濯機や自動車はどうでしょう?それとも、自宅のあちこちにあるたくさんのスマートホームデバイスのどれかでしょうか? このような組み込みシステムを産業的な視点から見ると、エレベーターから飛行機、製造ラインから信号機、医療機器から革新的なロボット工学の世界まで、チャンスは無限に広がっています。 これらのシステムは、基本的にソフトウェアに依存しています。従来、こうした機器に搭載されるソフトウェアの種類は、特定のタスクに特化したものでした。たとえば自動車では、エンジンやトランスミッションの管理といった機能面を扱うシステムや、エアバッグの展開、アンチロックブレーキシステムの制御など、安全上重要なシステムなどがあります。 私たちは毎日、このような制御システムに頼っていますが、日常生活でこれらのシステムが果たす役割について考えたことはないでしょう。結局のところ、アーサー・C・クラークが言ったとおり「十分に発達した科学技術は、魔法と見分けがつかない」のです。 DevOpsとは、エンドユーザに価値を提供し続けることです。これまで述べてきたような種類のシステムにとって、品質とセキュリティは譲ることのできない、基本的な要素です。自動車のISO 26262や医療機器のIEC 62304など、数え切れないほどある機能安全性規格のいずれであっても、規格に準拠しようとすると、開発プロセスは大幅に複雑になります。ISO 27001と新しいサイバーセキュリティに関する国連の規制要件がAUTOSARやMisraなどの産業コーディング規格に加わってくると、組み込み開発の世界では自動化する方法を見つけることがますます重要となるのもご理解いただけると思います。 このブログでは、この種のシステムを設計、構築、デプロイする際、開発ライフサイクル全体を通じてGitHubがどのような付加価値を提供できるかをご紹介します。 共同開発 ソフトウェア開発のスタート地点は、内容をよく理解したうえで計画を立てることです。チームが明確な計画を立て、コードを書き、ユーザーに素晴らしい体験を提供できるようになれば、開発も楽しく感じます。GitHubは、計画からビルド、デプロイ、継続的なフィードバックまで、ソフトウェア開発サイクルのすべての領域を支援します。 こうした作業の基盤となるのは、バージョン管理ソフトウェアです。2008年にスタートしたGitHubを、Gitのバージョン管理ができるプラットフォームとして認識している方も多いでしょう。(最近のGitHubではもっと多くの機能を利用できます!)2008年より以前は、ソースコード管理には様々な形態が用いられていました。 ソフトウェア開発の観点から見て、バージョン管理システムにコードを保存することは、現代のソフトウェアエンジニアリングの慣習から得られる多くのメリットを享受するために欠かせません。GitHubのGitリポジトリにコードを保存すると、以下のことが可能になります。 コードベース上の開発履歴を完全に追跡する。 エンジニアリングチームは個別のブランチで作業できるため、お互いの作業を妨げることなく開発を進められる。 必要に応じて、コードベースの以前のバージョンにロールバックする。 本番環境のコードベースにブランチ保護ルールを追加し、変更をマージする前にピアレビューを受けるか、自動化された一連の品質ゲートをパスしなければならないようにする。 その他、多数。 上記の内容から、こうした重要なシステムの開発にはバージョン管理が不可欠であることがわかります。詳細な変更履歴、ブランチ保護ルールによる品質ゲートの追加、Pull Requestによるピアレビューの義務化により、コンプライアンスは開発後に別途対応したりチェックリストを追加したりするものではなく、プロセスの一部として組み込まれます。 すべての作業の安全性 組込みシステムについてセキュリティの観点から考えてみましょう。自動車に搭載されている組み込みコンピュータを誰かに乗っ取られたとしたら、どうなるでしょうか?その影響は個々のシステムによって異なりますが、壊滅的なものになる可能性があります。安全装置に関するシステムであれば、人命の損失につながりかねません。 このような背景から、重要なシステムを構築する開発チームがセキュリティを優先すべきなのは当然のことです。GitHubでは、セキュリティは全員の責任であり、後回しにしたり、本稼働前に一度だけレビューすればよいものではないと考えています。むしろ、開発ワークフローに組み込めるものであり、組み込むべきものだと考えています。前述のコンプライアンスに対する考え方と同様に、日々の作業の一部となるべきものです。 GitHubでは、セキュリティのワークフローへの導入に役立つツールがいくつか用意されています。その一部をもう少しご紹介しましょう。 自分が書いたコードを保護 懸念すべき点として最初に思い浮かぶのは、自分が書くコードかもしれません。私たちは人間であり、完璧ではないので、常に完璧なコードを書けるわけではありません。先ほど、開発ライフサイクルに品質チェックを追加するオプションとして、ブランチ保護ルールをご紹介しました。その品質チェックの1つとしてセキュリティを追加し、書いたコードをレビューできるとしたらどうでしょう? そこで役立つのがGitHub Code Scanningです。この機能については、CodeQL (GitHub Code Scanningを強化するGitHubの組み込みコード解析エンジン)とサードパーティが提供するツールとの統合という2つの観点から考えることができます。 CodeQLは、C、C++、Java、Pythonなど、組み込みシステムを構築する際によく使われる言語をサポートしています。CodeQLは、コードをデータベースのような構造に変換します。変換後は、GitHubが作成した数々のクエリをすぐに使用できます。オープンソースコミュニティでこれらのクエリを拡張して、インジェクションやバッファオーバーフローの脆弱性など、コードベース内で生じるパターンを特定することも可能です。