TypeScript PR

5分でわかる!TypeScriptの文字列に変数を埋め込む3つの方法

5分でわかる!TypeScriptの文字列に変数を埋め込む3つの方法
記事内に商品プロモーションを含む場合があります

こんにちは!

プログラミングをしていると、文字列の中に変数の値を入れたいケースが頻繁にあります。

TypeScriptで文字列に変数を埋め込む方法って何があるんだろう…
テンプレートリテラルって何?使い方がよくわからない…
プラス記号で文字列をつなげるのが面倒…もっと簡単な方法はない?

こんな疑問を持っていませんか?

この記事では、TypeScriptにおける文字列への変数の埋め込み方法について、テンプレートリテラルを中心に初心者にもわかりやすく解説します。

この記事は、以下のような方におすすめです。

この記事はこんな人におすすめ!
  • TypeScriptで文字列に変数を埋め込む方法を知りたい方
  • テンプレートリテラルの基本的な使い方を学びたい方
  • 文字列連結の古い方法と新しい方法の違いを知りたい方
  • TypeScriptで効率的に文字列を扱いたい方

この記事を読めば、TypeScriptで文字列に変数を埋め込む様々な方法と、それぞれのメリット・デメリットがわかるようになります。さらに、実際のコード例を通して、テンプレートリテラルを使った効率的な文字列操作の方法も学べます。

「TypeScriptで文字列をもっと効率よく扱いたい!」「変数の埋め込み方法を基礎から学びたい!」という方は、ぜひ最後まで読んでください。

それでは、順を追って詳しく見ていきましょう!

TypeScriptにおける文字列と変数の基本

まずは、TypeScriptにおける文字列と変数の基本的な関係について確認しておきましょう。

文字列の基本

TypeScriptでは、文字列(String型)を表現するのに主に3つの方法があります。

  • シングルクォーテーション(’)を使う方法
  • ダブルクォーテーション(”)を使う方法
  • バッククォーテーション(`)を使う方法

最初の2つは従来のJavaScriptでも使われている方法で、基本的な文字列を表現するのに使います。3つ目のバッククォーテーションを使う方法は、ES6で導入された「テンプレートリテラル」と呼ばれる機能で、これを使うと文字列の中に変数を簡単に埋め込むことができます。

// シングルクォーテーションを使った文字列
const message1 = 'こんにちは';

// ダブルクォーテーションを使った文字列
const message2 = "TypeScript";

// バッククォーテーションを使った文字列(テンプレートリテラル)
const message3 = `プログラミング`;

変数と型

TypeScriptでは、変数に型を指定することができます。文字列型の変数を定義する場合は次のようにします。

// 明示的に型を指定する場合
const name: string = "田中";

// 型推論を使う場合(コンパイラが自動的に型を判断)
const age = 30; // 数値型(number)と推論される

TypeScriptの大きな特徴は、このように変数に型を指定できることで、コード品質を向上させ、バグを減らせる点です。

文字列に変数を埋め込む従来の方法

テンプレートリテラルが登場する前は、文字列に変数を埋め込むのにどのような方法が使われていたのでしょうか。

プラス演算子(+)による連結

最も一般的なのは、プラス演算子(+)を使って文字列と変数を連結する方法です。

const name = "鈴木";
const age = 25;

// プラス演算子を使った連結
const message = "私の名前は" + name + "です。年齢は" + age + "歳です。";
console.log(message); // 「私の名前は鈴木です。年齢は25歳です。」と出力される

この方法は直感的でシンプルですが、変数が多くなると記述が煩雑になり、可読性が低下するという欠点があります。

concat()メソッドを使う方法

もう一つの方法は、stringのconcatメソッドを使う方法です。

const firstName = "太郎";
const lastName = "山田";

// concat()メソッドを使った連結
const fullName = "".concat("氏名:", lastName, " ", firstName);
console.log(fullName); // 「氏名:山田 太郎」と出力される

この方法も、基本的にはプラス演算子と同様の目的で使われますが、複数の文字列を一度に連結するのに向いています。ただし、こちらも変数が多いと冗長になりがちです。

テンプレートリテラルの基本と使い方

ここからが本題です。ES6から導入されたテンプレートリテラルを使うと、文字列に変数を埋め込むのがとても簡単になりました。

テンプレートリテラルとは

テンプレートリテラルとは、バッククォート(`)で囲まれた文字列のことです。この中で`${変数名}`という形式を使うことで、変数の値を埋め込むことができます。

const name = "佐藤";
const age = 28;

// テンプレートリテラルを使った文字列への変数埋め込み
const message = `私の名前は${name}です。年齢は${age}歳です。`;
console.log(message); // 「私の名前は佐藤です。年齢は28歳です。」と出力される

従来の方法と比べて、コードがすっきりとし、可読性が大幅に向上しているのがわかります。

式の評価

テンプレートリテラルの`${}`内には、単なる変数だけでなく、JavaScriptの式も記述できます。計算や関数呼び出しなども埋め込めるので非常に便利です。

const x = 10;
const y = 20;

// 式の評価
const sum = `${x} + ${y} = ${x + y}`;
console.log(sum); // 「10 + 20 = 30」と出力される

// 関数の呼び出し
const name_en = "satoh";
const upperCaseName = `大文字:${name_en.toUpperCase()}`;
console.log(upperCaseName); // 「大文字:SATOH」と出力される

複数行の文字列

テンプレートリテラルのもう一つの利点は、複数行の文字列を簡単に作成できることです。バッククォート内で改行すると、その改行もそのまま文字列に反映されます。

const multiline = `これは
複数行の
文字列です。`;

console.log(multiline);
// 「これは
// 複数行の
// 文字列です。」と出力される

これは、従来の方法だと改行文字(\n)を挿入する必要があったため、可読性の面で大きな改善となっています。

テンプレートリテラルと従来の方法の比較

テンプレートリテラルと従来の方法を比較すると、どのような違いがあるのでしょうか。代表的な違いを表にまとめてみました。

項目 テンプレートリテラル プラス演算子 concat()メソッド
構文 `文字列${変数}文字列` “文字列” + 変数 + “文字列” “”.concat(“文字列”, 変数, “文字列”)
可読性 高い 中程度 中程度
複数行対応 ✅ 対応(改行のまま) ❌ 非対応(\nが必要) ❌ 非対応(\nが必要)
式の評価 ✅ 対応 ✅ 対応 ✅ 対応
パフォーマンス 標準的 標準的 標準的〜若干良い

テンプレートリテラルは特に可読性と複数行対応の面で優れていることがわかります。

具体的なテンプレートリテラルの使用例

テンプレートリテラルを実際のコードでどのように活用するか、いくつかの例を見てみましょう。

オブジェクトのプロパティを埋め込む

オブジェクトのプロパティをテンプレートリテラルで埋め込む方法です。

interface User {
  id: number;
  name: string;
  email: string;
}

const user: User = {
  id: 123,
  name: "山本次郎",
  email: "yamamoto@example.com"
};

const userInfo = `ユーザー情報:
ID: ${user.id}
名前: ${user.name}
メール: ${user.email}`;

console.log(userInfo);
// 「ユーザー情報:
// ID: 123
// 名前: 山本次郎
// メール: yamamoto@example.com」と出力される

このように、オブジェクトのプロパティも簡単に文字列に埋め込むことができます。

配列の要素を文字列に変換する

配列の要素を結合して文字列にする例です。

const fruits = ["りんご", "バナナ", "オレンジ"];

// 従来の方法
let oldWay = "フルーツ一覧:";
for (let i = 0; i < fruits.length; i++) {
  oldWay += fruits[i];
  if (i < fruits.length - 1) oldWay += "、";
}

// テンプレートリテラルとjoinを使った方法
const newWay = `フルーツ一覧:${fruits.join("、")}`;

console.log(oldWay); // 「フルーツ一覧:りんご、バナナ、オレンジ」と出力される
console.log(newWay); // 「フルーツ一覧:りんご、バナナ、オレンジ」と出力される

テンプレートリテラルと配列のjoinメソッドを組み合わせることで、コードがより簡潔になっています。

条件分岐を含めた例

テンプレートリテラル内で三項演算子を使うことで、条件に応じた文字列を生成することもできます。

const age = 17;
const canDrive = `あなたは${age >= 18 ? "運転できます" : "運転できません"}`;
console.log(canDrive); // 「あなたは運転できません」と出力される

HTMLテンプレートの生成

テンプレートリテラルはHTMLのテンプレートを生成する際にも便利です。

interface Product {
  id: number;
  name: string;
  price: number;
}

const product: Product = {
  id: 101,
  name: "スマートフォン",
  price: 50000
};

const htmlTemplate = `
<div class="product" id="product-${product.id}">
  <h2>${product.name}</h2>
  <p>価格: ${product.price.toLocaleString()}円</p>
  <button onclick="buyProduct(${product.id})">購入する</button>
</div>
`;

console.log(htmlTemplate);

このように、HTMLのテンプレートを動的に生成する場合にもテンプレートリテラルが非常に役立ちます。特に複雑なHTMLを生成する場合、可読性が大幅に向上します。

テンプレートリテラルの応用テクニック

より高度なテンプレートリテラルの使い方を見ていきましょう。

タグ付きテンプレートリテラル

タグ付きテンプレートリテラルは、テンプレートリテラルの拡張機能です。テンプレートリテラルの前に関数名を置くことで、その関数でテンプレートの処理をカスタマイズできます。

function highlight(strings: TemplateStringsArray, ...values: any[]) {
  let result = "";

  // 文字列と値を交互に連結
  strings.forEach((string, i) => {
    result += string;
    if (i < values.length) {
      // 値を強調表示
      result += `<span class="highlight">${values[i]}</span>`;
    }
  });

  return result;
}

const name = "田中";
const age = 30;

const highlightedText = highlight`私の名前は${name}です。年齢は${age}歳です。`;
console.log(highlightedText);
// 「私の名前は<span class="highlight">田中</span>です。年齢は<span class="highlight">30</span>歳です。」と出力される

このように、テンプレートリテラルを加工する関数を定義することで、文字列の生成方法をカスタマイズできます。

ネストしたテンプレートリテラル

テンプレートリテラルの中に別のテンプレートリテラルをネストさせることも可能です。

const userName = "佐々木";
const items = ["本", "ペン", "ノート"];

const message = `こんにちは、${userName}さん。
あなたのカートには${items.length}個のアイテムがあります:
${items.map(item => `- ${item}`).join('\n')}`;

console.log(message);
// 「こんにちは、佐々木さん。
// あなたのカートには3個のアイテムがあります:
// - 本
// - ペン
// - ノート」と出力される

この例では、テンプレートリテラル内でmap()メソッドを使い、さらにその中でテンプレートリテラルを使っています。このようなネストした使い方も可能です。

文字列操作におけるベストプラクティス

TypeScriptで文字列と変数を扱う際のベストプラクティスをいくつか紹介します。

適切な方法の選択

状況に応じて適切な文字列連結方法を選びましょう。

用途 推奨される方法 理由
単純な変数の埋め込み テンプレートリテラル 読みやすく、コードが簡潔になる
大量のデータ連結 join()メソッド 配列処理との相性が良く、パフォーマンスが良い場合がある
複雑なHTML生成 テンプレートリテラル 複数行対応で構造が把握しやすい

エスケープシーケンスの扱い

テンプレートリテラル内でバッククォート(`)やドル記号($)をそのまま表示したい場合は、バックスラッシュ(\)でエスケープします。

const code = `コード例:\`const name = "太郎";\``;
const price = `価格:\${price}`;

console.log(code); // 「コード例:`const name = "太郎";`」と出力される
console.log(price); // 「価格:${price}」と出力される

型安全性の確保

TypeScriptのメリットを活かし、変数の型を明確にしておくことで、予期せぬエラーを防ぎます。

function formatUser(user: { name: string; age: number }): string {
  return `名前:${user.name}、年齢:${user.age}歳`;
}

// 正しい型
const validUser = { name: "鈴木", age: 28 };
console.log(formatUser(validUser)); // 「名前:鈴木、年齢:28歳」と出力される

// 誤った型(TypeScriptがエラーを検出)
// const invalidUser = { name: "佐藤" }; // ageプロパティがない
// console.log(formatUser(invalidUser)); // コンパイルエラー

TypeScriptの型チェックにより、必要なプロパティが欠けている場合はコンパイル時に検出できます。

TypeScript特有の文字列操作の注意点

TypeScriptならではの文字列操作における注意点をいくつか紹介します。

型安全性と文字列補間

TypeScriptは強力な型システムを持ちますが、テンプレートリテラル内での変数の型は自動的に文字列に変換されます。

let value: unknown = 42;

// 以下はTypeScriptの型チェックでは問題ないが、意図しない結果になるかもしれない
const message = `値は${value}です`; // 「値は42です」と出力される

// より安全な方法(型の明示的なチェック)
function safeInterpolate(value: unknown): string {
  if (typeof value === "number" || typeof value === "string" || typeof value === "boolean") {
    return `値は${value}です`;
  }
  return "値は不明です";
}

nullおよびundefinedの扱い

nullやundefinedをテンプレートリテラル内で使用すると、それぞれ「null」「undefined」という文字列に変換されます。これが意図した動作でない場合は注意が必要です。

const nullable: string | null = null;
const undefinedVar: string | undefined = undefined;

// これらはそれぞれ「値:null」「値:undefined」と出力される
console.log(`値:${nullable}`);
console.log(`値:${undefinedVar}`);

// より安全な書き方
console.log(`値:${nullable ?? "データなし"}`);
console.log(`値:${undefinedVar ?? "未定義"}`);

国際化(i18n)への対応

複数の言語に対応するアプリケーションを開発する場合、テンプレートリテラルと組み合わせた国際化の手法も考慮する必要があります。

interface Translations {
  [key: string]: {
    greeting: string;
    farewell: string;
  };
}

const translations: Translations = {
  ja: {
    greeting: "こんにちは、{name}さん!",
    farewell: "さようなら、{name}さん!"
  },
  en: {
    greeting: "Hello, {name}!",
    farewell: "Goodbye, {name}!"
  }
};

function translate(key: 'greeting' | 'farewell', language: string, params: { [key: string]: string }): string {
  let text = translations[language][key];

  // プレースホルダーの置換
  Object.entries(params).forEach(([key, value]) => {
    text = text.replace(`{${key}}`, value);
  });

  return text;
}

// 使用例
const userName = "田中";
console.log(translate("greeting", "ja", { name: userName })); // 「こんにちは、田中さん!」と出力される
console.log(translate("farewell", "en", { name: userName })); // 「Goodbye, 田中!」と出力される

このように、国際化に対応する場合は、独自のテンプレート文字列処理を実装することもあります。

【付録】さらに学びを深めるためのリソース


intersection型について理解を深めたところで、さらに学習を進めたい方のために、いくつかのリソースを紹介します。
これらのリソースを活用することで、TypeScriptの型システムについてより深い知識を得ることができるでしょう。

おすすめの書籍


プロを目指す人のためのTypeScript入門


プロ開発者への近道!基礎から応用まで幅広くカバー

1一番のおすすめは「プロを目指す人のためのTypeScript入門」です。
この本は、TypeScriptの基礎から高度な使い方まで幅広く解説しています。

初心者でも理解しやすい説明から始まり、徐々に難易度を上げていく構成が特徴。
プログラミング経験者なら、さらに深い理解が得られるでしょう。

実際の開発現場で使えるテクニックも豊富に紹介されているのがポイント。
型の使い方や設計パターンなど、実践的な内容が満載です。

プロの開発者を目指す人はもちろん、TypeScriptをしっかり学びたい人におすすめの一冊。
基礎固めから応用力の向上まで、幅広いニーズに応えてくれます。

現場で使えるTypeScript 詳解実践ガイド


実践的スキルを身につけたい人必見!現場のノウハウが詰まった一冊

次におすすめは「現場で使えるTypeScript 詳解実践ガイド」がランクイン。
この本の特徴は、実際の開発現場で役立つ知識が詰まっていること。

TypeScriptの基本的な文法から始まり、実際のプロジェクトでどう活用するかまで丁寧に解説しています。
エラー対処法や性能改善のコツなど、現場ならではの知恵も満載。

特に、大規模なプロジェクトでTypeScriptを使う際のベストプラクティスが学べるのが魅力。
コードの保守性や再利用性を高める方法も詳しく紹介されています。

すでにJavaScriptの経験がある人や、実務でTypeScriptを使いたい人におすすめ。
この本を読めば、現場で即戦力として活躍できる力が身につくはずです。

書籍に関してはこちらの記事も参考にしてくださいね!




オンラインで参照できる公式ドキュメント


TypeScript公式ハンドブック


https://www.typescriptlang.org/docs/
TypeScriptの公式ドキュメントです。
intersection型を含む、すべての型システムの機能について詳細な説明があります。

TypeScript Deep Dive


https://basarat.gitbook.io/typescript/
TypeScriptの深い部分まで掘り下げて解説しているオンラインブックです。
無料で読むことができ、intersection型についても詳しく説明されています。

TypeScriptの学習は終わりがありません。
新しい機能が常に追加され、より良い書き方が発見されています。
継続的に学習を続けることで、より良いTypeScriptプログラマーになれるはずです。

キャリア形成/給与還元
ひとつひとつ真摯に向き合う企業
ONE_WEDGE社員募集

株式会社 ONE WEDGEでは、新たな仲間を募集しています!

私たちと一緒に、革新的で充実したキャリアを築きませんか?
当社は、従業員が仕事と私生活のバランスを大切にできるよう、充実した福利厚生を整えています。

  • 完全週休2日制(土日休み)で、祝日や夏季休暇、年末年始休暇もしっかり保証!
  • 様々な休暇制度(有給、慶弔、産前・産後、育児、バースデー休暇、有給6日取得で特別休暇付与)を完備!
  • 従業員の成長と健康を支援するための表彰制度、資格取得支援、健康促進手当など!
  • 生活を支えるテレワーク手当、記事寄稿手当、結婚祝金・出産祝金など、様々な手当を提供!
  • 自己啓発としての書籍購入制度や、メンバー間のコミュニケーションを深める交流費補助!
  • 成果に応じた決算賞与や、リファラル採用手当、AI手当など、頑張りをしっかり評価!
  • ワークライフバランスを重視し、副業もOK!

株式会社 ONE WEDGEでは、一人ひとりの従業員が自己実現できる環境を大切にしています。
共に成長し、刺激を与え合える仲間をお待ちしております。
あなたの能力と熱意を、ぜひ当社で発揮してください。
ご応募お待ちしております!

ホームページ、採用情報は下記ボタンからご確認ください!

応募、ご質問など、LINEでお気軽にご相談ください♪

まとめ

この記事では、TypeScriptにおける文字列への変数の埋め込み方法について、詳しく解説しました。主要なポイントをおさらいしましょう。

  • TypeScriptでは文字列に変数を埋め込む方法として、従来のプラス演算子やconcat()メソッドがあるが、テンプレートリテラルがより簡潔で読みやすい
  • テンプレートリテラルはバッククォート(`)で囲み、`${変数名}`の形式で変数を埋め込む。
  • テンプレートリテラルは複数行の文字列や式の評価にも対応しており、柔軟性が高い。
  • タグ付きテンプレートリテラルを使うと、より高度な文字列処理が可能になる。
  • TypeScriptの型システムを活用することで、安全な文字列操作が実現できる。

テンプレートリテラルは、TypeScriptにおける文字列操作の強力なツールです。特に複雑な文字列を扱う場合や、HTMLテンプレートを生成する場合に威力を発揮します。

ぜひこの記事で学んだ内容を活かして、TypeScriptでの文字列操作をより効率的に行いましょう!

COMMENT

メールアドレスが公開されることはありません。 が付いている欄は必須項目です