入力分解とprotocol補完
本ツールの主要機能であるURL解析エンジンは,画面上部の「解析対象のURL入力」フィールドに入力された文字列をリアルタイムに検知し,JavaScriptのネイティブなURLインターフェースを利用して各コンポーネントへと分解します.入力フィールドのテキストが変更されるか,「再解析」ボタンが押下されると,まず入力文字列の前後の空白文字がトリミングされます.
もし入力値が完全に空であった場合は,すべての構成要素(プロトコル,ホスト,ポート,パス,ハッシュ,クエリパラメータ)のステートが一斉にクリアされ,画面上の表示もリセットされる設計となっています.
ユーザーが入力したURL文字列に「http://」や「https://」などのプロトコルスキームが含まれていない場合,標準のURL APIはこれを相対パスや無効な形式として扱い,解析エラー(例外)をスローしてしまいます.この問題を回避するため,本ツールでは入力文字列の先頭が正規表現(/^[a-zA-Z0-9+-.]+:\/\//)に一致するかどうかを判定します.
一致しない場合,すなわちプロトコルが省略されていると判断された場合は,解析の直前に一時的に「http://」を入力文字列の先頭へ結合し,擬似的な完全URLを生成してから解析処理へと渡します.
ただし,この擬似的なプロトコル補完が行われた場合,抽出されるプロトコルの値は補完に用いた「http:」のままとせず,自動的に「https:」に書き換えて状態(ステート)として保持する仕様となっています.これにより,プロトコル省略時のデフォルト動作としてHTTPSが優先的にUIへ適用される形になります.
解析処理においてURLオブジェクトの生成に失敗した場合(例えば極端に不正な文字が含まれておりパース不可能な場合など)は,「URLの解析に失敗しました.無効な形式です.」というエラーメッセージが画面上に表示され,再構成されたURLの結果も空文字として直ちに消去されます.
五構成要素の編集
URLの解析が成功すると,抽出された情報は「プロトコル」「ホスト (ドメイン/IP)」「ポート」「パス (Path)」「ハッシュ (フラグメント)」の5つの独立した入力フィールドへ即座に反映されます.ユーザーはこれらの各入力フィールドを直接編集することで,元のURL構造を自由に組み替えることができます.
再構成プロセスは,これら5つの要素と後述するクエリパラメータを結合することで行われます.具体的には,プロトコル文字列が存在する場合は,末尾に「:」がなければ付与し,さらに「//」を連結してベースを作ります.次にホストを結合し,ポート番号が入力されている場合は「:」を挟んでポートを繋ぎます.
その後,パス名を連結します.先頭のスラッシュがなければ補ってから結合します.ハッシュ(フラグメント)が存在する場合は,入力値の先頭に「#」が含まれていない場合にのみ「#」を付与してから末尾に結合します.
この再構成処理において中心となるのは「ホスト」の値です.ホスト名が空欄となっている場合,有効なURLとして成立しないため,再構築結果は強制的に空となり画面下部の出力エリアには何も表示されません.また,各要素を手動で編集して再結合した文字列が,最終的に再びブラウザのURLインターフェースで正当な形式として解釈できるかどうかの検証(new URL(base).href によるパーステスト)が毎回実行されます.
もしユーザーの編集によって「組み立てたURLの形式を確認してください.」という状態に陥った場合(例:ホスト名に不正な記号を直接入力した等)は,以前の正常な出力結果が消去されるとともにエラーメッセージが提示されます.ブラウザのURLパーサーが受理した形式を出力しますが,目的どおりのURLかは原文と比較してください.
query追加・重複・無効化
URLに含まれるクエリパラメータ(?以降の文字列)は,「クエリパラメータの一覧・編集」という専用のテーブルUIとして展開されます.URLオブジェクトのsearchParamsプロパティを用いて分解されたパラメータ群は,それぞれランダムな文字列によるIDが付与された独立した行オブジェクトとして管理されます.
ここでは,同一のキー名(名前)を持つパラメータが複数存在している場合でも,配列などに圧縮されることなく,それぞれが別の行として抽出され,重複を維持したまま個別に編集することが可能です.各行には「有効・無効を切り替えるスイッチ(トグル)」「キーの入力欄」「値の入力欄」「削除ボタン」が配置されています.
画面上の「パラメータを追加」ボタンを押下すると,キーと値が空の新しいパラメータ行が末尾に追加されます.
再構築ロジックにおいて,このテーブルに並ぶパラメータは厳密なルールでフィルタリングされます.まず,トグルスイッチがオフ(無効化)に設定されているパラメータは,結合処理の対象から除外されます.行自体を削除しなくても出力URLから消すことができるため,一時的なオン・オフの検証作業などに活用できます.
次に,キー名が空文字列(空白をトリミングした上で未入力)となっている行も,値の入力有無にかかわらず再構築から除外されます.ただし,キー名が入力されていて値のみが空の場合は除外されず,「?key=」という形で再構築URLに含まれます.これらのフィルタリングを通過した有効なパラメータ群のみが,順次URLSearchParamsにappendされ,最終的なクエリ文字列として出力URLのパスの後ろへ結合される仕組みです.
正規化と認証情報脱落
本ツールの解析・再構成プロセスにおいては,ブラウザ標準のURL解析APIを通過することにより,入力文字列に対する一定の正規化(標準化)と,特定の情報の脱落が仕様として発生します.
最も顕著なのが,URL内に含まれる認証情報(Basic認証などで用いられるユーザー名やパスワード)の扱いです.例えば,「https://username:password@example.com/」というURLを入力フィールドに貼り付けた場合,ブラウザのURLオブジェクトはこれらを内部的に認識しますが,本ツールのUI要素(5構成要素の編集フィールド)には認証情報を格納・編集する専用フィールドが実装されていません.
そのため,入力分解の時点で認証情報はUIのステート(状態)として引き継がれず,自動的に脱落することになります.その結果,再構成された出力URLは「https://example.com/」となり,元のURLにあった認証情報は失われます.
また,ポート番号に関しても正規化が働きます.指定されたプロトコル(スキーム)のデフォルトポート(httpの80や,httpsの443など)が入力URLに明示的に記述されていた場合,URL APIの仕様によりポート情報が自動的に省略・吸収されることがあります.逆に,クエリパラメータの値として入力フィールドに平文で打ち込まれたマルチバイト文字(日本語など)や特殊記号は,URLSearchParamsのtoString()処理を通過する過程で,自動的かつ正確にパーセントエンコーディングされた文字列へと変換されてから再構築URLに出力されます.
componentencodeとdecode
URL全体の分解と再構築機能とは独立して,本ツールには「URLエンコード・デコード」という単一のテキスト変換ユーティリティが画面のサイドバー領域に用意されています.これは,URLの構成要素全体を扱うのではなく,ユーザーが任意に入力した部分的な文字列のみを対象に,エンコード(符号化)またはデコード(復号)を実行する補助機能です.
このユーティリティの実体は,JavaScriptの組み込み関数である「encodeURIComponent」および「decodeURIComponent」を利用しています.「エンコード」モードを選択した場合,入力されたテキスト内のアルファベット,数字,および特定の一部記号(- _ . ! ~ * ' ( ))を除くすべての文字が,UTF-8ベースのパーセントエンコーディングへと変換されます.
「デコード」モードを選択した場合は,パーセントエンコーディングされた文字列を元のテキストへ復元します.
ここで注意すべき動作仕様は,「+(プラス記号)」の取り扱いです.一般的なフォーム送信などの仕様(application/x-www-form-urlencoded)では,半角スペースが「+」記号として表現され,それをデコードするとスペースに戻るシステムが存在します.
しかし,本ツールのこのユーティリティは「decodeURIComponent」を純粋に使用しているため,「+」記号を入力してデコードを実行しても,半角スペースには変換されず「+」という文字のまま出力されます.スペースは「%20」としてエンコード・デコードされる必要があります.
万が一,不完全なパーセントエンコーディングをデコードしようとしてエラーが発生した場合は,結果フィールドに例外のメッセージがそのまま出力され,処理の停止を防ぐ仕様となっています.
署名URL・安全性・接続の非対応
本ツールは文字列の構造的な分割,編集,および結合処理に特化したテキストエディタとしての役割に限定されています.そのため,URLが実際にインターネット上で機能するかどうかを検証する機能は実装されていません.
具体的には,入力されたホスト名(ドメイン)が実在するかどうかをDNSへ問い合わせる機能や,組み立てたURLに対してHTTPリクエストを送信してステータスコードを確認するような到達性のチェック機能は存在しません.また,URLリンク先のウェブサイトが安全であるか(マルウェアやフィッシングサイトでないか)を判定するセキュリティスキャン機能なども持ち合わせておりません.
本ツールを用いたURLの再構築では,クエリパラメータの正規化や値の順序,エンコード表記の変更が発生する可能性があります.これにより元のURLに付与されていた署名が検証エラーで無効になる可能性がありますが,必ずしも常にエラーになるとは限りません.ただし,本ツールには署名を再計算する機能はなく,再構築後のURLにおける署名の有効性については一切保証されません.