二つの版、一つの製品
Toutadmin には二つの実装があります。一方は Node.js の上で、もう一方は PHP の上で動きます。 二つの製品でもなければ、簡易版と完全版でもありません。同じ 51 の業務スペース、 同じ 142 テーブルの構造、同じ 16 言語、同じ画面です。この ページは、両者を本当に分けているものを述べます。そしてそれは、ごくわずかです。
なぜ二つなのか#
企業向けの製品は、企業がすでにいる場所に置けなければなりません。サーバーと
systemd と管理者を持つ会社もあれば、月四ユーロの共用レンタルサーバーと FTP
しか持たない会社もあります。Node 版は前者に、PHP 版は後者に向き合います。後者を断ることは、
管理の道具を最も必要としている半数の会社を断ることでした。
まったく同じもの#
| 項目 | Node | PHP |
|---|---|---|
| 業務スペース | 51 | 51 |
| データベースの表 | 142 | 142 |
| 列 | 1311 | 1311 |
| 画面の言語 | 16 | 16 |
| 翻訳キー | 2765 | 2792 |
| 任意モジュール | 7 | 7 |
| Webhook のイベント | 8 | 8 |
| API の資源 | 9 | 9 |
構造が同じなので、データベースは変換なしで一方から他方へ移ります。片方を
止め、app.sqlite とファイルのフォルダーを写し、もう片方を起動するだけです。
パスワードもそのまま使えます。どちらの版も同じハッシュ形式を読むからです。これが同等性の
最も正直な試験であり、通っています。
違うところ#
いくつかのアドレスの形#
Node 側は 531 経路、PHP 側は 513 経路。この差は不足ではありません。 同じ機能を、より短く書いてあるだけです。
-
API。Node は九つの資源を一つずつ宣言します
(
/api/v1/collaborateurs、/api/v1/services……)。PHP は一つの 引数つき経路でまとめて提供します。九つとも応答し、ルートは九つすべてを告げ、テストが 一つずつ呼び出してそれを確かめます。 - 導入。Node は五段階で案内し、PHP は一ページと一回の送信に収まります。 尋ねる情報は同じ五つ。言語、前提条件、会社、年次有給の日数、管理者アカウントです。
-
横断的な権限。Node は権限ごとに経路を持ち、PHP は引数つきの経路
/admin/droits/{flag}一本です。
この二十八の形の違いは記憶で語られてはいません。tests/test_parity.php が
一つずつ実際に動かして確かめます。
定期的な見回り#
Node は自前の時計を持ちます。サーバーが常駐しているので、自分で目を覚まします。PHP は
要求のあいだしか生きていないので、同じ八つの処理が tools/cron.php を通り、
レンタルサーバーの定期実行から呼ばれます。業務のコードも結果も同じで、きっかけだけが違います。
日付#
Node は V8 に組み込まれた Intl で日付を書きます。PHP も intl
拡張があれば同じで、同じ ICU を使い、一字まで同じ結果になります。拡張がないときは曜日と
月の名前が翻訳辞書から来ます。日付は正しく訳されたままですが、要素の並びが一部の言語で
変わることがあります。
違って当然と思われて、実は同じもの#
| 項目 | どちらの版でも |
|---|---|
| QR コード(二要素認証) | PHP 側は手書きの符号化器。Node 側が使う library と、十六とおりの文字数でバイト単位まで一致を確認済み。 |
| バックアップの書庫 | どちらも外部依存なしで tar.gz を作り、中身も SHA-256 も同じ。 |
| IMAP の経理用受信箱 | どちらも製品の中に IMAP クライアントを持つ。 |
| PDF、CSV、取り込み | 製品の中で書かれ、出てくるファイルも同じ。 |
| 監査記録 | ハッシュの連鎖も同じ。一行でも書き換えれば鎖が切れるのは、どちらも同じ。 |
| HTTP の安全方針 | 同じヘッダー、nonce を使う同じ CSP、そして欠かせない JavaScript を持たない点も同じ。 |
どちらを選ぶか#
| あなたの状況 | 版 |
|---|---|
| 共用レンタルサーバー、FTP、コマンドラインなし | PHP —— まさにこの場合のために |
自分のサーバー、systemd、管理者がいる | Node |
| すでにどちらかの運用を知っている | そちら。同等性が、選択をやり直せるものにしています。 |
| 同時に使う人が多い | Node —— 常駐する一つのプロセス、開いたままのデータベース |
| 迷っている | PHP —— 手入れする部品が少なく、Node への移行も結局はファイルの複写 |
同等性はどう保たれているか#
それは心がけではなく、検査です。変更のたびに四つの照合を通します。
- 経路 —— 両方から抜き出して突き合わせる。食い違いは必ず文書化された差でなければならない。
- 関数 —— 各モジュールが外に出す名前を、モジュールごとに突き合わせる。
- 構造 —— 両方のデータベースから表と列を読み出して突き合わせる。
- 画面 —— 両方の版を並べて起動し、本物のブラウザーで一ページずつ辿り、応答コードと構造を比べる。
この四つの照合は、実際に欠陥を見つけてきました。うち二つは両方の版にありました。 だからこそ意味があります。測らない同等性とは、気づかないうちに失われた同等性のことです。
さらにテスト一式があります。Node 側 802 件、PHP 側 572 件、合わせて 1374 件です。
Toutadmin ドキュメント —— 2026-09-13 に生成。 ソフトウェアから独立した単体のサイトです。