java-quarkus-development について
Quarkus で Java アプリケーションを開発するためのベストプラクティスガイドです。マイクロサービスやコンテナ化・サーバーレスアプリを開発する人向けに、開発フロー、設定、データアクセス、テスト、性能、可観測性を扱います。
主な機能
- 01Quarkus 開発モードと Dev Services
- 02型安全な設定と依存性注入
- 03REST API とリアクティブプログラミング
- 04Panache によるデータアクセスと移行
- 05テスト、性能、可観測性の指針
活用シーン
- 01Quarkus サービスの設定方法の計画
- 02REST エンドポイントの開発とテスト
- 03データベース用エンティティとクエリの整理
- 04ネイティブイメージとヘルスチェックの準備
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ mindrally/ skills --skill java-quarkus-developmentインストール後、Claude Code で/java-quarkus-developmentを入力して読み込まれたか確認します。
詳細
Java Quarkus 開発のベストプラクティス
基本原則
- Quarkus のベストプラクティスに従い、クリーンで効率的かつ十分に文書化された Java コードを記述します
- GraalVM のネイティブビルドを活用して、起動を高速化し、メモリ使用量を最小限に抑えます
- 一般的な機能には Quarkus エクステンションを活用します
- コンテナ化された環境やサーバーレス環境へのデプロイを前提に設計します
- SOLID 原則とマイクロサービスアーキテクチャのパターンに従います
開発ワークフロー
Quarkus 開発モード
- ライブリロードによる迅速な反復開発には
quarkus devを使用します - 開発中は継続的テストを活用します
- デバッグや設定の確認には Dev UI を使用します
- ローカル開発では Dev Services を活用します
設定
型安全な設定
- 型安全な設定のインジェクションには
@ConfigPropertyを使用します - 関連する設定は
@ConfigMappingインターフェースでまとめます - 起動時に設定を検証します
- 設定プロパティを文書化します
プロファイルベースの設定
- 環境ごとの設定には
%dev、%test、%prodのプレフィックスを使用します - 本番環境では環境変数を使って設定を上書きします
- 機密情報をソース管理に含めないようにします
- ローカル開発には
.envファイルを使用します
依存性注入
CDI アノテーション
- 依存性注入には
@Injectを使用します - 実装を識別するには
@Namedを使用します @Singleton、@ApplicationScoped、@RequestScopedを適切に使い分けます- 必須の依存関係にはコンストラクターインジェクションを優先します
Bean の検出
- Quarkus のビルド時 Bean 検出の仕組みを理解します
- 条件付き Bean には
@IfBuildProfileを使用します - ネイティブビルドではリフレクションに依存するパターンを避けます
REST API 開発
RESTEasy Reactive
- エンドポイントの定義には
@Path、@GET、@POSTなどを使用します - 適切な HTTP ステータスコードを返します
- 入力検証には
@Validを使用します - 一貫性のあるエラーレスポンスを実現するため、例外マッパーを実装します
リアクティブパターン
- リアクティブプログラミングには Mutiny を使用します
- 非同期処理には
UniとMultiを活用します - 適切な場面ではリアクティブコードと命令型コードを組み合わせます
データアクセス
Panache を使用した Hibernate ORM
- JPA パターンを簡素化するために Panache を使用します
- Active Record パターンまたは Repository パターンを活用します
- 組み込み操作を利用するエンティティには
PanacheEntityを使用します findメソッドやlistメソッドでカスタムクエリを実装します
データベース操作
- マイグレーションには Flyway または Liquibase を使用します
- Agroal でコネクションプーリングを設定します
- ノンブロッキング I/O にはリアクティブデータベースクライアントを使用します
テスト
JUnit 5 との統合
- 統合テストには
@QuarkusTestを使用します - ネイティブイメージのテストには
@QuarkusIntegrationTestを使用します - 異なる設定にはテストプロファイルを活用します
REST エンドポイントのテスト
- エンドポイントのテストには rest-assured を使用します
- 成功するケースとエラーになるケースの両方をテストします
- レスポンスボディとステータスコードを検証します
- 認証と認可をテストします
パフォーマンスの最適化
ネイティブイメージの最適化
- 本番環境向けに GraalVM でネイティブイメージをビルドします
- 開発中もネイティブビルドを定期的にテストします
- 必要に応じて
@RegisterForReflectionを使用します - リフレクションの使用を最小限に抑えます
メモリと起動
- コンテナ内のメモリ使用量を監視します
- サーバーレス環境のコールドスタートに最適化します
- 適切な場面では遅延初期化を使用します
可観測性
ヘルスチェック
- ライブネスプローブとレディネスプローブには MicroProfile Health を使用します
- 依存関係に対するカスタムヘルスチェックを実装します
- ヘルスエンドポイントに基づいて Kubernetes のプローブを設定します
メトリクス
- アプリケーションのメトリクスには MicroProfile Metrics を使用します
- メトリクスを Prometheus 形式でエクスポートします
- ビジネス操作向けのカスタムメトリクスを追加します
分散トレーシング
- OpenTracing/OpenTelemetry との統合を使用します
- サービス間でトレースコンテキストを伝播します
- 本番環境に適したサンプリングを設定します
セキュリティ
- Quarkus Security エクステンションを使用します
- OIDC または JWT で認証を実装します
- Web クライアント向けに CORS を設定します
- すべての入力を検証し、サニタイズします
- 本番環境では HTTPS を使用します
コンテナ化
- Quarkus コンテナイメージ拡張機能を使用します
- ネイティブイメージ用のマルチステージ Dockerfile を作成します
- リソース制限を適切に設定します
- distroless または最小限のベースイメージを使用します
コメント
Markdown 対応