0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

AI時代にJavadocは不要になるのか?

0
Posted at

最近、Claude CodeやGitHub Copilotを使っているとこんな声を聞くことがあります。

AIがコードを読めるならJavadocはいらないのでは?

私も一時期そう考えていました。

しかし実際にAIを開発へ活用するようになって感じたのは、Javadocの価値は下がっていないということです。

むしろ用途が変わり、これまで以上に重要になる場面が増えています。

はじめに

従来のJavadocは主にAPI利用者向けのドキュメントでした。

例えば以下のような用途です。

  • APIの説明
  • 引数の説明
  • 戻り値の説明
  • 使用例の記載

しかしAIがコードを書く時代になると、単なる引数説明の価値は相対的に下がります。

なぜならAIはメソッド名や型定義からある程度推測できるからです。

一方で、AIが苦手なのは次のような情報です。

  • なぜその処理が必要なのか
  • どの業務ルールを守るべきか
  • どんな前提条件があるか
  • 何を壊してはいけないか

つまり、

設計意図や業務ルールを伝えるためのJavadoc

が重要になってきています。


気付き

AIはコードを読めます。

しかし設計者の意図までは読めません。

例えば次のコードです。

public void approve(Order order) {
    ...
}

人間なら、

  • 仮承認?
  • 本承認?
  • 誰でも承認可能?
  • キャンセル済み注文は?

などを考えます。

しかしAIはそこまで推測できません。

結果として、

動くコードは作るが、業務的に誤ったコードを生成する

ことがあります。

そこで重要になるのがJavadocです。

Javadocは人間向けドキュメントから、

AIへ設計コンテキストを伝える媒体

へ進化しつつあります。


悪いJavadoc例

よく見かけるのがこちらです。

/**
 * 注文を承認します。
 *
 * @param order 注文
 */
public void approve(Order order) {
}

これはほぼコードと同じ情報です。

AIにとっても人間にとっても価値は高くありません。


良いJavadoc例

設計意図や業務ルールを書くと価値が生まれます。

/**
 * 注文を承認する。
 *
 * <p>契約条件:
 * <ul>
 *   <li>注文状態が PENDING であること</li>
 *   <li>キャンセル済み注文は承認不可</li>
 * </ul>
 *
 * <p>事後条件:
 * <ul>
 *   <li>状態が APPROVED へ遷移する</li>
 *   <li>承認日時が設定される</li>
 * </ul>
 *
 * <p>不変条件:
 * <ul>
 *   <li>承認済み注文は再承認できない</li>
 * </ul>
 */
public void approve(Order order) {
}

ここまで書かれていると、Claude CodeやCopilotはかなり高精度に意図を理解できます。

実質的にDesign by Contractの情報を与えている状態です。


Design by Contractとの関係

ここで登場するのが Design by Contract(契約による設計) です。

Design by Contractでは主に以下を定義します。

種類 内容
Preconditions 呼び出し前に満たすべき条件
Postconditions 処理後に保証される条件
Invariants 常に維持される条件

例えば注文承認処理であれば、

  • Preconditions:注文状態がPENDINGである
  • Postconditions:注文状態がAPPROVEDになる
  • Invariants:承認済み注文は再承認できない

となります。

AIはコードから業務ルールを推測するのが苦手です。

しかし契約として明文化されていれば、それを前提にコード生成やレビューを行えるようになります。


Java 23のMarkdown Javadocが追い風

近年はJavadoc自体も進化しています。

Java 23ではMarkdown形式のJavadocが正式サポートされました。

例えば次のように記述できます。

/// 注文を承認する
///
/// ## Preconditions
///
/// - 状態が `PENDING`
/// - キャンセル済みではない
///
/// ## Postconditions
///
/// - 状態が `APPROVED`
/// - 承認日時が設定される
///
/// ## Invariants
///
/// - 承認済み注文は再承認不可
public void approve(Order order) {
}

これまでのようなHTMLタグ中心の記述よりも圧倒的に読みやすくなりました。

人間だけでなくAIにとっても理解しやすいフォーマットです。


Claude Codeとの相性が良い理由

Claude Codeを使っていると分かりますが、AIはコードだけでなく周辺情報も積極的に参照します。

特に以下の情報は生成結果へ大きく影響します。

  • Javadoc
  • README
  • ADR
  • 設計書
  • テストコード

その中でもJavadocはソースコードの最も近くに存在します。

つまりAIにとっては、

設計者がコードに埋め込んだ最も信頼できるコンテキスト

になります。

実際にClaude Codeへ実装依頼を行う際も、

Javadocが充実しているコードベースとそうでないコードベースでは、生成品質に大きな差が出ます。


Spring Boot Serviceでの実践例

私が最近意識しているのは、Serviceクラスの公開メソッドに設計意図を書くことです。

@Service
public class RefundService {

    /**
     * 返金手段を変更する。
     *
     * <p>前提条件:
     * <ul>
     *   <li>顧客が本人確認済みであること</li>
     *   <li>返金処理中でないこと</li>
     * </ul>
     *
     * <p>業務ルール:
     * <ul>
     *   <li>20万円以上は銀行口座返金を選択可能</li>
     *   <li>クレジットカード返金は金額制限なし</li>
     * </ul>
     *
     * <p>不変条件:
     * <ul>
     *   <li>顧客アカウントと返金口座は1対1である</li>
     * </ul>
     */
    public void changeRefundMethod(...) {
        ...
    }
}

この情報はコードから推測できません。

しかしAIにとっては極めて重要なコンテキストになります。

またレビュー時にも、

  • 契約違反
  • 業務ルール違反
  • 不変条件の破壊

を検出しやすくなります。


実践方法

私がおすすめするのは以下の優先順位です。

  1. 設計意図を書く
  2. 業務ルールを書く
  3. 不変条件を書く
  4. 事前条件を書く
  5. 事後条件を書く

逆に、

/**
 * 顧客を取得する
 *
 * @param id 顧客ID
 * @return 顧客
 */

のようなコードを読めば分かる説明は優先度を下げても問題ありません。

AI時代に価値が高いのは、

「何をしているか」ではなく「なぜそうするのか」

だからです。


まとめ

AI時代になったからJavadocが不要になるわけではありません。

むしろ役割が変わりました。

従来のJavadocはAPI利用者向けでした。

これからのJavadocは、

  • 設計意図
  • 業務ルール
  • 不変条件
  • Design by Contract

をAIへ伝えるための設計ドキュメントとして機能します。

Claude CodeやCopilotがコードを書く時代だからこそ、

「コードを説明するJavadoc」ではなく、「設計を説明するJavadoc」

を書く価値が高まっているのではないでしょうか。


本記事は、JJUG CCC 2026 Springで得た学びをもとに整理・考察した内容です。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?