あけましておめでとうございます。
ドルフィンシステム福島です。
本年もよろしくお願いします。
ここ数年はコロナ禍における湯島天神と神田明神の初詣状況をご報告申し上げておりましたが、既に日常に戻りご報告も不要。新年にふさわしい話題も思いつかなかったので、LabVIEWのAIアシスタントNigelを実践的に使ってみた、というリポートをお伝えいたします。
弊社笹生が何度か記事にしておりますが、Nigelは以下の特徴があります。
- LabVIEWの話題を色々と相談することが出来る
- あくまでもチャットで、コード補完やエージェントモードのようにコード生成は出来ない
- 開発環境との統合はまだ中途で「LabVIEWで現在開いているVIの解説をする」ということは出来ない
Nigelは作成したVIをエクスプローラからNigelにD&Dすると、VIを開いて下図のように解説をしてくれます。
ステートマシンの実装状況を分析する
コード生成はできなくとも、VIを読み込んでくれるのであればコードカバレッジテストには使えそうです。
というわけで、Nigelがコードカバレッジに使えるかどうか試してみます。以下の手順です。
- 簡単なアプリの仕様書を作成(Claude Sonnet 4.5)
- 仕様に基づいて実装(福島ハンドコーディング)
- 実装したVIをNigelに読み込ませる
- Nigel に仕様書を渡してコードカバレッジを測定してもらう
まずvscode上でclaudeと相談しながら仕様書を作りました。シンプルに状態遷移図と遷移表だけで理解できるはずです。
次に簡単なCDプレイヤーをステートマシンで実装しました。
このVIをNigelにD&Dすると読み込んでくれます。
VIのブロックダイアグラムは、下図のようになっていてUI制御とステートマシンが一緒になっているVIです。ちゃんとした設計なら良くない実装ですが、関連するVIが多くなるとすべてをNigelにD&Dしなければならないので一つにまとめました。
ちなみに最初にD&Dしたadd.viと次にD&Dしたmain.viをNigelに読み込ませておけば、2つのVIを絡めた質問にも答えてくれます。
コードカバレッジテストをしてもらう
ではmain.viのステートマシンの実装状況をどこまで仕様書通りなのかコードカバレッジテストをしてもらいます。
Nigelにmain.viをD&Dしたあと以下のプロンプトを投げます。
以下の項目を検討して回答してください
- main.viは、以下の仕様書を基に実装しました
- 仕様書通りに実装されているか確認して下さい
- 状態遷移表で回答して下さい# State machine 動作仕様
main.viは以下の動作仕様に基づいてステートマシンとして実装します。
```mermaid
stateDiagram-v2
[*] --> TrayClosed_Stopped
TrayClosed_Stopped --> TrayOpen : Eject
TrayOpen --> TrayClosed_Stopped : Eject
TrayClosed_Stopped --> Playing : Play
Playing --> Paused : Pause
Paused --> Playing : Play
Playing --> TrayClosed_Stopped : Stop
Paused --> TrayClosed_Stopped : Stop
Playing --> TrayOpen : Eject
Paused --> TrayOpen : Eject
```| 現在の状態 | イベント | 次の状態 | 説明 | | ---------------------- | -------- | ------------------ | ------------------------------------ | | **TrayClosed_Stopped** | Eject | TrayOpen | トレイを開く | | **TrayOpen** | Eject | TrayClosed_Stopped | トレイを閉じる | | **TrayClosed_Stopped** | Play | Playing | 再生開始 | | **Playing** | Pause | Paused | 一時停止 | | **Paused** | Play | Playing | 再生再開 | | **Playing** | Stop | TrayClosed_Stopped | 停止 | | **Paused** | Stop | TrayClosed_Stopped | 停止 | | **Playing** | Eject | TrayOpen | 再生中にトレイを開く(強制停止) | | **Paused** | Eject | TrayOpen | 一時停止中にトレイを開く(強制停止) |
状態遷移は、9経路あり、実装したのは以下の6つのパスだけです。
果たして分析できるでしょうか?!
TrayClosed_Stopped→TrayOpen : Eject
TrayClosed_Stopped --> Playing : Play
Playing --> TrayOpen : Eject
Paused --> TrayOpen : Eject
Playing --> Paused : Pause
Paused --> Playing : Play
コードカバレッジテストの結果
さて結果は、
あれ?実装していないStopが実装されている事になっている。。。
コード上は下図のようにPlaying状態時のStopイベントはスルーなのに、状態が遷移していることになってますね。
VIを更新して処理を明示してみます。更新のたびにNigelにD&Dするのがなにげに手間です。
結果は、以下のように実装されていると明言しています。
うーん。これは荷が重かったのか??
では逆に、未実装項目(以下の経路)を実装して、実装したことを認識するかどうかを試してみます。
TrayOpen --> TrayClosed_Stopped : Eject
あれ?未実装のままだ。
もしかしてNigelの中で新しいVIの情報が更新されていないのか?
まとめ
Nigelはコード生成は出来ないがVIを読み込めるので、コードカバレッジテストが出来るかどうかを簡単なステートマシンで試してみました。
その結果は、上記の通りでどこまで正しく認識できているのか不明です。
結果も怪しいので、まだテストに使えるレベルではないことがわかりました。
ここ数ヶ月で開発環境は大きく変革をして、AIエージェントでの開発はノーコード開発が出来るレベルになっています。
そこからするとNigelはChatGPT 4の出始めの頃のレベルでしょうか。
今後に期待です。
以上、ドルフィンシステム福島でした。











コメント
コメントを投稿