Docs Menu
Docs Home
/ /
Atlas Device SDK

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

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

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

注意

バージョン要件 - Electron

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

注意

バージョン要件 - React.js

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

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

1

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

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

注意

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

2

Reactアプリ バージョン 4.0+ には、Web 経由 モジュールが含まれています。「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-renderer" に設定され、Electron 組み込みモジュールのブラウザ環境用にアプリケーションをコンパイルします。すべての 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を実行します。 次のことが表示されます。

React を使用した Electron デスクトップ アプリ
8

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

npm install realm@12

レンダリング プロセスで 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)
});

注意

renderer プロセスと main プロセスの両方から邦土への書き込みの例については、 Realm-Electron-Advanced-quickstartリポジトリを確認してください。

注意

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

Tip

次へ

Atlas Device SDK Docsへようこそ

項目一覧