MISRA C:2025 公開 ― 安全・セキュリティを重視したC開発はどう変わるのか
MISRA C:2025がついに公開されました。自動車、鉄道、医療機器、産業機器、航空宇宙など、安全性や信頼性が求められるシステム開発においてMISRA®ガイドラインを採用している組織にとって、今回のリリースは今後の開発プロセスやコーディング規約の運用に影響を与える重要なアップデートです。本ブログでは、MISRA C:2025の概要と主な変更点に加え、開発チームにもたらすメリットについて詳しく解説します。
目次
MISRA C:2025の概要
MISRA C:2025は、2025年3月にドイツ・ニュルンベルクで開催された組込み業界最大級の展示会「Embedded World 2025」で正式に発表されました。今回のリリースは、MISRA C:2023を全面的に刷新するものではなく、既存ガイドラインを発展させる形のアップデートとなっています。しかし、その内容は単なる誤記の修正や細かな見直しにとどまらず、近年のソフトウェア開発手法やコンパイラ技術、将来のC言語標準への対応を見据えた重要な改善が数多く含まれています。 特に注目すべき点は以下の3つです。
- 安全性とセキュリティをさらに強化する新たなガイドラインの追加
- 既存ルールの適用範囲や解釈の明確化
- 将来のC言語標準への対応を見据えたガイドライン体系の再構成
これらの変更により、MISRA Cは現代の開発環境や開発手法に適応し、安全性・セキュリティ重視のコーディング規約としての実用性を高めています。
MISRA C:2023の対象範囲
MISRA Cはもともと自動車業界向けに策定されたガイドラインですが、現在では組込みソフトウェア開発全般における事実上の標準として広く採用されています。 MISRA Cの目的は、C言語に内在する曖昧性や危険な記述方法を排除し、以下のような問題を未然に防ぐことです。
- 未定義動作(Undefined Behavior)
- 実装依存動作(Implementation-Defined Behavior)
- 移植性の低下
- メモリ破壊
- 型変換に起因する不具合
- セキュリティ脆弱性
MISRA C:2023では、合計221のガイドライン(ルールおよびディレクティブ)が定義されており、以下のC言語規格を対象としています。
- ISO C90
- ISO C99
- ISO C11/C18
これらのガイドラインは、人手によるレビューだけでなく、Perforce QACやKlocworkなどの静的解析ツールによって自動的に検証できるよう設計されています。
MISRA C:2025で何が変わったのか
MISRA C:2025は既存ガイドラインの考え方を維持しながらも、ルール体系の見直しや新たなガイドラインの追加によって、より実践的かつ保守性の高い規格へと進化しています。特に、開発現場で長年議論されてきた課題に対応するための改善が盛り込まれており、安全性を確保しつつ、実装の柔軟性を高める内容となっています。 新規ガイドラインの追加と一部ガイドラインのDeleted(削除)・Disapplied(適用除外)などを反映した結果、有効ガイドライン数は221から225へ増加しました。また、MISRA C:2025では従来の「大型改訂版を数年おきに発行する方式」から一歩進み、ローリングリリースモデルが採用されています。これにより、今後は技術動向やC標準の変更に合わせて継続的にガイドラインが更新されるため、開発者は大規模なバージョン移行を待つことなく最新のガイダンスを利用できるようになります。
MISRA C:2025の主な変更点
新しいルールの追加
MISRA C:2025では新たに4つのRuleが追加され、加えてガイドライン体系の見直しが行われました。
Rule 19.3 ―unionのアクティブメンバ管理の明確化
今回の改定で最も注目されるのが、unionに関するRule 19.3です。従来のMISRAではunionの利用に対して非常に慎重な姿勢が取られていました。その理由は、異なる型を同じメモリ領域で共有することによって、
- データ解釈の不一致
- 可搬性の低下
- 未定義動作
などが発生する可能性があるためです。一方で、実際の組込み開発ではハードウェアレジスタの管理や通信データ解析など、unionが有効なケースも少なくありません。 MISRA C:2025ではこうした実情を踏まえ、「一度書き込んだメンバと同じメンバのみを読み書きする利用形態」は比較的安全であるとの考え方が取り入れられました。その結果、union全体を一律に問題視するのではなく、アクティブメンバ以外へのアクセスを重点的に規制する形へと整理されています。
- 禁止の仕方をより明確かつ具体的に定義
- 実行時にアクティブメンバを切り替える危険な利用を重点的に制限
という、より合理的なアプローチへ変更されています。
宣言および型システム関連の強化
新ルールの一部では、変数宣言や型管理に関する要求事項も追加されています。特にMISRAが採用する「Essential Type Model(本質型モデル)」との整合性が強化され、ポインタ型や型変換に関する解釈の一貫性が向上しました。 これにより、
- 型安全性の向上
- コードレビュー時の判断の統一
- 静的解析結果の明確化
- コンプライアンスレポート作成
といった効果が期待できます。
既存ルールの拡張
MISRA C:2025では複数の既存ルールも見直されています。特に重要なのがポインタ変換関連のルールです。
intptr_t対応
Rule 11.3、11.4、および11.6では、近年利用機会が次の整形型への対応が追加されました。
- intptr_t
- uintptr_t
従来のMISRAでは、アドレスと整数値の相互変換は原則として厳しく制限されていました。 しかし近年では、
- ポインタタグ付け(Pointer Tagging)
- メモリ保護機構
- ランタイム診断機能
- 特殊な組込みアーキテクチャ
などでアドレス値を整数として扱う必要性が高まっています。 MISRA C:2025はこうした実装上の現実を反映し、安全性を維持しながら低レベル処理への対応を可能にする方向へ進化しています。
ガイドラインの再構成
今回の改訂では、多数のガイドラインが再分類されました。 これには以下の目的があります。
- 関連するルールを見つけやすくする
- ガイドライン全体の構造を理解しやすくする
- 将来のルール追加や改訂に対応しやすくする
また、一部の項目についてはルール(Rule)とディレクティブ(Directive)の分類が見直され、要求事項の性質に応じた適切な位置付けが行われています。 開発者や品質保証担当者は、コンプライアンス文書の作成やレビュー作業の効率向上も期待できます。
削除ルールと適用除外ルールの導入
MISRA C:2025では「削除(Deleted)」および「適用除外(Disapplied)」という新しい概念が導入されました。 これは、MISRAの進化に合わせて、すべてのルールが永続的に有効であるとは限らないという考え方を正式に取り入れたものです。
Deleted(削除)ルール
削除されたルールは規格から除外されます。なお、削除されたルール番号は将来の版でも再利用されません。 これにより、
- 過去バージョンとの混同防止
- コンプライアンス履歴の保持
- ツール間互換性の維持
が実現されます。
Disapplied(適用除外)ルール
一方、Disappliedルールは標準では適用対象外となりますが、組織の判断によって継続的に適用することも可能です。代表例として、長年議論の対象だったRule 15.5が適用除外ルールに分類されています。 この仕組みによって企業は、
- プロジェクト特性
- 安全レベル
- 業界規制
に応じて柔軟なルール運用が可能になります。
Perforce QACによるMISRA C:2025準拠
MISRAガイドラインは、規模が大きくなるほど手作業だけで管理することが困難になります。 数百に及ぶガイドラインを継続的に監視し、違反を検出し、適切な逸脱管理を実施するためには、静的解析ツールの活用が不可欠です。Perforce QACおよびKlocworkは、ソースコードを自動解析し、
- MISRA違反の検出
- 重大問題の早期発見
- コーディング規約順守の証明
- コンプライアンスレポート作成
を支援します。 特にPerforce QACでは、MISRA C:2025に対応した最新のコンプライアンスモジュールを提供しており、新たに追加されたルールや再分類されたガイドラインも含めて包括的なチェックを実施できます。その結果、組織はMISRA準拠状況を効率的に可視化し、監査や認証取得に必要なエビデンス作成を容易に行うことが可能になります。
生成AIが生成するコードの品質と安全性
MISRAコミュニティでは生成AIによるコード生成についても議論が進められており、その活用に関する考察が付録で示されています。AIは開発効率の向上に貢献する一方で、誤った実装や安全性・セキュリティ上の問題を含むコードを生成する可能性があります。そのため、AI生成コードであっても人間によるレビュー、静的解析、テスト、およびMISRAガイドラインへの準拠確認が不可欠であり、品質と安全性に対する最終責任は開発組織にあることが強調されています。
Rust言語へのMISRA適用可能性の評価
MISRA C:2025の付録では、近年注目を集めるRust言語に対するMISRAの見解も示されています。Rustは所有権(Ownership)や借用(Borrowing)といった仕組みにより、メモリ破壊やデータ競合など多くの問題を言語レベルで抑制できます。一方で、安全性や機能安全規格への適合が自動的に保証されるわけではありません。MISRAは、C向けガイドラインのうちRustでは不要となる項目と、引き続き設計レビューや検証が必要な項目を再構成し、安全性とセキュリティを重視したRust開発に役立つ指針を示しています。
まとめ
MISRA C:2025は大規模な仕様変更ではありませんが、ローリングリリースへの移行やガイドライン体系の再構成、新たなルールの追加など、今後のMISRA運用の方向性を示す重要なアップデートとなっています。特にunion使用の見直しやintptr_t対応、削除・適用除外ルールの導入は、より柔軟で実践的なガイドラインへの進化として注目されています。企業や開発チームは、静的解析ツールを活用しながら新しいガイドラインへ早期に適応することで、安全性・品質・コンプライアンスの維持・向上を、より効率的に実現できるでしょう。
■ お問い合わせ先 ■
Perforce Software社のソリューションについてのお問い合わせは、
株式会社東陽テクニカ ソフトウェア・ソリューション部まで
phone 03-3245-1248(直通) mail ss_sales@toyo.co.jp