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フィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- Electronのアーキテクチャ:メインプロセスとレンダラープロセス
- ElectronでReactをセットアップする
- プロセス間のIPC通信
- デスクトップ向けのパッケージ化と配布