まず、今回の取り組みとしてAmazonQでどこまでアプリケーションが作れるのかを試してみました。
なので、コードは触らない前提です。
ちなみに、PLATEAUのデータを画面に表示するのは下記のようなコードで簡単に作成する事ができます。
from plateaukit import load_dataset
# データの読み込み
shinagawa = load_dataset("plateau-13109-shinagawa-ku-2023")
# エリアの指定 (読み込んだ品川のデータ全領域)
area = shinagawa.get_area()
# レンダリング
area.show()
が、結論をいうと上手く出来ていません…
AmazonQに指示を出してみる
下記のような感じで日本語で指示を出すことを試行しました。
plateauのモデルデータを読込み、画面にレンダリングするアプリケーションをpythonで作成します。必要なファイルは1つのディレクトリにまとめてください。設定ファイルは1つにまとめてください。今後、指示する内容は忘れないように記録し、指示がある毎に追記し読み直してください。
現在セットアップされているpyhonのライブラリを確認し使用して下さい。足りないライブラリがあれば追加します。
UnitTestを作成し、必ず全てPassすることを確認して下さい。UI画面に関しては、UnitTestからUI操作をエミュレートできる仕組みを用意し実行してください。
ログは詳細に出力できるように実装し、リリースする際にはDEBUGレベルに戻して下さい。
モデルデータのファイルは、アプリケーションフォルダに data ディレクトリを作成し格納します。アプリケーションでモデルデータが格納されているフォルダを選択する場合は、デフォルトで data ディレクトリを選択します。
それで作成するアプリケーションの指示を出します。まず、dataディレクトリに格納されているモデルデータを読み込む処理を作成して下さい。
この段階では、plateaukitがライブラリとして存在する事を AmazonQ は認識していました。
また、最終的にはレンダリングをしたいのですが、初回に多くを作成させると上手くいかないだろうと思い、データの読込みの部分を作成させました。
さらに、この試行の前はDLしたデータを読み込ませるのではなく、自分が書いたサンブルのように既にコンパイル済みのデータを扱わせようとしましたが、こちらも崩壊したのでデータファイルの存在を認識させようとした取り組みです。
dataディレクトリにplateauデータを格納しました。このデータに含まれる全ての属性を取得するように修正して下さい。属性の値の情報が欠落しないように型を決めて下さい。読み込めないファイルや属性がある場合が原因を特定し修正し全ての情報が読み込める事を確認して完了とします。
plateau_viewerの続きです。UIを作成します。dataディレクトリに存在するモデルデータをチェックボックスで選択出来るようにします。読込みボタンを作成し、チェックボタンのついたモデルデータを読み込みます。データを読み込んでいる進捗が分かる様に、現在処理中の件数と総件数を表示します。
UIで読込みを開始したときに動作が完了しません。また Unsupported file format: .b3dm が発生しますのでで読み込めるように修正して下さい。
モデルデータの読込みが完了した後、UI画面では「読込み準備中…」のままとなり、キャンセルボタンが押せる状態です。読込みが完了したら「読込み完了」と表示し「キャンセル」ボタンは無効、「選択ファイルを読み込み」ボタンを有効にして下さい。
直っていません。UI画面の操作を別スレッドで実行していませんか?そうであればメインスレッドで実行するように修正して下さい。またUIスレッドを操作する処理は全て1つのclassに入れ、メインスレッドから呼び出せないようにして下さい。
Exceptionの修正を2回
チェックボックスが無くなっています。今後、デグレードが発生しないように対策をして下さい。チェックボックスの仕様として、カテゴリ毎にチェックボックスで選択できるようにして下さい。チェックがついたカテゴリをdataディレクトリから読み込んでください。読み込む処理は修正する必要がありません。
チェックボックスをクリックするとチェックが再度付き、再スキャンが実行されますが誤りです。チェックの操作では何も処理をする必要は無く、モデルデータの読込みを開始するときにチェックボックスの状態により読み込むデータを選択する処理にして下さい。
上記のやり取りでは少し分かり難いのですが、最終的に下記のような修正の繰り返しが発生し収拾できませんでした。
- データを読み込む処理と画面を作成するが、この画面のコントロール上のバグ (ボタンを押しても処理しない、処理中のままになる等) が発生する
- 上記バグを修正させるが、1回では直らない
- 上記バグの修正に成功するが、元々ある機能がデグレを起こし、データ読込みでエラーが発生する
- データ読込みのデグレを修正させるが、データ読み込み画面がガラッとかわり、機能落ちする
- 機能落ちを復帰させようとすると、画面のコントロール上のバグが発生する
- (最初にもどる)
所感
AmazonQに対する自分の指示の甘さを痛感しました。これは普段の仕事における情報共有や依頼事項の伝達にもつながるのかなと思います。
とは言え、下記に課題を感じました。
指示内容を記憶するメモリ機能があまり優秀ではない
基本的にこれにつきます。
プロンプトで色々と指示を出していますし、それを元に作成したアプリケーションの README.md も更新してくれますが、直ぐに忘れます。
これが起因となり、デグレや機能落ちが多発します。
色々と試行錯誤しているのですが、自分の技量ではコントロール出来ませんでした。
UnitTestを改悪してしまう
何らかの修正指示をしたとき、上手く動作しないことを認識します。
ここまでは良いのですが、この上手く動作しないことを正しく理解していないため、期待していた動作確認をしていたUnitTestを改悪してしまい、期待していない動作でOKとしてしまいます。
このとき、前回正しかった動作とソースコード、UnitTestは抹消されてしまうので取り返しが付かない状況になります。
ここはGitHubと連携させてPRを受けるようにすることで改善できるかもしれません。
さいごに
AmazonQの使い方としては、アプリケーションを初期構築する際に、ザックリとフレームワーク毎作成させるであったり、5割くらいの完成度までを進めるといった使い方をするとパフォーマンスが良いのかなと思いました。
細部まで作り込むのは難しいと感じています。
もしかすると、設計書などを取込ませる事で精度を上げることができるかもしれませんが、まだその方法を理解できていない自分の力不足感。
とはいえ、素直に面白いと思うし業務に関連しないツール作成などには活用できるかなと思うので、もう少しチャレンジしてみたいと思います。