C#におけるドキュメントコメントの有無の違いについて

はじめに

プロジェクトに参画した際、業務や既存システムの仕様を理解することが大切かと思います。また、仕様の理解には設計書や既存のソース等を利用することもあるかと思います。その際、ソースに記述されたコメントが仕様理解につながることも少なくありません。
今回の記事では、C# におけるドキュメントコメントの有無による違いを比較したいと思います。

開発環境

  • Visual Studio 2022
  • C#
  • コンソールアプリケーション(.NET 6.0)

確認概要

クラスやメソッドや変数にドキュメントコメントが有る場合と無い場合の比較を行います。

サンプルコード

下記のサンプルコードでは、コンソールに入力された文字を加工して表示する処理を行います。また、コードをドキュメントコメントが有る場合と無い場合で記述しています。

ファイル名 概要
Program.cs メイン処理
TestUtility.cs メイン処理で使用するメソッド
Message.cs 表示用メッセージ

Program.cs

using ConsoleApp2;

class Test
{
    static void Main()
    {
        // 入力文字の取得(ドキュメントコメント無し)
        string input = TestUtility.GetInput();

        // 入力文字の加工(ドキュメントコメント有り)
        string procInput = TestUtilityWithComment.ProcessInput(input);

        // 出力
        Console.WriteLine(procInput);
    }
}

TestUtility.cs

namespace ConsoleApp2
{
    // コンソールアプリ用ユーティリティクラス(ドキュメントコメント無し)
    public class TestUtility
    {
        // 入力を促す文章を表示し、入力値を読み取る
        public static string GetInput()
        {
            Console.WriteLine(SystemMessage.PromptForInput);

            string? input = Console.ReadLine();

            if (string.IsNullOrEmpty(input))
            {
                input = string.Empty;
            }

            return input;
        }
    }

    /// <summary>
    /// コンソールアプリ用ユーティリティクラス(ドキュメントコメント有り)
    /// </summary>
    public class TestUtilityWithComment
    {
        /// <summary>
        /// 入力文字列の前後に文章を追加します
        /// </summary>
        /// <param name="input">コンソールに入力された文字列</param>
        /// <returns>加工後の文字列</returns>
        public static string ProcessInput(string input)
        {
            string result = string.Format(
                SystemMessageWithComment.TextAfterProcessing, input);

            return result;
        }
    }
}

Message.cs

namespace ConsoleApp2
{
    // システム共通メッセージクラス(ドキュメントコメント無し)
    internal static class SystemMessage
    {
        public static string PromptForInput =
             "任意の言葉を入力後にEnterを押下して下さい。";
    }

    /// <summary>
    /// システム共通メッセージクラス(ドキュメントコメント有り)
    /// </summary>
    internal static class SystemMessageWithComment
    {
        /// <summary>コンソールに「{0}」が入力されました。</summary>
        public static string TextAfterProcessing =
             "コンソールに「{0}」が入力されました。";
    }
}

差異の確認

記述したクラス等にマウスをホバーするとドキュメントコメントが表示されます。

ドキュメントコメントが無い場合

ドキュメントコメントが無い場合、名称のみが表示されています。

ドキュメントコメント無(クラス)
ドキュメントコメント無(クラス)
ドキュメントコメント無(メソッド)
ドキュメントコメント無(メソッド)
ドキュメントコメント無(変数)
ドキュメントコメント無(変数)
ドキュメントコメント無(メソッドの IntelliSense)
ドキュメントコメント無(メソッドの IntelliSense)

ドキュメントコメントが有る場合

ドキュメントコメントが有る場合、記述したコメントが表示されています。
また、メソッドでは<param>タグによる引数、<returns>タグによる戻り値へのコメントも表示されています。

ドキュメントコメント有(クラス)
ドキュメントコメント有(クラス)
ドキュメントコメント有(メソッド)
ドキュメントコメント有(メソッド)
ドキュメントコメント有(変数)
ドキュメントコメント有(変数)
ドキュメントコメント有(メソッドの IntelliSense)
ドキュメントコメント有(メソッドの IntelliSense)
ドキュメントコメント有(引数の IntelliSense)
ドキュメントコメント有(引数の IntelliSense)

おわりに

ドキュメントコメントは便利な機能ですが、コメントの過不足や曖昧な記述等、効果的に利用するためにはルールが必要な場合があります。そのため、プロジェクトの開発標準やコーディング規約と合わせて検討を行う必要があるでしょう。
この記事が参考になれば幸いです。

執筆担当者プロフィール
石橋 侑樹

石橋 侑樹(日本ビジネスシステムズ株式会社)

これまで業務システムやWebアプリの開発、業務自動化等に携わってきました。サッカーが好きで休日は試合を見ていることが多いです。

担当記事一覧