
2026/02/04 17:56
**Ktkit**:Ktor を使ったサーバーアプリケーション構築用 Kotlin ツールキット
RSS: https://news.ycombinator.com/rss
要約▶
日本語訳:
KtKit は、Ktor を使ったサーバーアプリケーション構築を簡素化する軽量な Kotlin‑マルチプラットフォームツールキットです。 依存性注入、JSON 処理、および自動 REST エンドポイント登録を備えたアプリケーションブートストラップを提供し、ボイラープレートを劇的に削減します。
このツールキットはリクエスト処理を標準化します:トレーシング、認証/権限フック、RFC 9457 スタイルの API エラーを追加し、
/api/status/health と /api/status/metrics を公開します。設定は環境変数補完と階層的オーバーライド付きの TOML ファイルから読み込まれます。
クライアント側コードには、Arrow の
Raise を使用した関数型エラーハンドリングを備えた Ktor HTTP クライアント抽象化 (ktkit-ktor-httpclient) が提供され、Bearer トークンと X‑Real‑Name ヘッダー(信頼できるリバースプロキシによって注入された場合のみ安全)をサポートします。データベースアクセスは
ktkit-sqlx4k を介して行われ、PostgreSQL、MySQL/MariaDB、および SQLite でコルーチン優先の SQL サポートを提供し、コンパイル時クエリ検証と監査可能なエンティティを備えます。軽量な Postgres ベースのメッセージキュー (
ktkit-sqlx4k-pgmq) はイベントハンドラ、再試行ロジック、およびシャットダウンヘルパーを追加します。
Arrow の
Raise と Kotlin コンテキストパラメータを通じてエルゴノミクスが向上し、サービスコードは簡潔に保たれつつ明示的なエラーハンドリングと実行コンテキストの伝搬を維持します。プロジェクトは初期開発段階にあり、API はリリース間で変更される可能性があり、本番使用では破壊的変更に直面することがあります。
計画中の拡張には Arrow のレジリエンスライブラリ(Retry、Circuit Breaker)、拡張された例/テスト/ドキュメント、JWT
BearerPrincipalExtractor、および sqlx4k と PGMQ へのより深い統合拡張が含まれます。ビルドコマンドは現在のプラットフォーム用に ./gradlew build、すべてサポートされるプラットフォームを対象とするには ./gradlew build -Ptargets=all です;PostgreSQL 用に Docker‑compose が提供されています。オープンソースで、Yorgos S. (@smyrgeorge) によって作成され、貢献を歓迎しています。
元の表現をそのまま保持したい場合は、単にそれを繰り返してください。
本文
KtKit
Ktor を使ったサーバーアプリケーション構築を高速化する、Kotlin マルチプラットフォーム向け総合ツールキットです。
- 📖 ドキュメント
- 🏠 ホームページ(現在制作中)
使い方
implementation("io.github.smyrgeorge:ktkit:x.y.z")
概要
KtKit は、Ktor を利用したサーバー側アプリケーション開発を加速するために設計された Kotlin Multiplatform ツールキットです。
複数のライブラリを統合し、バックエンド開発で繰り返される作業を一元化するツール群を提供します。
注意 – 初期段階のプロジェクトです:KtKit は継続的に進化しています。実際の運用経験に基づいて抽象化を洗練させる過程で、バージョン間で API が変更される可能性があります。プロダクション環境でも使用できますが、一部破壊的変更が発生することがあります。ご意見・貢献は大歓迎です!
今日の機能
- DI、JSON、REST ハンドラ自動登録を備えた小規模な Ktor アプリケーション起動ロジック
- トレーシング、認可/権限フック、RFC 9457 形式の API エラー処理でリクエストハンドリングを標準化
- ツールキット上に構築されたサービス向け基本的なヘルス・メトリクスエンドポイントを公開
- 環境変数展開とファイル/リソースマージをサポートした TOML 設定ローダー
- 再試行、JSON/TOML ユーティリティ、および KMP 互換のファイル/HTTP/プロセスアクセス用便利ヘルパー
- Arrow(Raise/Either)と Kotlin のコンテキストパラメータを活用し、エラー処理とコンテキスト伝搬を軽量化
今後予定している機能
- Arrow のレジリエンスライブラリ(Retry, Resource, Circuit Breaker など)の統合
- 豊富なサンプル・テスト・ドキュメントの作成
- JWT 認証用 BearerPrincipalExtractor
- sqlx4k 統合
- PGMQ 統合
- その他アイデアでリストを拡張(🧐)
モジュールと機能
Core (ktkit
)
ktkit- Ktor サーバー起動/停止、JSON 設定、Koin DI、ルーティングのラッパー
- 型付きリクエストヘルパー、
伝搬、エラーマッピングを備えたExecContextAbstractRestHandler
と/api/status/health
の組み込みエンドポイント/api/status/metrics- RFC 9457 に準拠したエラーモデル(
/ErrorSpec
)ApiError - 環境変数置換と層状オーバーライドをサポートする TOML 設定ローダー
セキュリティ:X‑Real‑Name ヘッダー認証
とXRealNamePrincipalExtractorは、ベース64 エンコードされた JSON ヘッダー(XRealNameRestClient)を用いて認証ユーザーを特定します。この仕組みは インターネット上に直接公開することは安全ではありません。x-real-name
このパターンは、信頼できるリバースプロキシまたは API ゲートウェイがアプリケーションの前段に存在することを想定しています:
- ユーザー認証(OAuth, JWT, セッション Cookie など)
- クライアントから送られた
ヘッダーを除去x-real-name - 認証されたユーザー情報で
ヘッダーを設定して転送x‑real‑name
直接インターネットに公開されている場合、任意のクライアントがヘッダーを偽装し、誰でもなりすまし可能です。信頼できるインフラ層(プロキシ/ゲートウェイ)後ろでのみこのエグジスタを利用してください。
Ktor HTTP Client (ktkit-ktor-httpclient
)
ktkit-ktor-httpclientKtor の
HttpClient をベースに、Arrow の Raise で関数型エラー処理を実現したマルチプラットフォーム REST クライアント抽象化です。
- タイムアウト・接続プール・JSON 設定付きの事前構成済み
を作るHttpClientHttpClientFactory - 型付き HTTP メソッド(GET, POST, PUT, PATCH, DELETE 等)を備えた
基底クラスAbstractRestClient - 実装例:Bearer トークン認証用
と X‑Real‑Name ヘッダー認証用BearerRestClientXRealNameRestClient - シールド化された
階層でエラー処理RestClientErrorSpec
sqlx4k Integration (ktkit-sqlx4k
)
ktkit-sqlx4kコルーチン優先の SQL ツールキットで、Kotlin Multiplatform 用にコンパイル時クエリ検証を提供。PostgreSQL, MySQL/MariaDB, SQLite をサポートします。
- エラーマッピングとトレース付きトランザクション用
ヘルパーDatabaseService
用のフックを持つcreatedAt/createdBy/updatedAt/updatedByAuditableRepository- Auditable エンティティを扱うサービス向け
インターフェースとAuditableDatabaseService
拡張関数save() - sqlx4k の
システムで JSON 列シリアライズを行うValueEncoder
ユーティリティJsonSupport
PGMQ Integration (ktkit-sqlx4k-pgmq
)
ktkit-sqlx4k-pgmqAWS SQS や RSMQ に似た軽量メッセージキュー。PostgreSQL 上に実装されています。
- Pgmq ラッパーとトレース/ユーザー伝搬付き
AbstractPgmqEventHandler - 再試行・シャットダウン処理を備えたコンシューマライフサイクルヘルパー
Ergonomics (Arrow + context‑parameters)
以下の例モジュールは、Arrow の Raise と Kotlin のコンテキストパラメータがどのようにサービスコードを簡潔に保ちつつ、エラーと実行コンテキストを明示的に扱うかを示しています。
class TestService( override val db: Driver, override val repo: TestRepository, ) : AuditableDatabaseService<Test> { val log = Logger.of(this::class) context(_: ExecContext, _: QueryExecutor) private suspend fun findAll(): List<Test> = db { repo.findAll() } context(_: ExecContext, _: Transaction) suspend fun test(): List<Test> { log.info { "Fetching all tests" } return findAll().also { log.info { "Fetched ${it.size} tests" } } } }
ExecContext はコルーチンコンテキスト要素で、Arrow の Raise と log4k のトレーシングコンテキストも実装しています:
class ExecContext( val reqId: String, val reqTs: Instant, val principal: Principal, ) : Raise<ErrorSpec>, TracingContext by tracing, CoroutineContext.Element
これにより、ハンドラやサービスはドメインエラーを発生させつつ、トレーシング情報とリクエストメタデータへアクセスでき、スレッドパラメータを手動で渡す必要がなくなります。コンテキストは
CoroutineContext と関数署名のコンテキストパラメータ両方で伝搬されます。
例
こちら のサンプルアプリケーションをご覧ください。
ビルド & 開発
ビルド
# JVM と現在のプラットフォーム向けに全モジュールをビルド ./gradlew build # サポートされるすべてのプラットフォーム用に全モジュールをビルド ./gradlew build -Ptargets=all
Docker 設定
プロジェクトには PostgreSQL 用の
docker‑compose.yml が付属しています:
services: postgres: image: postgres:15 environment: POSTGRES_USER: ktkit POSTGRES_PASSWORD: password POSTGRES_DB: ktkitdb ports: - "5432:5432"
コントリビューション
これはオープンソースプロジェクトです。貢献は大歓迎です!
ライセンス
リポジトリ内のライセンス情報をご確認ください。
関連プロジェクト
- log4k – トレーシング付きマルチプラットフォームロギング
- sqlx4k – マルチプラットフォームデータベースアクセス
作者
Yorgos S. (@smyrgeorge)