0Pricing
React Academy · レッスン

Electronのアーキテクチャ:メインプロセスとレンダラープロセス

Electronのマルチプロセスモデルを理解します。メインプロセスはネイティブAPIを、レンダラープロセスはReact UIを担当します。

「Electronのアーキテクチャ:メインプロセスとレンダラープロセス」はCoddyKit上の無料React Academyレッスンです。 これはレッスン1/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはReact Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 React Academyコースには全4レッスンが含まれています。

Electron とは

Electronは、Chromium(Webのレンダリング用)とNode.js(ネイティブAPIへのアクセス用)を組み合わせたフレームワークです。使い慣れたWeb技術でクロスプラットフォームのデスクトップアプリケーションを開発できます。ReactアプリはChromiumのブラウザーウィンドウ内で実行され、Node.jsによってオペレーティングシステムの機能にアクセスできます。

メインプロセス

メインプロセスはElectronアプリケーションのエントリーポイントです。アプリケーションのライフサイクルを管理し、ウィンドウを作成および制御して、ネイティブOSとのやり取りを処理します。レンダラープロセスを起動し、Node.js APIと基盤となるオペレーティングシステムに完全にアクセスできます。

レンダラープロセス

各BrowserWindowは独自のレンダラープロセスを起動し、その中でChromiumが動作してReactアプリケーションを実行します。ウィンドウごとに1つのレンダラープロセスが存在し、通常のブラウザータブとよく似た動作をします。つまり、HTML、CSS、JavaScriptをレンダリングします。

メインプロセスの機能

メインプロセスはNode.jsに完全にアクセスできるため、ファイルシステムの読み書き、ネイティブメニューの作成、システムトレイの管理、子プロセスの起動、ハードウェアとの連携を行えます。セキュリティ上の理由から、これらの機能はデフォルトではレンダラーから利用できません。

レンダラープロセスのサンドボックス化

contextIsolationがtrueに設定されている場合(現在のデフォルト)、レンダラープロセスはサンドボックス化され、Node.js APIに直接アクセスできません。このセキュリティモデルにより、悪意のあるWebコンテンツがファイルシステムにアクセスしたり、任意のシステムコマンドを実行したりすることを防ぎます。

IPC:プロセス間の橋渡し

プロセス間通信(IPC)は、メインプロセスとレンダラープロセスがメッセージを交換するための仕組みです。メインプロセスはipcMainを使用してメッセージを待ち受けて応答し、レンダラーはipcRendererを使用してメッセージを送信します。すべての通信は非同期で、メッセージベースです。

Preload スクリプト

preloadスクリプトは、特別な中間的役割を担います。レンダラープロセスのコンテキストで実行されますが、ページのコンテンツが読み込まれる前にNode.js APIへアクセスできます。そのため、サンドボックス化されたレンダラーと特権を持つメインプロセスを安全につなぐ橋渡しになります。

contextBridge:安全な API の公開

contextBridge.exposeInMainWorldを使用すると、preloadスクリプトから安全で管理されたAPIを選択的にレンダラーへ公開できます。レンダラーは、Node.jsやElectronの内部機能に直接アクセスすることなく、公開された関数を呼び出せます。これにより、強固なセキュリティ境界を維持できます。

React から公開 API にアクセスする

contextBridgeによって「api」のような名前でAPIを公開すると、Reactコンポーネントからwindow.api.myFunction()で呼び出せます。見た目は通常のJavaScript関数を呼び出す場合と同じですが、内部ではIPCを経由してメインプロセスに処理が転送されます。

セキュリティモデルのまとめ

Electronのセキュリティモデルでは、contextIsolationが有効な場合、レンダラーからNode.jsへ直接アクセスすることを明確に禁止しています。すべての特権操作はpreloadスクリプトとcontextBridgeを経由する必要があります。これにより、レンダラーでXSS攻撃が発生した場合でも、ファイルシステムにアクセスできないようにします。

プロセス間通信の流れ

一般的な処理の流れは次のとおりです。Reactコンポーネントがwindow.api.readFile()を呼び出す → preloadがipcRenderer.invoke()を実行する → メインプロセスのipcMain.handle()がfs.readFile()を実行する → 結果がPromiseとしてレンダラーに返される。このアーキテクチャにより、レンダラーをシンプルかつ安全に保てます。

contextBridge の目的

ElectronにおけるcontextBridge.exposeInMainWorldの主な目的は何ですか?

レッスンのまとめ

ElectronはChromiumとNode.jsを組み合わせたものです。メインプロセスはアプリのライフサイクルを管理し、OSに完全にアクセスできます。一方、レンダラープロセスはサンドボックス環境でReact UIを実行します。preloadスクリプトとcontextBridgeが安全な橋渡しを担い、IPCによって特権を持つメインプロセスと分離されたレンダラーの間で安全に通信できます。

よくある質問

「Electronのアーキテクチャ:メインプロセスとレンダラープロセス」レッスンは無料ですか?

はい。「Electronのアーキテクチャ:メインプロセスとレンダラープロセス」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、React Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 React Academyコースには全4レッスンが含まれています。

「Electronのアーキテクチャ:メインプロセスとレンダラープロセス」で何を学びますか?

Electronのマルチプロセスモデルを理解します。メインプロセスはネイティブAPIを、レンダラープロセスはReact UIを担当します。 ブラウザで直接実行するハンズオンコードでReact Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

React Academyを始めるのに経験は必要ですか?

事前経験は必要ありません。CoddyKitのReact Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン1/4です。

「Electronのアーキテクチャ:メインプロセスとレンダラープロセス」レッスンにはどのくらい時間がかかりますか?

ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。

このReact Academyレッスンでコードを書いて実行できますか?

はい。すべてのReact Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. Electronのアーキテクチャ:メインプロセスとレンダラープロセス
  2. ElectronでReactをセットアップする
  3. プロセス間のIPC通信
  4. デスクトップ向けのパッケージ化と配布
← React Academyに戻る