NativePHPってなに?
じつはPHPでデスクトップアプリが作れるって知ってます?
NativePHPって奴がありましてね・・・。(ゲス顔
最近、(といっても先月だけど)こいつのバージョンがアップしたそうな
以前から気になっていたものの、実際に実装したことはなかったので
ちょっと試しに触ってみるかーと思い、ネイティブアプリっぽいものを作ろうと考えて
エクスプローラーアプリを作ってみました。
GitHub
今後のメモがてら、導入〜実装までメモを残そうと思います。
構築〜実装まで実践する
インストール
nativephpを始める前にやることが1つ。それはLaravelの環境を作ること!
composer create-project laravel/laravel
いつものコマンドで環境を作った後に
compoer require nativephp/desktop
と続けてnativephpをインストールします。
nativephpのインストールができたら、続けてプロジェクトに適用します。
他のライブラリ(jetstreamやlivewireなど)と同じインストールの流れです。
php artisan native:install
基本的にこれだけ。nativephp本来が持つelectron関連のコードもカスタムしたい場合は
php artisan native:install --publish
でプロジェクト側にコードが表出するので、そこからカスタムします。
いざ実装
ベースはLaravelなので、いつものMVCで実装できます。
ボタンクリックしたらControllerが動き、Modelを使い、場合によってはService層も実装して
bladeで画面表示、という流れです。
nativephp特有の話をすると、先ほどインストールした時に
app/Providers/NativeAppServiceProvider.php というファイルができているはずです。
アプリケーション起動時の設定やアプリケーションメニューなどの設定はここで行います。
class NativeAppServiceProvider implements ProvidesPhpIni
{
public function boot(): void
{
// Language menu (English is always the default on app startup)
// Menu items emit MenuItemClicked events that are handled by JavaScript
$languageMenu = Menu::make(
Menu::radio('English', true)->id('change_language_en'),
Menu::radio('日本語')->id('change_language_ja')
)->label('Language');
if (PHP_OS_FAMILY === 'Darwin') {
// For MacOS
Menu::create(
Menu::app(), // MacOSアプリケーションのメニュー(About xx)
$languageMenu
);
} else {
Menu::create(
$languageMenu
);
}
// 画面起動時の設定(ウィンドウサイズとか)
Window::open()
->width(1920)
->height(1200)
->showDevTools(false)
->title('File Explorer')
->route('explorer.index');
}
public function phpIni(): array
{
// php.iniの設定をアプリケーション起動中にオーバーライドしたい場合は
// ここで設定ができる
return [
];
}
}
実行・デバッグ
php artisan native:run を実行すると、アプリケーションが立ち上がります
終わりに
簡単にまとめると
- NativePHPはLaravelベースで開発できる。Laravel環境構築後にライブラリを入れれば動く
- ネイティブ部分はelectronで動作する。処理のオーバーライドも可能
- OSやアーキテクチャ別にビルドできる
という感じになります。
新しい仕組みで開発というより、Laravelの延長線上のようなイメージで触れたので
入りやすかったです。
今回は手軽に実装するために、よくあるMVCモデルで実装しましたが
Viteなども使えるので、SPAやLivewireなども織り交ぜて開発してみたいなと思いました。

