ブログトップ

公開日:

更新日:

10 min read

エンジニアリング

プログラミングのコメント:現場から見えるエンジニアリングの本質

プログラミングのコメント:現場から見えるエンジニアリングの本質のイメージ

プログラミングのコメント:現場から見えるエンジニアリングの本質

プログラミング学習の初期段階で、コメントについて学びますよね。 「コードの説明を書くもの」という、ものすごく簡単な説明で済まされることが多いのですが、実は現場では、コメントがとても重要な役割を果たしています。 今日は、エンジニアリングの視点から見た、コメントの本当の意味についてお話ししてみたいと思います。

コメントの本当の意味

プログラムの世界では、コメントって単なる説明文以上の存在なんです。 時には備忘録であり、他の開発者へのメッセージであり、時には本当に魂の叫びになることだってあります。 なんて表現すると大げさに聞こえるかもしれませんが、プログラムというダンジョンを探索する未来のプログラマーへの道標として、私たちはコメントを残すんです。

デスマーチに倒れたエンジニアのダイイングメッセージとして残されることだってある…(もちろん、実際には死んではいませんよ!)。 冗談めいた表現ですが、現場にいる人なら、この気持ち、わかるはずです。

現場でよく見かける残念なコメントたち

実際の開発現場で見かける問題のあるコメント、いくつか見てみましょう。 これ、けっこうあるあるなんですよ。

   # 典型的な不適切なコメント例
def calc(a, b):
    # 計算する
    return a + b

はい、これは完全に無意味なコメントですね。 「計算する」って…そりゃそうですよね(笑)

もっと深刻なのは、こういうパターン:

       //■
    if($_POST["ids"]){

この「■」って…いったい何を伝えたかったんでしょうか。 本人も忘れちゃってそうですね。

あと、これも要注意です:

       //onの場合、セッションになければ足す
    if($oneidsArraytype=="on"){
        if(strpos($checkedids,$oneidsArrayval.":")===false){
            $checkedids = $checkedids.$oneidsArrayval.":";
        }

本人しか理解できないコメント…うーん、これじゃあコメントを書いた意味がないですよね。

懐かしの20世紀のコメント活用法

現代のエンジニアには想像もつかないと思うんですが、1990年代半ばまではね、バージョン管理システムってものが一般的ではなかったんです。

当時はネットワークと言えば、LANも普及していませんでしたし、インターネットなんてものもありません。 通信と言えばアナログモデムです。 FAXの「ピーガガガ」で有名なアレです。 X(パケット)とかV(モデム)とかG(FAX)とかトークンリングとかDECNetとか、いろいろな通信規格が林立していて、私自身、これらの異なる規格の通信を一つにまとめて収容するという無謀とも思えるシステムの開発を担当していました。 でも、一般的な開発現場では、そんな通信環境は使えず、ソースコードはフロッピーディスクで持ち運び、バックアップを取るのが普通でした。

あの頃のNifty-Serveは楽しかったなぁ…(懐かしい)

当時のソースコードの修正履歴は、こんな感じでした:

   /***
    1990/02/12 T.Saito modified
    if文のイコールが足りない
    if (tcd = 0)
***/
if (tcd == 0)
{

いつ、誰が、何のために修正したのか、をコメントに記録することで、ソースコードの変更履歴を残していました。 でも、これが重なると…

   /***
    1990/02/12 T.Saito modified
    if文のイコールが足りない
    if (tcd = 0)
    1990/02/14 Y.Sawada modified
    0ではなく1の間違い
    if (tcd == 0)
    1990/02/16 T.Saito modified
    0で正しいから勝手に変えるな、バカ!
    if (tcd == 1)
    1990/02/17 K.Nemoto modified
    0じゃなくて非0だ、ボケ!
    if (!tcd)
***/
if (tcd)
{

…こうなっちゃうんですよね。 コメントが無駄に長くなって、職場の人間関係まで見えてきそうで怖いですね(笑)

コメントの現在と未来:AIが変えるドキュメンテーション

実は、コメントって皆さんよくご存知の「大切なもの」なんです。

「コメントを書くのは大切だよね」
「うん、分かってる」
「じゃあ、書こう」
「そんな時間がない…」

こんな会話、どこかで聞いたことありませんか?

コメントの保守だって同じです。

「コメントの内容、最新化しておいてね」 「はい、あとで…(忘れた、忙しい、眠い、後回し)」 「ちゃんと保守しようよ」 「今度やります…(そして永遠に忘れる)」

大事なものなのに、いつも後回しにされて放置される。 まるで私との約束のごとく…(泣) そして保守フェーズになって、意味不明なコメントに頭を抱える。 なんだか人生に似てますよね(笑)

でも、朗報です! AIが、このコメントの問題を大きく解決してくれました。

例えば、こんな感じのドキュメント形式のコメントを見てください:

   <?php

/**
 * ダッシュボードデータ取得API
 *
 * 販売データのダッシュボード表示に必要な各種データを
 * 非同期リクエストによって取得するAPIエンドポイントです。

 *
 * @package SBCRM
 * @subpackage Dashboard
 * @author SBCRM Development Team
 *
 * ## JSON Input Schema
 * ```json
 * {
 *   "search_date": "YYYY-MM",      // 検索開始年月(必須)
 *   "search_period": 6,            // 取得期間(月数、デフォルト6)
 *   "channels": ["all"]            // チャネルID配列(デフォルト["all"])
 * }
 * ```
 *
 * ## JSON Output Schema (Success)
 * ```json
 * {
 *   "status": "success",
 *   "data": {
 *     "monthlySales": [{
 *       "sale_month": "YYYY-MM",
 *       "channel_name": "string",
 *       "total_amount": "number",
 *       "order_count": "number"
 *     }],
 *     "dailySales": [{
 *       "sale_date": "YYYY-MM-DD",
 *       "total_amount": "number",
 *       "order_count": "number"
 *     }]
 *   }
 * }
 * ```
 */

これ、実は最近のAIを使えば、かなりの部分を自動生成できるんです。 JSDoc、PHPDoc、docstringといった形式のコメントを、AIが適切に生成してくれる。 人間はそれをレビューして、必要に応じて修正するだけ。

このアプローチには、いくつもの利点があります:

  1. コメントを書く時間が大幅に短縮される
  2. 一貫性のある書式で記述できる
  3. 必要な情報が漏れなく含まれる
  4. コードの意図が明確に説明される
  5. 複数言語での生成が可能
  6. 既存コードの理解・解説がしやすい

特に重要なのは、これらのコメントが:

  • 後から本当に救われる
  • 余計な混乱を避けられる
  • コードを読む時間を短縮できる
  • 作っている最中にも役立つ

という点です。

これだけ書いておけば、リファレンスがしっかり残るし、他の開発者も理解しやすくなりますね。 もちろん、自分自身が後から見返すときにも助かります。

エンジニアリングとしてのコメント

結局のところ、コメントの話って、単なるプログラミングの話じゃないんですよね。 これって立派なエンジニアリングの課題なんです。

プログラミングが「道具の使い方を学ぶこと」だとしたら、エンジニアリングは「その道具を使って何をどう作るか、どう維持していくかを考えること」。 コメントを書くという行為は、まさにそのエンジニアリングの考え方そのものなんです。

だからこそ、コメントを軽視せず、チームの大切な資産として扱っていきたいですね。 それは、単なるコードの説明以上の、開発チームの知的資産なんです。 みなさんも、ぜひコメントを大切にしてください。 AIを活用してしっかりとコメントを保守してください。

「書いててよかった!」

そう思うときが必ず来ます!