- JRuby は Ruby の生産性と JVM のパフォーマンスを組み合わせた技術で、 JBang はシンプルな依存関係管理と実行環境を提供する
- 二つのツールを組み合わせることで、Ruby と Java ライブラリを統合して活用できる
- JBang: Java/Kotlin/Groovy プログラムを簡単に実行し、依存関係を管理できるツール
- JRuby: JVM 上で動作する Ruby 実装で、Ruby の生産性と JVM パフォーマンスを統合
- JRuby で Java ライブラリを使うために必要な依存関係の管理(Gradle/Maven など)は、複雑で難しい
- JBang を活用して依存関係を簡単に管理し、JRuby スクリプトを実行する方法を試してみることにした
- Docker ベースの環境構成
- Amazon Corretto(JDK)ベースの Docker イメージを使用
- JRuby と JBang をダウンロードおよびインストールして PATH に追加
- Dockerfile を通じて Ruby Gem と Java ライブラリの両方を含める
- 簡易 RunJRuby.java を作成: JBang を介して Java 依存関係を管理し、JRuby スクリプトを実行
ProcessBuilder で JRuby 実行環境を構成
- CLASSPATH 設定で Java 依存関係を JRuby に引き渡す
- Javalin(Java ベースの Web フレームワーク)を JRuby と共に使って REST API を構築
- JWT 認証を追加し、SQLite DB と統合して CRUD API を実装
- Java では HTTP や DB 処理などの高性能ライブラリを活用し、Ruby ではビジネスロジックを処理
- 性能テスト結果
- Apache Benchmark(ab) ツールを使って 1500 件のリクエスト(同時 25 件)でレスポンス時間測定を実行
- 結果: 95% のリクエストが 10ms 以内で処理された
- 最新の Javalin バージョンと Virtual Threads を使い、高いパフォーマンスを提供
- Ruby と Java の長所を組み合わせて、生産性とパフォーマンスの両方を満たす
- GitHub Repo : jbang-jruby-javalin を参照
1件のコメント
Java+Groovy の致命的なメモリリーク
JVM 上でスクリプトを実行する場合、特定の条件下でメモリリークが発生する事例を見たことがあるが、JRuby はどうか気になる。