Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Webの外へ飛び出せ NativePHPが切り拓くPHPの未来

Webの外へ飛び出せ NativePHPが切り拓くPHPの未来

Avatar for Takuya Katsusa

Takuya Katsusa

June 27, 2025
Tweet

More Decks by Takuya Katsusa

Other Decks in Programming

Transcript

  1. My Profile 勝佐 拓也 - かっつん   @kitkattsun0531 BABY JOB株式会社

    保活サイト「えんさがそっ ♪」の開発保守 二児の父( 9 ~ 11月に育休取得) 子ども、筋トレ大好きおじさん
  2. BABY JOBの紹介 乳児期 幼児期 学童期 妊娠・出産 産後うつ 保活が大変 いやいや期 学童不足

    小一の壁 子育てには課題がたくさん・・・ 育児と子育て の両立が大変 保活(保育園探し)をサポート 保育園の準備をサポート
  3. TABLE OF CONTENTS 01 NativePHP との出会い 02 NativePHP の 環境構築

    03 NativePHP で アプリ作成 04 NativePHP の ここが気になる 05 まとめ
  4. NativePHP の情報が飛び込んできた! Twitter のタイムラインを覗いていたら 2025年 4月 にLaravelのコアメンバーである Simon Hamp さんが

    NativePHP の メジャーバージョン v1 をリリースしたらしい🎉 どうやら、2023年 から 2年 かかったらしい!お疲れ様です! サイモン・ハンプ
  5. その Web 技術を担うのが Electron Electron は HTML、CSS、Javascript といった Web技術を使ってデスクトップアプリを開発できる NativePHP

    は Electron と連携することによって PHP で書かれたロジックが Electron のバックエンドとして 動作することができる Electron を使って開発された代表的なアプリには Slack や Discord などがある
  6. NativePHP のざっくりした内部構造 Native UI NodeJS OS Main Process Renderer Process

    Electron Reference:https://youtu.be/iG7VscBFnqo?feature=shared&t=272
  7. NativePHP のざっくりした内部構造 Main Process Renderer Process 1. アプリの起動すると Electron の

    Main Process が起動する 2. Electron の Main Process が PHP を内部サーバーとして起動する nginx、 Apache 起動 起動 Reference:https://youtu.be/iG7VscBFnqo?feature=shared&t=272 Electron
  8. NativePHP のざっくりした内部構造 Native UI NodeJS OS Main Process Renderer Process

    3. PHP から Electron の Main Process を操作できるようになる Reference:https://youtu.be/iG7VscBFnqo?feature=shared&t=272 Electron
  9. ちなみに PHP バージョンはいくつなのか バイナリの PHP:v8.4.8 ローカルの PHP:v8.4.4 バージョンの決定方法は見つけることができなかったが、 ローカルの PHP

    に依存してなさそう PHP をどう実行しているのか php -v PHP 8.4.8 (cli) (built: Jun 6 2025 00:20:11) (NTS) Copyright (c) The PHP Group Zend Engine v4.4.8,  Copyright (c) Zend Technologies with Zend OPcache v8.4.8,  Copyright (c), by Zend Technologies
  10. # Requirements 1. PHP 8.3+ 2. Laravel 11 or higher

    3. Node 22+ 4. Windows 10+ / macOS 12+ / Linux 多くの PHP / Laravel 開発者にとって 慣れ親しんだ技術スタックになっている 公式の通り、環境構築してみる Reference:https://nativephp.com/docs/desktop/1/getting-started/installation
  11. NativePHP インストーラーを実行する NativePHP インストーラーは NativePHP サービス プロバイダーの公開を処理する このサービス プロバイダーは、ランタイム (Electron)

    で アプリケーションが動作するために必要な初期設定や準備をしてくれる php artisan native:install Reference:https://nativephp.com/docs/desktop/1/getting-started/installation
  12. 工数入力のイメージ プロジェクト区分 工数 (h) タスク名 機能開発 - 検索機能の強化 2.50 ユーザーストーリーの作成

    技術投資 - Laravel12 アップグレード 0.08 アップグレードのタイムアタック 技術広報 - 登壇 1.00 PHP カンファレンス 2025 のスライド作成 150 種類以上の ドロップダウンから 選択する タスクの種類別に 工数を入力する 各タスク名を 入力する
  13. 工数入力のイメージ 区分を選ぶの 考えすぎちゃう 工数を計っていない 工数の帳尻合わせに 走ってしまう タスク名を 正確に覚えていない プロジェクト区分 工数

    (h) タスク名 機能開発 - 検索機能の強化 2.50 ユーザーストーリーの作成 技術投資 - Laravel12 アップグレード 0.08 アップグレードのタイムアタック 技術広報 - 登壇 1.00 PHP カンファレンス 2025 のスライド作成
  14. 区分を選ぶの 考えすぎちゃう 工数を計っていない 工数の帳尻合わせに 走ってしまう タスク名を 正確に覚えていない 1つ目の解決したいこと プロジェクト区分 工数

    (h) タスク名 機能開発 - 検索機能の強化 2.50 ユーザーストーリーの作成 技術投資 - Laravel12 アップグレード 0.08 アップグレードのタイムアタック 技術広報 - 登壇 1.00 PHP カンファレンス 2025 のスライド作成
  15. 🗣 音声入力 音声を検知 ショートカットを 実行 Artisan コマンドで実 行し計測する # 音声入力でタスクの時間計測をする

    ① 工数をハンズフリーで時間計測をしたい ※Siri、ShortcutsはApple Inc.の商標です
  16. # コマンドライン処理を登録する(以下は計測開始の実装) public function handle(): void { // 進行中のタスクがあれば停止 $existingTask

    = Task::query()->whereNull('ended_at')->latest()->first(); if ($existingTask) { $existingTask->update(['ended_at' => Carbon::now()]); } // 新しいタスクを開始 $newTask = Task::query()->create(['started_at' => Carbon::now()]); } ① 工数をハンズフリーで時間計測をしたい
  17. 区分を選ぶの 考えすぎちゃう 工数を計っていない 工数の帳尻合わせに 走ってしまう タスク名を 正確に覚えていない 2つ目の解決したいこと プロジェクト区分 工数

    (h) タスク名 機能開発 - 検索機能の強化 2.50 ユーザーストーリーの作成 技術投資 - Laravel12 アップグレード 0.08 アップグレードのタイムアタック 技術広報 - 登壇 1.00 PHP カンファレンス 2025 のスライド作成
  18. ② タスク入力を簡易的にしたい # サジェスト機能の Select 2 を実装する <input type="text" id="task-input"

    autocomplete="off"> taskInput.addEventListener('input', function () { fetchSuggestions(query, '/api/recommend'); } Blade resources/views/app.blade.php JS resources/js/script.js  フロントの   書き方 よくある
  19. ② タスク入力を簡易的にしたい # タスク名からローカル LLM にプロジェクト区分を推測してもらう $command = [‘/Applications/Ollama.app/Contents/Resources/ollama’, 'run',

    ‘llama3’, $prompt]; $process = new Process($command); $process->setTimeout(100); $process->run(); return trim($process->getOutput());
  20. ③ タスクごとに一定時間経過したら通知したい # 計測開始時にイベントリスナーで OS 通知を設定する public function handle() {

    if (!$this->task || $this->task->ended_at) { return null; } return Notification::title('タスクの経過時間のお知らせ ') ->message("「{$this->task->name}」 {$this->hoursElapsed}時間が経過しました ") ->show(); }
  21. おまけ:指紋認証もできちゃう if (System::canPromptTouchID()) { if (!System::promptTouchID('認証が必要です')) { return; } }

    コード例は認証が通らなかったら 早期リターンしている 指紋認証もこんな簡単にできました!
  22. build the electron preload files successfully start electron app... Skip

    checkForUpdates because application is not packed and dev update config is not forced checkForUpdatesAndNotify called, downloadPromise is null Electron API server started on port 4000 Starting PHP server... /sample/vendor/nativephp/electron/resources/js/resources/php/php artisan serve /sample [] Copying storage folder... Storage path: /Library/Application Support/laravel-dev/storage App path:/sample Making sure app folders are available Linking storage path… 5 分経過して も変わらず... ビルドには成功してそう ① ネイティブアプリで動作する    開発サーバーを起動できない?
  23. 探ってみると、どうやら symfony/console が影響していた symfony/console の v7.2.7 → v7.3.* への変更で native:serve

    コマンドの動作に影響を与え localhostのポート 4000 への接続が失敗するみたい v7.2.7 へダウングレードすることで解決できた! Reference:https://github.com/NativePHP/laravel/issues/604 ① ネイティブアプリで動作する    開発サーバーを起動できない?
  24. ② Tauri にサポートしてなさそう NativePHP インストーラーは NativePHP サービス プロバイダーの公開を処理する このサービス プロバイダーは、使用しているランタイム

    (Electron または Tauri) で アプリケーションが動作するために必要な初期設定や準備をしてくれる 日本語訳 なんだか、Tauriが使えそう! でもインストールする記述がない
  25. Tauri のサポートに取り組んでいるが、Electron よりも課題が多い Rustへの適応の難しさ  Tauriは Rust で構築されており、NativePHP の開発者は Rust に深く精通していない

    異なるアーキテクチャ  Tauri はブラウザエンジンを搭載していないため、Electron とは異なる課題がある 高い機能要件  NativePHP は、Tauri のビルドに対して高い基準を設けており  Web サーバーに依存しないアプリケーションを構築するという目標を含んでいる  これには、Tauri チームとの多大な投資と協力が必要である Reference:https://github.com/orgs/NativePHP/discussions/248 ② Tauri にサポートしてなさそう
  26. ③ NativePHP は Laravel がないと動作しないの? # Requirements 1. PHP 8.3+

    2. Laravel 11 or higher 3. Node 22+ 4. Windows 10+ / macOS 12+ / Linux 環境構築のページでは Laravel が 必須になっている Reference:https://nativephp.com/docs/desktop/1/getting-started/installation
  27. ③ NativePHP は Laravel がないと動作しないの? Reference:https://github.com/orgs/NativePHP/discussions/141 Laravel なしで 動きますか? Answer:

     準備中ですが、  具体的な時期はまだ決まっていません。  参考までにユースケースを教えてほしいです。 返答なし、一年経過。。。 Question(別の方):進展ありましたか? Answer:いいえ、優先度が高くないので...
  28. NativePHP は Web を飛び出すきっかけをくれた 長年、Web 開発の世界に閉じこもりがち だった PHP 開発者にとって、 NativePHP

    は新たな可能性の扉を開いた(気がする) 慣れ親しんだ PHP と Laravel の知識をそのまま活かして、 デスクトップアプリケーション開発という 未知の領域へ足を踏み出すことを可能にした これにより、Web ブラウザの枠を超え、 よりリッチで、OS と密接に連携するアプリケーションを 手がける道が拓かれた
  29. ネイティブアプリ開発への道 ネイティブ機能の活用 デスクトップ・モバイルならではの機能に直接アクセスし、 リッチな体験を PHP で実現できてしまう 既存資産の活用 新しい言語を学ぶことなく、 培った PHP

    / Laravel のスキルとコードを最大限に生かせる さらに Web 開発者が一度は考えたことがあるであろう モバイルアプリへ横展開しやすくなった