NGWSqlAdminないものは造る、私だけのSQL管理ツール
次期バージョンのLinuxで使うSQLツールが要る。多機能な有料版は、使わない機能ばかりだ。ならば造る。必要なものだけを伝え、AIとの対話で1本のPHPに仕上げた自作ツールの記録。
きっかけ — 次期バージョンに、SQLツールがなかった
NGW の次期バージョンは、これまでとは違う Linux サーバの上で動かしている。開発を進めるうちに、地味だが確実に困ることが出てきた。データベースを直接のぞくためのツールがない。
普段の環境では phpMyAdmin を使っている。長く使っていて手に馴染んでいる。Mac 側では SequelAce も試したが、私には少し使いにくい。TablePlus はよくできていて素直に良いと思うが、有料だ。
次期サーバに phpMyAdmin を入れればいい、という話ではある。実際それが一番早い。ただ、入れられない事情も、入れたくない場面もある。手元で完結する軽い道具がひとつ欲しかった。
有料版は、正直いらない
高機能なツールは何でもできる。だが冷静に自分の作業を振り返ると、毎日使うのはほんの一部の機能だ。DBを切り替えて、テーブルの一覧を見て、中身を確認して、たまに SQL を流す。だいたいそれで足りている。
使わない機能に囲まれて目的の操作までクリックを重ねるより、要るものだけが並んでいる方が速い。ないなら造ればいい。昔からの私の流儀である。頭の中には設計図がだいたい浮かんでいた。
必要なものだけを、決める
最初に決めた基本機能は4つ。
- DB切替 — 対象のデータベースを選ぶ
- テーブル一覧 — 何があるか一目で
- 内容確認 — 中身をページ送りで見る
- SQL実行 — 任意のクエリを流して結果を見る
まずはこれだけ。あとは使いながら、欲しくなったものを足す。最初から全部を設計しきらない。 それも今回のやり方だった。
AIと、1本のPHPで
作り方は AI との対話にした。頭の中の設計図を、必要なものだけ言葉にして渡す。返ってきたものを実際に触って、「ここはこう」「これはいらない」とやり取りしながら肉付けする。
方針は最初にひとつだけ固めた。単一ファイルの PHP、外部依存ゼロ、ダーク基調。 サーバに置くだけで動く状態を最優先にした。
対話が進むほど、道具が自分の手に馴染んでいく。汎用ツールなら「設定でオフにする」ような細かな挙動を、そもそも自分の使い方に合わせて造れる。これは自作ならではの気持ちよさだった。

使ううちに、育った機能
4つだけで始めたはずが、対話を重ねるうちに、自分が本当に使う機能だけが少しずつ増えた。
- TABLE と VIEW を分けて表示。 システム系の内部テーブルは一覧から隠す
- 列のドラッグ&ドロップで並べ替え。表の外へ放り出すと非表示。チェックリストで一括の表示/非表示も
- SQL の実行結果でも同じ列操作が効く。 見えている結果を CSV で書き出す
- SQL エディタの横に列名パネル。ダブルクリックで挿入、必要なら前カンマを自動で付ける
- EXPLAIN の結果を日本語で簡易分析。 「ここはフルスキャン」「ここは主キー参照で速い」と指摘する
- 本命の JOINビルダー。テーブルを選び、キーを選ぶ(同名の列は自動で候補提案)だけで JOIN 文が組み上がる。「キー確認」で実際に噛み合うかを数件だけ試せる
- 危険な操作にはガード。 SELECT 以外を流すときや、DROP / TRUNCATE には確認ダイアログを出す
どれも私が実際に使うから足した。使わない機能は最初から存在しない。引き算で始めて、要るものだけ足す。 既製の万能ツールとは、ここが決定的に違う。
設計判断のメモ
意識して選んだことを残しておく。
単一ファイル・依存ゼロ。 ビルドもインストールも要らない。ファイルを1本置けば動く。可搬性が高く、壊れにくい。外部へ通信しないので、ネットにつながらない環境でもそのまま完結する。閉域網で仕事をすることが多い私には、これが効く。
あえて AJAX を使わない。 操作のたびにページを読み込み直す素朴な作りにした。その代わり、JOIN の組み立て途中の状態などはブラウザの localStorage に持たせ、実行をまたいでも消えないようにした。シンプルさと引き換えの割り切りだが、結果として見通しがよく壊れにくい。
任意 SQL の実行は、強力な刃物だ。 何でも流せるということは、何でも壊せるということでもある。アクセスは絞り、危険な操作には確認を挟み、そもそも外に公開しない前提で運用する。便利さと危うさは背中合わせだ。作りながら何度も思った。
余談 — 手書き時代の道具が、AI時代に居場所を持つ
作り終えて思ったことがある。この JOINビルダーは、SQLを手で書いていた時代にあれば、開発効率がずいぶん上がっていただろう、と。
3表・4表と重ねる JOIN は、エイリアスと ON 句を何度も見直し、キーが噛み合わずに空振りする。あれを何年やったか分からない。クリックで組めて、実際に繋がるかを数件で試せたら、どれだけ楽だったか。二十年遅れで自分に配ってやりたい道具である。
面白いのは、SQL をほぼ AI が書くようになった今でも、この道具は要らなくならないことだ。役割が「書く」から「確かめる・掴む」へずれるだけである。
- AI が出した JOIN が本当に噛み合っているかを目視で確かめられる(AI も時々ポンコツをやる)
- 初見のスキーマで、どの列で繋がるのかを手で探る探索ツールになる
- 命名規則を手がかりにしたキーの自動提案は、決定的・即時・オフラインで効く。確率で文章を紡ぐ AI とは別種の強みで、ネットにつながらない環境でもそのまま動く
SQL を書く時代の効率化ツールとして生まれたのに、実際は SQL を検証し、理解する時代のツールとしても筋がいい。手書き時代の発想が、AI 時代に居場所を持っている。作ってみて初めて腑に落ちた。
AIとの協働作業での学び
設計図は最初から頭の中にあった。AI に渡したのは、その全部ではなく必要なものだけだ。曖昧に「いい感じの管理ツール」と頼むのではない。「まず DB 切替とテーブル一覧と SQL 実行、単一ファイルで」と具体的に区切って渡す。返ってくるものの精度が上がる。足りない所は、触ってから言葉にして足せばいい。
こうして 1本の PHP で完結する私だけの SQL ツールができた。市販の万能ツールのように何でもはできない。だが自分の作業には過不足なく手が届く。名前は NGWSqlAdmin。NGW 専用の、ささやかな MySQL 管理ツールだ。
ないものは、造ればいい。昔からの流儀は、相棒が AI に変わっても変わらなかった。変わったのは造るのにかかる時間だけである。一日だ。二十年前の私に言っても、たぶん信じない。