Quarkus(Kotlin)からNEONへ接続する

はじめに

個人開発について漫然と考えていると、ふと社内でNEONという良さげなDBaaSの風の噂を盗み聞きしました。この記事では普段使っているKotlinとフレームワークQuarkusで、実際にNEONに接続するまでを追った記録です。

参考文献は

https://neon.com/docs/guides/quarkus-jdbc

https://ja.quarkus.io/guides/datasource

になります。基本的にはNEONの記事を追っています。

NEONとはPostgreSQLが使えるクラウドサービスで

が特徴です。詳しくは他の記事を参考にしてみてください12

本記事の構成は

となっております。


サインアップしてプロジェクトを作成する

私はGoogleアカウントでログインしました。

https://neon.com

スクリーンショット 2026-01-30 0.52.33.png

プロジェクトを作成する画面が出現すると思いますが、特に設定することなく進めています。

ダッシュボードからDBへの接続情報を取得する

ダッシュボードに接続するための情報が得られるConnection stringにアクセスしましょう。

neon-connection-string-in-dashboard.png

すると

neon-connection-string-contents.png

という画面が得られます。赤い四角で隠している部分が接続先のDBの設定です。 後ほど、コンフィグファイルの設定に使うので控えておきましょう。

ちなみにconnection stringについてpsql以下はそれぞれ

postgresql://[ユーザ名] : [パスワード] @ [ホスト名] / [データベース名] ? [接続オプション]

に対応しています(可視性のため、空白を多めに入れております)。

Quarkusを立ち上げる

基本的には公式に倣いますが、本記事においてJavaではなくKotlinを使用するため、Quarkusの作成コマンドには気をつけておきます。kotlin extension と--gradle-kotlin-dslオプションに注意してください。

quarkus create app neon-with-quarkus-jdbc \
  --name neon-with-quarkus-jdbc \
  --package-name com.neon.tech \
  --extensions kotlin,jdbc-postgresql,quarkus-agroal,resteasy-reactive \
  --gradle-kotlin-dsl

https://ja.quarkus.io/guides/kotlin

application.propertiesに設定を施す

src/main/resources/の中にapplication.propertiesという設定ファイルがあります。

先ほどConnection stringで取得した情報を、ここで設定します(参照記事)。

quarkus.datasource.db-kind=postgresql
quarkus.datasource.username=<username>
quarkus.datasource.password=<password>
quarkus.datasource.jdbc.url=<url>

PostgreSQL JDBC Driverを使う

あとはsrc/main/kotlinにあるcom.neon.techパッケージの中でPostgresResource.ktを作成します。中身は下記のようにしてみてください。

package com.neon.tech

import javax.sql.DataSource
import jakarta.ws.rs.GET
import jakarta.ws.rs.Path
import jakarta.ws.rs.Produces
import jakarta.ws.rs.core.MediaType

@Path("/postgres")
class PostgresResource(
    private val dataSource: DataSource
) {
    @GET
    @Path("/version")
    @Produces(MediaType.TEXT_PLAIN)
    fun getVersion(): String {
        return dataSource.connection.use { conn ->
            val metaData = conn.metaData
            "${metaData.databaseProductName} ${metaData.databaseProductVersion}"
        }
    }
}

ここまで来ればほぼ終わりです。

接続確認する

./gradlew quarkusDevコマンドでプロジェクトを実行しましょう。

スクリーンショット 2026-01-30 1.30.52.png

localhostがポート8080でリッスンしているので、ここへcurl http://localhost:8080/postgres/versionとリクエストします。するとPostgreSQL 17.7 (bdd1736)%のようなレスポンスが返ってきます。これにて接続の確認が完了です。

Footnotes

  1. https://micro-exits.dev/blog/019550f7-9413-753e-8cab-822d1c6aadad

  2. https://qiita.com/nuko-suke/items/e940ff8ccde35d09f668