1. はじめに
Zephyr では以下の記事でも触れた通り、品質に対する取り組みも多方面で行っており、本記事ではそのうちの一つ、静的解析ツール(Static Code Analysis) を掘り下げていきます。
※ Windows / Linux 共通で動作するものだと思っていましたが、2026年7月時点で Windows 側では2件課題が見つかりました。回避方法を記載しているものの VSCode 連携は不十分なものになっています。
2. 静的解析とは
静的解析ツールとは、ざっくり表現すると『ソースコードを、実行・動作させず(静的)に解析して問題になり得る箇所を抽出する』ツールの総称で、商用・無償様々なツールがあります。
対義語として動的解析ツールがありますが、組込みの世界では実処理を行いながら解析を行えるほど、MCUやROM/RAMのリソースが十分ではないことが多く、ソースコードレベルで検査・検証する手法が重宝されてきました。
昨今はAIで検証する手段も明確に有効になってきてはいますが、ルールベースで機械的に解析を行って件数 0 にすることは一定の価値があると考えており、それを手軽に行える環境にしておくのが今回の目的です。
3. 環境準備
まずは、公式の手順通りに進めて zephyrproject ディレクトリ以下に環境が構築されている想定で話を進めます。まだ環境が用意できていない場合は以下の公式手順を参考に進めてください。
もしくは、私の記事に沿って VSCode 連携の環境ベースでも確認が可能で、本記事の静的解析ツールとVSCode の連携も利用できるようにしています。
4. 事前準備(Windowsのみ)
4.1. ロングパス対応
2026年時点では、codechecker のインストールに失敗することを確認しています。原因はパスが長いためであり、対策はレジストリ操作となります。
以下のコマンドを管理者権限で実行する事で回避できるようになります。
New-ItemProperty -Path "HKLM:\System\CurrentControlSet\Control\FileSystem" -Name "LongPathsEnabled" -Value 1 -PropertyType DWORD -Force
詳細は以下を参照してください。
4.2. Zephyr リポジトリ側の暫定対策
以下のパッチを zephyr 本体側のリポジトリに適用することで、Windows でも動作することを確認しています。
ただし一応解析結果は出力されているものの、エラーメッセージ等が出る点には注意。
1. パッチファイルをローカルに保存する
以下の codechecker_for_win.patch をファイルとしてローカルに保存してください。
ここでは zephyrproject/codechecker_for_win.patch に保存したものとして話を進めます。
codechecker_for_win.patch
diff --git a/cmake/sca/codechecker/sca.cmake b/cmake/sca/codechecker/sca.cmake
index ed4fe5ebd3..8075eff1a2 100644
--- a/cmake/sca/codechecker/sca.cmake
+++ b/cmake/sca/codechecker/sca.cmake
@@ -118,12 +118,18 @@ add_dependencies(codechecker-cleanup codechecker)
# in to the failure.
set(CODECHECKER_PARSE_OPTS ${CODECHECKER_PARSE_OPTS} || ${CMAKE_COMMAND} -E touch ${output_dir}/codechecker.failed)
if(CODECHECKER_PARSE_EXIT_STATUS)
+ file(WRITE ${output_dir}/parse_check.cmake
+"if(EXISTS \"${output_dir}/codechecker.failed\")
+ file(REMOVE \"${output_dir}/codechecker.failed\")
+ message(FATAL_ERROR \"CodeChecker reported issues, see the analysis output above\")
+endif()
+")
add_custom_target(codechecker-parse-check ALL
- COMMAND ! ${CMAKE_COMMAND} -E rm ${output_dir}/codechecker.failed 2>/dev/null
+ COMMAND ${CMAKE_COMMAND} -P ${output_dir}/parse_check.cmake
)
else()
add_custom_target(codechecker-parse-check ALL
- COMMAND ${CMAKE_COMMAND} -E rm -f ${output_dir}/codechecker.failed 2>/dev/null
+ COMMAND ${CMAKE_COMMAND} -E rm -f ${output_dir}/codechecker.failed
)
endif()
add_dependencies(codechecker-cleanup codechecker-parse-check)
2. git apply でパッチを適用
zephyrproject/zephyr に移動した上で、git apply でパッチを適用することで Windows でも codechecker + cppcheck による解析が行えるようになります。
cd zephyrproject/zephyr
git apply ../codechecker_for_win.patch
5. ツールのインストール
本記事では、無償で使える定番の静的解析ツールである cppcheck と、そのフロントエンドとして機能する codechecker を採用しています。
どちらも pip でインストール可能で、作業の共通化が可能です。
インストール先は、Zephyr 環境を構築したディレクトリ配下にある venv としています。
zephyrproject ディレクトリに移動後、下記コマンドを実行してください。
.venv\Scripts\activate
pip install codechecker cppcheck
source .venv/bin/activate
pip install codechecker cppcheck
6. コマンドによる解析実施
作業環境は zephyrproject 直下としています。
$ ls -a
. .. .venv .west bootloader modules tools zephyr
まずは参考に zephyr/samples/hello_world/ 、ターゲットを nucleo_f401re として話を進めます。
source .venv/bin/activate
west build -p -b nucleo_f401re
west build -- -DZEPHYR_SCA_VARIANT=codechecker -DCODECHECKER_EXPORT=html
出力先は build/sca 以下に配置されます。デフォルトでは plist 側に json と plist という xml 形式で解析結果が出力されます。
$ ls build/sca/codechecker/
codechecker.html codechecker.plist
また、今回は html 指定しているため、 html ファイルとしても生成されており、index.html ファイルをブラウザで開けば閲覧可能です。
$ ls build/sca/codechecker/codechecker.html/
heap_constants.c_cppcheck_2e01881a28d93f03c8545255f41cd6cc.plist.html
index.html
ring_buffer.c_cppcheck_7f7f356105ec75398858ce440df13c0a.plist.html
statistics.html
実際に出力された index.html を開くと以下のような構成になっています。
試しに 1 をクリックすると以下のように指摘内容が確認できます。
ただし、今回のこの指摘は"64 bit の変数を 63 bit shift" なので問題なく、未定義動作でもないため不問とされていそうです。
7. VSCode 連携
今回のこの静的解析も、playbook 環境にスクリプト化と vscode 上からの連携ができるように対応しました。
利用したい方は以下の手順で環境を構築してください。
1. 環境の導入
2. Extension のインストール
- CodeCheck Extension インストール
3. スクリプトの呼び出し
Ctrl + Shift + B、もしくはメニューからTerminal -> Run Build Task... でパレットを開き、Analyze を選択で、 6. のコマンドで実施した解析を走らせる事ができます。
また、Codecheck Extension パネルを開くと、指摘箇所を VSCode からも閲覧・編集可能になっています。
8. まとめ
今回は、無償版でかつ導入のしやすいツールとして、codechecker と cppcheck の組み合わせを選びました。
ただし、記事を書き始めてから Windows 側は対応が不十分な事がわかり、パッチを本記事に載せる形としました。
なお、他にも Zephyr 公式にサポートしているツール群は下記に掲載されており、好みや会社の都合に合わせて選択し、それぞれの使い方を確認していただければと思います。