😽

ETロボコンにおけるコーディングスタイルの統一

2024/01/28に公開

はじめに

本記事では、ETロボコンにおけるコーディングスタイルについて検討します。

その前に、そもそも、ETロボコンとは何か?ということですが、ETロボコンは、2002年から開始されたソフトウェア重視のロボットコンテストであり、組込み技術者の育成を目的としています。このコンテストは、その長年にわたる開催と貢献により、経済産業大臣賞を受賞しています。

詳細は、下記を参照してください。
https://www.etrobo.jp/

それで、ETロボコンの参加者は、様々なバックグラウンドを持っている場合があると思います。普段使っているプログラミング言語も、C/C++、Java、JavaScriptなど、あるいはプログラミング未経験者もいるでしょう。異なるバックグラウンドを持つ人々が一緒に開発する際、コーディングスタイルや命名規則の違いが問題となることがあります。この問題は、往々にして正解がありません。正解がないことに延々と時間を使うことはもったいないです。この記事では、私が思うETロボコンにおけるコーディングスタイルの最適解(案)を紹介します。もちろん、これは正解ではありません。また、私自身の最終アンサーでもありません。みなさんのフィードバックや私の今後の経験を元に、本記事は今後もアップデートしていきたいと思います。

想定読者

  • ETロボコンに参加する開発者
  • C++を用いた開発に携わる者

前提

ETロボコンでは主にC/C++が使用されると思われますが、Pythonなど他の言語も使われるかもしれません。この記事では、C++を基本言語としてコーディングスタイルを考えます。

最初に結論

ETロボコンのC++コーディングスタイルは、以下を使いましょう。

上記の中のいくつかの命名規則には違和感を感じるかもしれません。私は感じました。しかし、「Google C++ Style Guide」は、恐らく、その知名度では、C++という言語においては一番ではないかと思います。一番広く使われている技術を採用することは、それだけでアドバンテージがあります。多くの使用者に耐えうる内容であることを証明しているし、また、サポートツールが揃っている、等です。

他の候補もいくつもあります。例えば、以下があります。
C++ Core Guidelines

ですが、前述の通り、より広く使われているスタイルガイドを選ぶことが無難な選択になります。

ツールによるスタイル強制

コーディングスタイルは、ツールを使って強制することができます。これには大きく分けて2種類のツールがあります。

コードフォーマッター (Code Formatter)

  • 機能: インデントの文字数、括弧の位置、空白の扱いなど、コードのフォーマットを整えます。
  • 具体例: Clang-formatはVSCodeの拡張機能として利用可能で、「Google C++ Style Guide」スタイルに設定できます。

静的解析ツール (Static Analysis Tool)

  • 機能: 命名規則、関数の複雑さ、不使用の変数、潜在的なバグなど、コード品質の高度な側面をチェックします。
  • 具体例: cpplintはGoogle C++ Style Guideに準拠したコードのチェックに適しています。

これら2つのツールは異なる目的を持っており、両方をサポートするのが理想的です。

Clang-format(コードフォーマッター)の適用手順

Clang-formatの適用手順に関して、記載します。

主に、下記ページを参考にしました。
Clang-formatの導入手順と使い方

  1. C/C++拡張のインストール
    VSCodeでC/C++拡張機能をインストールします。

  2. 設定ファイルの作成
    プロジェクトフォルダ直下に.clang-formatファイルを作成し、BasedOnStyle: Googleと記載します。

  3. フォーマットの適用
    編集中のファイルを右クリックし、表示されるメニューから「Format Document」を選択すると、自動的にフォーマットされます。

  4. 自動フォーマットの設定
    VSCodeのSettingsで以下の設定を行います:

    • Format On Paste: true
    • Format On Save: true
    • Format On Save Mode: file
    • Format On Type: true or false ※お好みで設定。

これで、ファイル保存時等に自動的にフォーマットが適用されます。

  1. Gitとの連携
    • Gitのpre-commitフックなるものを使えば、コミット時にスタイルに沿っていなければ、エラーにして、コミットさせない、というのができるようである。ただ、まだ、実施していないため、ここでは記載を割愛します。

静的解析ツール (Static Analysis Tool): cpplintの適用に関して

cpplintの適用については、下記記事を参照してください。
ETロボコンにおける開発環境 - Cpplint

おわりに

以上が、ETロボコンにおけるC++のコーディングスタイル統一のためのガイドラインとツールの適用手順です。スタイルの統一は、チーム内でのコミュニケーションやコードの可読性を向上させる重要な要素です。適切なツールの使用により、効率的かつ一貫したコーディングスタイルの適用が可能になります。ぜひ、コーディングスタイルの統一について、検討してみてください。

また、自分のチームは、こうやっているよ、などという情報がありましたら、コメントを頂けるととてもうれしいです。

Discussion