あなたの質問がよくわかりません。Ruby はプログラミング言語であり、JRuby は Ruby プログラミング言語のコンパイラです。プログラムが Ruby で実行されているか、JRuby で実行されているかという質問は、単純に意味を成しません。JRuby で実行されている場合は、Ruby で実行されていることになります。JRuby は Ruby の実装であるためです。
それは、「自分が運転している車がフォードか車か、どうすればわかるだろうか?」と尋ねるのと同じです。
実行している Ruby 実装を知りたい場合は、グローバルRUBY_ENGINE
定数を確認できます。実行しているエンジンを普遍的かつ一意に識別することになっていますが、残念ながら次の 3 つの理由で失敗します。
- 一部のエンジンでは、実行されているエンジンがわかりません。たとえば、YARV では であると予想
RUBY_ENGINE
されますが'yarv'
、実際には'ruby'
. そのため、「識別」の部分で失敗します。
- さらに悪いことに、MRI でも です。
'ruby'
これは、実行しているエンジンがわからないだけでなく、同じ値を返すまったく異なるエンジンがあることを意味します。IOW、「ユニーク」部分でも失敗します。
- 最後になりましたが、
RUBY_ENGINE
かなり新しいため、まだすべてのエンジンでサポートされているわけではありません。つまり、「ユニバーサル」部分で失敗します。
それでも、あなたの目的のために
if defined? RUBY_ENGINE && RUBY_ENGINE == 'jruby'
正常に動作するはずです。