自分のWordPressで学ぶPHP講座(AIの変更を判定する)
区分3 差分を判断する★★★直す前のファイルと、直した後のファイルを比べて、違う行だけを取り出したものが差分です。 コマンドの名前も diff といいます(コマンドは、ターミナルに文字で打って動かす命令のことです)。
校正刷りにたとえると近いと思います。 原稿を全部読み直さなくても、赤字が入った所だけ見れば、何が変わったかが分かります。AIの変更を確かめる時も同じで、ファイル全体は読まず、差分だけを読みます。
差分は「前」と「後」の2つが無いと作れません。 前の状態を残しておくのが控えで、控えがあるから差分も出せるし、戻すこともできます。この単元は、差分・控え・構文チェック・戻し方の4つで1セットです。
| 何のことか | |
|---|---|
| 差分 | 前と後の違い。「何が変わったか」を見る物 |
| 控え | 前の状態の丸ごとのコピー。「戻れるか」を決める物 |
| 構文チェック | 文法の誤りだけを見る検査。動作の正しさは見ない |
| 下見 | 本番に反映する前に、自分だけに見せて確かめること |
差分の読み方は、記号を2つ覚えれば足ります。 新しい方に増えた行が「足した」、古い方から無くなった行が「消した」です。
表示の書き方は2種類あります。AIや人によって、どちらも出てきます。
| 消した行(前にあった) | 足した行(後で増えた) | |
|---|---|---|
| 普通の表示(diff 前 後) | < で始まる |
> で始まる |
| 統一形式(diff -u 前 後) | - で始まる |
+ で始まる |
どちらの表示でも、コマンドに並べた順が「前、後」で、ここを逆にすると足した・消したも逆になります。 矢印が内側(>)か、プラス(+)なら、足した行。この1点で読み始められます。
実物で見てみましょう。子テーマの functions.php を、10月8日の追記の前の控えと比べた結果の先頭です。
293a294,476
>
> /* ===== LP風デザイン ここから貼る(2026-10-08) =====
> * 子テーマの functions.php の一番下に、この行から最後までを貼る。
> * 上にある JSON-LD・FAQ・robots.txt・/line/ の noindex は触らない。
1行目の 293a294,476 は、「前のファイルの293行目のあとに、後のファイルの294〜476行目が追加された」という意味です。
真ん中の a は追加(add)で、ほかに d(削除)と c(変更)があります。その後ろに > の行が183行続き、< の行は1つもありません。つまりこの差分は、何も消さずに、最後にまとめて足したものです。
もう1つ、ごく小さな例も見ておきます。スライドの最大枚数を 8 から 6 に変えた場合の差分は、こうなります。
45c45
< return 8;
---
> return 6;
c は変更で、< が前、> が後です。1行を直した形は、この「消して足す」の1組になります。
中身を読む前に、形から分かることがあります。
a だけ(足しただけ):既存の動きは触っていない。危ないのは、足した部分が新しく悪さをしないかd や c がある:既存の物を消したり直したりしている。何を変えたか、必ず中身を見る差分が大きい時は、全部を1行ずつ読もうとしないでください。 「足した183行は、何を何のために、どのフックで動かすのか」を3点に分けてAIに説明させ、それが差分の中身と合っているかを見る方が、現実的です。
差分は、頼めばAIが出してくれます。
「直す前に控えを取って、直したあとに diff -u で前後の差分を出して。足した行・消した行の数も添えて」
AIが「直しました」とだけ言って差分を出さない時は、この一言で必ず出させてください。 差分が出ない変更は、判断の材料が無いので、OKを出さないのが基本です。
実物の子テーマのフォルダには、functions.php の控えが何本も並んでいます。
functions.php
functions.php.bak-20260504-001157
functions.php.bak-20260506-line
functions.php.bak-20261008-2113
functions.php.bak-20261008-2127-pre-all
functions.php.bak-20261008-btn
名前は、元のファイル名の後ろに .bak- と、日付や理由を付けた形です(bak は backup の略)。
日付と時刻(20261008-2113 は10月8日21時13分)が付くものと、line・btn・pre-all のように「何のために」が付くものがあります。
この名前は、見ただけで「いつの、どの変更の前か」が分かることが目的です。
控えの名前に、日付か理由のどちらかが入っているかを確かめてください。functions.php.bak だけだと、次に直した時に上書きされて、本当に戻したい時点が消えてしまいます。
もう1つの注意があります。控えを、公開されているフォルダ(子テーマのフォルダなど)に置く場合、拡張子が .php ではなくなるので、サーバーの設定によっては、中身がそのまま閲覧できてしまう恐れがあります。パスワードなどが書かれたファイルの控えは、公開フォルダの外(ホームの直下など)に置くのが安全です。
PHPのファイルには、コマンド1つで文法の間違いだけを調べる機能があります。
php -l functions.php
問題が無ければ、次のように表示されます。
No syntax errors detected in functions.php
-l は lint(文法検査)の頭文字です。
括弧の閉じ忘れや、行末の ; の付け忘れのような、書き方の誤りを見つけてくれます。
ただし、見つけられるのは書き方の誤りだけです。「文法は合っているが、動きが間違っている」コードは通ります。
たとえば、cookie を消すつもりが残してしまうコードも、No syntax errors detected と出ます。php -l は「サイトが真っ白になる事故」を防ぐ最低限の検査で、OKの根拠は、差分を読んだ判断の方にあります。
functions.php に文法の間違いが入ると、サイトの全ページが表示されなくなる(真っ白になる)ことがあります。 だから、本番の functions.php を書き換える前に、別の場所に書いたファイルで php -l を通してから置く、という順にすると安全です。
直した結果をいきなり全員に見せない、という考え方が下見です。 実物の追記には、その仕組みが入っています。
if ( ! defined( 'LOOK_FOR_ALL' ) ) {
define( 'LOOK_FOR_ALL', true ); // ← 本番切替はここ。true にすると、cookie が無い人にも全員に出る
}
コメントには、「URLに ?look=on を付けて開いた人だけに新しいデザインを出し、全員に出す時はここを true にする」という段取りが書かれています。 つまり、下見の間は一部の人だけが見て、確認ができたら1か所を変えて本番に切り替える、という作りです。
AIの変更を受け取る時は、下見の手段があるか、本番に切り替える場所が1か所に決まっているかを確かめてください。 下見の手段が無い変更は、反映した瞬間に全員に出ます。そうなった時の戻し方が、次の章です。
変更に問題が見つかった時の戻し方は、控えを使うのが基本です。 手順は、次の順に行います。
functions.php.bak-今の日付と時刻-failed のように)php -l functions.php で構文チェックを通す最初の手順が飛ばされやすい所です。 今の状態を捨ててしまうと、「何が悪かったか」を後で調べる材料が無くなります。戻す時も、先に控えを取ります。
頼み方の例を挙げておきます。 「functions.php を2026-10-08 21時13分の控えに戻して。戻す前の今の状態も別名で控えて、戻した後に php -l と表示確認をして」
サイトが真っ白になっていて管理画面も開けない時は、WordPressの画面からは戻せません。 サーバー(Xserver)のファイルマネージャーか、ターミナルからの操作で戻すことになります。AIに頼む時は、あらかじめ「真っ白になった時の戻し方も用意して」と添えておくと、いざという時に困りません。
○ よくある勘違い:「php -l が通ったから安全」→ 文法だけの検査です。動作は別に確かめます
○ よくある勘違い:「差分が小さいから安全」→ 1行でも、判定の条件を逆にすれば全体が変わります
○ 控えは、変更の前に取ります。変更の後に「元の状態を再現」した控えは、控えとして頼れません
○ 差分に含まれる文字(パスワード・API キー・個人情報)は、AIに見せる前に消すか、見せない約束にします
○ 関係する単元:No.07(差分の中の入力・出力の見方)/No.08(本文の一括置換と控え)/No.11(5つの問い)
差分は、足した行(>、+)と消した行(<、-)を見る。変える前に、日付か理由の付いた控えを取る。php -l は文法だけ。戻す前にも、今の状態を控える。
問1 AIが差分を出してきました。先頭が 12d11 で、次の行が「< define( 'DEBUG_MODE', true );」です。意味として正しいのは?
問2 AIが「functions.php を直しました。php -l でエラー無しでした」と報告しました。この報告だけでOKにしてよいですか?
問3 AIが「控えを取りました」と言って、functions.php.bak というファイルを作りました。前にも同じ名前で作った控えがあります。何が問題ですか?
問4 新しい処理を入れたらサイトの表示が崩れました。戻す時、最初にやることは?
出典:GNU diffutils マニュアル(https://www.gnu.org/software/diffutils/manual/)/PHP公式「コマンドラインオプション」の -l(https://www.php.net/manual/ja/features.commandline.options.php)/WordPress公式「Child Themes」(https://developer.wordpress.org/themes/advanced-topics/child-themes/)/自分のサーバーの子テーマの functions.php と、その控え(functions.php.bak-…)。