0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

PlanguMLからのコード生成のOpenSourceはありますか。

はい、PlantUML(「PlantUML」と読む)など、UML記法から何らかのコード生成/モデリング支援を行う オープンソース プロジェクトはいくつか存在します。以下に代表例とともにポイントを整理します。
✅ オープンソースの例

  1. puml2code
    GitHub によるオープンソースプロジェクトで、PlantUML のクラス図記述(.pumlファイル)からソースコードを生成するコマンドラインユーティリティです。
    GitHub https://github.com/jupe/puml2code?utm_source=chatgpt.com
    サポート言語例:CoffeeScript, C#, C++, JavaScript (ES5/ES6), Java, PHP, Python, Ruby, TypeScript など。
    GitHub https://github.com/jupe/puml2code?utm_source=chatgpt.com
    ライセンスは MIT。
    https://github.com/jupe/puml2code?utm_source=chatgpt.com
    注意点として、「全ての PlantUML の記法が対応しているわけではない」「生成されるコードのテンプレートはカスタマイズ・限界あり」と README に記載されています。
    GitHub https://github.com/jupe/puml2code?utm_source=chatgpt.com
  2. Acceleo
    こちらは厳密には PlantUML の直接コード生成ツールではなく、モデル駆動開発 (MDD: model-driven development) の文脈で、モデルトゥテキスト(Model-to-Text)の変換を行うフレームワークです。
    ウィキペディア
    例えば、UMLDoclet などを使って Java ソースから PlantUML 用の記述/クラス図記述を生成するという逆方向のワークも記載されています。
    PlantUML.com https://chatgpt.com/c/690dbcb9-8038-8322-bbbf-f57beea30c37#:~:text=はい、PlantUML(「PlantUML,しますか?
    ライセンスは EPL(Eclipse Public License)等。
    ウィキペディア
    🎯 補足・注意点
    「コード生成」という観点で、PlantUML 記法(.puml)→ プログラムソース(Java や Python 等)という流れを求めるなら、puml2code がかなり近いです。
    ただし、図式・UML記述 → 生成コード という“完全な”ワークフロー(特に大規模・細かいメソッド実装まで)をサポートしているわけではなく、「クラスの定義」「関係/属性」など基本構造をコードテンプレート化する範囲に留まるケースが多いようです。
    また、モデル(UML)→ソースコードだけでなく、ソースコード→モデル(逆生成、リバースエンジニアリング)や、ドキュメント生成といった補助的なツールも多くあります。例えば PlantUML 自体も Java ソースから図を生成する Doclet などを提供しています。
    PlantUML.com+1 https://plantuml.com/doclet?utm_source=chatgpt.com
    ライセンス・コミュニティ活動・メンテナンス状況をプロジェクト毎に確認することをおすすめします。開発が止まっているものもありえます。
    もしよければ、日本語ドキュメント付きで「PlantUML記法からJava/Python/TypeScriptのソースコードを自動生成できるオープンソース」プロジェクトを複数リストアップして、ご紹介できますが、いかがいたしますか?

はい。

はい。以下は、PlantUML(.puml/.pu記法)あるいはUML記述・クラス図等からコード生成・モデル変換を支援するオープンソース・プロジェクトを日本語で整理したものです。目的に応じて「UML記述からソースコードを生成」「ソースコードからUML記述を生成(逆生成)」のどちらか、または両方をカバーするプロジェクトを選べます。
主なプロジェクト一覧

  1. puml2code
    GitHub : jupe/puml2code
    GitHub+2
    GitHub+2
    概要 : .puml(PlantUML形式のクラス図記述)を入力として、様々なプログラミング言語のソースコードを生成するコマンドラインユーティリティ。
    GitHub+1
    対応言語(README記載): CoffeeScript, C#, C++, ECMAScript5/6, Java, PHP, Python, Ruby, TypeScript など。
    GitHub
    ライセンス: MIT ライセンス。
    GitHub
    注意点: READMEに「parser and code templates are not perfect. … Basic scenarios should work.」と記載があります。つまり、すべてのPlantUML記法や複雑な構造をカバーしているわけではない。
    GitHub
    活用例:
    クラス図をPlantUMLで記述 → puml2codeでJavaやTypeScript等のクラス定義を生成
    小規模・構造主体(属性・メソッド・依存関係)をコード化したい場面に適切
    適用検討時のチェックポイント:
    自分の使っているPlantUML記法(例えばインターフェース、enum、ジェネリクス、複雑な関係等)が対応しているかどうか。
    生成テンプレートが自分のコーディング規約/コードスタイルに合っているか。
    メンテナンス状況/活発な更新があるか(2020年4月に v0.7.0 が出ている)
    GitHub
  2. puml2json
    GitHub : robbito/puml2json
    GitHub+1
    概要 : puml(PlantUML記法)を JSON に変換する CLI ツール。puml2code のフォーク/派生。
    GitHub
    ライセンス: MIT。
    GitHub
    用途: UML記述を構造化データ(JSON)に変換 → その JSON を元に独自コード/ドキュメント/可視化ツールを作る、というワークフローに使える。
    注意点: “The parser only supports a small subset of PlantUML features.” とREADMEに明記あり。つまり記法の制限あり。
    GitHub https://github.com/robbito/puml2json?utm_source=chatgpt.com
  3. plantuml‑generator(devlauer/plantuml-generator)
    GitHub : devlauer/plantuml-generator
    GitHub
    概要 : 既存の Java クラスから PlantUML のクラス図を生成するユーティリティ&Mavenプラグイン。いわゆる逆生成(ソース → UML)に近い。
    GitHub
    ライセンス: Apache 2.0 ライセンス。
    GitHub
    活用例: Java プロジェクトのクラス構造を PlantUML 形式に出力 → ドキュメントや図として活用。
    注意点: こちらは「UML記述からコード」ではなく「コードからUML記述」が主なので、ご要件が「コード生成」であれば少し用途が異なる可能性あり。
  4. GenUML
    GitHub : samuller/genuml
    GitHub
    概要 : Javaのクラスファイルから PlantUML のクラス図を生成するツール。こちらも逆生成系。
    GitHub
    ライセンス: ― 明記少なめ。
    用途: 既存Javaコードの可視化・ドキュメント化を支援。
    注意点: 「コード生成(ソースコード出力)」ではなく「UML記述生成」が主なので、厳密には“記述からコードを生成”という意味では少し違う。
  5. Acceleo
    ウィキペディア等による紹介: モデル駆動開発 (MDD) のためのオープンソース・コード生成エンジン。
    ウィキペディア
    概要 : Eclipse Modeling Framework (EMF) 等のモデルから任意のテキスト(コード)を生成できる。UML(モデル)→コードも可能という説明あり。
    ウィキペディア
    適用範囲: より本格的なモデリング/MDDアーキテクチャを採用しているプロジェクト向け。
    注意点: PlantUML の .puml を直接入力として想定しているわけではなく、EMFモデルやUMLモデルをコード生成するという文脈であるため、簡易な「記述からコード生成」ツールとして割り切るには少し敷居が高い。
    ✅ 比較・選ぶ際のポイント
    目的:「.puml 等の記述からコード生成したい」なら puml2code が最も直接的。逆に「ソースコードから UML を生成したい」なら plantuml-generator や GenUML が候補。
    対応言語/出力言語:puml2code は複数言語に対応している点が魅力。その他ツールは主に Java/PlantUML 図出力に特化。
    記法・構造の互換性:PlantUML のすべての記法や複雑な図(例えばジェネリクス、インターフェース多重継承、複雑な関連線等)を完全サポートしているわけではないという記述あり。特に puml2code の README に注意喚起あり。
    GitHub
    メンテナンス状況・コミュニティ:オープンソースであるものの、プロジェクトによっては更新が少ないものもあるため、自分のプロジェクトで使う前に「現在も動くか」「必要な機能が実装されているか」を確認することが推奨されます。
    プロジェクト規模・構成:小〜中規模であれば簡易なツールで十分ですが、大規模/複雑構造を扱う場合、よりモデル駆動のフレームワーク(たとえば Acceleo 等)を検討する方が安心な場合があります。
    ワークフローとの整合:生成したコードをどのように扱うか(テンプレートをカスタマイズするか、CIに組み込むか、ドキュメント用途か)を事前に考えておくと、ツール選定がスムーズです。
    もしよければ、**日本語ドキュメント・チュートリアル付きで「記述からコード生成」に強いオープンソースツール」**を更に 5〜10 個リストアップして、それぞれの特徴・採用事例・GitHubリンクを併記しましょうか?

ChatGPTは、PlantUMLからどうやってソースコードを生成していますか。

とても良い質問です。
ChatGPT(私自身を含む GPT 系モデル)は、PlantUML (.puml) ファイルを直接コンパイルや構文解析してコードを生成しているわけではありません。
代わりに、「PlantUML のテキスト構造を理解して、それを人間が書いたかのようにソースコードへ変換する」自然言語理解+コード生成の手法を使っています。
以下で内部的な仕組みをわかりやすく分解して説明します👇
🧩 1. ChatGPTが行うPlantUML理解の基本構造
PlantUML はテキストベースで UML(クラス図・シーケンス図など)を表現します。
たとえば、次のような .puml が与えられたとします:
@startuml
class Engine {
+start(): void
+stop(): void
-rpm: int
}

class Car {
+run(): void
-engine: Engine
}

Car --> Engine
@enduml
ChatGPT はこの記述を「構文的に」解析するのではなく、意味的に理解します:
2つのクラス Engine と Car がある
Car は Engine を持っている(依存関係、または集約)
各クラスに public メソッド(+)、private 属性(-)がある
この情報を内部表現(抽象的なUMLモデル)に変換して、
「この構造を Java(またはC++/Python/Rust)で表すとどうなるか?」を生成的に考えます。
⚙️ 2. ChatGPTによる「自然言語的コード生成」プロセス
GPTモデルは次のようなステップを暗黙的に行います:
UML文脈理解
各クラス、属性、関係、可視性(public/private/protected)、型などを抽出。
関連(→, ←, <|-- など)から継承・依存・集約・双方向参照を推定。
内部構造化(擬似AST生成)
機械内部では「クラス構造体・関係のリスト」を構築します。
例:
{
"classes": [
{ "name": "Engine", "attributes": [{"name":"rpm","type":"int","visibility":"private"}],
"methods": [{"name":"start","return":"void","visibility":"public"},
{"name":"stop","return":"void","visibility":"public"}]
},
{ "name": "Car", "attributes": [{"name":"engine","type":"Engine","visibility":"private"}],
"methods": [{"name":"run","return":"void","visibility":"public"}]
}
],
"relations": [{"from":"Car","to":"Engine","type":"association"}]
}
コードテンプレートへのマッピング
言語ごとに文法的テンプレート(class, struct, def, etc.)を適用。
言語選択(Javaなら public class, Pythonなら class, C++ならヘッダ+実装分割)を自動で選ぶ。
出力整形と推論的補完
省略された要素(例えば Car.run() が何をするか)を推論し、
よくある処理(engine.start() など)を補完して出力する。
🧠 3. 生成エンジンの特徴(人間のコード生成とは違う点)
項目 ChatGPT 従来のコード生成ツール (例: puml2code)
構文解析 しない(意味理解ベース) PlantUML構文を厳密に解析
柔軟性 高い(曖昧でも対応) 限定的(対応記法が固定)
言語拡張 自由(C++, Rust, Pythonなど) 固定(テンプレート依存)
出力品質 一貫性は自然文依存 テンプレート準拠で安定
推論能力 あり(補完・命名・実装提案) なし(構造のみ)
つまり、ChatGPTは「UML→コード変換器」ではなく、
UMLを理解して、人間が“コードを書くとしたらこうする”という生成推論を行うAIエンジンです。
💡 4. 実際にChatGPTが行う生成例(PlantUML → C++)
PlantUML入力:
@startuml
class Sensor {
+read(): int
}

class Controller {
+process(): void
-sensor: Sensor
}

Controller --> Sensor
@enduml
ChatGPT出力(C++コード):
#include

class Sensor {
public:
int read() {
std::cout << "Reading sensor value..." << std::endl;
return 42; // mock value
}
};

class Controller {
private:
Sensor sensor;
public:
void process() {
int value = sensor.read();
std::cout << "Processing value: " << value << std::endl;
}
};

int main() {
Controller ctrl;
ctrl.process();
return 0;
}
ここでは、「センサーを読む→値を処理する」という意味的な流れをChatGPTが推測して出力しています。
puml2code のような静的生成ツールではこのような推論はありません。
🧰 5. ChatGPTの補助ツールとして利用できるOSS
ChatGPTと併用すると便利なオープンソースもあります:
puml2code(UML構造→スケルトンコード生成)
PlantText(PlantUML記述のリアルタイム描画)
Graphviz / Doxygen(ソースコードからUML的構造を生成)
Acceleo / Papyrus (Eclipse Modeling)(本格MDDとの統合)
これらを「構造自動生成」として使い、ChatGPTを「意味補完・実装生成」として組み合わせると、
“モデル駆動+生成AI” のハイブリッド開発が可能になります。
もし希望があれば、
「ChatGPTがPlantUMLファイルを入力として、実際に内部でどうJSONモデル化してからコードを生成するか」
という**模擬アルゴリズム(擬似コード+生成パイプライン)**を図付きで解説できます。
行ってみましょうか?

0
1
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
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?