Docs Menu

React を使用した Electron でのクイック スタート

このページには、「 React App 」を使用してアプリケーションを開発し、Realm を Electron アプリケーションに迅速に統合するための情報が含まれています。

始める前に、以下のものがあることを確認してください。

注意

バージョン要件 - Electron

Realm は、公式にサポートされている Electron バージョンのいずれかで動作します。 ただし、Electron はアップデートごとに常に変化するため、このドキュメントとの互換性のために Electron バージョン13.2 .x を使用することをお勧めします。 公式にサポートされている Electron のバージョンを確認するには、 Electron リリース を確認してください ドキュメント。

注意

バージョン要件 - React.js

このガイドは React.js バージョン17.0 のサポートを使用して作成されています および React アプリ バージョン の作成4 。0 。これら以外のバージョンでは、React.js と React App の作成の両方に新しい依存関係が頻繁に追加されるため、アプリケーションの構築中にエラーが発生する可能性があります。

Realm を使用して Electron アプリケーションを設定するには、次の手順に従います。

1

Create React App を使用してアプリケーションを足場 ツールチェーン。ターミナルに次のコマンドを入力します。

npx create-react-app my_electron_react_application

アプリケーションには、次のファイルが含まれている必要があります。 CSS、サービスワーカー、テストファイルなど、プロジェクト内の一部の追加ファイルは以下には含まれません。

.
|-- package.json
|-- package-lock.lock
|-- public
| |-- index.html
|-- src
| |-- App.js // renderer process
|-- |-- index.js // renderer process

src ディレクトリ内のすべてのJavaScriptファイルは renderer process で実行されます。

注意

各 Electron アプリケーションには 1 つのメイン プロセスのみを含めることができます。 メインのプロセスはウェブページを作成します。 各ウェブページはレンダリング プロセスと呼ばれる独自のプロセスで実行されます。 これについて詳しくは、公式の Electron プロセス モデル を参照してください ドキュメント。

2

React アプリ バージョン4.0 + には、 Web 経由 での React アプリの作成 モジュール。「web-vitals」は Electron 環境ではなく Web で動作するように設計されているため、このモジュールを含めるとアプリケーション構築時に"chunk runtime-main [entry] Cannot convert undefined or null to object"エラーが発生する可能性があります。 このエラーを回避するには、次のコマンドを実行してweb-vitalsパッケージをアンインストールします。

npm uninstall web-vitals

次に、 reportWebVitals.jsファイルを削除します。

rm src/reportWebVitals.js

最後に、 src/index.jsファイルから次の行を削除します。

import reportWebVitals from './reportWebVitals';
reportWebVitals();
3

アプリケーションが Electron で適切に動作できるようにするには、Webback の構成を変更する必要があります。 デフォルトでは、create-react-app 経由で作成されたアプリケーションは事前構成された Webhook ファイルを使用し、エンドユーザーには非表示になります。 React アプリのデフォルトの Webhook 構成は Realm と互換性がないため、上書きする必要があります。 CRACO を使用できます これらのデフォルト値を上書きします。以下のコマンドを使用して CRACO をインストールします。

npm install @craco/craco
4

事前構成された Webhook 値を上書きするには、アプリケーションのルートにcraco.config.jsという CRACO 構成ファイルを作成します。 このファイルに以下を追加します。

const nodeExternals = require("webpack-node-externals");
module.exports = {
webpack: {
configure: {
target: "electron-renderer",
externals: [
nodeExternals({
allowlist: [/webpack(\/.*)?/, "electron-devtools-installer"],
}),
],
},
},
};

ターゲット は、Electron 組み込みモジュールのブラウザ環境用にアプリケーションをコンパイルするために、「electron-renderer」に設定されています。すべての Node_module がバンドルされないようにするには、 nodeExternalsも指定します。 nodeExternalsに渡されるオブジェクトのallowListキーは、バンドルに含めるモジュールのリスト(この場合は electron の Developer Tools と webback)を指定します。 webbuck-node-externals を使用するには、次のコマンドを実行します。

npm install webpack-node-externals --save-dev
5

プロジェクトに Electron を追加するには、次のコマンドを実行します。

npm install electron --save-dev
6

Electron main processファイルは、アプリケーションへのエントリ ポイントと考えることができます。 このファイルは、React アプリのindex.htmlファイルを Electron によって作成されたBrowserWindowにロードする原因となります。

注意

各 Electron アプリケーションには 1 つのメイン プロセスのみを含めることができます。 メイン プロセスはウェブページを作成できます。 各ウェブページはレンダリング プロセスと呼ばれる独自のプロセスで実行されます。 これについて詳しくは、公式の Electron プロセス モデル を参照してください ドキュメント。

次のコードを、 publicディレクトリ内のelectron.jsという新しいファイルに追加します。

const electron = require("electron");
const path = require("path");
const app = electron.app;
const BrowserWindow = electron.BrowserWindow;
let mainWindow;
function createWindow() {
// Create the browser window.
mainWindow = new BrowserWindow({
width: 800,
height: 600,
webPreferences: { nodeIntegration: true, contextIsolation: false },
});
// and load the index.html of the app.
console.log(__dirname);
mainWindow.loadFile(path.join(__dirname, "../build/index.html"));
}
// This method will be called when Electron has finished
// initialization and is ready to create browser windows.
// Some APIs can only be used after this event occurs.
app.on("ready", createWindow);

これで、アプリケーションには次のファイルが含まれるはずです。 CSS、サービスワーカー、テストファイルなど、プロジェクト内の一部の追加ファイルは以下には含まれません。

.
|-- package.json
|-- package-lock.lock
|-- craco.config.js
|-- public
| |-- index.html
| |-- electron.js // main process
|-- src
| |-- App.js // renderer process
|-- |-- index.js // renderer process

src ディレクトリ内のすべてのJavaScriptファイルは renderer プロセスで実行されます。 electron.js とそれに必要なファイルは、メイン プロセスで実行されます。

7

アプリケーションを実行するには、次の内容をpackage.jsonファイルに追加して、Electron のホームページとメイン エントリ ポイントを指定します。

"main": "public/electron.js",
"homepage": "./",

最後に、次のスクリプトをpackage.jsonファイルに追加します。

"scripts": {
"build": "craco build",
"start": "electron ."
},

ターミナルで、 npm run buildを実行し、 npm run startを実行します。 次のことが表示されます。

Electron Desktop App with React
8

ターミナルで、次のコマンドを使用してプロジェクトに Realm を追加します。

npm install realm

レンダリング プロセスで Realm を使用するには、 src/App.jsファイルの先頭に以下を追加します(Realm を使用してコードを記述するファイルにインポートする必要もあります)。

import Realm from "realm";

ユーザーを認証し、スキーマを定義し、有効にした Device Sync を同期するには、Realm をインポートしたファイルでRealm.open()を呼び出します。

Realm を開くと、Realm に書込み ( write) ができるようになります。

const app = new Realm.App({ id: "<Your App ID>" }); // create a new instance of the Realm.App
async function run() {
// login with an anonymous credential
await app.logIn(Realm.Credentials.anonymous());
const DogSchema = {
name: "Dog",
properties: {
_id: 'int',
name: "string",
age: "int",
},
primaryKey: '_id'
};
const realm = await Realm.open({
schema: [DogSchema],
sync: {
user: app.currentUser,
partitionValue: "myPartition",
},
});
// The myPartition realm is now synced to the device. You can
// access it through the `realm` object returned by `Realm.open()`
// write to the realm
}
run().catch(err => {
console.error("Failed to open realm:", err)
});

注意

プロセスと プロセスの両方から Realmrenderer mainへの書き込みの例については、 Realm-Electron-Advanced-クイックスタートをご覧 ください リポジトリを使用します。

注意

現在の React Native バイナリはrealmパッケージに含まれています。 ビルドからバイナリとreact-nativeディレクトリを削除できます。 package.jsonファイルにbuild.filesエントリを追加し、その値を!**/node_modules/realm/react-nativeに設定します。