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など書いていこうと思います.  

 

 

*1:https://index.ros.org/doc/ros2/Contributing/Code-Style-Language-Versions/

*2:無印ROSにもコーディング規約はありますが無印ROSを使っていた頃の私は恥ずかしながらあまりコーディング規約を守っていませんでした...

*3:適当に書いたプログラムだと500件を超えることも珍しくない

*4:※少々修行が必要です