はじめに
Webの運用保守やアクセス解析、デバッグ作業において、ブラウザやクローラーが送信する「User-Agent(UA)文字列」の確認は日常的に行われます。しかし、自身の正確な環境を手軽に知る手段や、任意のUA文字列を素早く検証できるシンプルなツールが求められていました。
こうした日々の開発作業を効率化するため、個人開発向けWebツール集「SS-Infra総合ポータル」の第3弾として「User-Agent確認・解析ツール」を公開しました。
作ったツール
User-Agent確認・解析ツール
👉 https://ss-infra.net/useragent/
主な機能
- 現在アクセス中の環境を自動検出: ブラウザ、OS、デバイスの種類を瞬時に判定・表示
- 任意のUA文字列解析: フォームに任意のUA文字列を入力して内訳を即座に検証
- シンプルで軽量なUI: スッキリとした見やすい画面で、必要な情報を瞬時に確認可能
技術的なポイント:PHP実装の工夫
実際のPHPコードを交えて、実装時のポイントを3つ紹介します。
1. $_SERVER['HTTP_USER_AGENT'] によるリアルタイム環境取得
アクセス者のUA文字列は、グローバル変数 $_SERVER['HTTP_USER_AGENT'] から安全に取得します。未定義の場合のフォールバックも考慮しています。
// アクセス者のUser-Agentを取得
$current_ua = $_SERVER['HTTP_USER_AGENT'] ?? '';
$input_ua = trim($_POST['ua_string'] ?? $current_ua);
2. 正規表現を用いた簡易パーサーの実装
外部ライブラリに依存せず、軽量かつ高速に判定を行えるよう、主要なキーワードを preg_match でマッチングするカスタム関数を実装しています。
function parse_user_agent($ua)
{
$result = [
'browser' => '不明なブラウザ',
'os' => '不明なOS',
'device' => 'デスクトップ / その他',
'is_bot' => false,
];
if (empty($ua)) return $result;
// OS判定の例
if (preg_match('/windows nt/i', $ua)) {
$result['os'] = 'Windows';
} elseif (preg_match('/iphone|ipad|ipod/i', $ua)) {
$result['os'] = 'iOS';
$result['device'] = preg_match('/ipad/i', $ua) ? 'タブレット (iPad)' : 'モバイル (iPhone)';
}
// ブラウザ判定の例
if (preg_match('/edg\/|edge\//i', $ua)) {
$result['browser'] = 'Microsoft Edge';
} elseif (preg_match('/chrome\//i', $ua) && !preg_match('/edg\//i', $ua)) {
$result['browser'] = 'Google Chrome';
}
return $result;
}
3. POST値のバリデーションと安全なエスケープ出力
ユーザーがフォームに入力した任意のUA文字列は、trim() で整形した上で動的に解析処理にかけます。また、出力時には htmlspecialchars() を徹底し、クロスサイトスクリプティング(XSS)等のセキュリティリスクをしっかりと防止しています。
おわりに
TailwindCSSを活用したクリーンなUIと、外部依存のないピュアなPHP処理を組み合わせることで、実用的なユーティリティをサクッと構築することができました。
デバッグや検証業務などでUAを手軽に調べたいときは、ぜひ使ってみてください!
ご意見・改善のご要望などがあれば、ぜひQiitaのコメント欄やフィードバックでお知らせいただけると嬉しいです!