CopilotやChatGPTを活用したJavaの最新開発手法DRANK今年前半のIT業界におけるトレンドはAIです。このAIを活用した開発により、開発生産性は大幅に向上します。活用したJavaの開発方法についてご紹介します。Java20リリース記念!最新動向、そして未来のセッション書き起こし記事になります。イベントページのタイムテーブルから、その他のセッションに関する記事もお読み頂けますので、一度アクセスしてみてください。本セッションの登壇者セッション動画Microsoftの寺田佳央と申します。Copilotを活用されていない方も多いので、今回はこれらを使ったことがない方向けに、生成系AIが何ができるのかをご紹介したいと思います。MicrosoftとAIの沿革MicrosoftとOpenAIは2019年からパートナーシップを結んでおり、2023年初頭にはMicrosoftがOpenAIに100億ドルの投資をしていると新聞や各メディアで報じられています。Copilotのような製品の共同開発、ChatGPTのMicrosoft製品へのセキュアな統合/企業環境向けの提供に取り組んでいます。Edgeの内部でChatGPTを使用し、これまでとは異なる新たな検索体験を提供したり、Office製品などにもChatGPTを取り込み、AIをビジネスに活用するフェーズが始まりつつあります。Copilotを使ったJava開発のデモJavaコードの自動生成このデモで使用するJavaプロジェクトでは、商品を管理するProductServiceクラスにProductを検索するための2つのメソッドを実装しています。すべてのProductをListとして取得するgetProducts指定したIDのProductを取得するgetProductこれらの検索用のメソッドのみが含まれるProductServiceのコードの中でEnterキーを押して新しい行を挿入すると、createProduct(作成)、updateProduct(更新)、deleteProduct(削除)といった、必要になるであろう各メソッドのコードが自動的に生成されます。これまでもIDEの機能でコードを途中まで書けばその行の残りを補完することはできましたが、上記のようなメソッド全体のまとまった生成はコード補完とは一線を画しています。メソッドの機能をコメントに記述してコードを生成することもできます。オブジェクトからJSON文字列を生成する」というコメントを記述すると、その通りのコードを提案してくれます。「指定したファイルからファイルの内容を読み込んで表示する」という機能だけをコメントに記述するとFileReaderを使用したやや古い実装のコードが生成される場合があります。ここでさらに「実装にはNIO.2を利用する」と追記すると、FilesやPathクラスを使ったコードが生成されます。このようにコメントの書き方次第で生成されるコードも毎回変わるため、生成されたコードが意図にあっているか評価/判断して利用する必要があります。20ファイル程度)ある場合は、既存のJavaコードからコードの書き方を学習し、それに応じて似たようなコードを生成してくれます。30行ほどの長いコードも生成されるようになり、開発生産性も向上します。設定ファイルの自動生成ほかに私自身が便利だと思うのは、プロパティファイル編集時のコード生成です。このファイルではSpringのdatasourceのurlプロパティのみ記述していますが、プロパティ内に空行を追加するとusernameやpasswordなどのほかに指定できるプロパティを自動的に提案してくれます。設定プロパティをすべて把握することは難しいですが、このようにAIがプロパティを提案してくれることで、プロパティで設定可能な項目を素早く理解することができます。Copliot拡張機能をインストールします。Copilotには30日間の試用期間があり、その後は月額利用料が必要ですが、今回ご紹介したようなAIによるコードの自動生成/コーディングのアシストを利用できます。Labs拡張機能をインストールすると、プレビュー版ではありますがさらに高度な機能が利用できます。Copilotにコードを説明してもらったり、JavaのコードをPythonに変換したりすることができます。Xが発表され、プレビュー版として一部ユーザーが利用できるようになっています。chatは、システム開発やプログラミングに特化したChatGPTと考えることができます。RepositoryからすべてのProductを取得し、それらをListとして返します...」と説明してくれます。「stream(productRepository.findAll()この部分は何を行っているのですか?」と質問すると、「この部分は、ProductRepositoryからすべてのProductを取得して、それらの要素を含むストリームを作成しています...」と説明してくれます。どのようなコードであっても上記のようにわかりやすく説明してくれるので、コードレビューの際にわからないコードがあった場合もチャットで質問して簡単に理解することができます。これまでのJava開発では、プログラムを実行してなんらかの例外が発生した場合にはまずエラーメッセージをもとにWeb検索をして調査することが多かったと思います。今後は、例外のスタックトレースとともに「上記の例外はどういうエラーの内容か教えてください」と質問すれば、「この例外は、JavaプログラムがSSLコンテキストを作成する際に、デフォルトのキーストア形式が無効であることを示しています...」と説明してくれますし、「Javaのキーストアの内容を確認する方法を具体的に教えてください」と追加で質問すると、keytoolコマンドで確認する方法を教えてくれます。Copilotは複数の方法で開発をアシストしてくれるので、実際の開発環境でお試しいただければ手放せなくなるほど便利であることがおわかりいただけると思います。仮想のECサイトをサンプルにしてChatGPTをどのように開発に活用できるかご紹介しましょう。ECサイトにはユーザーからのお問い合わせを受け付けるページを用意することが一般的ですが、これまでは受け取ったお問い合わせやクレームに人間が対応する必要がありました。このようなお問い合わせ対応をChatGPTで自動化することができます。「先日、こちらで購入した時計が置き配設定していないにも関わらず、置き配されていました。「大変申し訳ございません」(謝罪)「今後、このようなことがないよう、配送業者への指示を徹底いたします。Fitnessをどうぞよろしくお願いいたします」(結び)を含めた返答を自動的に生成してくれます。対応方法のカスタマイズこのように、これまで人間が行っていた問い合わせへの対応をChatGPTで自動化して業務を効率化することができます。ChatGPTはさまざまな質問に対して回答できてしまうため、お問い合わせ内容をそのままChatGPTに渡すようにしていると、「品川の美味しいレストランを教えてください」などのECサイトとは関係のない質問にも回答してしまうことになります。Serviceに設定してあります。StidioのChatGPTプレイグラウンドでは「アシスタントのセットアップ」に下記のようなシステムメッセージを事前に設定しています。Fitnessというオンライン・電子商取引Webサイトのサポート対応担当者です。問い合わせされた内容から、製品、お問い合わせ内容、カテゴリ、感情分析を分類し、さらに推奨する返信メッセージをJSONフォーマットに変換し出力します。オンライン、電子商取引で扱う商品以外の問い合わせには、製品はNONE、問い合わせ内容はINVALID、カテゴリはNOT_SUPPORTED、returnmessageは定型文のJSONを返します。この設定により、「品川の美味しいレストランを教えてください」などの無関係な質問に対して回答を断るようになっています。ほかにも例外として扱えるトピックを指定するなど、柔軟な指定が可能です。システムメッセージに加えて、具体的なユーザーの入力(想定問い合わせ)と回答方法を2例定義しています。12345)」がまだ届きません。現在はどのような状況か教えてください。12345)」がまだ届きません。現在はどのような状況か教えてください。問い合わせ内容のカテゴリをChatGPTが自動的に分類します。クレームであればNEGATIVE、お褒めの言葉であればPOSITIVEのように、文章から感情を読み取って分類します。「今日は何の日か教えてください。Fitnessのオンラインサポート担当であり、お問い合わせ内容に関する情報は提供できません。お客様の購入商品やサービス、フィードバックに関するお問い合わせに..."}ほかにも回答内容を調整するパラメーターを設定できます。回答のランダム性・精度の制御、温度・上位Pのどちらかを調整する場合は、もう一方はデフォルトのままにするChatGPTプレイグラウンドでは、これらの設定を行い、サンプルの問い合わせを入力して出力内容を確かめることができます。実際のビジネスへの活用方法このサンプルのようにOpenAIを直接フロントにしてユーザーとやり取りさせると、OpenAIがユーザーにどのように返答しているかわからなくなってしまいます。"NEGATIVE"であれば優先して対応する、categoryによって対応方法を変えるなど)ことになります。このような方法でChatGPTを現実のビジネスに活用できますので、ぜひお試しください。上記のサンプルのように構築するシステム内でChatGPTを活用する以外にも、開発現場でChatGPTを活用することもできます。1つ目の活用方法はサンプルコードの生成です。17を使ったGUIプログラムのサンプルコードが生成されます。オセロゲームができた)。2つ目の活用方法はコード解析です。試しに600行程度のCOBOLコードをChatGPT(gpt-4ではトークン数上限で解析できないためgpt4-32kを使用)に与えたところ、そのコードが何をしているか解説したり、Javaコードに変換することができました。マイグレーションしてみた)ChatGPTを開発現場で活用する場合、質問する相手が人間ではないのでどんなつまらないことを何度質問しても怒られることがないというメリットがあります。初心者にはもちろん役に立ちますし、エンタープライズの大規模システムのコード移行でもうまく活用できますので、ぜひお試しください。CopilotとChatGPTを使ったJavaベースのシステム開発のデモをご紹介しました。CopilotやChatGPTによるコード生成/コード解析は開発生産性を飛躍的に向上させ、会話形式でAIに質問できることでより効率的な開発現場を実現できます。ChatGPTによるお問い合わせ対応のデモのように、柔軟に設定できる生成AIをシステムで活用することでビジネスそのものの効率化につながります。このように複数の面で活用のメリットがあるので、まだ生成AIをお試しいただいていない場合はこの機会にぜひお試しください。ご清聴ありがとうございました。Java20リリース記念!最新動向、そして未来のセッション書き起こし記事になります。イベントページのタイムテーブルから、その他のセッションに関する記事もお読み頂けますので、一度アクセスしてみてください。