メインコンテンツまでスキップ

テンプレートエンジン:エラーハンドリング

開発効率とセキュリティを両立するために、開発環境と本番環境ではエラー発生時の動作が異なります。

コンパイル時エラー(構文エラーなど)

構文ミスや未対応の構文など、テンプレートのコンパイル時に検出可能なエラー は、エディタ上に表示されます。

エラーは該当の行にマーカー表示されるため、記述ミスにすばやく気付き、効率的に修正できます。

  • 対応エディタ:Visual Studio Code (VSCode)
  • 例:Unexpected '}' など

実行時エラー(評価中のエラー)

テンプレートのレンダリング中に発生したエラー(未定義変数、型エラー、関数の引数不足など)は、HTML 上に直接エラー内容が表示されます

例:

<p>Variable 'user' is not defined</p>

このエラーメッセージは、該当のテンプレート出力位置にそのまま表示されます。

ただし、表示されるのは開発環境(デバッグモード有効時)のみ です。

本番環境での挙動

本番環境では、すべての実行時エラーは無表示(空文字)になります。 これはセキュリティ上の観点から、攻撃者に内部構造や変数名などのヒントを与えないためです。

まとめ
  • 開発時: エラー内容が表示されるので、迅速に修正できます。
  • 本番時: 安全性を優先し、出力を抑制します。
ヒント

明示的に「値がないことを許容したい」場合は、null 合体演算子(??)などを活用してください。

{{ user?.name ?? 'ゲスト' }}

コンパイルとキャッシュ

テンプレートを保存すると、テンプレートエンジンによって 中間構造(実行用の内部データ構造) にコンパイルされます。この中間構造はサーバー上にキャッシュとして保存されます。

描画時には、テンプレートエンジンがキャッシュされた中間構造にコンテキスト(変数や関数などの実行環境)を注入し、評価・実行します。この仕組みにより、複雑なテンプレートであっても高速に描画できます。

なお、キャッシュが存在しない場合でも、初回の描画時に一度だけコンパイルが行われ、その後はキャッシュが利用されます。