Exposedのセットアップ:データベース接続とTransaction DSL
データベースに接続し、Exposedを設定して、トランザクション内でコードを実行します。
「Exposedのセットアップ:データベース接続とTransaction DSL」はCoddyKit上の無料Kotlin Academyレッスンです。 これはレッスン1/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはKotlin Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Kotlin Academyコースには全4レッスンが含まれています。
Exposedとは
Exposedは、JetBrainsが提供するKotlin向けの軽量なSQLフレームワークです。2つのレベルがあり、Query DSL(型安全なSQL式)とDAO layer(Active Record形式のエンティティ)を利用できます。どちらも明示的なトランザクション内で実行します。
Exposed依存関係の追加
コア、JDBCドライバーブリッジ、使用するデータベースドライバーを追加します:
dependencies {
implementation("org.jetbrains.exposed:exposed-core:0.52.0")
implementation("org.jetbrains.exposed:exposed-jdbc:0.52.0")
implementation("org.jetbrains.exposed:exposed-dao:0.52.0")
implementation("com.h2database:h2:2.2.224") // or postgresql driver
implementation("com.zaxxer:HikariCP:5.1.0") // connection pooling
}データベースへの接続
起動時にDatabase.connect()を1回呼び出します。本番環境ではHikariDataSourceを渡し、テストでは単純なJDBC URLで問題ありません:
import org.jetbrains.exposed.sql.Database
// Simple (dev/test)
Database.connect(
url = "jdbc:h2:mem:test;DB_CLOSE_DELAY=-1",
driver = "org.h2.Driver"
)
// Production with HikariCP
Database.connect(HikariDataSource(HikariConfig().apply {
jdbcUrl = "jdbc:postgresql://localhost/mydb"
username = "user"
password = "pass"
maximumPoolSize = 10
}))transaction { }ブロック
Exposedのすべての操作はtransaction { }ブロック内で実行する必要があります。Exposedは処理が成功するとコミットし、捕捉されない例外が発生するとロールバックします:
transaction {
// all DB operations here
SchemaUtils.create(Users)
}コルーチン対応トランザクション
コルーチンに対応したトランザクションには、exposed-r2dbcのnewSuspendedTransaction { }、またはexposed-spring-boot-starterを使用します。Ktorでは、ブロッキング処理であるExposedの呼び出しをwithContext(Dispatchers.IO) { transaction { ... } }でラップします:
suspend fun findUser(id: Long): User? = withContext(Dispatchers.IO) {
transaction {
UserEntity.findById(id)?.toUser()
}
}SchemaUtils:テーブルの作成と削除
存在しないテーブルを作成するにはSchemaUtils.create(Table1, Table2)を使用し、テーブルを削除するにはSchemaUtils.drop()を使用します。アプリケーション起動時に、transaction { }内で呼び出します:
transaction {
SchemaUtils.create(Users, Posts, Comments)
}Ktorでの接続設定
サーバー起動時に1回だけ実行されるよう、Applicationモジュールでデータベースを初期化します:
fun Application.configureDatabase() {
val dbUrl = environment.config.property("ktor.database.url").getString()
Database.connect(dbUrl, driver = "org.postgresql.Driver",
user = "...", password = "...")
transaction { SchemaUtils.create(Users) }
}トランザクション分離レベル
より強い、またはより弱い整合性保証が必要な場合は、transaction()に分離レベルを渡します:
transaction(Connection.TRANSACTION_SERIALIZABLE) {
// serializable isolation
}ネストしたトランザクション
デフォルトでは、ネストしたtransaction { }の呼び出しは外側のトランザクションに参加します。独立したトランザクションを取得するには、transaction(db, outerTransactionIsEmpty = false) { }またはセーブポイントを使用します。
SQLのログ出力
開発中に生成されたクエリを確認できるよう、SQLログを有効にします。トランザクションブロック内でStdOutSqlLoggerまたはカスタムロガーを設定します:
transaction {
addLogger(StdOutSqlLogger)
// ...
}コネクションプールのベストプラクティス
本番環境では必ずHikariCP(または同様のもの)を使用します。maximumPoolSizeはサーバーのスレッド数に合わせて設定し、connectionTimeoutはプールが枯渇したときに速やかに失敗するよう設定します。本番環境ではプールの使用状況を監視します。
クイックチェック
Exposedのtransaction { }ブロック内で捕捉されない例外がスローされると、どうなりますか?
振り返り:ExposedのセットアップとTransaction DSL
重要なポイント:
- 起動時に
Database.connect()で1回接続します(本番環境ではHikariCPを使用します) - すべてのDB操作を
transaction { }内で実行します — 成功時にコミットし、例外発生時にロールバックします - トランザクション内で
SchemaUtils.create()を使用してテーブルを作成/削除します - コルーチンのコンテキストでは、ブロッキング処理であるExposedの呼び出しを
withContext(Dispatchers.IO)でラップします - 開発中は
StdOutSqlLoggerを有効にして、生成されたSQLを確認します
AI チューターと学ぶ Kotlin — 無料
ブラウザでリアルコードを書いて実行し、24/7 の AI チューターから瞬時にサポートを受け、ウェブまたはアプリで続きから学習できます。
- コース
- 51
- レッスン
- 203
よくある質問
「Exposedのセットアップ:データベース接続とTransaction DSL」レッスンは無料ですか?
はい。「Exposedのセットアップ:データベース接続とTransaction DSL」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Kotlin Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Kotlin Academyコースには全4レッスンが含まれています。
「Exposedのセットアップ:データベース接続とTransaction DSL」で何を学びますか?
データベースに接続し、Exposedを設定して、トランザクション内でコードを実行します。 ブラウザで直接実行するハンズオンコードでKotlin Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
Kotlin Academyを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのKotlin Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン1/4です。
「Exposedのセットアップ:データベース接続とTransaction DSL」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このKotlin Academyレッスンでコードを書いて実行できますか?
はい。すべてのKotlin Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- Exposedのセットアップ:データベース接続とTransaction DSL
- Table DSLによるテーブル定義
- Query DSLによるCRUD:insert、select、update、delete
- Exposed DAO:Entityクラスとリレーションシップ