Get to know MDN better
このページはコミュニティーの尽力で英語から翻訳されました。MDN Web Docs コミュニティーについてもっと知り、仲間になるにはこちらから。
This feature is well established and works across many devices and browser versions. It’s been available across browsers since 2018年5月.
export 宣言は、JavaScript モジュールから値をエクスポートするために使用されます。エクスポートされた値は import 宣言やダイナミックインポートによって、他のプログラムにインポートすることができます。インポートされたバインディングの値は、それをエクスポートするモジュールの変更の対象となります。モジュールがエクスポートするバインディングの値を更新すると、その更新はインポートされた値として見えます。
ソースファイルで export 宣言を使用するためには、そのファイルはランタイムによってモジュールとして解釈される必要があります。HTML では、<script> タグに type="module" を追加するか、他のモジュールにインポートされることで実現されます。モジュールは自動的に厳格モードで解釈されます。
エクスポートする識別子(他のスクリプトで import を介してインポートできるようにするため)。as でエイリアスを使用する場合、実際にエクスポートされる名前を文字列リテラルで指定することができますが、これは有効な識別子とは限りません。
各モジュールでは、2 つの異なる種類のエクスポート、名前付きエクスポートとデフォルトエクスポートを行うことができます。名前付きエクスポートはモジュールごとに複数持てますが、デフォルトエクスポートは 1 つのみです。それぞれのエクスポート方法は、上記の構文のひとつに対応します。
名前付きエクスポート:
export キーワードの後には、 let, const, var 宣言や、関数、クラス宣言を使用することができます。また、 export { name1, name2 } 構文を使用すると、他の場所で宣言された名前のリストをエクスポートすることができます。export {} は空のオブジェクトをエクスポートするわけではないことに注意してください。これは何もエクスポートしない(空の名前のリストをエクスポートする)ノーオペレーション宣言です。
export は、using または await using 宣言では使用できません。ただし、using または await using で宣言された変数をエクスポートすることは可能です。ただし、この方法は極力避けるべきです。変数はモジュールの実行が終了するとすぐに破棄されるため、インポート元はすべて既に破棄された値を受け取ることになるからです。
エクスポート宣言は一時的なデッドゾーンのルールには従いません。X という名前自体が宣言される前に、そのモジュールが X をエクスポートすることを宣言することができます。
デフォルトエクスポート:
メモ: エクスポート宣言の名前は、互いに異なるものでなければなりません。重複した名前でエクスポートを実施したり、default のエクスポートを複数使用すると SyntaxError が発生し、モジュールが評価されなくなります。
export default 構文ではあらゆる式が許可されます。
特殊なケースとして、関数やクラスは式ではなく 宣言 としてエクスポートされ、これらの宣言は無名にすることができます。つまり、関数は巻き上げが行われることになります。
名前付きエクスポートは、複数の値をエクスポートする必要がある場合に有益です。このモジュールをインポートするときは、名前付きエクスポートでは全く同じ名前で参照しなければなりませんが(任意で as で名前を変更できます)、デフォルトエクスポートは何か名前を付けてインポートすることができます。例を示します。
名前の競合を防ぐために、名前付きエクスポートの名前を変更することもできます。
文字列リテラルを使用すると、名前を有効な識別子以外のものに変更することができます。例えば次のようします。
親モジュール内の異なるモジュールから「インポート/エクスポート」して、そのモジュールからインポートできるようにすることも可能です。言い換えれば、様々なモジュールからの様々なエクスポートを集約した 1 つのモジュールを作成することができます。
これは "export from" 構文で実現できます。
これは、 function1 と function2 がカレントモジュール内で利用できないことを除けば、import と export の組み合わせと同じです。
ほとんどの "import from" 構文には対応する "export from" 構文があります。
また、import * from "mod" はありませんが、export * from "mod" はあります。これで mod からのすべての 名前付き エクスポートが現在のモジュールの名前付きエクスポートとして再エクスポートされますが、 mod のデフォルトエクスポートは再エクスポートされません。もし、暗黙のうちに同じ名前を再エクスポートする 2 つのワイルドカードの export 文があった場合、どちらも再エクスポートされません。
重複した名前を直接インポートしようとすると、エラーが発生します。
以下は、import に対応するものですが、構文的には無効です。
正しい方法は、エクスポートの名前を変更することです。
export from" 構文では、as トークンを省略することができます。これにより、デフォルトエクスポートはデフォルトエクスポートとして再エクスポートされたままとなります。
export from は import が対応しているすべての機能に対応しています。例えばインポート属性などです。
my-module.js モジュールの中で、以下のコードを含めることができます。
HTML ページの中に含まれる最上位モジュールの中では、次のようにすることができます。
以下の点に注意することが重要です。
モジュール全体を表す単一の値をエクスポートしたい場合は、デフォルトエクスポートが使用できます。
別のスクリプトからの、デフォルトエクスポートのインポートは直観的です。
以下のような階層がある場合を例に考えてみましょう。
コードスニペットを使うとこのような感じになります。
| ECMAScript® 2027 Language Specification # sec-exports |
Enable JavaScript to view this browser compatibility table.
This page was last modified on 2026年4月8日 by MDN contributors.
Your blueprint for a better internet.
Visit Mozilla Corporation’s not-for-profit parent, the Mozilla Foundation.
Portions of this content are ©1998–2026 by individual mozilla.org contributors. Content available under a Creative Commons license.