java-quarkus-development
GraalVMネイティブビルドによる高速起動・省メモリを実現するクラウドネイティブアプリケーション構築のための、Java Quarkus開発ガイドラインを提供するスキルです。Quarkusを用いた開発のベストプラクティスやプロジェクト設定など、実践的な指針をサポートします。
description の原文を見る
Java Quarkus development guidelines for building cloud-native applications with fast startup, minimal memory footprint, and GraalVM native builds
SKILL.md 本文
Java Quarkus 開発のベストプラクティス
コアプリンシパル
- Quarkus のベストプラクティスに従い、クリーンで効率的、かつよく文書化された Java コードを記述する
- GraalVM ネイティブビルドによる高速スタートアップと最小限のメモリフットプリントに注力する
- 一般的な機能には Quarkus エクステンションを活用する
- コンテナ化とサーバーレス デプロイメント用に設計する
- SOLID 原則とマイクロサービスアーキテクチャパターンに従う
開発ワークフロー
Quarkus Dev モード
- ライブリロード機能を備えた高速反復開発には
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を活用する - 必要に応じてリアクティブと命令型コードを結合する
データアクセス
Hibernate ORM with Panache
- 簡略化された JPA パターンに Panache を使用する
- Active Record またはリポジトリパターンを活用する
- 組み込み操作には
PanacheEntityを使用する findとlistメソッドでカスタムクエリを実装する
データベース操作
- マイグレーションに Flyway または Liquibase を使用する
- Agroal でコネクションプーリングを設定する
- ノンブロッキング I/O には反応型データベースクライアントを使用する
テスト
JUnit 5 統合
- 統合テストには
@QuarkusTestを使用する - ネイティブイメージテストには
@QuarkusIntegrationTestを使用する - 異なる設定用にテストプロファイルを活用する
REST エンドポイントテスト
- エンドポイントテストには rest-assured を使用する
- 成功とエラーの両シナリオをテストする
- レスポンスボディとステータスコードを検証する
- 認証と認可をテストする
パフォーマンス最適化
ネイティブイメージ最適化
- 本番環境用に GraalVM でネイティブイメージをビルドする
- 開発中に定期的にネイティブビルドをテストする
- 必要に応じて
@RegisterForReflectionを使用する - リフレクションの使用を最小化する
メモリとスタートアップ
- コンテナ内のメモリ使用量を監視する
- サーバーレス コールドスタート用に最適化する
- 適切な箇所で遅延初期化を使用する
観測性
ヘルスチェック
- liveness および readiness プローブに MicroProfile Health を使用する
- 依存関係の カスタムヘルスチェックを実装する
- ヘルスエンドポイントに基づいて Kubernetes プローブを設定する
メトリクス
- アプリケーションメトリクスに MicroProfile Metrics を使用する
- メトリクスを Prometheus 形式でエクスポートする
- ビジネス操作用にカスタムメトリクスを追加する
分散トレーシング
- OpenTracing/OpenTelemetry 統合を使用する
- サービス間でトレースコンテキストを伝播させる
- 本番環境用にサンプリングを適切に設定する
セキュリティ
- Quarkus Security エクステンションを使用する
- OIDC または JWT での認証を実装する
- Web クライアント用に CORS を設定する
- すべての入力を検証およびサニタイズする
- 本番環境では HTTPS を使用する
コンテナ化
- Quarkus コンテナイメージ エクステンションを使用する
- ネイティブイメージ用にマルチステージ Dockerfile をビルドする
- リソース制限を適切に設定する
- distroless または最小限のベースイメージを使用する
ライセンス: Apache-2.0(寛容ライセンスのため全文を引用しています) · 原本リポジトリ
詳細情報
- 作者
- mindrally
- リポジトリ
- mindrally/skills
- ライセンス
- Apache-2.0
- 最終更新
- 不明
Source: https://github.com/mindrally/skills / ライセンス: Apache-2.0
関連スキル
superpowers-streamer-cli
SuperPowers デスクトップストリーマーの npm パッケージをインストール、ログイン、実行、トラブルシューティングできます。ユーザーが npm から `superpowers-ai` をセットアップしたい場合、メールまたは電話でサインインもしくはアカウント作成を行いたい場合、ストリーマーを起動したい場合、表示されたコントロールリンクを開きたい場合、後で停止したい場合、またはソースコードへのアクセスなしに npm やランタイムの一般的な問題から復旧したい場合に使用します。
catc-client-ops
Catalyst Centerのクライアント操作・監視機能 - 有線・無線クライアントのリスト表示・フィルタリング、MACアドレスによる詳細なクライアント検索、クライアント数分析、時間軸での分析、SSIDおよび周波数帯によるフィルタリング、無線トラブルシューティング機能を提供します。MACアドレスやIPアドレスでのクライアント検索、サイト別やSSID別のクライアント数集計、無線周波数帯の分布分析、Wi-Fi信号の問題調査が必要な場合に活用できます。
ci-cd-and-automation
CI/CDパイプラインの設定を自動化します。ビルドおよびデプロイメントパイプラインの構築または変更時に使用できます。品質ゲートの自動化、CI内のテストランナー設定、またはデプロイメント戦略の確立が必要な場合に活用します。
shipping-and-launch
本番環境へのリリース準備を行います。本番環境へのデプロイ準備が必要な場合、リリース前チェックリストが必要な場合、監視機能の設定を行う場合、段階的なロールアウトを計画する場合、またはロールバック戦略が必要な場合に使用します。
linear-release-setup
Linear Releaseに向けたCI/CD設定を生成します。リリース追跡の設定、LinearのCIパイプライン構築、またはLinearリリースとのデプロイメント連携を実施する際に利用できます。GitHub Actions、GitLab CI、CircleCIなど複数のプラットフォームに対応しています。
tracking-application-response-times
API エンドポイント、データベースクエリ、サービスコール全体にわたるアプリケーションのレスポンスタイムを追跡・最適化できます。パフォーマンス監視やボトルネック特定の際に活用してください。「レスポンスタイムを追跡する」「API パフォーマンスを監視する」「遅延を分析する」といった表現で呼び出せます。