// 従来の方法で複数行文字列を作成
const multilineString = "1行目\n" +
  "2行目\n" +
  "3行目";
console.log(multilineString);
// 出力:
// "1行目"
// "2行目"
// "3行目"
// テンプレートリテラルを使った複数行文字列の作成
const multilineString = `1行目
2行目
3行目`;
console.log(multilineString);
// 出力:
// "1行目"
// "2行目"
// "3行目"
let name = "山田 太郎";
const message = "ようこそ、" + name + " さん";

console.log(message);
// 出力: "ようこそ、山田 太郎 さん"
let name = "山田 太郎";
const message = `ようこそ、${name} さん!`;

console.log(message);
// 出力: "ようこそ、山田 太郎 さん!"
const x = 10;
const y = 5;
const result = `${x} + ${y} = ${x + y}`;
console.log(result);
// 出力: 10 + 5 = 15
function greet(name) {
    return `こんにちは、${name} さん!`;
}

const userName = "ジョン";
const message = `挨拶メッセージ: ${greet(userName)}`;

console.log(message);
// 出力: "挨拶メッセージ: こんにちは、ジョン さん!"
const person = {
    name: "ジョン",
    age: 30,
    greet() {
        return `こんにちは、私は${this.name}で、年齢は${this.age}歳です。`;
    }
};

const greeting = person.greet();
console.log(greeting);
// 出力: "こんにちは、私はジョンで、年齢は30歳です。"
const fruits = ["りんご", "バナナ", "オレンジ"];
const message = `私の好きな果物は${fruits[0]}、${fruits[1]}、${fruits[2]}です。`;
console.log(message);
// 出力: "私の好きな果物はりんご、バナナ、オレンジです。"
const baseURL = "https://api.example.com";

// 1. 基本的なURLのテンプレートリテラルの使用
const endpoint1 = `${baseURL}/users`;
console.log(endpoint1); // 出力: "https://api.example.com/users"

// 2. URLに変数を埋め込む
const userId = 123;
const endpoint2 = `${baseURL}/users/${userId}`;
console.log(endpoint2); // 出力: "https://api.example.com/users/123"

// 3. URLパラメータの取り扱い
const userId = 123;
const postId = 456;
const endpoint3 = `${baseURL}/users/${userId}/posts/${postId}`;
console.log(endpoint3); // 出力: "https://api.example.com/users/123/posts/456"

// 4. クエリ文字列の生成
const params = {
    category: "books",
    limit: 10,
    sort: "desc"
};
const queryString = Object.entries(params)
  .map(([key, value]) => `${encodeURIComponent(key)}=${encodeURIComponent(value)}`)
  .join("&");
const endpoint4 = `${baseURL}/search?${queryString}`;
console.log(endpoint4); // 出力: "https://api.example.com/search?category=books&limit=10&sort=desc"
// 1. 基本的な HTML テンプレートリテラルの使用
const title = "Welcome!";
const content = "Hello, world!";
const htmlTemplate1 = `
    <div class="container">
        <h1>${title}</h1>
        <p>${content}</p>
    </div>
`;

console.log(htmlTemplate1);

// 2. 動的なデータの挿入
const user = {
    name: "John",
    age: 30,
    email: "john@example.com"
};
const htmlTemplate2 = `
    <div class="user-profile">
        <h2>${user.name}</h2>
        <p>Age: ${user.age}</p>
        <p>Email: ${user.email}</p>
    </div>
`;

console.log(htmlTemplate2);

// 3. 繰り返し処理を活用したリスト生成
const todos = [
    {id: 1, title: "Buy groceries"},
    {id: 2, title: "Do laundry"},
    {id: 3, title: "Clean the house"}
];
const todoList = `
    <ul>
        ${todos.map(todo => `<li>${todo.title}</li>`).join("")}
    </ul>
`;
console.log(todoList);

// 4. 条件文を活用した動的な HTML 生成
const isAuthenticated = true;
const loginMessage = `
    ${isAuthenticated ? `<p>Welcome back, ${user.name}!</p>` : `<p>Please log in.</p>`}
`;

console.log(loginMessage);
// 1. 基本的なログメッセージのテンプレートリテラル使用
const message1 = "Something happened";
console.log(`[INFO] ${message1}`);

// 2. ログレベルとタイムスタンプの追加
function formatLog(level, message) {
    const timestamp = new Date().toLocaleString();
    return `[${level}] ${timestamp} - ${message}`;
}

const message2 = "An error occurred";
console.log(formatLog("ERROR", message2));

// 3. 動的なデータの挿入
function formatLog(level, message, data) {
    const timestamp = new Date().toLocaleString();
    return `[${level}] ${timestamp} - ${message} - ${JSON.stringify(data)}`;
}

const user = {id: 123, name: "John"};
console.log(formatLog("DEBUG", "User logged in", user));

caniuse.comで詳しい情報をご確認ください。