メインコンテンツへスキップ

Hermesの使用

Hermes は、React Native に最適化されたオープンソースの JavaScript エンジンです。多くのアプリで、Hermes を使用すると、JavaScriptCore と比較して、起動時間の短縮、メモリ使用量の削減、アプリサイズの縮小が実現します。Hermes は React Native でデフォルトで使用されており、有効にするための追加の設定は必要ありません。

バンドルされた Hermes

React Native には、Hermes のバンドル版が付属しています。React Native の新しいバージョンをリリースするたびに、Hermes のバージョンをビルドしています。これにより、使用している React Native のバージョンと完全に互換性のある Hermes のバージョンを使用できるようになります。

この変更は、React Native のユーザーにとって完全に透過的です。このページで説明されているコマンドを使用して Hermes を無効にすることは引き続き可能です。このページで技術的な実装について詳しく読むことができます

Hermes が使用されていることの確認

最近、ゼロから新しいアプリを作成した場合、ウェルカムビューで Hermes が有効になっているかを確認してください。

Where to find JS engine status in AwesomeProject

JavaScript では `HermesInternal` グローバル変数が利用可能になり、Hermes が使用されていることを確認するために使用できます。

jsx
const isHermes = () => !!global.HermesInternal;
注意

JS バンドルを読み込む非標準的な方法を使用している場合、`HermesInternal` 変数が利用可能であっても、高度に最適化されたプリコンパイルされたバイトコードを使用していない可能性があります。`.hbc` ファイルを使用していることを確認し、以下に詳述されているように、前後のベンチマークも行ってください。

Hermes の利点を確認するには、アプリのリリースビルド/デプロイを作成して比較してみてください。たとえば、プロジェクトのルートから。

シェル
npm run android -- --mode="release"

これにより、ビルド時に JavaScript が Hermes Bytecode にコンパイルされ、デバイスでのアプリの起動速度が向上します。

JavaScriptCore への切り替え

React Native は、JavaScript エンジンとして JavaScriptCore を使用することもサポートしています。Hermes をオプトアウトするには、次の手順に従ってください。

Android

`android/gradle.properties` ファイルを編集し、`hermesEnabled` を `false` に戻します。

diff
# Use this property to enable or disable the Hermes JS engine.
# If set to false, you will be using JSC instead.
hermesEnabled=false

iOS

`ios/Podfile` ファイルを編集し、以下の変更を加えてください。

diff
   use_react_native!(
:path => config[:reactNativePath],
+ :hermes_enabled => false,
# An absolute path to your application root.
:app_path => "#{Pod::Config.instance.installation_root}/.."
)