
クラスと継承を学んだ次は「モジュール」です。モジュールを使うことで、複数のファイルに分けたコードを相互に利用できるようになります。
export:他のファイルへ渡す
**export(エクスポート)**は、他のファイルへコードを渡すことです。
構文: export default クラス名;
// User.js(ファイル)
class User {
constructor(name) {
this.name = name;
}
greet() {
console.log(`こんにちは、${this.name}です`);
}
}
export default User; // クラス定義後に記載
ポイント
- クラス定義の後に記載
- どんな値でもエクスポート可能(クラス、関数、定数など)
デフォルトエクスポート
export default は、デフォルトエクスポートと呼ばれています。
特徴: そのファイルがインポートされると、自動的に export default 値 の値がインポートされます。
// animal.js
class Animal {
constructor(name) {
this.name = name;
}
}
export default Animal;
重要: デフォルトエクスポートは、1つのファイルにつき1つの値までです。
// ❌ エラー:デフォルトエクスポートは1つまで
export default Animal;
export default Dog; // エラー
import:他のファイルを読み込む
**import(インポート)**は、他のファイルの読み込みです。
構文: import クラス名 from "./ファイル名";
// main.js
import User from "./User";
const user = new User("太郎");
user.greet(); // こんにちは、太郎です
ポイント
- 使用するファイルの先頭で宣言
- ファイル名の拡張子
.jsは省略できる
エクスポートとインポートの名前
デフォルトエクスポートの場合、エクスポート時とインポート時の名前が異なっていても実行されます。
// User.js
class User {
constructor(name) {
this.name = name;
}
}
export default User;
// main.js
import Person from "./User"; // 異なる名前でインポートしてもOK
const person = new Person("太郎");
これは、デフォルトエクスポートが「そのファイルの代表的な値」として扱われるためです。
名前つきエクスポート:複数の値をエクスポート
1つのファイルから複数の値をエクスポートしたい場合、名前つきエクスポートを使います。
構文: export { 値1, 値2, ... }
// utils.js
const add = (a, b) => {
return a + b;
};
const multiply = (a, b) => {
return a * b;
};
// defaultを書かずに{}で囲む
export { add, multiply };
名前つきエクスポートのインポート
インポート時も同様に {} で囲む必要があります。
// main.js
import { add, multiply } from "./utils";
console.log(add(3, 5)); // 8
console.log(multiply(3, 5)); // 15
複数の値をカンマで区切る
// shapes.js
class Circle {
constructor(radius) {
this.radius = radius;
}
}
class Square {
constructor(side) {
this.side = side;
}
}
const PI = 3.14;
// コンマで区切って複数の値を渡す
export { Circle, Square, PI };
// main.js
import { Circle, Square, PI } from "./shapes";
const circle = new Circle(5);
console.log(PI); // 3.14
デフォルトエクスポートと名前つきエクスポートの違い
| 項目 | デフォルトエクスポート | 名前つきエクスポート |
|---|---|---|
| 構文 | export default 値 | export { 値1, 値2 } |
| 個数 | 1ファイルにつき1つまで | 複数可能 |
| インポート | import 任意の名前 from | import { 名前 } from |
| 名前の変更 | 自由に変更できる | 同じ名前が必要 |
// デフォルトエクスポート
export default User;
import Person from "./User"; // 名前を変えられる
// 名前つきエクスポート
export { add, multiply };
import { add, multiply } from "./utils"; // 同じ名前が必要
いつどちらを使うか
デフォルトエクスポート
- ファイルに1つの主要なクラスや関数がある場合
- 例: Userクラス、Animalクラスなど
名前つきエクスポート
- 1つのファイルに複数の関連する値がある場合
- 例: ユーティリティ関数、定数の集まりなど
Pythonとの比較
| 項目 | Python | JavaScript |
|---|---|---|
| エクスポート | 自動(定義すれば使える) | export が必要 |
| インポート | from モジュール import クラス | import クラス from "./ファイル" |
| デフォルト | なし | export default |
# Python
# user.py
class User:
def __init__(self, name):
self.name = name
# main.py
from user import User
user = User("太郎")
// JavaScript
// User.js
class User {
constructor(name) {
this.name = name;
}
}
export default User;
// main.js
import User from "./User";
const user = new User("太郎");
JavaScriptでは、明示的に export を書く必要があります。
今日の学びのポイント
- export: 他のファイルへ渡す
export default クラス名: デフォルトエクスポート- デフォルトエクスポートは1ファイルにつき1つまで
- エクスポートとインポートの名前が異なってもOK
- import: 他のファイルを読み込む
import クラス名 from "./ファイル名"(拡張子.jsは省略可)- 名前つきエクスポート:
export { 値1, 値2 } - 名前つきエクスポートは複数可能
- インポート時も
{}で囲む
モジュールを使うことで、コードを複数のファイルに分けて管理し、保守性の高いプログラムを作れます。次は、ファイルの位置関係を示す「相対パス」を学びます。


コメント