【ITニュース解説】Building an AI SQL Translator with Java, Spring Boot, and OpenAI
2025年09月15日に「Dev.to」が公開したITニュース「Building an AI SQL Translator with Java, Spring Boot, and OpenAI」について初心者にもわかりやすく解説しています。
ITニュース概要
Java、Spring Boot、OpenAIを使い、自然言語で質問するだけでSQLクエリを生成するAI SQL Translatorの構築法を解説。Spring AIを使えば、システムエンジニア初心者でもAI機能を簡単に組み込み、データベース操作を効率化できる。
ITニュース解説
このニュース記事は、JavaとSpring Boot、そしてOpenAIというAI技術を組み合わせて、自然な言葉で質問すると自動的にSQLクエリを生成してくれる「AI SQL翻訳ツール」を開発する方法を解説している。データベースに慣れていない人にとって、特定の情報を取得するために正確なSQL文を書くのは難しいことが多い。例えば、「2022年以降に入社した全ユーザーを検索する」といった問いに対して、適切なSQL構文を知らなくても、英語で質問するだけで瞬時に正しいSQLクエリが得られるようにするのが、このツールの目的である。
このツールを実現するために、Java開発者がAI機能をアプリケーションに簡単に追加できるようにする新しいライブラリ「Spring AI」が利用されている。Spring AIはOpenAIのようなAIサービスと容易に連携し、Spring Bootとスムーズに動作するため、複雑なAIのコードを自分で書く必要がなく、ライブラリがそのほとんどを処理してくれるのが大きな利点である。
プロジェクトの開始は、まずSpring Initializrというウェブサイトを利用して、基本的なSpring Bootプロジェクトのひな形を作成するところから始まる。ここでは、プロジェクトの種類としてMaven、言語としてJava 21、Spring Bootのバージョン3.5.x、そしてプロジェクト名などを設定する。さらに、Webアプリケーション開発に必要な「Spring Web」や、AI機能を使うための「Spring AI OpenAI」、オプションで簡単なデータベースである「H2 Database」といった依存関係を追加する。これらの依存関係は、プロジェクトが外部のライブラリ(機能の部品)を利用するために指定するもので、pom.xmlというプロジェクトの設計図のようなファイルに記述される。特にSpring AI OpenAIは、Spring Initializrでは直接選べない場合があるため、後でpom.xmlファイルに手動で追加する必要があることを示している。pom.xmlには、JavaのバージョンやSpring AIのバージョン、そしてそれらのライブラリをどこからダウンロードするかを示すリポジトリ情報なども設定される。
次に、OpenAIのAIサービスを利用するための「APIキー」を準備する必要がある。これは、OpenAIのプラットフォームにアクセスし、アカウントを作成またはログインした後、「View API Keys」セクションで新しいキーを生成することで取得できる。このAPIキーはAIサービスへのアクセス権限を与える「鍵」であり、非常に重要であるため、生成後はすぐにコピーして安全な場所に保管し、決してコードの中に直接書き込んだり、GitHubなどの公開プラットフォームにアップロードしたりしてはいけない。APIキーは、アプリケーションの設定ファイルであるapplication.ymlにspring.ai.openai.api-keyとして設定される。また、使用するAIモデル(例えばgpt-4o-mini)や、アプリケーションが起動するポート番号(例:8080)もここで設定する。
アプリケーションのコードは、いくつかの役割に分けて構成される。
まず、「dto」フォルダ(パッケージ)には、SqlRequest.javaというデータ転送オブジェクト(DTO)が作成される。これは、ユーザーが入力する自然言語の質問(question)を、プログラム内でやり取りするための単純なデータ構造である。質問の内容を保持するためのフィールドと、その値を取得・設定するためのメソッド(getter/setter)が含まれる。
次に、「service」フォルダにはSqlAiService.javaというサービス層のクラスが作成される。このクラスは、AIとのやり取りを担当するアプリケーションの核となるロジックを持つ。@Serviceというアノテーションが付けられており、これがアプリケーションのビジネスロジックを担うコンポーネントであることを示している。ChatClientというSpring AIのコンポーネントを使用してOpenAIのAIモデルと通信し、ユーザーからの質問をSQLクエリに変換する。具体的には、「あなたはSQLのエキスパートです。自然言語の質問を有効なSQLクエリに変換してください」といった指示(プロンプトテンプレート)をAIに渡し、その指示の中にユーザーからの質問を埋め込んでAIに送信し、AIが生成したSQLクエリを受け取る。
最後に、「controller」フォルダにはSqlController.javaというRESTコントローラーが作成される。このクラスは、外部からのHTTPリクエストを受け付けて処理するアプリケーションの窓口である。@RestControllerというアノテーションが付いており、HTTPリクエストを処理してJSONなどのデータを返すWeb APIであることを示している。@RequestMapping("/api/sql")によって、このコントローラーが処理するURLのパスが/api/sqlで始まることを定義している。@PostMapping("/generate")というアノテーションが付いたgenerateSqlメソッドは、/api/sql/generateというURLへのHTTP POSTリクエストを処理する。このメソッドは、リクエストの本文(@RequestBody)からSqlRequestオブジェクトとしてユーザーの質問を受け取り、それをSqlAiServiceに渡してSQLクエリを生成させ、その結果をクライアントに返す。
アプリケーションが完成したら、curlコマンドなどのツールを使って動作を確認できる。例えば、「Get all users older than 25」という質問をPOSTリクエストで送ると、AIは「SELECT * FROM users WHERE age > 25;」のような適切なSQLクエリを返す。他にも、「Find all employees who joined after 2022」という質問には「SELECT * FROM employees WHERE join_date > '2022-12-31';」と、また「Show the average salary of employees in each department」という集計クエリの質問には「SELECT department, AVG(salary) FROM employees GROUP BY department;」といったSQLクエリを生成する。
この記事で構築されたAI SQL翻訳ツールは、Java、Spring Boot、そしてOpenAIを活用して、自然な英語の質問をSQLクエリに変換するシンプルなアプリケーションである。これはあくまで出発点であり、今後は実際のデータベースと連携させてクエリを実行したり、データベースのスキーマ情報をAIに与えてより正確なクエリを生成させたり、あるいは使いやすいユーザーインターフェースを追加したりするなど、さらなる拡張の可能性がある。Spring AIを利用することで、JavaアプリケーションにAI機能を統合することが、非常に簡単かつ強力に実現できることを示している。