aboutsummaryrefslogtreecommitdiff
path: root/files/ja/web/javascript/reference/statements/export/index.html
diff options
context:
space:
mode:
authorPeter Bengtsson <mail@peterbe.com>2020-12-08 14:40:17 -0500
committerPeter Bengtsson <mail@peterbe.com>2020-12-08 14:40:17 -0500
commit33058f2b292b3a581333bdfb21b8f671898c5060 (patch)
tree51c3e392513ec574331b2d3f85c394445ea803c6 /files/ja/web/javascript/reference/statements/export/index.html
parent8b66d724f7caf0157093fb09cfec8fbd0c6ad50a (diff)
downloadtranslated-content-33058f2b292b3a581333bdfb21b8f671898c5060.tar.gz
translated-content-33058f2b292b3a581333bdfb21b8f671898c5060.tar.bz2
translated-content-33058f2b292b3a581333bdfb21b8f671898c5060.zip
initial commit
Diffstat (limited to 'files/ja/web/javascript/reference/statements/export/index.html')
-rw-r--r--files/ja/web/javascript/reference/statements/export/index.html268
1 files changed, 268 insertions, 0 deletions
diff --git a/files/ja/web/javascript/reference/statements/export/index.html b/files/ja/web/javascript/reference/statements/export/index.html
new file mode 100644
index 0000000000..0f8478f74c
--- /dev/null
+++ b/files/ja/web/javascript/reference/statements/export/index.html
@@ -0,0 +1,268 @@
+---
+title: export
+slug: Web/JavaScript/Reference/Statements/export
+tags:
+ - ECMAScript 2015
+ - JavaScript
+ - Language feature
+ - Modules
+ - Reference
+ - Statement
+ - export
+translation_of: Web/JavaScript/Reference/Statements/export
+---
+<div>{{jsSidebar("Statements")}}</div>
+
+<p><strong><code>export</code></strong> 文は JavaScript モジュールを作成するときに使用され、モジュールから関数、オブジェクト、またはプリミティブ値へのライブバインディングのエクスポートを行い、{{jsxref("Statements/import", "import")}} 文を使用した他のプログラムが使用できるようにします。インポートされたモジュールは読み取り専用で、エクスポートされたモジュールが変更されるたびに値が更新されます。</p>
+
+<p>エクスポートされたモジュールは、宣言のあるなしにかかわらず {{jsxref("Strict_mode","Strict モード", "", 1)}}で動作します。export 文は、埋め込みスクリプトでは使えません。</p>
+
+<h2 id="Syntax" name="Syntax">構文</h2>
+
+<p>2種類のエクスポート方法があります。</p>
+
+<ol>
+ <li>名前付きエクスポート (モジュールごとに 0 以上のエクスポート)</li>
+ <li>デフォルトエクスポート (モジュールごとに 1 つのエクスポート)</li>
+</ol>
+
+<pre class="syntaxbox notranslate">// 個々の機能をエクスポート
+export let <var>name1</var>, <var>name2</var>, …, <var>nameN</var>; // var, const も
+export let <var>name1</var> = …, <var>name2</var> = …, …, <var>nameN</var>; // var, const も
+export function functionName(){...}
+export class ClassName {...}
+
+// リストでエクスポート
+export { <var>name1</var>, <var>name2</var>, …, <var>nameN</var> };
+
+// 名前を変更してエクスポート
+export { <var>variable1</var> as <var>name1</var>, <var>variable2</var> as <var>name2</var>, …, <var>nameN</var> };
+
+// 分割代入してエクスポート
+export const { <var>name1</var>, <var>name2: bar</var> } = o;
+
+// デフォルトエクスポート
+export default <em>expression</em>;
+export default function (…) { … } // class, function* も使用可
+export default function name1(…) { … } // class, function* も使用可
+export { <var>name1</var> as default, … };
+
+// モジュールの集約
+export * from …; // デフォルトエクスポートを設定しません
+export * as name1 from …; // ECMAScript® 2O21 の草案
+export { <var>name1</var>, <var>name2</var>, …, <var>nameN</var> } from …;
+export { <var>import1</var> as <var>name1</var>, <var>import2</var> as <var>name2</var>, …, <var>nameN</var> } from …;
+export { default } from …;</pre>
+
+<dl>
+ <dt><code><var>nameN</var></code></dt>
+ <dd>エクスポートする識別子です。(別のスクリプトが {{jsxref("Statements/import", "import")}} を使用してインポート可能になります。) </dd>
+</dl>
+
+<h2 id="Description" name="Description">解説</h2>
+
+<p>エクスポート方法は、<strong>名前付き</strong>と<strong>デフォルト</strong>の 2 種類あります。名前付きエクスポートはモジュールごとに複数持てますが、デフォルトエクスポートは 1 つに限ります。それぞれのエクスポート方法は、上記の構文のひとつに対応します。</p>
+
+<p>名前付きエクスポート:</p>
+
+<pre class="brush: js notranslate">// 事前に宣言された機能のエクスポート
+export { myFunction, myVariable };
+
+// 個別の機能のエクスポート
+// (var, let, const, function, class がエクスポート可能)
+export let myVariable = Math.sqrt(2);
+export function myFunction() { ... };
+</pre>
+
+<p>デフォルトエクスポート:</p>
+
+<pre class="brush: js notranslate">// デフォルトとして事前に定義された機能のエクスポート
+export { myFunction as default };
+
+// 個別の機能をデフォルトとしてエクスポート
+export default function () { ... }
+export default class { .. }
+
+// 各エクスポートは前のエクスポートを上書きします
+</pre>
+
+<p>名前付きエクスポートは、さまざまな値をエクスポートするのに役立ちます。インポートするときは、対応するオブジェクトと同じ名前を使用しなければなりません。</p>
+
+<p>一方、デフォルトエクスポートは以下のように任意の名前を使用できます。</p>
+
+<pre class="brush: js notranslate">// ファイル test.js
+let k; export default k = 12;
+</pre>
+
+<pre class="brush: js notranslate">// 他のファイル
+import m from './test'; // k がデフォルトエクスポートなので、インポートする k の代わりに m を使用することができる点に注意してください
+console.log(m); // log 12 になる
+</pre>
+
+<p>名前の競合を防ぐために、名前付きエクスポートの名前を変更することもできます。</p>
+
+<pre class="brush: js notranslate">export { <var>myFunction</var> as <var>function1</var>,<var>
+ myVariable</var> as variable };</pre>
+
+<h3 id="Re-exporting_Aggregating" name="Re-exporting_Aggregating">再エクスポート / 集約</h3>
+
+<p>また、親モジュール内の異なるモジュールから「インポート/エクスポート」して、そのモジュールからインポートできるようにすることも可能です。言い換えれば、様々なモジュールからの様々なエクスポートを集約した 1 つのモジュールを作成することができます。</p>
+
+<p>これは "export from" 構文で実現できます。</p>
+
+<pre class="brush: js notranslate">export { default as function1,
+ function2 } from 'bar.js';
+</pre>
+
+<p>これは、インポートとエクスポートの組み合わせに相当します。</p>
+
+<pre class="brush: js notranslate">import { default as function1,
+ function2 } from 'bar.js';
+export { function1, function2 };
+</pre>
+
+<p>現在のモジュール内で <code>function1</code> と <code>function2</code> が利用できない場合。</p>
+
+<div class="blockIndicator note">
+<p><strong>メモ:</strong> 以下は、インポートに相当するにもかかわらず、構文的に無効です。</p>
+</div>
+
+<pre class="brush: js notranslate">import DefaultExport from 'bar.js'; // 有効
+</pre>
+
+<pre class="brush: js notranslate">export DefaultExport from 'bar.js'; // 無効</pre>
+
+<p>これを行う正しい方法は、エクスポートの名前を変更することです。</p>
+
+<pre class="brush: js notranslate">export { default as DefaultExport } from 'bar.js';
+</pre>
+
+<h2 id="Examples" name="Examples">例</h2>
+
+<h3 id="Using_named_exports" name="Using_named_exports">名前付きエクスポートの使用</h3>
+
+<p><code>my-module.js</code> モジュールの中で、以下のコードを含めることができます。</p>
+
+<pre class="brush: js notranslate">// "my-module.js" モジュール
+function cube(x) {
+ return x * x * x;
+}
+
+const foo = Math.PI + Math.SQRT2;
+
+var graph = {
+ options: {
+ color:'white',
+ thickness:'2px'
+ },
+ draw: function() {
+ console.log('From graph draw function');
+ }
+}
+
+export { cube, foo, graph };
+</pre>
+
+<p>HTML ページの中に含まれる最上位モジュールの中では、次のようにすることができます。</p>
+
+<pre class="brush: js notranslate">import { cube, foo, graph } from './my-module.js';
+
+graph.options = {
+ color:'blue',
+ thickness:'3px'
+};
+
+graph.draw();
+console.log(cube(3)); // 27
+console.log(foo); // 4.555806215962888</pre>
+
+<p>以下の点に注意することが重要です。</p>
+
+<ul>
+ <li>このスクリプトを HTML の {{htmlelement("script")}} 要素で type="module" を指定したものに入れる必要があり、そうすれば適切にモジュールとして認識され、扱われます。</li>
+ <li><code>file://</code> の URL で JavaScript モジュールを実行することはできません。— <a href="/ja/docs/Web/HTTP/CORS">CORS</a> エラーになります。HTTP サーバーを通して実行する必要があります。</li>
+</ul>
+
+<h3 id="Using_the_default_export" name="Using_the_default_export">デフォルトエクスポートの使用</h3>
+
+<p>値をひとつエクスポートしたい、あるいはモジュールでフォールバック先の値を持ちたい場合は、デフォルトエクスポートを使用するとよいでしょう。</p>
+
+<pre class="brush: js notranslate">// module "my-module.js"
+
+export default function cube(x) {
+ return x * x * x;
+}
+</pre>
+
+<p>別のスクリプトからの、デフォルトエクスポートのインポートは簡単です。</p>
+
+<pre class="brush: js notranslate">import cube from './my-module.js';
+console.log(cube(3)); // 27
+</pre>
+
+<h3 id="Using_export_from" name="Using_export_from">export from の使用</h3>
+
+<p>以下のような階層がある場合を例に考えてみましょう。</p>
+
+<ul>
+ <li><code>childModule1.js</code>: <code>myFunction</code> および <code>myVariable</code> をエクスポート</li>
+ <li><code>childModule2.js</code>: <code>myClass</code> をエクスポート</li>
+ <li><code>parentModule.js</code>: 集約元として動作する (他には何もしない)</li>
+ <li>最上位モジュール: <code>parentModule.js</code> のエクスポートを利用する</li>
+</ul>
+
+<p>コードスニペットを使うとこのような感じになります。</p>
+
+<pre class="brush: js notranslate">// childModule1.js
+let myFunction = ...; // myFunction に役立つものを割り当てる
+let myVariable = ...; // myVariablemy に役立つものを割り当てる
+export {myFunction, myVariable};
+</pre>
+
+<pre class="brush: js notranslate">// childModule2.js
+let myClass = ...; // myClass に役立つものを代入する
+export myClass;
+</pre>
+
+<pre class="brush: js notranslate">// parentModule.js
+// childModule1 と childModule2 からのエクスポートを
+// 集約して再エクスポートする
+export { myFunction, myVariable } from 'childModule1.js';
+export { myClass } from 'childModule2.js';
+</pre>
+
+<pre class="brush: js notranslate">// 最上位モジュール
+// parentModule にモジュールが集約しているので、
+// 単一のモジュールからエクスポートを利用できます。
+import { myFunction, myVariable, myClass } from 'parentModule.js'</pre>
+
+<h2 id="Specifications" name="Specifications">仕様</h2>
+
+<table class="standard-table">
+ <thead>
+ <tr>
+ <th scope="col">仕様書</th>
+ </tr>
+ </thead>
+ <tbody>
+ <tr>
+ <td>{{SpecName('ESDraft', '#sec-exports', 'Exports')}}</td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Browser_compatibility" name="Browser_compatibility">ブラウザーの互換性</h2>
+
+<div class="hidden">このページの互換性一覧表は構造化データから生成されています。データに協力していただけるのであれば、<a class="external" href="https://github.com/mdn/browser-compat-data">https://github.com/mdn/browser-compat-data</a> をチェックアウトしてプルリクエストを送信してください。</div>
+
+<p>{{Compat("javascript.statements.export")}}</p>
+
+<h2 id="See_also" name="See_also">関連情報</h2>
+
+<ul>
+ <li>{{jsxref("Statements/import", "import")}}</li>
+ <li><a href="/ja/docs/Web/JavaScript/Guide/Modules">JavaScript モジュール</a></li>
+ <li><a href="https://hacks.mozilla.org/2015/08/es6-in-depth-modules/">ES6 in Depth: Modules</a> Jason Orendorff のブログ記事</li>
+ <li><a href="https://hacks.mozilla.org/2018/03/es-modules-a-cartoon-deep-dive/">ES modules: A cartoon deep-dive</a> Lin Clark のブログ記事</li>
+ <li><a href="http://exploringjs.com/es6/ch_modules.html">Axel Rauschmayer's book: "Exploring JS: Modules"</a></li>
+</ul>