
- GitHub Copilot SDK for Java(プレビュー版)がMaven依存関係として公開
- @CopilotToolアノテーションでJavaメソッドをAIツールとして登録可能
- Jakarta EE 11サンプルアプリでエージェントパイプラインの実装を解説
フレームワーク非依存のJava向けCopilot SDK
GitHubは2026年8月10日、Java向けの「GitHub Copilot SDK for Java」をプレビュー版(バージョン1.0.7-preview.1)として公開しました。このSDKは、サーバーサイドのJavaコードからCopilotエージェントのセッション作成、ツール登録、プロンプト送信、構造化レスポンスの受信をプログラム的に行えるクライアントライブラリです。
従来、JavaでAIを活用するにはLangchain4jやSpring AIといったフレームワーク固有のアプローチに依存する必要がありました。今回のSDKは、これらの特定フレームワークに依存しない最初の方法とされています。さらにBYOK(Bring Your Own Key)に対応しており、AIベンダーにも依存しない設計です。
SDKはJakarta EEとSpringの両方を含むサーバー環境で動作します。JDK 17または25(25推奨)と、GitHub Copilotのアクティブなサブスクリプション、Copilot CLI(バージョン1.0.71以降)が必要です。
@CopilotToolでツール定義を簡素化
SDKの中心となるAPIが@CopilotToolアノテーションです。このアノテーションをJavaメソッドに付与すると、モデルが呼び出せるツールとして宣言できます。@CopilotToolParamで各パラメータの説明を記述すると、SDKがJSON Schemaの生成、引数のパース、ディスパッチを自動で処理します。
ただし、このアノテーションベースのツールAPIは現在実験的な機能です。利用するにはMavenビルドで「-Acopilot.experimental.allowed=true」をコンパイラに渡し、アノテーションプロセッサを登録する必要があります。SDKはコンパイル時に$$CopilotToolMetaクラスを生成します。
また、ToolDefinition.from(...)を使えば、ラムダ式でその場にツールを定義することも可能です。.overridesBuiltInTool(true)を指定すると、モデルが既に知っている組み込みツールを意図的に置き換えられます。ツールは別のCDI Beanに定義しても、ToolDefinition.fromObject()でまとめて登録できます。
エージェントループとイベント処理
サンプルアプリは不動産リード管理のエージェントパイプラインです。顧客からの問い合わせを仮想スレッド上で起動したCopilotエージェントが処理し、検証、検索、レポート作成などのフェーズを進めます。セッションの作成と送信は、client.createSession()とsession.sendAndWait()の1行で実行できます。
sendAndWait()の内部では、モデルが推論し、ツールを呼び出し、最終応答を返すまで自動でループします。仮想スレッド上では.get()をブロックしてもプラットフォームスレッドを消費しないため、エージェントを並行実行しても効率的です。
session.on()でイベントを購読でき、ツール呼び出しや結果、アシスタントメッセージのたびにイベントが発生します。サンプルではJakarta WebSocketを使ってブラウザにリアルタイムで状態をプッシュしています。イベントの型をパターンマッチで判定し、AssistantMessageEventから最終レポートを取得するといった処理も可能です。
Jakarta EEとの統合と注意点
SDKはJakarta EEのコンテキストと自然に統合できます。特に重要なのがExecutorパラメータです。Jakarta ConcurrencyのManagedThreadFactoryを使うと、コンテナ管理の仮想スレッドを生成でき、CDIやJNDI、トランザクションのコンテキストが自動的に伝搬されます。Open Liberty 26.xではserver.xmlでmanagedThreadFactoryにvirtual="true"を指定することで仮想スレッド対応のファクトリを利用できます。
これにより、ツールコールバックが実行されるスレッドでも@Injectを使ってJPAリポジトリやデータベースにアクセスできます。サンプルではCDIの@ApplicationScopedでCopilotClientをシングルトン化し、Jakarta Facesのf:websocketでリアルタイム更新、Jakarta Dataの@Repositoryで型安全なDBアクセスを実現しています。
一方、注意点もあります。SDKはプレビュー版であり、アノテーションAPIは実験的です。また、権限処理について、サンプルではPermissionHandler.APPROVE_ALL(すべて許可)を使用していますが、本番環境ではツールごとに検証する適切な権限ポリシーを実装する必要があります。
Java developers no longer have to rely on Java framework-specific approaches to drive AI from their enterprise apps.
Java開発者は、エンタープライズアプリケーションでAIを駆動するために、もはやJavaフレームワーク固有のアプローチに頼る必要はありません。
日本の開発者・IT企業にとっての意味
日本のIT企業がJavaでAIエージェントを組み込む際、これまでLangchain4jやSpring AIといった特定フレームワークへの依存が前提でした。今回のGitHub Copilot SDK for Javaは、Jakarta EEやSpringなど既存のJava資産を活かしたまま、フレームワーク非依存でCopilotエージェントを操作できる選択肢を提供します。特に、仮想スレッドとコンテキスト伝搬の仕組みは、エンタープライズJavaの経験がある開発者にとってなじみやすい設計です。ただし、プレビュー版で実験的機能を含むため、本番適用には十分な検証と、権限ポリシーの実装が求められます。BYOK対応により、将来的にAIベンダーを切り替えたい企業にとっても検討価値があります。
用語解説
- BYOK
- Bring Your Own Keyの略。自前のAPIキーを持ち込んでAIベンダーを選択できる仕組み。
- Jakarta EE
- Java企業向けアプリケーションの標準仕様群。旧Java EEの後継で、オープン標準として開発が進められている。
- 仮想スレッド
- JVMが管理する軽量なスレッド。プラットフォームスレッドより大量に作成でき、ブロック時のコストが低い。
- CDI
- Contexts and Dependency Injectionの略。Jakarta EEにおけるDI(依存性注入)の標準仕様。
出典
Using the GitHub Copilot SDK for Java
https://github.blog/engineering/using-the-github-copilot-sdk-for-java
AI導入も顧問も、お任せください
何から手をつけるか、どこまでAIに任せるか。自社の業務に合わせて整理し、導入から運用まで伴走します。相談だけでも構いません。
AI導入について相談する