Get to know MDN better
このページはコミュニティーの尽力で英語から翻訳されました。MDN Web Docs コミュニティーについてもっと知り、仲間になるにはこちらから。
This feature is well established and works across many devices and browser versions. It’s been available across browsers since 2015年9月.
テンプレートリテラルは逆引用符 (`) で区切られたリテラルで、複数行の文字列、埋め込み式による文字列の補間、タグ付きテンプレートと呼ばれる特殊な構文を許可します。
テンプレートリテラルは非公式に「テンプレート文字列」と呼ばれることもあります。文字列の補間のためにもっともよく使用されるからです。しかし、タグ付けされたテンプレートリテラルが文字列になるとは限りません。カスタムのタグ関数と併用することで、テンプレートリテラルのさまざまな部分に対して、任意の操作を実行することができます。
テンプレートリテラルに含まれる文字列テキストです。ほとんどの文字はそのまま使用できますが、改行やその他のホワイトスペース文字も含まれます。ただし、タグ関数を使用しない限り、無効なエスケープシーケンスは構文エラーの原因となります。
expression現在の位置に挿入される式で、その値は文字列に変換されるか、 tagFunction に渡されます。
tagFunction指定された場合、テンプレート文字列の配列と置換式とともに呼び出され、返値がテンプレートリテラルの値となります。タグ付きテンプレートを参照してください。
テンプレートリテラルは、二重引用符や単一引用符の代わりに逆引用符文字 (`) で囲みます。
テンプレートリテラルは、通常の文字列を持つことができるだけでなく、プレースホルダーと呼ばれる、ドル記号と波括弧で囲まれた ${expression} という形の埋め込まれた式の部品を含むことができます。文字列とプレースホルダーは、既定の関数またはユーザーが指定した関数に渡されます。既定の関数(ユーザーが関数を指定しない場合)は、プレースホルダーの置換を行う文字列の補間を実行し、その部分を単一の文字列に結合します。
独自の関数を使用するには、テンプレートリテラルの前に関数名を指定します。その結果は、タグ付きテンプレートと呼ばれます。この場合、テンプレートリテラルはタグ関数に渡され、そこでテンプレートリテラルの異なる部分に対して任意の操作を実行することができます。
テンプレートリテラル内で逆引用符文字をエスケープするには、逆引用符文字の前にバックスラッシュ (\) を置きます。
ドル記号も同様にエスケープすることで、補間を防ぐことができます。
ソースの中に挿入された改行文字は、すべてテンプレートリテラルの一部になります。
通常の文字列を使う場合は、複数行の文字列を得るために次のような構文を使用する必要があります。
テンプレートリテラルを使用すれば、同じものを次のように書くことができます。
通常の文字列リテラルと同様に、ソースコードの可読性を高めるために、改行をバックスラッシュ (\) でエスケープすることで、単一行の文字列を複数行にわたって記述することができます。
テンプレートリテラルなしで、式からの出力と文字列を結合したい場合、結合は加算演算子 + を使用して行うことになります。
特に複数の式がある場合は、読みづらい場合があります。
テンプレートリテラルを使用すると、埋め込み式の置換を行う際に、${expression} 形式のプレースホルダーを使用することで、連結演算子を使わずに、コードの可読性を向上させることができます。
2 つの構文には軽微な違いがあることに注意してください。 テンプレートリテラルは、その式を直接文字列に変換しますが、加算ではまずオペランドをプリミティブに変換します。 詳細は、 + 演算子のリファレンスページをご覧ください。
場合によっては、テンプレートを入れ子にすると、構成可能な文字列を得るのにもっとも簡単に(かつ、おそらくより読みやすく)なることがあります。逆引用符で区切られたテンプレートでは、テンプレート内にあるプレイスホルダー ${expression} の内部で逆引用符を使用することができます。
例えば、テンプレートリテラルがなければ、特定の条件に基づいて特定の値を返したい場合、次のような方法をとることができます。
入れ子なしのテンプレートリテラルを使用すれば、次のようにすることができます。
テンプレートリテラルを入れ子で使用すると、次のようにすることができます。
タグ付きテンプレートは、テンプレートリテラルのより高度な形式です。
タグを使用すると、テンプレートリテラルを関数で解析できます。タグ関数の最初の引数には、文字列リテラルの配列を含みます。残りの引数は式に関連付けられます。
タグ関数は、これらの引数に対して何でも望み通りの操作を実行することができ、加工された文字列を返します。(または、以下の例の一つで示しているように、まったく異なるものを返すこともできます。)
タグに使用される関数の名前は、自由に指定できます。
タグは単なる識別子である必要はありません。 16 より大きな優先順位を持つ任意の式を使用でき、これにはプロパティアクセス、関数呼び出し、new 式、さらには別のタグ付きテンプレートリテラルも含まれます。
構文上は技術的に許可されていますが、タグ付けされていないテンプレートリテラルは文字列であり、連結すると TypeError が発生します。
唯一の例外はオプショナルチェーンで、これは構文エラーが発生します。
なお、次の 2 つの式は依然として解釈可能です。つまり、自動セミコロン挿入の対象にはなりません。自動セミコロン挿入は、解釈不可能なコードを修正するためにのみセミコロンを挿入します。
タグ関数は文字列を返さなくても構いません。
タグ関数の先頭の引数は、文字列の配列です。どのテンプレートリテラルでも、その長さは置換の数(${…} の発生回数)に 1 を加えたものと同じであり、したがって常に空ではありません。
タグ付きのテンプレートリテラル式については、そのリテラルが何度評価されても、タグ関数は常にまったく同じリテラル配列を引数として呼び出されます。
これにより、タグは第 1 引数の識別子に基づいて結果をキャッシュすることができます。配列値の安定性をさらに保証するために、第 1 引数と raw プロパティはどちらも凍結され、変更することはできません。
タグ関数に渡される第 1 引数では、特別な raw プロパティが利用できます。このプロパティを通して、エスケープシーケンスを処理する前の、入力された通りの加工前の文字列を参照することができます。
加えて、 String.raw() メソッドがあり、既定のテンプレート関数のように文字列を連結した形で加工前の文字列を生成することができます。
リテラルにエスケープシーケンスが含まれていない場合、String.raw 関数は "identity" タグのように機能します。 リテラルにタグを付けない場合と同様に常にうまくいく実際の identity タグが必要な場合は、エスケープシーケンスが処理された「加工された」リテラル配列を String.raw に渡し、生の文字列であるかのように見せかけるカスタム関数を作成することができます。
これは、特定の名前付きリテラルに特別な処理を行う多くのツールにとって有益なものです。
通常のテンプレートリテラルでは、文字列リテラル内のエスケープシーケンスはすべて許可されています。それ以外にも、適切に形成されていないエスケープシーケンスはすべて構文エラーとなります。 これには以下が含まれます。
メモ: \ に他の文字が続くと、何もエスケープされていないので、無意味かもしれませんが、構文エラーではありません。
しかし、これはタグ付きテンプレートにとっては問題です。「加工済み」リテラルに加えて、生のリテラルにもアクセスできるからです(エスケープシーケンスはそのまま保持されます)。
タグ付きテンプレートでは、任意の文字列コンテンツを埋め込むことができ、エスケープシーケンスは異なる構文に従うことがあります。例えば、 JavaScript で LaTeX のソーステキストを String.raw を使用して埋め込む場合を考えてみましょう。JavaScript の構文制限に従うことなく、u または x で始まる LaTeX マクロを使用できるようにしたい場合もあります。そのため、タグ付きテンプレートでは、正しく形成されたエスケープシーケンスの構文制限が解除されます。下記は、MathJax を使用して LaTeX を 1 つの要素でレンダリングする例です。
しかし、埋め込んで「加工された」結果の中においても、不正なエスケープシーケンスがあれば、それを提示する必要があります。こうした不正なエスケープシーケンスは、「加工された」の配列の中では、undefined の要素として表示されます。
このエスケープシーケンスの制約は、タグ付きテンプレートのみが除外となります。タグ付きでないテンプレートリテラルの場合は、除外対象ではありません。
| ECMAScript® 2027 Language Specification # sec-template-literals |
Enable JavaScript to view this browser compatibility table.
This page was last modified on 2025年9月11日 by MDN contributors.
Your blueprint for a better internet.
Visit Mozilla Corporation’s not-for-profit parent, the Mozilla Foundation.
Portions of this content are ©1998–2026 by individual mozilla.org contributors. Content available under a Creative Commons license.