APC 技術ブログ

株式会社エーピーコミュニケーションズの技術ブログです。

株式会社 エーピーコミュニケーションズの技術ブログです。

GitLab Duo Code SuggestionsをJavaで試してみる

こんにちは。
クラウド事業部CI/CDサービスメニューチームです。

GitLab Duo Code Suggestionsお試しとして、前にIntelliJにて環境設定しましたが、
こちらを使ってJavaで思いつく限り色々試してみようと思います。
techblog.ap-com.co.jp

試した結果

いくつか試したところを画像として添付します。コメントの下に出ているのが出力された結果となります。
import文やインデントなどについては自力で実装の必要があるためエラーの状態となっています。

コレクション、繰り返し


for-eachやstreamなど色々豊富な書き方がそろっています。
面白かったのが文脈、処理の流れを読み取ってくれることでした。
21行目と36行目で「//println nameList」と打ち込んでいますが、21行目の方はそのままコレクションクラスの出力となっているのに対して、36行目はコレクションの中身の出力となり、結果が異なりました。
直前にコレクションの中身を出力したためだと思われます。

バリデーション



個人的にここはもう少し上手に提案を引き出す文章が無いかなと思ったところ。
Patternクラスの提案であったり、バリデーションの意図などについては汲み取ってくれています。

Getter/Setter


Code Suggestionsで出せるかやってみたところ楽に出せました。

ファイル読み取り


FilrBufferedReaderとなりました。
Filesクラスでやりたかったのですがうまい文が見つからず。


try-with-resourcesは簡単に出せました。
手法の取捨選択は必要なものの、closeやエラー処理は書いてくれるので閉じるの忘れたとか、エラー処理の書き方に苦戦するということはなさそうです。

エラー処理


スローなども含めてやってくれました。

その他


インナークラスについては「static class」と宣言する必要はありそうですが出力できます。
Enumも出力できました。外側だけではなく、Value1などセットでテンプレート形式になっているので親切です。


特にフレームワーク使っていないのでConnectionクラスとPreparedStatementクラスの組み合わせではありますが、
「//create DAO」でDAO作ってくれました。
思わずDAO作ってくれるの!?と声に出てしまいました。

まとめ

まずAIからコードの提案があってそれを使って実装を行うといった体験が非常に新鮮でした。

宣言に関しては手打ちの方が早いかもしれないといったところですが、
処理を思いつくと行った点で、テンプレートや処理の内容については、かなり助けられそうです。
例えばJavaでファイルの読み書きを考えるときは結構書くのが大変だと思っています。
実装方法を調べて、その後APIリファレンスとにらめっこしてtry-catchいらないかなど考えたりと、1から色々調べるのがなかなか手間だなと思ったこともありました。

また、開発時に処理を書く前に先にコメントを書くこともあって、コメントの手間も省けそうだという印象もあります。


注意点としては下記、公式ドキュメントにもある通りです。

docs.gitlab.com

We are continuing to work on the accuracy of overall generated content. However, Code Suggestions might generate suggestions that are:
・Irrelevant.
・Incomplete.
・Results in failed pipelines.
・Potentially insecure.
・Offensive or insensitive.


例えばレビューいらずなど、必ずしも最適な提案をしてくれるということでは無いというところ。
開発のお供としてうまくAIと付き合っていけると良さそうですね。

最後に

弊社はGitLabオープンパートナー認定を受けております。
また以下のようにCI/CDの導入を支援するサービスも行っているので、何かご相談したいことがあればお気軽にご連絡ください。

www.ap-com.co.jp