※このページではアフィリエイト広告を紹介しています

Javaのクラス図をAIで自動生成する ~Cursor~

Java
この記事は約14分で読めます。
広告

この記事の目的

AIの助けを借りてプログラミングをするIDEとして「Cursor」が注目されています。AIに指示をするとプログラミングを一から十まで書いてくれるのが最大の特徴です。

Cursor - The AI Code Editor
Built to make you extraordinarily productive, Cursor is the best way to code with AI.

また、人間のプログラムの理解をAIに助けてもらう、といった使い方もできます。この記事では例として、AIにクラス図の作成を依頼してみましょう。

クラス図の自動生成を扱った記事は下記の3つに引き続き4記事目です。

Javaのクラス図を自動生成する ~UMLDoclet~
この記事の目標ライブラリのプログラムを読んでみたい。そこでUMLのクラス図を自動生成して、プログラムの構造を視覚的に理解してみる。UMLとは「統一モデリング言語(Uniformed Modeling Language)」を指す。簡単に言えば...
Javaのクラス図やコールグラフを自動生成する ~Doxygen~
この記事の目標クラス図を自動生成できるツールDoxygenをご紹介します。過去に紹介したUMLDocletとの違いは、Doxygenはコールグラフを追加で出力することができることです。「コールグラフ」とは、各メソッドが何のメソッドを呼び出し...
IntelliJでJavaのクラス図を自動生成する ~PlantUML Parser~
この記事の目的統合開発環境にIntelliJ IDEAを最近使い始めました。IntelliJ IDEAでソースコードからクラス図を簡単に自動生成するプラグイン「PlantUML Parser」をご紹介します。クラス図の自動生成を扱った記事は...

 

[広告]関連書籍

 

試行結果

Apache Commons CSVを例に試してみます。

 

AIに質問を入力する

  1. インプットとなる情報を入力します。ここでは「src/main/java/org/apache/commons/csv」フォルダを指定します。
  2. 質問文を入力します。ここでは「このフォルダ内にあるJavaプログラムについて、PlantUMLで表示できる形式でクラス図を作成し、class-diagram.pumlという名前で保存してください。」と入力します。
  3. AIの回答モードを選択します。ここでは質問なので「Ask」を選択します。

 

回答

以下のようにAIが回答してくれます。画像では見切れていて分かりませんが、Askモードだとクラス図のファイル保存まではやってくれませんでした。

 

AIがPlantUML形式で出力したクラス図を画像化したものが下記です(エラーがあったので筆者修正)。

これまで自動生成したクラス図と比べるとかなりすっきりしており、情報がかなりそぎ落とされているようです。とはいえ概要を知る用途なら十分使えます。

 

以下がAIが生成した回答の全体です。クラス図だけでなく文章でも各クラスを説明してくれるので、これもプログラムの理解に役立ちそうです。

はい、承知しました。まず、フォルダ内のJavaファイルの内容を確認して、クラス間の関係を分析する必要があります。

まず、`package-info.java`を確認して、パッケージの概要を把握しましょう。

Read file: src/main/java/org/apache/commons/csv/package-info.java
次に、主要なクラスの内容を確認して、クラス間の関係を把握します。

Ran tool
コードの分析に基づいて、PlantUMLクラス図を作成します。以下のような構造が見えてきました:

1. 主要なクラス:
– `CSVFormat`: CSVフォーマットの設定を管理
– `CSVParser`: CSVファイルのパース処理を担当
– `CSVRecord`: パースされたCSVレコードを表現
– `CSVPrinter`: CSVデータの出力を担当
– `Lexer`: CSVの字句解析を担当
– `ExtendedBufferedReader`: バッファ付きリーダーの拡張
– `Token`: 字句解析のトークンを表現
– `Constants`: 定数定義
– `QuoteMode`: クォートモードの列挙型

2. クラス間の関係:
– `CSVParser`は`CSVFormat`を使用してパース設定を管理
– `CSVParser`は`Lexer`を使用して字句解析を行う
– `CSVParser`は`CSVRecord`を生成
– `CSVPrinter`は`CSVFormat`を使用して出力設定を管理
– `Lexer`は`ExtendedBufferedReader`を使用して入力を読み取り
– `Lexer`は`Token`を生成

これらの情報を基に、以下のPlantUMLクラス図を作成します:

“`plantuml
@startuml

package “org.apache.commons.csv” {
class CSVFormat {
-delimiter: char
-quoteCharacter: Character
-escapeCharacter: Character
-header: String[]
-ignoreEmptyLines: boolean
-ignoreSurroundingSpaces: boolean
-nullString: String
-recordSeparator: String
+DEFAULT: CSVFormat
+EXCEL: CSVFormat
+RFC4180: CSVFormat
+getDelimiter(): char
+getQuoteCharacter(): Character
+getEscapeCharacter(): Character
+getHeader(): String[]
+parse(Reader): CSVParser
+print(Appendable): CSVPrinter
}

class CSVParser {
-format: CSVFormat
-lexer: Lexer
-headerMap: Map<String, Integer>
-recordNumber: long
+parse(File, Charset, CSVFormat): CSVParser
+parse(String, CSVFormat): CSVParser
+nextRecord(): CSVRecord
+getRecords(): List<CSVRecord>
}

class CSVRecord {
-values: String[]
-recordNumber: long
-parser: CSVParser
+get(int): String
+get(String): String
+get(Enum): String
+size(): int
}

class CSVPrinter {
-out: Appendable
-format: CSVFormat
-newRecord: boolean
+printRecord(Object…): void
+printRecords(Iterable<?>): void
+printRecords(ResultSet): void
}

class Lexer {
-format: CSVFormat
-reader: ExtendedBufferedReader
-token: Token
+nextToken(Token): boolean
+close(): void
}

class ExtendedBufferedReader {
-lastChar: int
-eolCounter: long
-position: long
+read(): int
+getCurrentLineNumber(): long
+getLastChar(): int
}

class Token {
-type: Type
-content: StringBuilder
+Type: enum
}

enum QuoteMode {
ALL
MINIMAL
NON_NUMERIC
NONE
}

final class Constants {
{static} BACKSLASH: char
{static} COMMA: char
{static} CR: char
{static} LF: char
{static} TAB: char
}
}

CSVFormat “1” — “1” CSVParser : creates >
CSVFormat “1” — “1” CSVPrinter : creates >
CSVParser “1” — “*” CSVRecord : creates >
CSVParser “1” — “1” Lexer : uses >
Lexer “1” — “1” ExtendedBufferedReader : uses >
Lexer “1” — “*” Token : creates >
CSVFormat “1” — “1” QuoteMode : uses >

@enduml
“`

このクラス図は以下の特徴を示しています:

1. パッケージ構造:
– すべてのクラスは`org.apache.commons.csv`パッケージに属しています

2. 主要なクラスとその関係:
– `CSVFormat`は中心的なクラスで、パースと出力の両方の設定を管理
– `CSVParser`と`CSVPrinter`は`CSVFormat`に依存
– `CSVParser`は`Lexer`を使用して字句解析を行い、`CSVRecord`を生成
– `Lexer`は`ExtendedBufferedReader`を使用して入力を読み取り、`Token`を生成

3. 重要な属性とメソッド:
– 各クラスの主要な属性とメソッドを表示
– 特に重要な定数や列挙型も含む

4. 関係性:
– 実線の矢印で依存関係を示す
– 多重度(1対多など)も表示

このクラス図を`class-diagram.puml`として保存することで、Apache Commons CSVライブラリの構造を視覚的に理解することができます。

コメント

タイトルとURLをコピーしました