本記事はJetBrains公式ブログより引用した内容となります。
引用元:AI for PHP: How To Automate Unit Testing Using AI Assistant
テストと聞くと、テストが重要でありながら退屈だ思われる方もいらっしゃるのではないでしょうか。実行しているときにはあまり楽しくないけれども、後で大きな成果をもたらすとわかっているものの一つです。
では、なぜテストはそんなに不快なのでしょうか?
最大の障害は最初のセットアップにかかる手間です。テストが整えば、プロジェクトの進行中に変更や調整を加えるのは楽しく感じることがわかっています。しかし、最初の一歩が私たちを一番悩ませます。
では、その最初のセットアップであるテストの作成が簡素化できたらどうでしょう?テストの大まかなアウトラインを無料で提供してもらい、それを出発点にして必要に応じて調整することができたら?退屈な作業はコンピュータに任せて、楽しい部分に集中できたらどうでしょう?
ここで、AIが私たちを助けてくれるのです。
最近、JetBrainsはすべてのIDE、特にPhpStormに強力なツールを導入しました。それがJetBrains AIアシスタントです。この記事では、AIアシスタントを使ってプログラミングの退屈な部分を自動化し、テストのもっと面白い部分に集中できる方法について考えてみたいと思います。
AIアシスタントでユニットテストの自動化
ユニットテストの生成は、AIアシスタントが私たちを助ける完璧な例です。次のコードスニペットを見てみましょう:
これは「RFC Vote」というオープンソースプロジェクトから取られたコードスニペットです。プロジェクトの完全なソースコードはここで確認できます。このプロジェクトは、PHPコミュニティがオープンなRFCについて議論できる場を提供します。ユーザーは賛否両論を述べ、PHPの進化について議論を行うことができます。
この特定のクラスは、既存の議論にコメントを作成する役割を担っています。コメントはユーザーに属し、議論への参照を持ち、本文を持っています。さらに、コメントが書かれるたびに、その特定の議論をフォローしているすべてのユーザーに通知が送信されるべきです。
ここでは、AIアシスタントを使用してテストのひな型を生成し、どのように機能するかを確認してみましょう。
まず、この__invoke
メソッドの本文にカーソルを置き、Alt+Enterを押して、コンテキストメニューから「AI Actions | Generate Unit Tests」を選択します。
AIアシスタントが今、このクラスのテストのドラフトバージョンを作成します。AIアシスタントが完了すると、次のようなドラフトバージョンが表示されます:
最も簡単な方法は、「すべて承認(Accept all)」ボタンを押すことです。これにより、適切な場所に新しいテストファイルが作成され、このドラフト実装が実際のテストファイルにコピーされます。ただし、すぐに問題が見つかった場合は、「更新(Refresh)」ボタンを押して、新しい実装を生成することもできます。
かなり便利ですよね?
しかし、少し注意すべき点があります。
まず、すべての生成が最初からうまくいくわけではありません。例えば、いくつかのバージョンでは、Laravelのテストでよく使われるRefreshDatabase
トレイトが含まれていました。しかし、このプロジェクトではデータベーステストの設定が少し異なるため、生成されたコードに少しだけ調整を加える必要がありました。また、AIアシスタントはコードスタイルに完全に一致しないコードを生成することもあります。コードスタイル設定を考慮しようと努力していますが、細かい部分はうまくいかないことがあります。
いくつかの欠点はありますが、私たちの目標は完璧なテストを生成することではなく、そこから発展させることができるひな型を手に入れることだということを忘れないでください。AIアシスタントは、テストしたいことのコンテキストを理解するのが非常に得意で、多くのことを正しく行ってくれます。これにより時間が節約でき、テストのもっと面白い部分に集中できるようになります。
Pestの自動化
2023年は、比較的新しいPestテストフレームワークにとって大きな成長を見せた年でした。PhpStormは、昨年Pestプラグインの開発を引き継ぎました。現在、Pest向けのAIアシスタントサポートは進行中で、次のメジャーバージョンであるPhpStorm 2024.1で利用可能になる予定です。今後のブログ投稿では、PestユーザーがAIアシスタントからどのように恩恵を受けられるかを必ず紹介しますので、お楽しみに。
結論
最小限の手作業でユニットテストを自動的にひな型作成できるというのは、かなりすばらしいことですが、微調整が必要です。
次の記事では、JetBrains AIアシスタントのテスト生成をどのようにさらに微調整して、もっと時間を節約できるかを詳しく見ていきます。
NATTOSYSTEMでは今後もJetBrainsブログ の記事を掲載していきますので、フォローして最新記事をお見逃しなく!