本文へスキップ

iOS向けHermes搭載React Native 0.64発表

·4分間の読書
Mike Grabowski
マイク・グラボウスキー
CallstackのCTO兼共同創設者

本日、iOS向けHermesサポートを搭載したReact Native 0.64をリリースします。

iOSでのHermesオプトイン

Hermesは、React Nativeの実行に最適化されたオープンソースのJavaScriptエンジンです。メモリ使用量の削減、ダウンロードサイズの縮小、アプリの利用開始時間(TTI)の短縮により、パフォーマンスが向上します。

このリリースでは、iOSでもHermesを使用してビルドできるようになったことをお知らせできることを嬉しく思います。iOSでHermesを有効にするには、`Podfile`で`hermes_enabled`を`true`に設定し、`pod install`を実行します。

use_react_native!(
:path => config[:reactNativePath],
# to enable hermes on iOS, change `false` to `true` and then install pods
:hermes_enabled => true
)

iOSでのHermesサポートはまだ初期段階であることにご注意ください。さらにベンチマークを実施しているため、オプトインとしています。ご自身のアプリケーションで試していただき、その結果をお知らせいただければ幸いです!

デフォルトで有効化されたインライン要件

インライン要件は、起動時にではなく、使用されるまでJavaScriptモジュールの実行を遅らせることで、起動時間を改善するMetroの設定オプションです。

この機能は数年前からオプトイン設定オプションとして存在し、推奨されてきました。ドキュメントのパフォーマンスセクションに記載されています。追加の設定なしで高速なReact Nativeアプリケーションを実現するために、新しいアプリケーションではこのオプションをデフォルトで有効化しています。

インライン要件は、モジュールのインポートを取得してインライン化するBabel変換です。例として、インライン要件はこのモジュールのインポート呼び出しを、ファイルの先頭から使用されている場所に移動します。

import {MyFunction} from 'my-module';

const MyComponent = props => {
const result = MyFunction();

return <Text>{result}</Text>;
};

const MyComponent = props => {
const result = require('my-module').MyFunction();

return <Text>{result}</Text>;
};

インライン要件の詳細については、パフォーマンスドキュメントをご覧ください。

ChromeでのHermesトレースの表示

昨年、Facebookはメジャーリーグハッキングフェローシップをスポンサーし、React Nativeへの貢献を支援しました。Jessie NguyenSaphal Patroは、Hermesを使用している場合、Chrome DevToolsのパフォーマンスタブを使用してアプリケーションの実行を視覚化する機能を追加しました。

詳細については、新しいドキュメントページをご覧ください。

プロキシサポート付きHermes

Hermesにプロキシサポートを追加し、react-native-firebaseやmobxなどの一般的なコミュニティプロジェクトとの互換性を確保しました。これらのパッケージを使用している場合、プロジェクトでHermesに移行できます。

今後のリリースでAndroidのデフォルトJavaScriptエンジンとしてHermesを導入する予定であるため、Hermes使用時に発生する残りの問題を解決するために取り組んでいます。アプリのHermes導入を妨げている問題がある場合は、Hermes GitHubリポジトリで問題を提起してください。

React 17

React 17には、新しい開発者向けの機能や大きな破壊的変更は含まれていません。React Nativeアプリケーションの場合、主な変更点は新しいJSX変換であり、ファイルでJSXを使用するためにReactをインポートする必要がなくなりました。

React 17の詳細については、Reactブログをご覧ください。

主要な依存関係のバージョンの変更

  • Android APIレベル16〜20を削除しました。Facebookアプリでは、使用率が十分に低いAndroidバージョンに対するサポートを継続的に削除しています。Facebookアプリがこれらのバージョンをサポートしなくなり、React Nativeの主要なテスト対象であるため、React Nativeでもサポートを削除しています。
  • Xcode 12とCocoaPods 1.10が必要です
  • 最小Nodeサポートが10からNode 12に引き上げられました
  • Flipperが0.75.1に引き上げられました

謝辞

0.64を実現するために貢献してくれた何百人ものコントリビューターに感謝します!0.64の変更ログには、このリリースに含まれるすべての変更が記載されています。