テンプレートエンジン:エラーハンドリング
開発効率とセキュリティを両立するために、開発環境と本番環境ではエラー発生時の動作が異なります。
コンパイル時エラー(構文エラーなど)
構文ミスや未対応の構文など、テンプレートのコンパイル時に検出可能なエラー は、エディタ上に表示されます。
エラーは該当の行にマーカー表示されるため、記述ミスにすばやく気付き、効率的に修正できます。
- 対応エディタ:Visual Studio Code (VSCode)
- 例:
Unexpected '}'
など
実行時エラー(評価中のエラー)
テンプレートのレンダリング中に発生したエラー(未定義変数、型エラー、関数の引数不足など)は、HTML 上に直接エラー内容が表示されます。
例:
<p>Variable 'user' is not defined</p>
このエラーメッセージは、該当のテンプレート出力位置にそのまま表示されます。
ただし、表示されるのは開発環境(デバッグモード有効時)のみ です。
本番環境での挙動
本番環境では、すべての実行時エラーは無表示(空文字)になります。 これはセキュリティ上の観点から、攻撃者に内部構造や変数名などのヒントを与えないためです。
まとめ
- 開発時: エラー内容が表示されるので、迅速に修正できます。
- 本番時: 安全性を優先し、出力を抑制します。
ヒント
明示的に「値がないことを許容したい」場合は、null 合体演算子(??
)などを活用してください。
{{ user?.name ?? 'ゲスト' }}
コンパイルとキャッシュ
テンプレートを保存すると、テンプレートエンジンによって 中間構造(実行用の内部データ構造) にコンパイルされます。この中間構造はサーバー上にキャッシュとして保存されます。
描画時には、テンプレートエンジンがキャッシュされた中間構造にコンテキスト(変数や関数などの実行環境)を注入し、評価・実行します。この仕組みにより、複雑なテンプレートであっても高速に描画できます。
なお、キャッシュが存在しない場合でも、初回の描画時に一度だけコンパイルが行われ、その後はキャッシュが利用されます。