ChatGPT との最初の出会いは、リリースされたときの純粋な好奇心に突き動かされました。私は個人的にはコードを書きませんが、コード生成について説明する記事に特に惹かれました。そして、最初はその機能は自分には関係ないと思っていました。
しかし、あるとき、あまり作りたくなかった 1 つの UML 図に取り組んでいることに気づきました。
プロセスを簡素化または迅速化するために、私はさまざまな方法に目を向けました。私は通常、PlantUML コードを使用して UML 図を作成します。ここで、これはコードの形式であり、コードは生成できるということに気づきました。
このようにして、ChatGPT は私の図作成のための貴重なツールへと進化しました。今、私の経験を皆さんと共有できることに興奮しています。
UML はUnified Modeling Languageの略で、ソフトウェア システムの成果物を指定、視覚化、構築、文書化するための言語として機能します。 UML はオブジェクト指向プログラミング言語の概念を基にしています。開発知識があると UML モデリングに役立ちますが、必須ではありません。
これは主にソフトウェア設計の側面を説明するように設計されていますが、ビジネスまたはユーザーの要件をモデル化するための一連の動作図も提供します。
私の役割では、IT ビジネス プロセスに携わっており、特に分析、最適化のためにモデル化して、開発者が実装できる明確な形式に変換することに重点を置いています。
モデリングに関しては、さまざまなアプローチとツールを使用しますが、その 1 つが UML です。
ここにその利点があります。UML を利用するのにソフトウェア エンジニアである必要はありません。私はソフトウェアで実装されたビジネス プロセスをナビゲートするためにこれを使用していますが、それを超えています。驚くほど多用途で、開発のさまざまな段階でさまざまな役割に適用できます。総じて、ぜひ試してみてください。あなたはそれを愛していることに気づくかもしれません。
他の図と同様に、この図も簡単に描くことができます。シンプル、便利、迅速で、プロセスと結果を明確に把握できます。この目的のために多数のグラフィック ツールが利用可能であり、私もそれらを使用しています。ただし、PlantUML のおかげで、私は「コード」アプローチを選択することが多いです。
PlantUMLはオープンソースのモデリング言語およびツールであり、プレーン テキスト言語に基づいて図を生成できます。簡単に言うと、PlantUML でコードを記述して図を作成できます。
私は「クリエイティブ モード」で図をスケッチするのが好きですが、多くの場合、後で図をコードに変換するか、コードを直接記述します。これには主に 2 つの理由があります。
図内のブロックをより効率的に挿入、移動、削除できます。
描画されたダイアグラム内のブロックの順序を変更すると、多くの場合、ダイアグラム全体が変更され、他のブロックやリンクに影響を与えます。コードを扱うときは、視覚的な側面を気にする必要はありません。テキストを扱っていると、PlantUML がグラフィック表現を処理します。
画像を扱う代わりに、単純なテキスト ファイルを操作および保存できます。
これは、ドキュメント内で図の画像に遭遇する場合に特に有益です。品質が損なわれる可能性があります。このような図を操作し続けることは不可能であり、編集や拡張はできず、再描画のみが可能です。
もう 1 つの重要な利点は、ChatGPT が PlantUML を理解し、コードを生成できることです。これにより、コード生成のメリットを享受し、それらを UML とシームレスに統合できるようになります。以下に私の個人的な経験からいくつかの例を紹介します。
PluntUML には任意のコード エディターを使用できます。個人的には、Visual Studio Code と PlantUML 拡張機能の方が好きです。もう 1 つの方法は、 https://plantuml.comなどのオンライン リダクターを使用することです。
タクシー アプリケーションのユースケース図を作成してみましょう。
まず、プロンプトを使用します。
https://plantuml.com/ru/use-case-diagram の構文を使用して、タクシー アプリのユースケース図を作成します
ChatGPT はコードを生成します。
@startuml left to right direction actor "Passenger" as passenger actor "Driver" as driver rectangle "Taxi App" { usecase "Request Ride" as request usecase "Cancel Ride" as cancel usecase "Track Ride" as track usecase "Payment" as payment passenger -- (request) passenger -- (cancel) passenger -- (track) passenger -- (payment) driver -- (track) driver -- (payment) (request) --> (cancel) (request) --> (track) (track) --> (payment) } @enduml
視覚的なビュー:
アイデアは良いのですが、ケースが 4 つだけでは不十分に思えます。 PlantUML には同様のものが存在しないため、追加のケースを追加し、いくつかの構文例で強化することをリクエストします。プロンプト:
さらにケースを追加すると、include、extends、generalization などのさまざまなタイプのリンクを使用できます。構文:
(case1) .> (case2_includes_case1) : <<include>>
(親) <|-- (子)
(case1 は case 2 を拡張します) .> (case2) : <<拡張>>
それから私は何度もお願いします
さらにケースを追加する
もう一度、エラーを修正するための具体的なリクエストをいくつか作成します。
ChatGPT の最終結果は次のとおりです。
@startuml left to right direction actor "Passenger" as passenger actor "Driver" as driver rectangle "Taxi App" { usecase "Request Ride" as request usecase "Cancel Ride" as cancel usecase "Track Ride" as track usecase "Payment" as payment usecase "Rate Driver" as rate usecase "View Ride History" as history usecase "Select Ride Type" as selectType usecase "Provide Feedback" as feedback usecase "View Driver Information" as driverInfo usecase "Update Profile" as updateProfile usecase "Promo Code" as promoCode usecase "Emergency Assistance" as emergencyAssistance passenger -- (selectType) passenger -- (request) passenger -- (cancel) passenger -- (track) passenger -- (payment) passenger -- (rate) passenger -- (history) passenger -- (feedback) passenger -- (driverInfo) passenger -- (updateProfile) passenger -- (promoCode) passenger -- (emergencyAssistance) driver -- (track) driver -- (payment) driver -- (rate) (request) ---> (cancel) (request) ---> (track) (track) ---> (payment) (track) ---> (rate) (history) --> (payment) (rate) --> (payment) (rate) ---> (track) (cancel) --> (request) (selectType) --> (request) (feedback) --> (rate) (driverInfo) ---> (track) (updateProfile) --> (track) (promoCode) --> (payment) (emergencyAssistance) --> (track) } @enduml
ケースは好きですが、ケース間のつながりは好きではありません。そこで、そのコードを少し編集します。
最終結果は次のとおりです。
@startuml actor "Passenger" as passenger actor "Driver" as driver rectangle "Taxi App" { usecase "Request Ride" as request usecase "Cancel Ride" as cancel usecase "Track Ride" as track usecase "Payment" as payment usecase "Rate Driver" as rate usecase "View Ride History" as history usecase "Select Ride Type" as selectType usecase "Provide Feedback" as feedback usecase "View Driver Information" as driverInfo usecase "Update Profile" as updateProfile usecase "Promo Code" as promoCode usecase "Emergency Assistance" as emergencyAssistance passenger -- (selectType) passenger - (request) passenger -- (track) passenger -- (payment) passenger -- (history) passenger -- (rate) passenger -- (updateProfile) passenger -- (emergencyAssistance) driver - (request) driver - (payment) driver - (rate) (request) --> (track) (track) --> (payment) (track) --> (rate) (selectType) --> (request) (cancel) .> (request) : <<extends>> (rate) <.. (feedback) : <<include>> (payment) <..(promoCode) : <<include>> (driverInfo) .> (track) : <<extends>> } @enduml
もちろん、さらに多くのシナリオを組み込むこともできます。たとえば、ユーザー登録やログインに関する情報はありません。さらに、ChatGPT をガイドして、設計に関連する図を作成することができます。重要なのは、使える基礎を持っているかどうかです。
リバース プロキシを使用した画像ストレージ ソリューションのシーケンス図の単純なバージョンがあります。
@startuml participant Client boundary "Reverse Proxy" as Proxy participant Back participant FileStorage participant Admin actor Editor Editor -> Admin: Add picture Admin -> FileStorage: Add picture Client -> Proxy: Get picture Proxy -> Proxy: Check cache alt cash is not empty Proxy -->> Client: Return picture else cash is empty Proxy -> FileStorage: Recieve picture FileStorage --> Proxy: Picture Proxy -> Proxy: Save to cache Proxy -->> Client: Return picture end @enduml
改善しましょう。私のプロンプト:
画像を保存して使用するためのソリューションを設計しています。この図を確認し、必要に応じて編集してください。
ChatGPT の提案:
1. **Participant Name Clarification:** - Consider renaming "Back" to something more descriptive, like "Application Server" or a similar term that better represents the functionality. 2. **Actor Placement:** - Move the "Editor" actor to a more standard position, usually at the top. @startuml participant Client actor Editor boundary "Reverse Proxy" as Proxy participant ApplicationServer participant FileStorage participant Admin Editor -> Admin: Add picture Admin -> FileStorage: Add picture Client -> Proxy: Get picture Proxy -> Proxy: Check cache alt cache is not empty Proxy -->> Client: Return picture else cache is empty Proxy -> ApplicationServer: Receive picture ApplicationServer --> Proxy: Picture Proxy -> Proxy: Save to cache Proxy -->> Client: Return picture end @enduml
アクターの配置に関する論点は気に入らないので、元に戻しました。他はすべて問題ありません。
それから私は次のようなプロンプトを数回繰り返しました。
この図を確認し、必要に応じて修正してください
そしてプロンプトを書きます:
ApplicationServer がデータベースから写真を取得する方法を示します
コントロールの焦点を追加する
いくつかのコーナーケースを追加
最終的には、コントロールのフォーカスを調整し、名前にいくつかの変更を加えます。最終結果は次のとおりです。
@startuml participant Client boundary "Reverse Proxy" as Proxy participant ApplicationServer database FileStorage participant Admin actor Editor Editor -> Admin: Add picture activate Admin deactivate Admin Admin -> FileStorage: Add picture activate FileStorage deactivate FileStorage Admin -> ApplicationServer: Store metadata activate ApplicationServer Client -> Proxy: Get picture activate Proxy Proxy -> Proxy: Check cache alt cache is not empty Proxy -->> Client: Return picture else cache is empty Proxy -> ApplicationServer: Receive picture request activate FileStorage ApplicationServer -> FileStorage: Retrieve picture from database alt picture not found in database FileStorage --> ApplicationServer: Picture not found deactivate FileStorage ApplicationServer -> Proxy: Notify picture not found Proxy -->> Client: Picture not found else FileStorage --> ApplicationServer: Picture data deactivate FileStorage ApplicationServer -> Proxy: Send picture to Proxy Proxy -> Proxy: Save to cache Proxy -->> Client: Return picture end end deactivate Proxy deactivate ApplicationServer deactivate Admin deactivate Editor @enduml
まず第一に、「ChatGPT は間違いを犯す可能性がある」ため、すべてを確認する必要があります。これはユーザーの代わりとなるものではなく、むしろユーザーの作業を合理化し、最適化するためのツールです。
最も一般的なエラーは、PlantUML 構文に関連したものです。場合によっては、会話の途中でこの問題が発生し、それを修正して ChatGPT を正しい軌道に戻さなければなりません。
次に、私は ChatGPT 3.5 の無料バージョンを使用していますが、これには一長一短があります。場合によっては、動作が悪化して、同じプロンプトに対してランダムな回答が返されることがあります。
第三に、ChatGPT は一部の図を他の図よりもよく理解します。たとえば、ユースケース図よりもシーケンス図の方がはるかに優れています。
ただし、これらの制限にもかかわらず、ChatGPT は依然として価値のあるツールであり、効率を高め、時間を節約できる優れたアシスタントです。
私は仕事で ChatGPT を恒久的に使用しています。あなたがマネージャー、アナリスト、開発者、テスター、またはその他の役割に就いている場合は、UML を利用できます。その場合は、PlantUML コードを作成して生成することを検討してください。これにより、時間が節約され、効率が向上します。
私の経験が役に立ち、あなたにインスピレーションを与えることを願っています。ありがとう!