入門

パート 9

ホスティングは一つのシステム:変更する前に事実を確かめる

ホスティングの問題は「スクリプトが壊れた」ように見えても、実際にはPHP バージョン、足りない拡張、容量不足、権限、ネットワークパス、メール転送が原因かもしれません。まず今ある環境を言葉にできると、ターミナルでの調査はずっと落ち着きます。

同じプロジェクトでもホストが違えば挙動は変わる

ファイルが同一でも実行環境は同一とは限りません。PHP バージョン、読み込まれた拡張、ファイルシステム制限、所有者、権限、時刻、ネットワークアクセス、サーバー方針がアプリケーションの可能な動作を決めます。

だから最初の有効な問いは「何を変えるべきか」ではなく「何がこれを実行しているのか」です。ターミナルは、曖昧な環境を確認できる事実に変えるのが得意です。

まず一画面分の事実を集める

core は現在の Core、PHP、インターフェース、インストール済み拡張、更新状態、現在のファイルとディレクトリをまとめて示します。doctor -q は簡潔な診断結果を、sys hostsys uptime はホストと稼働時間を示します。

概要が正常でも、すべてのアプリケーションが正常だという証明にはなりません。これは基準情報です。深く調べる前に、実行環境、Core、実行環境が想定と違わないか素早く気付くための基準です。

core
doctor -q
sys host
sys uptime

PHPの機能は、この実行環境が実際に提供して初めて存在する

php versionphp modulesdoctor extensions を使えば、利用できる PHP 機能を直接確認できます。IMAP、SQLite、GD、暗号機能などは、ホスティングプランによって利用可否が異なります。

利用できる機能が足りないことと、コマンドの使い方を間違えたことは別問題です。場当たり的な回避策より明確なエラーを手掛かりにし、まず必要な拡張を確認してから、有効化するか、別のツールを使うか、作業を別環境へ移すか決めます。

php version
php modules
php info memory -c
doctor extensions

空き容量、ディレクトリ使用量、権限は別々の問い

disk . はファイルシステムの容量を示し、disk . -r は現在のツリーを意図的に走査して使用量を計算します。stat はパスの実体を示します。権限はさらに別の層で、ファイルが存在し空き容量があってもPHPが読書きできないことがあります。

何でも書き込み可能にして「権限を直す」のは避けます。所有者とモードを確認し、必要な最小の対象だけ変え、もう一度検証します。権限はローカルアクセス境界であり、認証や暗号化の代わりではありません。

disk .
disk . -r
stat .

削除、再起動、推測より先にログを読む

log -l は候補となるログを探します。対象ファイルが分かったら、先頭・末尾の範囲を絞り、文字列フィルターを使って、巨大なログ全体をブラウザーへ読み込まずに最新の記録を確認します。

役に立つログ行には文脈があります。時刻、構成要素、リクエストまたは操作、そして実際のエラーです。整理する前にその文脈を残してください。失敗がいつ始まり、その前後で何が変わったか分かれば、多くの障害は普通の調査に変わります。

log -l

環境とメールは別の仕組みとして確認する

env は環境、サーバー、リクエストの値を読みやすく表示し、機密情報らしい名前の値をマスクします。実行環境全体をむやみに出力せず、PHP が見ている一時ディレクトリやサーバーアドレスなど、必要な項目だけを確認できます。

mail は独立した診断手段です。PHP のローカルメール送信と IMAP 接続は別の仕組みです。サイトが正常に表示されても外向きメールが拒否される場合があり、IMAP 拡張がなければ接続できないこともあります。実際に利用する仕組みを個別に確認します。

env server SERVER_ADDR
env TMP
mail

修正の前に基準情報を保存する

PHP 設定、モジュール、権限、ホスティング設定を変える前に、簡潔な診断結果を diagnostics/ へ保存します。変更後に同じ診断をもう一度取り、「良くなった気がする」ではなく事実を比較します。

この習慣はlil-terminalだけのものではありません。Linux、macOS、Windows、コンテナ、コントロールパネルでも、良い診断は同じ順序です。環境を特定し、層を切り分け、証拠を集め、一つだけ変え、検証します。

md diagnostics
doctor -j > diagnostics/doctor.json -r
sys > diagnostics/system.txt -r
php version > diagnostics/php.txt -r

スクリプトとして残す

これを hosting-baseline.lil として保存します。アプリケーションデータを変更せず、diagnostics/ に小さな診断スナップショットを集めます。ホスティング変更の前後を残しておくと、記憶より比較の方が役に立ちます。

#lil
@install md doctor sys php disk log env
md diagnostics
core > diagnostics/core.txt -r
doctor -q > diagnostics/doctor.txt -r
sys > diagnostics/system.txt -r
php version > diagnostics/php.txt -r
disk . > diagnostics/disk.txt -r
log -l > diagnostics/logs.txt -r
env server SERVER_ADDR > diagnostics/server.txt -r