🌊

ROS 2のC++コードをフォーマットしよう!

2023/04/19に公開

概要

c++のコードをそのまま書いたままにしていませんか?
コードの整形を常にしておくと、見やすかったり、バグの抑制になるかもしれません
ということでコード整形をやる方法について紹介します

コード整形

コード整形を行う場合、
・保存時にコード整形をやる
・やりたい時にコード整形をやる
2択があると思います。
それぞれ別のやり方で説明したいと思います。

保存時にコード整形をやる

VSCodeを使用します
事前にclang-formatをインストールします

sudo apt install clang-format

次にVSCodeの方で下記のプラグイン(Clang-Format[Xaver Hellauer])をインストールします

次にVScodeの方でformatに関する設定を書きます。
VSCode上でCtl+Shift+pのショートカットキーでコマンドパレットを展開します。
その中でPreferences: Open User Settings (JSON)を選択します。

選択したら、setting.jsonが下記のように開かれます。(書かれてる内容は別々なので以下の図と違っても問題ないです。)
そこにformatの設定について追記をします。

開いたsetting.jsonに下記の設定を追加します。

  "clang-format.executable": "/usr/bin/clang-format",
  "editor.formatOnSave": true,
  "editor.formatOnType": false,
  "[cpp]": {
    "editor.defaultFormatter": "xaver.clang-format"
  },

これでc++のコードを保存した時にコードが整形されると思います。

また、clang-formatは、.clang-formatというファイルでフォーマットのルールを変更することが出来ます。そのルールさえ用意すれば、フォーマットをかけた時に誰でも同じようなコードになるので
複数人で開発をする時に便利です。

ROS 2のHumbleだと以下の.clang-formatが公開されています。
https://github.com/ament/ament_lint/blob/humble/ament_clang_format/ament_clang_format/configuration/.clang-format

パッケージの一番上にこれを持ってくるだけで良いです。
↓こんな感じ

repository
├── .clang-format
├── include
└── src

やりたい時にコード整形をやる

ROS 2ではコードをフォーマットするコマンドラインツールがament_lintに組み込まれています。

以下でコマンドでコードのフォーマットが可能です。

ament_uncrustify --reformat src/ include/

コード整形ではないが

コード整形ではないが、ROS 2のコードして問題があったときに指摘してくれる
Linterというのがあります。

パッケージ下で以下のコマンドを実行すると、ここを直せとお叱りを受けます。

ament_cpplint 

イケイケパッケージにするためにぜひやってみてください。

Discussion