本文へスキップ
Ship Logo
Tech Blog Logo

技術的負債とNativePHPの話 〜Laravel Live Japan〜

LaravelイベントリポートPHP

Yuka Sato

/

エンジニア

Laravel Live Japanに参加してきました

先日、Laravel Japanに参加してきました。今回は、その中でも特に印象に残った2つのセッションについて書いてみようと思います。ひとつは技術的負債についての話、もうひとつはPHPでネイティブアプリが作れるというNativePHP/SuperNativeの話です。ジャンルはまったく違いますが、どちらも「なるほど」と思わされる内容だったので、参加レポートとしてまとめています。

技術的負債とどう向き合うか

技術的負債とは何か

「技術的負債」という言葉、今回のセッションで初めてちゃんとした由来を知りました。

生みの親はウォード・カニンガム氏。金融系ソフトウェア開発で、リファクタリングの必要性を上司に説明するための比喩だったそうです。目先のリリースを優先すれば、後で利子を払い続けることになる。お金の借金と同じ構造です。

セッションでは「ソフトウェアの変更容易性を下げる、ありとあらゆる要素」と紹介されていました。バグを生む要素ではなく、変更しづらくする要素、というのがポイントです。

負債はなぜ生まれるのか

理由として4つ挙げられていました。

  • スキル不足とドメイン知識の欠如
  • 技術の進歩と環境の変化
  • デリバリーのプレッシャー
  • プロトタイプの運用

1つ目は「Git Blame(※そのコードを誰がいつ書いたかを追えるGitの機能)を見たら自分だった」という話で、会場からも共感の空気が伝わってきました。

特に刺さったのは2つ目と3つ目です。何もしなくてもコードは腐っていく。納期優先でテストを省略すれば負債は積み上がる。当たり前のようで、聞くと胸が痛くなる話でした。

負債が牙を剥いた瞬間

今携わっているプロジェクトでは、実装ではなく進行管理としてレビューやリリーススケジュールの調整を担当しています。その中で、まさにこの話が自分の経験に重なりました。

仕様は別媒体で管理していましたが、機能改修で参照すると更新が漏れており、実際の仕様と乖離していました。ライブラリを調べるとバージョンもかなり古くなっている。誰かが放置していたのではなく、優先順位が上がらないまま古くなっていた、というのが実態です。

バージョンを上げてリリースしたところ、古い依存関係が原因で管理画面のCSSが崩れてしまいました。気づいたきっかけは社内のチェックではなく、事業部側からの不具合報告でした。

他の優先タスクを抱える中で保守は後回しになっていた。「デリバリーのプレッシャー」と「技術の進歩」が同時に起きていた瞬間だったと思います。

「アンダーコントロールに置く」という言葉が刺さった理由

負債は「悪」ではなく、ビジネスを加速させるために戦略的に選ぶ「リスク」。大切なのはそれを「アンダーコントロール」に置くこと、つまり負債の存在を把握した上で、対応の優先度を自分たちの意思で決められる状態にしておくことだ、という話がありました。

自分たちで気づく前に、外から指摘されて発覚した。まさに「コントロールできていなかった」証拠だったのだと思います。

「見えている負債」と「見えていない負債」では、対応のしやすさがまったく違う。今回の一件は、まさに後者を見て見ぬふりしていたわけでもなく、そもそも見えていなかったのだと、話を聞きながら納得しました。

AI時代の負債にも触れておく

AIはコードを素早く生成する一方、インシデント率が3.5倍になったというデータもあるそうです。人間が理解していない「理解負債」が量産されるリスクは、AI駆動開発が広がる今、人ごとではないと感じました。

「スピードを前倒しにする一方、失敗のリスクを後回しにしている」という表現も出てきました。速く書けることと、後から安全に直せることは別物なのだと、あらためて考えさせられました。

振り返って思うこと

改修に入る前にドキュメントをさっと確認する、ライブラリの棚卸しをスプリントのどこかに忍ばせておく。気持ち悪いと思った箇所はとりあえずメモしておく。地味ですが、まずはそのあたりから少しずつ試してみようと思います。

毛色はまったく違いますが、同じイベントでもう一つ印象に残ったのがこちらのセッションです。

NativePHP/SuperNativeを触ってみた

NativePHPとは?

ざっくり言うと、PHP(Laravel)でスマホアプリを作れるフレームワークです。ふだん使っているLaravelの知識のまま、iOSやAndroidのアプリまで作れるそうです。実際に手元で動かしてみました。

まず公開版を触ってみた

nativephp 2026-07-16 13.53.27.png

laravel new から始めて、php artisan native:run を叩くだけでOS選択のプロンプトが出てきて、そのままiOSシミュレータが立ち上がります。

試しに、ボタンを押すとランダムなHTTPステータスコードを返すだけの軽いデモアプリを作って動かしてみました。

検証動画:nativephp-demo.mov

LaravelのコントローラとBladeで動かしているのですが「思ったよりアプリっぽい」です。

ただ中身はWebViewだった

Laravelの初期画面(welcomeページ)だけをアプリにして立ち上げたところ、見慣れたHTMLページがそのまま出てきました。

公開版は WebView(※アプリの中に埋め込まれた小さなブラウザ)の上で、Laravelが返すHTMLを表示しています。さっきのカードのアニメーションも、中身はCSSとJavaScriptで作られたWebページ。「アプリの中でWebサイトを表示している」という方が実態に近いです。

逆に言えば、Webの知識だけでここまでのものが作れるということでもあります。

次に来るのはSuperNative — PHPから本当にネイティブUIを描く

イベントのセッションでは、この公開版の次に来るものとして SuperNative が紹介されていました。

これはWebViewでHTMLを表示するのではなく、Bladeで書いた画面を、ネイティブのUI部品としてそのまま描画する方式です。公式READMEにも次のように書かれています。

fully native UI rendered from PHP using Blade templates, Tailwind classes, and Yoga layout. No JavaScript frameworks, no WebViews.

書くのはいつものBlade + Tailwind。レイアウトの計算にはYoga(※Reactなどでも使われている、flexboxの並べ方を計算するエンジン)が使われていて、その結果をネイティブの部品として画面に置いていく仕組みです。ブラウザを一切挟まない、というのが公開版との一番の違いです。

言葉だけだと伝わりにくいので、公式のショーケースアプリ(いろんなUI部品を並べた見本市のようなアプリ)を、Androidエミュレータでそのまま動かして録画してみました。

検証動画:supernative-android.mp4

動画では、こんな順で見ています。

  1. デモ一覧 … トップのメニュー。この一覧自体がネイティブ描画されている
  2. Counter … ボタンを押すと数字が 0 → 3 とその場で書き換わる
  3. Layout & Canvas … flexで並べる/要素を重ねる(Stack)/図形を直接描く/くるくる回る読み込みインジケータ。この図形まわりがネイティブで描かれているのが一番の見どころ
  4. Twitter/X風のミニアプリ … フィード → ツイート詳細への画面遷移

※ 今回はAndroidエミュレータで確認した範囲だけを載せています。

触ってみた所感

最初に作った公開版のアプリは、見た目はアプリっぽかったものの、中身はWebページでした。SuperNativeはブラウザを挟まず画面が本当に出てきて驚きました。SuperNativeはまだ公開版ではありませんが両方を自分の手で動かして確かめられたのは収穫でした。

まとめ

以上、技術的負債の話と、気になって触ってみたNativePHP/SuperNativeの話でした。ジャンルは違いますが、どちらも資料や配信だけでは気づけなかった内容です。会場まで足を運んで、実際に手を動かしてみたからこそ持ち帰れた学びだったので、参加してよかったなと思っています。

[参考資料]

SHARE ON ❤️