PHPだけでデスクトップアプリ開発！Laravel×NativePHPで始めるクロスプラットフォーム対応

PHPエンジニアなら一度は考える「PHPでデスクトップアプリ作れないの？」という疑問。その疑問を解決するのが NativePHP です。今回は、実際にNativePHPを使ってGUIアプリを立ち上げるまでを試してみました。

# NativePHPとは？
NativePHPは、LaravelベースでGUIアプリケーションを構築できる新しいフレームワーク。ElectronやTauriと連携し、PHPで書いたコードをネイティブアプリとして動作させます。

## Laravelとの親和性◎

- クロスプラットフォーム（macOS, Windows, Linux）
- モバイル対応も今後視野に
- ファイル操作や通知、SQLite操作も可能

# 🚀 セットアップ手順
以下は、Laravel + NativePHP プロジェクトを作る手順です。

## 1. Laravelプロジェクトを作成（既存プロジェクトでも可）
```bash
$ laravel new native-app
```

```bash
   _                               _
  | |                             | |
  | |     __ _ _ __ __ ___   _____| |
  | |    / _` | '__/ _` \ \ / / _ \ |
  | |___| (_| | | | (_| |\ V /  __/ |
  |______\__,_|_|  \__,_| \_/ \___|_|


 ┌ Would you like to install a starter kit? ────────────────────┐
 │ › ● No starter kit                                           │ ✨一旦デフォルトの「No starter kit」を選択。
 │   ○ Laravel Breeze                                           │
 │   ○ Laravel Jetstream                                        │
 └──────────────────────────────────────────────────────────────┘

 ┌ Which testing framework do you prefer? ──────────────────────┐
 │ › ● PHPUnit                                                  │ ✨一旦デフォルトの「PHPUnit」を選択。
 │   ○ Pest                                                     │
 └──────────────────────────────────────────────────────────────┘

 ┌ Would you like to initialize a Git repository? ──────────────┐
 │ ○ Yes / ● No                                                 │ ✨一旦デフォルトの「No」を選択。試したいだけなので。
 └──────────────────────────────────────────────────────────────┘

 ┌ Which database will your application use? ───────────────────┐
 │   ○ MySQL                                                    │
 │   ○ MariaDB                                                  │
 │   ○ PostgreSQL                                               │
 │ › ● SQLite                                                   │ ✨一旦標準っぽい「SQLite」を選択。
 │   ○ SQL Server                                               │
 └──────────────────────────────────────────────────────────────┘
```

## 2. アプリのディレクトリに移動
```bash
$ cd native-app
```
## 3. Composerを使ってNativePHPをインストール
```bash
$ composer require nativephp/electron
```

```bash
 ┌ Would you like to install the NativePHP NPM dependencies? ───┐
 │ ● Yes / ○ No                                                 │ ✨一旦デフォルトの「Yes」を選択。
 └──────────────────────────────────────────────────────────────┘

  ┌ Would you like to start the NativePHP development server ────┐
 │ ● Yes / ○ No                                                 │ ✨一旦動かしたいので「Yes」を選択。
 └──────────────────────────────────────────────────────────────┘
```
数秒でこんな画面が立ち上がりました✨

![NativePHP起動画面.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1954103/b6e1d0d6-d324-4056-a8b0-99bbab09a3c7.png)

これだけでElectronアプリが起動し、Laravelアプリがネイティブで動きます。感動！

# 少し変更してみる

```PHP
// routes/web.php

Route::get('/', function () {
    return view('welcome');
});
```

```PHP
// resources/views/welcome.blade.php

<!DOCTYPE html>
<html>
<head>
    <title>NativePHP Hello World</title>
    <script src="https://cdn.tailwindcss.com"></script>
</head>
<body class="bg-gray-100">
    <div class="container mx-auto p-8">
        <h1 class="text-3xl font-bold mb-4">文章は適宜変更してください</h1>
        
        <p class="mb-4">これはLaravelからNativePHPで作成したデスクトップアプリです。</p>
    </div>
</body>
</html>
```

![NativePHP起動画面-HelloWorld.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1954103/85ca0156-667d-4a55-ae11-830ec33672a6.png)

デフォルトで開発者ツールも立ち上がるようです。

普段開発者ツールを使っているエンジニアの方にとっては、馴染みもあり、すんなり開発に入れそうですね！これで、既存のLaravelスキルをそのまま活かしながら、デスクトップアプリケーションを動かせることをご確認頂けたでしょうか？

### 🔄 ホットリロードにも対応
ホットリロードを使え、サクサク開発できます。

# ✨ 感想
PHP+Laravelのスキル資産を活かしてデスクトップGUIを作れるのは革命的です！5分程で導入できt簡単でした！

### 🔗 参考
- [NativePHP GitHub](https://github.com/NativePHP)
- [公式ドキュメント](https://nativephp.com/)
#### 📝 より詳しい解説や実例は以下のブログにまとめています
👉 [PHP×Laravelでスマホアプリを構築！NativePHPの使い方と実践例](https://takeda-no-nao.net/programming/php/nativephp-guide/)