はじめに (対象読者・この記事でわかること)
この記事は、Web開発者やPHPエンジニアを対象に、iPadOS からのアクセスを「モバイル」デバイスとして認識させる具体的な手法を学びたい方へ執筆しています。
iPadOS は Safari の User-Agent がデスクトップブラウザに近いため、通常のモバイル判定ロジックでは「PC」扱いになることが多いです。本記事を読むことで、以下ができるようになります。
- iPadOS の User-Agent 特性を理解する
- PHP の
$_SERVER['HTTP_USER_AGENT']を用いた判定ロジックを自作できる - 既存のライブラリ(Mobile Detect 等)を iPadOS に対応させる設定方法が分かる
背景として、iPad の利用者が増加し、レスポンシブデザインだけでは対応しきれない UI/UX の差異が問題視されています。その課題をコードレベルで解決する手順を示します。
前提知識
この記事を読み進める上で、以下の知識があるとスムーズです。
- PHP の基本的な構文と
$_SERVER変数の扱い方 - HTTP ヘッダー、特に User-Agent の概念
- 基本的な正規表現(PCRE)の書き方
iPadOS の User-Agent とモバイル判定の課題
iPadOS 13 以降、Apple はデフォルトの Safari の User-Agent をデスクトップブラウザと同等に変更しました。たとえば、iPad の Safari が送信する文字列は次のようになります。
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/15.0 Mobile/15E148 Safari/604.1
「Macintosh」や「Mac OS X」が含まれるため、従来の iPhone|Android|Mobile といったキーワードだけで判定すると「PC」と誤判定されます。多くの PHP 用モバイル判定ライブラリ(例: Mobile Detect)はこの変化に追随しておらず、iPadOS を正しく判定できません。
そこで、「iPadOS をモバイルとして扱う」 ことを目的に、以下の2つのアプローチを紹介します。
- カスタム判定ロジックを自作 – シンプルな正規表現で iPadOS を検出し、既存のモバイル判定結果にマージする。
- Mobile Detect の拡張 – ライブラリの設定ファイルやフィルタを編集し、iPadOS 用のパターンを追加する。
PHP で iPadOS をモバイルと判定する具体的な実装
以下では、実際にコードに落とし込む手順をステップごとに解説します。まずは最もシンプルな自作判定から始め、次に Mobile Detect の拡張方法へと進めます。
ステップ1 カスタム判定ロジックの実装
Php<?php function isMobileDevice(): bool { // 既存の Mobile Detect などがあれば結果を取得 $isMobile = false; if (class_exists('Mobile_Detect')) { $detect = new Mobile_Detect(); $isMobile = $detect->isMobile(); } // iPadOS の判定を追加 $ua = $_SERVER['HTTP_USER_AGENT'] ?? ''; // iPadOS が送る “Macintosh”+“Mobile” の組み合わせを検出 $isIpadOS = preg_match('/Macintosh.*Mobile/', $ua) && preg_match('/Safari/', $ua); // iPadOS かつ Safari の場合はモバイルとみなす if ($isIpadOS) { $isMobile = true; } return $isMobile; } // 使用例 if (isMobileDevice()) { // モバイル用テンプレートを出力 include 'mobile_view.php'; } else { include 'desktop_view.php'; } ?>
ポイントは次の通りです。
$_SERVER['HTTP_USER_AGENT']を直接取得し、MacintoshとMobileが同時に含まれるかをチェック。- さらに
Safariが含まれるかで、iPadOS の Safari かどうかを絞り込みます。 - 既存の Mobile Detect が導入されている場合はその結果に上書きする形で統合しています。
この実装は、フレームワークに依存せずどの PHP アプリでもそのまま組み込めます。
ステップ2 Mobile Detect の拡張
Mobile Detect はデファクトスタンダードな判定ライブラリですが、iPadOS 用のパターンがデフォルトでは欠如しています。GitHub のリポジトリにプルリクエストが出されているものの、プロジェクト側のリリースが遅れているケースがあります。そこでローカルでパターンを追加する手順を示します。
- Mobile_Detect.php を取得(Composer でインストールしている場合は
vendor/mobiledetect/mobiledetectlib/Mobile_Detect.php)。 - 該当クラスの
$iPadOSパターン配列($iPadOSTabletなど)を検索し、以下の正規表現を追加します。
Php// 既存の $iPadOSTablet 配列例 protected $iPadOSTablet = [ 'iPad; CPU OS', // 追加するパターン 'Macintosh.*Mobile.*Safari' ];
-
クラス内の
isTablet()やisMobile()がこの配列を参照するため、iPadOS がタブレットとして認識されると同時にisMobile()がtrueを返すようになります。 -
キャッシュクリア(オプション): Mobile Detect は内部で結果をキャッシュするので、開発環境で変更した場合は
Mobile_Detect::$cache = []でリセットします。
コード例
Php<?php require_once 'vendor/autoload.php'; // Mobile Detect のインスタンス生成 $detect = new Mobile_Detect; // iPadOS 判定が有効か確認 if ($detect->isTablet() && $detect->isSafari()) { // iPadOS と判定されたらモバイル扱いで処理 $isMobile = true; } else { $isMobile = $detect->isMobile(); } // 以下は先ほどのカスタムロジックと同様にビューを切り替える if ($isMobile) { include 'mobile_view.php'; } else { include 'desktop_view.php'; } ?>
ハマった点やエラー解決
- User-Agent が変わる: iPadOS の Safari は OS バージョンや Safari バージョンが上がると、User-Agent の文字列が微妙に変化することがあります。正規表現を過度に固く書くと判定が漏れるので、
Macintosh.*Mobileのように柔軟にマッチさせることが重要です。 - 他のブラウザとの混同: Chrome for iPad でも同様の
Macintosh表記になるため、Chromeが含まれるケースは除外するか、追加の条件(例:Version/が Safari のみ付く)で絞り込みます。 - キャッシュの影響: Mobile Detect は内部キャッシュを持つため、コードを修正した後に結果が変わらないことがあります。
Mobile_Detect::$cache = []でリセットするか、アプリケーションの再起動で確実にリロードしてください。
解決策
- 正規表現は「Macintosh」「Mobile」「Safari」の3要素が揃うかどうかに限定し、バージョン番号は
.*で吸収します。 - Chrome 等他ブラウザに対応したい場合は、
Chromeが含まれるかを除外条件に加える(!preg_match('/Chrome/', $ua))。 - 開発・本番環境の両方でキャッシュをクリアし、正しく判定が反映されているか
var_dump($_SERVER['HTTP_USER_AGENT']);等でデバッグします。
まとめ
本記事では、iPadOS の Safari がデスクトップ用 User-Agent を送信するために起きるモバイル判定の問題点と、PHP だけでシンプルに対応する方法、さらに Mobile Detect の拡張手順 を具体的に解説しました。
- iPadOS は
MacintoshとMobileが同居する User-Agent を持ち、従来の判定ロジックでは PC と誤認されやすい。 - 正規表現を用いたカスタム関数で簡単にモバイル判定に組み込める。
- Mobile Detect の内部パターンに
Macintosh.*Mobile.*Safariを追加すれば、既存ライブラリをそのまま活用できる。
これにより、iPad ユーザーに対しても適切なレスポンシブデザインやモバイル専用機能を提供でき、UX の向上が期待できます。次回は、iPadOS の Chrome / Firefox でも同様に判定できる汎用的な正規表現パターンの作成と、フロントエンド側での CSS メディアクエリ活用法について掘り下げます。
参考資料
- Mobile Detect 公式リポジトリ (GitHub)
- Apple の Safari User-Agent 変更に関する開発者向けブログ
- 「PHPでのUser-Agent解析入門」 – 技術書『Modern PHP』(2023)
