let と const の違いと使い分け

JavaScript の基礎

日付:2025年2月6日

JavaScript の let と const の違いを詳細に解説し、具体的な使い分けや最適な使用方法について説明します。

目 次

JavaScript における let と const の違いと使い分け

はじめに

JavaScript において、変数を定義する際には letconst を使用します。しかし、どちらをどのような状況で使うべきか明確に理解できていないことも多いでしょう。本記事では、letconst の違いと具体的な使い分けについて詳しく解説します。

let と const の基本的な違い

特性letconst
再代入可能不可能
再宣言不可能不可能
ブロックスコープありあり
初期化の必要性不要必須

1. let の特徴と用途

let は、ブロックスコープを持つ変数宣言の方法であり、再代入が可能です。

1.1 let の基本的な使い方

JAVASCRIPT
let count = 10; console.log(count); // 10 count = 20; console.log(count); // 20 (再代入可能)

1.2 let を使うべき場面

  • 変数の値を後から変更する必要がある場合
  • ループのカウンタ変数
  • 一時的なデータ格納(関数内部で動的に変更される値)
JAVASCRIPT
for (let i = 0; i < 5; i++) { console.log(i); // 0, 1, 2, 3, 4 }

2. const の特徴と用途

const は、一度定義した変数の再代入を禁止する宣言方法です。

2.1 const の基本的な使い方

JAVASCRIPT
const name = "John"; console.log(name); // "John" name = "Doe"; // エラー: Assignment to constant variable.

2.2 const を使うべき場面

  • 変更する必要がない定数値
  • オブジェクトや配列(ただしプロパティの変更は可能)
  • 関数の参照の保持
JAVASCRIPT
const TAX_RATE = 0.1; const API_URL = "https://api.example.com/data";

3. const でもオブジェクトのプロパティは変更可能

const でオブジェクトや配列を定義した場合、その 参照(reference) を変更することはできませんが、オブジェクトのプロパティの変更や配列の要素の追加・削除は可能です。

const は「変数(参照)」の変更を禁止するが、「オブジェクトの中身の変更」は可能

JAVASCRIPT
const user = { name: "Alice", age: 25 }; user.age = 26; // ✅ OK: プロパティの変更は可能 console.log(user); // { name: "Alice", age: 26 } user = { name: "Bob", age: 30 }; // ❌ エラー: Assignment to constant variable.

なぜ user.age = 26 は OK で、 user = {} はエラーなのか?

  • const変数の参照(アドレス) を固定するため、user に別のオブジェクトを代入しようとするとエラーになります。
  • しかし、オブジェクトのプロパティは メモリ上の参照先のデータ を変更するだけなので、user.age = 26 のような操作は可能です。

完全に変更を禁止したい場合は Object.freeze() を使う

もしオブジェクトのプロパティ変更も防ぎたい場合は、Object.freeze() を使います。

JAVASCRIPT
const user = Object.freeze({ name: "Alice", age: 25 }); user.age = 26; // ❌ エラー(変更不可) console.log(user.age); // 25(変更されていない)

このように、const だけではオブジェクトの中身を変更できるため、変更を完全に防ぐには Object.freeze() を使用する必要があります。

const でオブジェクトや配列を定義した場合、その参照を変更することはできませんが、オブジェクトのプロパティの変更や配列の要素の追加・削除は可能です。

JAVASCRIPT
const user = { name: "Alice", age: 25 }; user.age = 26; // OK: プロパティの変更は可能 console.log(user); // { name: "Alice", age: 26 } user = { name: "Bob", age: 30 }; // エラー: Assignment to constant variable.

配列の場合も同様です。

JAVASCRIPT
const numbers = [1, 2, 3]; numbers.push(4); // OK: 配列の要素を変更可能 console.log(numbers); // [1, 2, 3, 4]

4. let と const の適切な使い分け

4.0 ブロックスコープとは?

letconstブロックスコープ(Block Scope) を持ち、変数が {} の内部でのみ有効になります。

JAVASCRIPT
{ let a = 10; const b = 20; console.log(a); // 10 console.log(b); // 20 } console.log(a); // エラー: a is not defined console.log(b); // エラー: b is not defined

var はブロックスコープを持たないため、外部からもアクセスできてしまいます。

JAVASCRIPT
{ var c = 30; } console.log(c); // 30 (エラーにならない!)

これにより、letconst は意図しない変数の上書きを防ぐのに役立ちます。

4.1 const をデフォルトで使用する

  • 変更しない変数は const
  • プログラムの可読性向上(値が変更されることがないと保証される)

4.2 let は変更が必要な場合のみ使用

  • ループや動的に変更される値に使う

4.3 var は極力使用しない

  • var はブロックスコープがないためバグの原因になりやすい

5. 具体的なコード例

5.1 let の例: 動的に値を変更する場合

JAVASCRIPT
let total = 0; for (let i = 1; i <= 5; i++) { total += i; } console.log(total); // 15

5.2 const の例: 変更しないデータ

JAVASCRIPT
const MAX_USERS = 100; const settings = { theme: "dark", language: "ja" };

まとめ

どちらを使うべきか推奨
変更しない変数const
変更が必要な変数let

基本的に const をデフォルトで使用し、変更が必要な場合のみ let を使う のが最適な戦略です。これにより、コードの予測可能性が向上し、バグを減らすことができます。