---
title: "NativePHPとは？PHPでデスクトップアプリを作る仕組みと導入手順【Desktop 2.3対応】"
url: "https://www.issoh.co.jp/tech/details/6487/"
published: 2025-05-01
updated: 2026-10-01
categories: ["Laravel"]
publisher: "株式会社一創"
---

# NativePHPとは？PHPでデスクトップアプリを作る仕組みと導入手順【Desktop 2.3対応】

NativePHPは、Laravelで作ったアプリをWindows・macOS・Linuxのデスクトップアプリとして配布するためのフレームワークです。画面はWeb技術のまま、PHPの実行環境ごとアプリに同梱するので、利用者のPCにPHPが入っていなくても動きます。この記事では、2026年10月時点の最新版であるnativephp/desktop 2.3.1を対象に、仕組み、動作要件、インストールから起動・ビルドまでの手順、ElectronやTauriとの違い、配布前に確認すべき点を整理します。手順と出力は、Laravel 13.34.0の新規プロジェクトに2.3.1を導入して確認した内容です。

## まとめ：NativePHPの最新版と導入判断の要点

- **正体**：Laravel向けのパッケージ群。Desktop版はElectronの上で、同梱した静的PHPがLaravelを動かす。GUIフレームワークではなく、画面はBlade・Livewire・Vue・Reactなど好きなものを使う
- **最新版**：Desktop版は `nativephp/desktop` 2.3.1（2026年9月14日）。v1時代の `nativephp/laravel` と `nativephp/electron` は廃止扱いで、名前空間も `Native\Desktop` に変わった
- **要件**：PHP 8.3以上、Laravel 11以上（2.2.0でLaravel 13に対応）、Node 22以上。実行先はWindows 10以上、macOS 12以上、Linux
- **導入**：`composer require` → `php artisan native:install` → `php artisan native:run` の3コマンドでウィンドウが開く
- **配布前の注意**：`.env` はアプリに丸ごと同梱される。同梱されるElectronは40系で、Electron公式のサポート対象（最新3メジャー）から外れている

## NativePHPの仕組み：Electron・静的PHP・Laravelの3層

公式ドキュメントは、NativePHPを「OSの機能を呼ぶためのクラス群」「アプリをビルド・バンドルするツール」「利用者の端末でそのまま動く静的PHPランタイム」の3つの組み合わせだと定義しています。Desktop版ではこの3つが次のようにつながります。

1. Electronがアプリとして起動し、同梱の静的PHPでLaravelを立ち上げる
2. ElectronのウィンドウがLaravelのルートURLを表示する。画面の作り方はWebアプリと同じ
3. PHP側で `Window::open()` や `Notification::title()` を呼ぶと、Electron側のAPIへHTTPで橋渡しされる

PHPとElectronの間は、起動のたびに作り直される共有鍵で認証されたHTTP通信です。本番ビルドでは `PreventRegularBrowserAccess` ミドルウェアが全ルートに自動で掛かり、アプリのウィンドウ以外（通常のブラウザなど）からのアクセスを受け付けません。

静的PHPは `nativephp/php-bin` パッケージが提供します。実測では macOS（x64）向けに `php-8.3.zip`・`php-8.4.zip`・`php-8.5.zip` の3版が入っていました。組み込まれる拡張は `php-extensions.txt` で決まっている26個だけで、`pdo_sqlite` はありますが `pdo_mysql` と `pdo_pgsql` はありません。データベースは公式にSQLiteのみのサポートで、アプリの初回起動時に利用者の `appdata` フォルダへ `database.sqlite` が作られ、マイグレーションが走ります。

### Mobile版（NativePHP for Mobile）との違い

同じ名前でスマートフォン向けの `nativephp/mobile` もあり、2026年9月23日の4.5.2が最新です（Packagistのライセンス表記はMIT）。こちらはElectronを使わず、コンパイル済みのPHPをSwift／KotlinのシェルアプリへLaravelごと組み込み、Webサーバーなしで端末内で動かします。v4ではBladeコンポーネントをネイティブのUI部品として描画するEDGEコンポーネントを備えています。iOSアプリのビルドはMacでしかできず、WindowsではWSL上で動かせません。以下はDesktop版の話です。

## Electron・Tauriとの違い：PHPで書けることの代償

NativePHPのDesktop版は、中身がElectronです。ElectronでJavaScriptを書く代わりにLaravelでアプリを書ける、と捉えるのが正確です。

| 項目        | NativePHP（Desktop） | Electron              | Tauri                         |
| --------- | ------------------ | --------------------- | ----------------------------- |
| アプリ側の言語   | PHP（Laravel）       | JavaScript／TypeScript | Rust                          |
| 画面の描画     | 同梱のChromium        | 同梱のChromium           | OS標準のWebView                  |
| 同梱するランタイム | Electron＋静的PHP     | Chromium＋Node.js      | 通常はWebViewを共有（Windowsでは同梱も可能） |
| 標準のDB     | SQLite（自動設定）       | なし（自分で選ぶ）             | なし（自分で選ぶ）                     |
| モバイル      | 別製品（Mobile版）       | 非対応                   | 同じ枠組みで対応                      |

代償は配布サイズです。ElectronのChromiumに加えてPHPの実行ファイルとLaravelの `vendor` も同梱するため、同じ画面を素のElectronで作った場合より大きくなりやすく、差はアプリの依存関係やビルド条件で変わります。開発環境では、Electron側の `node_modules` が491MB、`php-bin` が357MBになりました（いずれも配布物そのものではなく、ビルドの材料です）。

Electron自体の仕組みは[Electronとは？Web技術でデスクトップアプリを作る入門解説【2026年最新】](/tech/details/3322/)、OS標準のWebViewを使う方式は[Tauriとは？Electronとの違い・将来性・始め方まで徹底解説【2026年版】](/tech/details/4114/)で詳しく扱っています。

## 動作要件と対応バージョン（2026年10月時点）

| 項目         | 要件                          | 根拠                       |
| ---------- | --------------------------- | ------------------------ |
| PHP        | 8.3以上                       | composer.json（^8.3）      |
| Laravel    | 11以上（13まで）                  | composer.json・2.2.0の変更履歴 |
| Node.js    | 22以上                        | 公式Installation           |
| 実行OS       | Windows 10+／macOS 12+／Linux | 公式Installation           |
| 同梱Electron | 40系（^40.10.2）               | 2.3.1のpackage.json       |

公式のサポートポリシーの表はLaravelを「11.x、12.x」としか書いていませんが、2.2.0で「Laravel 13.x Compatibility」が入り、composer.jsonも `^13.0` を許可しています。今回の検証もLaravel 13.34.0で問題なく導入できました。Laravel 13の要件は[Laravelの最新バージョンは13｜対応PHPバージョン・サポート期限一覧とアップグレード判断](/tech/details/5637/)にまとめています。

開発環境は、公式がMac・Windowsでは[Laravel Herdとは｜PHPバージョン切替と.test公開の仕組み・Sailとの使い分け](/tech/details/17145/)を推しています。コンテナや仮想環境でも開発はできますが、公式は「想定外の問題とビルドの手作業が増える」と注意しています。

## インストールから起動までの手順

既存のLaravelアプリに追加する場合も、新規に作る場合も手順は同じです。

```
composer require nativephp/desktop
php artisan native:install
php artisan native:run
```

`native:install` は次の4つを行います。実際に生成・変更されたファイルで確認しました。

- `app/Providers/NativeAppServiceProvider.php` と `config/nativephp.php` を生成
- `composer.json` に `native:dev` スクリプト（`native:run` とVite開発サーバーを並行起動）を追加
- `post-update-cmd` に `php artisan native:install --force --quiet` を登録し、`composer update` のたびに再実行
- Electron側のnpm依存とElectron本体をダウンロード

Laravel 12以降の新規プロジェクトには `ignore-scripts=true` を含む `.npmrc` が入っており（13.34.0でも確認）、2.2.x以前ではこの設定を引き継いでElectron本体のダウンロードが黙って飛ばされ、起動時に原因の分かりにくいエラーになっていました（Issue #145）。2.3.0でElectronのインストールがアプリのnpm設定から切り離され、2.3.1では `.npmrc` があってもElectron 40.10.2が取得できています。2.3.0そのものはコンパイル済みファイルの欠落で `native:run` が起動しない不具合（#152）があるので、2.3.1以上を使ってください。

`native:run` の前に、まず `php artisan serve` などブラウザで動かして例外を潰しておくのが公式の推奨です。`native:run` はアプリのコードをビルド用ディレクトリへコピーして起動するため、PHPのコードを変えても再起動するまで反映されません。画面側はVite（`npm run dev`）のホットリロードが効きます。

## ウィンドウ・通知・メニューバーの基本コード

アプリ起動時の処理は `NativeAppServiceProvider` の `boot()` に書きます。生成直後は `Window::open();` だけが入っています。サイズとタイトルを決め、前回のサイズと位置を覚えさせ、起動を通知する例です（メソッドの存在は2.3.1のクラスで確認済み）。

```
<?php

namespace App\Providers;

use Native\Desktop\Contracts\ProvidesPhpIni;
use Native\Desktop\Facades\Notification;
use Native\Desktop\Facades\Window;

class NativeAppServiceProvider implements ProvidesPhpIni
{
    public function boot(): void
    {
        Window::open()
            ->title('在庫管理')
            ->width(1024)
            ->height(720)
            ->minWidth(800)
            ->minHeight(600)
            ->rememberState();

        Notification::title('在庫管理')
            ->message('アプリを起動しました')
            ->show();
    }

    public function phpIni(): array
    {
        return [
            'memory_limit' => '512M',
        ];
    }
}
```

`Window::open()` はIDを省略すると `main` になり、アプリのルートURLを開きます。別ウィンドウは `Window::open('settings')->url(...)` のようにIDを付けて開き、`Window::close('settings')` で閉じます。`rememberState()` で状態を覚えられるのは1つのウィンドウだけです。

ウィンドウを持たない常駐型にしたいときは、`MenuBar::create()` でメニューバー（タスクトレイ）アプリにできます。このほかクリップボード、ダイアログ、グローバルショートカット、子プロセス、キューワーカーなどのファサードがあり、画面はBladeのほか[Livewire（Laravel）とは？v4対応の使い方とコンポーネント作成・Blade連携の手順](/tech/details/4474/)や[Laravel Inertiaとは｜APIを作らずSPAを組む仕組みと3系の変更点](/tech/details/17149/)で組めます。

## ビルド・コード署名・自動更新

配布用のビルドは `native:build` です。引数なしなら実行中のOSとアーキテクチャ向けに、`mac`・`win`・`linux` を付ければそのOS向けに作ります。出力先は2.0以降 `nativephp/electron/dist` です。

```
php artisan native:build        # 実行中のOS向け
php artisan native:build win    # Windows向け（クロスビルド）
```

クロスビルドはすべての組み合わせで動くわけではなく、LinuxからWindows向けを作るには32bit版のwineが要ります。公式も「対応する各OSでビルドし、配布前にそのOSで動作確認する」ことを求めています。ビルドのたびに `config/nativephp.php` の `version` を変えてください。利用者側のマイグレーションは、このバージョンが変わったときにしか走りません。

コード署名は、macOSなら `NATIVEPHP_APPLE_ID`・`NATIVEPHP_APPLE_ID_PASS`（アプリ用パスワード）・`NATIVEPHP_APPLE_TEAM_ID` を `.env` に設定し、別途Developer ID Application証明書と秘密鍵をビルド環境に用意すると、ビルド時に署名と公証まで行います。公式ドキュメントは、公証しないと開発機以外のMacでは「壊れているため開けません」という警告が出て起動できないと説明しています（表示される警告文は署名の有無やmacOSの版で変わります）。Windowsは証明書による署名と、公式が推奨するAzure Trusted Signingの2方式です。macOSの署名・公証の詳細は[Electron製Macアプリのコード署名とApple公証｜notarytoolとentitlements設定の実測手順](/tech/details/6874/)を参照してください。

自動更新は `config/nativephp.php` の `updater` で設定し、配布先はGitHub Releases・S3・DigitalOcean Spacesから選びます。既定値は「有効・Spaces」なので、使わない配布先の設定は見直してください。`php artisan native:publish` はビルドと配布先へのアップロードを一度に行います。

## 配布前に確認すべき3つの落とし穴

NativePHPは「Webアプリの感覚で作れる」のが売りですが、配布物は利用者のPCに置かれます。サーバーに置くWebアプリと同じ感覚で配ると、次の3点で問題になります。

### .envの同梱と既定の除去対象キー

公式ドキュメントは、ビルド時に `.env` がアプリへそのままコピーされ、アプリを手にした誰でも読めると明記しています。除去されるのは `cleanup_env_keys` に書いたキーだけで、既定は `AWS_*`・`AZURE_*`・`GITHUB_*`・`DO_SPACES_*`・`*_SECRET`・`BIFROST_*` と署名用の変数です。判定に使われるLaravelの `Str::is()` で確かめると、次のキーは既定では残ります。

| キー                                 | 既定の扱い |
| ---------------------------------- | ----- |
| STRIPE\_SECRET・PUSHER\_APP\_SECRET | 除去される |
| OPENAI\_API\_KEY                   | 残る    |
| DB\_PASSWORD・MAIL\_PASSWORD        | 残る    |
| APP\_KEY                           | 残る    |

外部APIの鍵は、`cleanup_env_keys` に足すだけでなく、そもそもアプリに持たせない設計にするべきです。公式も、秘密の操作は自前のAPIサーバーに任せ、アプリからはそのAPIを呼ぶ形を勧めています。利用者ごとに発行する短命なトークン（公式の目安は48時間未満）で認証してください。

### 同梱Electron 40のサポート終了と更新対応

2.3.1が使うElectronは `^40.10.2` で、今回の導入では40.10.2が入りました。Electronの公式サポートは最新3メジャーのみで、2026年6月30日にElectron 43が出た時点で40系は対象外になり、40系の最終リリースは7月1日の40.10.6です。2026年10月時点の最新は44系で、Chromiumのセキュリティ修正は40系には届きません。不特定多数に配るアプリや、外部のWebページを表示するアプリでは、NativePHPがElectronを上げるまで待つか、`php artisan native:install --publish` でElectronプロジェクトを手元に出してバージョンを自分で管理する必要があります。後者は `composer update` のたびに差分を取り込む手間がかかります。

### 日本語アプリ名によるmacOS起動不具合と修正版

2.2.x以前では、`APP_NAME` にASCII以外の文字を使うと、macOS向けのビルドは成功するのにアプリが起動しない不具合がありました（PR #148、2.3.0で修正）。原因は、electron-builderがバンドル名をUnicodeのNFD（分解形）で書き、`CFBundleName` はNFC（合成形）のまま書くため、Electronが両者を対応付けられないことです。日本語では「データ管理」「ポイント」のように濁点・半濁点を含む名前がNFCとNFDでバイト列が変わり、「在庫管理」「メモ帳」は変わりません。古い版で日本語名のアプリを作っている場合は、2.3.1へ上げてください。

### NativePHPを選ばないほうがよい場面

次の条件に当てはまるなら、別の手段を選んでください。

- アプリのサイズやメモリ使用量を小さく抑えたい：ChromiumとPHPを同梱する構成なので、Tauriも候補に入れ、同じ機能・条件で配布サイズとメモリ使用量を測ってから決める
- 社内のMySQLやPostgreSQLへ端末から直接つなぎたい：同梱PHPに `pdo_mysql`・`pdo_pgsql` が無く、DB接続情報も `.env` ごと配ることになる。API経由にするか、独自の静的PHPを `NATIVEPHP_PHP_BINARY_PATH` で差し替える（公式のサポート外）
- Laravelを使っていない：NativePHPはLaravel前提で、素のPHPやSymfonyでは使えない

逆に、Laravelで作った社内向けの業務ツールを、ブラウザでなく専用アプリとして配りたい場面では、既存のコードと知識をほぼそのまま使えるのが強みです。

## v1からv2への変更点とリリース履歴

2025年5月以前の解説記事やサンプルはv1前提で、パッケージ名とコマンド名が今と違います。v2で変わった主な点は次のとおりです。

- `nativephp/electron` と `nativephp/laravel` を外し、`nativephp/desktop` に置き換える
- 名前空間を `Native\Laravel` から `Native\Desktop` へ変える
- `native:serve` は非推奨になり `native:run` へ改名
- ウィンドウの `nodeIntegration` が既定で無効。必要な場合に限り `Window::open()->webPreferences(['nodeIntegration' => true])` で変更する
- Electron 38への更新でmacOS Catalina・Big Surのサポートを終了

| 版     | 公開日        | 主な変更                      |
| ----- | ---------- | ------------------------- |
| 0.1.0 | 2023-07-18 | 最初の公開（nativephp/electron） |
| 1.0.0 | 2025-04-07 | 正式版（nativephp/electron）   |
| 2.0.0 | 2025-10-14 | nativephp/desktopへ統合      |
| 2.2.0 | 2026-04-29 | Laravel 13対応・Nightwatch連携 |
| 2.3.0 | 2026-09-05 | スプラッシュ画面・非ASCII名の修正       |
| 2.3.1 | 2026-09-14 | 2.3.0の起動不能を修正             |

公開日は[NativePHP/desktopのGitHub Releases](https://github.com/NativePHP/desktop/releases)の日付で、0.1.0と1.0.0は[Packagistのnativephp/electron](https://packagist.org/packages/nativephp/electron)の日付です。

## よくある質問

### NativePHPはWindowsで使えますか？

使えます。作ったアプリはWindows 10以上で動き、開発もWindows上でできます。Windows向けのビルドは `php artisan native:build win` で、Macからのクロスビルドもできますが、公式は配布前に実機のWindowsで動作確認するよう求めています。一般利用者への配布では、証明書またはAzure Trusted Signingによる署名を推奨します。未署名でも配布はできますが、起動時に警告や制限が生じます。

### NativePHPにTauri版はありますか？

2026年10月時点ではありません。Packagistに公開されている公式パッケージはDesktop（Electronベース）、Mobile、静的PHPのphp-binなどで、Tauriを使うドライバーはありません。Chromiumを同梱しない軽さを優先するなら、PHPではなくRustで書くTauriを直接使うことになります。

### Laravelを使わずにNativePHPは使えますか？

使えません。公式ドキュメントは、NativePHPがLaravelの上に作られており、使う前にLaravelでのWebアプリ開発に慣れておくべきだと書いています。インストールもcomposerでLaravelプロジェクトへ入れる形で、素のPHPスクリプトを単体でアプリにする仕組みはありません。

### NativePHPは無料ですか？商用アプリに使えますか？

Desktop版の `nativephp/desktop` はMITライセンスで、商用アプリにも使えます。ただし同梱される静的PHPのパッケージ `nativephp/php-bin` は、ライセンス表記にMITのほかApache-2.0、GPL-3.0-or-later、PHP-3.01が並びます。商用で配布する前に、同梱物のライセンスを確認してください。

### PHPでGUIアプリを作る方法はNativePHP以外にもありますか？

あります。古くはPHP-GTKのようにPHPからGUI部品を直接操作する拡張がありましたが、NativePHPは方式が違い、PHPに描画をさせずWeb技術の画面をElectronで表示します。そのためUIはHTML・CSS・JavaScriptで作り、PHPはLaravelのアプリとしてデータ処理とOS機能の呼び出しを受け持ちます。既存のWeb画面を再利用できる点は、Laravelアプリをデスクトップ向けに展開する際の利点です。

## 関連記事

- [Electronとは？Web技術でデスクトップアプリを作る入門解説【2026年最新】](/tech/details/3322/)
- [Tauriとは？Electronとの違い・将来性・始め方まで徹底解説【2026年版】](/tech/details/4114/)
- [Laravel Herdとは｜PHPバージョン切替と.test公開の仕組み・Sailとの使い分け](/tech/details/17145/)
- [Laravelの最新バージョンは13｜対応PHPバージョン・サポート期限一覧とアップグレード判断](/tech/details/5637/)
- [Electron製Macアプリのコード署名とApple公証｜notarytoolとentitlements設定の実測手順](/tech/details/6874/)

---

出典: [NativePHPとは？PHPでデスクトップアプリを作る仕組みと導入手順【Desktop 2.3対応】](<https://www.issoh.co.jp/tech/details/6487/>)（株式会社一創）
