JavaScriptのデフォルトエクスポート解説
JavaScriptのexport default
について
JavaScriptのexport default
は、モジュールからデフォルトのエクスポートを指定するためのキーワードです。
どういう意味か?
- デフォルトのエクスポート
モジュールからエクスポートされるもののうち、特にデフォルトとして指定されたものを指します。 - エクスポート
モジュール内で定義した変数、関数、クラスなどを他のモジュールから使えるようにすることをエクスポートといいます。 - モジュール化
JavaScriptでは、コードを複数のファイルに分割して管理することができます。これをモジュール化といいます。
export defaultの使い方
// module.js
export default function greet(name) {
console.log("Hello, " + name + "!");
}
このコードでは、greet
関数をデフォルトのエクスポートとして指定しています。他のモジュールからこの関数をインポートするには、以下のようにします。
// main.js
import greet from './module.js';
greet('Alice'); // Output: Hello, Alice!
重要なポイント
- 他のエクスポート
デフォルトエクスポートとは別に、通常のエクスポート (export
) も使用できます。 - 名前付け
デフォルトエクスポートは、インポート時に任意の名前を付けることができます。 - 1つのモジュールで1つのデフォルトエクスポート
1つのモジュールからデフォルトのエクスポートを複数指定することはできません。
Node.jsとECMAScript 6
- ECMAScript 6
ECMAScript 6 (ES6) はJavaScriptの仕様であり、モジュールシステムやexport default
などの機能が含まれています。 - Node.js
Node.jsはJavaScriptのランタイム環境であり、モジュールシステムをサポートしています。export default
はNode.jsのモジュールシステムで使用できます。
なぜexport default
を使うのか?
JavaScriptのモジュールシステムでは、コードを複数のファイルに分割し、それぞれのファイルをモジュールとして扱うことができます。export default
は、そのモジュールから1つのものを外部に公開するための仕組みです。
メリット
- メインのエクスポート
モジュールの中で最も重要なものを明確に示すことができます。 - 簡潔なインポート
インポートする際に、{}で囲む必要がなく、任意の名前でインポートできます。
コード例
関数のデフォルトエクスポート
// module.js
export default function greet(name) {
console.log(`Hello, ${name}!`);
}
// main.js
import greet from './module.js';
greet('Alice'); // 出力: Hello, Alice!
main.js
で、greet
関数を任意の名前(ここではgreet
)でインポートし、呼び出しています。module.js
でgreet
関数をデフォルトエクスポートしています。
// Person.js
export default class Person {
constructor(name) {
this.name = name;
}
greet() {
console.log(`Hello, I'm ${this.name}.`);
}
}
// main.js
import Person from './Person.js';
const person = new Person('Bob');
person.greet(); // 出力: Hello, I'm Bob.
main.js
で、Person
クラスをインポートし、インスタンスを作成してメソッドを呼び出しています。Person.js
でPerson
クラスをデフォルトエクスポートしています。
オブジェクトのリテラルのデフォルトエクスポート
// config.js
export default {
apiUrl: 'https://api.example.com',
token: 'your_token'
};
// main.js
import config from './config.js';
console.log(config.apiUrl); // 出力: https://api.example.com
main.js
で、オブジェクト全体をインポートし、プロパティにアクセスしています。config.js
でオブジェクトリテラルをデフォルトエクスポートしています。
名前付きエクスポートとの違い
- 名前付きエクスポート
複数のものをエクスポートでき、インポートする際に同じ名前でインポートする必要があります。 - デフォルトエクスポート
1つのモジュールから1つだけ、任意の名前でインポートできます。
例: 名前付きエクスポート
// module.js
export function add(a, b) {
return a + b;
}
export function subtract(a, b) {
return a - b;
}
// main.js
import { add, subtract } from './module.js';
console.log(add(2, 3)); // 出力: 5
console.log(subtract(5, 2)); // 出力: 3
export default
は、モジュールから1つのものを外部に公開する際に非常に便利な機能です。特に、モジュールのメインとなるものをエクスポートする際に活用されます。
ポイント
- 名前付きエクスポートと組み合わせることもできる
- インポートする際に、任意の名前でインポートできる
- デフォルトエクスポートは1つしかできない
しかし、export default
以外にも、モジュール間の値のやり取りを行う方法はいくつかあります。
主な代替方法
- ES Module
ECMAScript 2015 (ES6) で導入されたモジュールシステム - CommonJS形式
Node.jsで伝統的に使用されてきたモジュールシステム - 名前付きエクスポート
複数の値を個別に名前をつけてエクスポートする
各代替方法の詳細
export default
が一つの値をデフォルトでエクスポートするのに対し、名前付きエクスポートは複数の値を個別に名前をつけてエクスポートすることができます。
// module.js
export function add(a, b) {
return a + b;
}
export function subtract(a, b) {
return a - b;
}
// main.js
import { add, subtract } from './module.js';
- デメリット
インポート時に名前を一致させる必要がある。 - メリット
複数の値を明確に区別できる。
CommonJS形式
Node.jsで伝統的に使用されてきたモジュールシステムです。module.exports
オブジェクトにエクスポートしたい値をアサインします。
// module.js
module.exports = {
add: (a, b) => a + b,
subtract: (a, b) => a - b
};
// main.js
const module = require('./module.js');
- デメリット
ES Moduleに比べて柔軟性に欠ける。 - メリット
Node.jsの古いバージョンでも利用可能。
ES Module
ECMAScript 2015 (ES6) で導入されたモジュールシステムで、export
とimport
キーワードを使用します。名前付きエクスポートとexport default
を組み合わせることができます。
// module.js
export function add(a, b) {
return a + b;
}
export default function subtract(a, b) {
return a - b;
}
// main.js
import { add } from './module.js';
import subtract from './module.js';
- デメリット
古いブラウザではサポートされていない場合がある。 - メリット
現代的なJavaScriptで広く利用されている。柔軟性が高い。
どの方法を選ぶべきか?
- 現代的なJavaScriptで開発したい
ES Module - Node.jsの古いバージョンとの互換性を重視する
CommonJS - 複数の値を個別にエクスポートしたい
名前付きエクスポート - デフォルトで一つの値をエクスポートしたい
export default
一般的には、ES Moduleが最も推奨されます。 現代的なJavaScript開発では、ES Moduleが標準として広く利用されています。
export default
は、モジュールからデフォルトでエクスポートする値を指定するための便利な方法ですが、他にも複数の方法が存在します。それぞれの方法にはメリットとデメリットがあり、開発の状況に合わせて適切な方法を選択することが重要です。
選ぶ際のポイント
- 環境
Node.jsのバージョン、ブラウザのサポート状況 - インポート時の名前
任意の名前でインポートしたいか、同じ名前でインポートしたいか - エクスポートする値の数
一つか複数か
javascript node.js ecmascript-6