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

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



[広告]関連書籍
試行結果
Apache Commons CSVを例に試してみます。
AIに質問を入力する
- インプットとなる情報を入力します。ここでは「src/main/java/org/apache/commons/csv」フォルダを指定します。
- 質問文を入力します。ここでは「このフォルダ内にあるJavaプログラムについて、PlantUMLで表示できる形式でクラス図を作成し、class-diagram.pumlという名前で保存してください。」と入力します。
- 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
@startumlpackage “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ライブラリの構造を視覚的に理解することができます。
コメント