ROS2でコードチェック!
TL;DR
## コードチェック! colcon test ## エラー内容を確認! colcon test-result --verbose
コーディング規約
ROS2にはコーディング規約*1があります.*2 ROS2のプログラムを書いている読者の皆さんなら当然規約に則っているとは思いますが,細かいところまできっちり守るのは中々難しいものです.
というわけでROS2のコードチェックを自動化する方法を紹介したいと思います.
確認
ここで述べるものがなければコードチェックがうまく動きませんので動かない場合は確認してみてください.
CMakeLists.txt
よほど変な方法でパッケージを作っていない限り,CMakeLists.txt
の最後の方に以下の記述があると思います.
if(BUILD_TESTING) find_package(ament_lint_auto REQUIRED) # the following line skips the linter which checks for copyrights # uncomment the line when a copyright and license is not present in all source files #set(ament_cmake_copyright_FOUND TRUE) # the following line skips cpplint (only works in a git repo) # uncomment the line when this package is not in a git repo #set(ament_cmake_cpplint_FOUND TRUE) ament_lint_auto_find_test_dependencies() endif()
もしない場合はCMakeLists.txt
の最後にあるament_package()
の記述の直前に追加しておきましょう.
package.xml
こちらも通常,はじめから追加されているはずですが念の為.
<test_depend>ament_lint_auto</test_depend> <test_depend>ament_lint_common</test_depend>
記述が無ければ追加しておきましょう.
チェックの実行
colcon build
した後に以下を実行しましょう.
colcon test
コードチェックはたったこれだけで実行できます. 簡単ですね.
エラーの確認
チェックを実行したら何かしらエラーが出ます.
Starting >>> crane_bt_executor --- stderr: crane_bt_executor Errors while running CTest --- Finished <<< crane_bt_executor [4.00s] [ with test failures ]
しかし,colcon test
だけではこのようにエラーの有無しか分かりません.
エラーを修正するためには「どこで」「どのような」エラーが出ているかという情報が必要です.
そこで次のコマンドを実行します.
colcon test-result --verbose
以下のような文字列が大量*3に吐き出されて面食らうかも知れませんが何ということはありません.
- crane_bt_executor.cpplint build/include_what_you_use [4] (/root/ros2_ws/src/crane/crane_bt_executor/include/crane_bt_executor/behavior_tree/multi_robot_sequence.hpp:54) <<< failure message Add #include <memory> for shared_ptr<> >>>
しっかり読めば解決策も書いてありますので一つ一つ丁寧に直していきましょう.
ament_lint_autoの気持ちになるですよー
正直,このコードチェックはかなり厳しいです.
はじめのうちは大量のエラーを出して修正に時間がかかりますが慣れると素早くできるようになります.
また,そもそもの話としてエラーが少ないプログラムを書けるようになるので心配する必要はありません.
特にチェックが1発で通った*4ときは中々の快感です.
CI
どうせならチェックの実行自体も自動化してしまいましょう.
Gitlab CI/CDやGithub Actionsを使えば簡単にできます.
https://github.com/SSL-Roots/consai2r2/actions/runs/8872558/workflow
CIの設定など細かいことは省きますが結局の所,colcon test
を実行しておけばOKです.
次回予告
今回はコードチェックの仕方やエラーの確認方法について書きました.
次回以降は具体的なエラーの内容や運用する上でのtipsなど書いていこうと思います.