こんにちは。JavaScriptの世界へようこそ。
コードを書いていると、「あれ、さっき作った変数、どこからでも触れちゃうぞ? これで本当に大丈夫かな?」と不安になる瞬間、ありますよね。
大丈夫ですよ、その感覚はとても鋭いです。JavaScriptの世界では、昔からこの「変数の迷子」に悩まされてきた歴史があるんです。今日は、現代のJavaScript開発の守護神とも言える「モジュールスコープ」について、一緒に紐解いていきましょう。
—
昔々の「グローバル」という名の広場
モジュールスコープの話をする前に、ちょっと昔の話をさせてください。
昔のJavaScriptは、まるで「みんなの広場」でした。どのファイルで変数を書いても、すべて同じ場所に放り込まれていたんです。
例えば、Aさんが `const name = ‘田中さん’` と書くと、Bさんが同じファイルで `const name = ‘佐藤さん’` と書いた瞬間に、Aさんの名前が書き換わってしまう……そんな「名前の衝突」が日常茶飯事でした。
これ、例えるなら「自分のペンケースに名前を書かずに、教室の真ん中の机に全員の筆記用具を投げ込んでいる」ような状態です。誰がどれを使っているのか、誰の筆箱がどれなのか、もうカオスですよね。
—
救世主「モジュールスコープ」の登場
そこで現代のJavaScript(ES Modulesといいます)では、ファイル一つひとつが「自分専用の鍵付きロッカー」を持つようになりました。これが「モジュールスコープ」です。
あるファイルで書いた変数は、そのファイルというロッカーの中にしまわれます。外からは絶対に見えません。外から見えないということは、他のファイルと名前が被っても喧嘩にならない。これって、すごく安心だと思いませんか?
実際に見てみましょう
まずは、ロッカーの中に変数を隠してみます。
// user.js というファイルの中身
const secretName = “秘密の勇者”; // この変数はこのファイルの中だけで生きる!
// 外からこの変数にアクセスしようとしても、エラーになって守られます。
もし、別のファイルで `secretName` を作っても、ロッカーが別なので全く問題ありません。お互いに干渉しない、平和な世界です。
—
「必要なものだけ」をおすそ分けする
ロッカーの中に隠すのはいいけれど、「どうしてもこの変数を使いたい!」という時もありますよね。そんな時は、`export` という魔法を使います。
これは、「この道具、貸してあげるから、必要な人は呼んでね」と宣言するようなものです。
ファイルA(貸し出す側):
// mathUtils.js
// 「足し算」だけはみんなに使ってほしい!と公開する
export const add = (a, b) => {
return a + b;
};
// この変数(秘密の定数)は公開しないので、このファイル専用です
const PI = 3.14;
ファイルB(借りる側):
// main.js
// 必要なものだけをimportで呼び出す!
import { add } from ‘./mathUtils.js’;
console.log(add(5, 3)); // 8 と表示される
// console.log(PI); // これはエラー!隠されているので見えません。
—
なぜこれが「最強の守り」なのか
この仕組みの何が素晴らしいって、「責任の範囲が明確になること」なんです。
- 名前の衝突がなくなる: どんなに大規模なプロジェクトでも、変数の名前で悩む時間が激減します。
- どこで何が使われているか分かる: `import` 文を見れば、「あ、このファイルはこの道具を使っているんだな」と一目瞭然です。
- バグの温床を断てる: 勝手に変数を書き換えられる心配がないので、安心してコードをいじれます。
最初は「`export` とか `import` とか、いちいち面倒だな」と感じるかもしれません。でも、これはあなたが書いたコードを、未来のあなたや仲間が読みやすくするための「優しい気遣い」なんです。
—
最後に:つまずいても大丈夫
プログラミングを始めたばかりの頃は、「なぜわざわざ隠すの? 全部見えたほうが便利じゃない?」と思うのが普通です。でも、プログラムが大きくなればなるほど、この「隠す」という作業が、あなたのコードをバグから守る最強の盾になってくれます。
もし「うまく読み込めないな」と思ったら、まずは「ロッカーからちゃんと取り出しているかな?(importしているか)」「そもそもロッカーの外に許可を出しているかな?(exportしているか)」を確認してみてください。
JavaScriptのモジュールスコープは、あなたのコードを整頓する最高のお片付け術です。焦らず、少しずつ楽しんでいきましょうね。応援しています!

コメント