{"componentChunkName":"component---src-modules-datocms-post-page-page-tsx","path":"/posts/42","result":{"data":{"post":{"title":"ES6のexport/import構文をScalaと比べながら解説","author":{"name":"suin","images":{"r32":{"src":"https://www.datocms-assets.com/29850/1591833290-avatar512.jpg?auto=format&fm=png&h=32&mask=ellipse&w=32","srcSet":"https://www.datocms-assets.com/29850/1591833290-avatar512.jpg?auto=format&dpr=1&fm=png&h=32&mask=ellipse&w=32 1x,\nhttps://www.datocms-assets.com/29850/1591833290-avatar512.jpg?auto=format&dpr=1.5&fm=png&h=32&mask=ellipse&w=32 1.5x,\nhttps://www.datocms-assets.com/29850/1591833290-avatar512.jpg?auto=format&dpr=2&fm=png&h=32&mask=ellipse&w=32 2x,\nhttps://www.datocms-assets.com/29850/1591833290-avatar512.jpg?auto=format&dpr=3&fm=png&h=32&mask=ellipse&w=32 3x"},"r48":{"src":"https://www.datocms-assets.com/29850/1591833290-avatar512.jpg?auto=format&fm=png&h=48&mask=ellipse&w=48","srcSet":"https://www.datocms-assets.com/29850/1591833290-avatar512.jpg?auto=format&dpr=1&fm=png&h=48&mask=ellipse&w=48 1x,\nhttps://www.datocms-assets.com/29850/1591833290-avatar512.jpg?auto=format&dpr=1.5&fm=png&h=48&mask=ellipse&w=48 1.5x,\nhttps://www.datocms-assets.com/29850/1591833290-avatar512.jpg?auto=format&dpr=2&fm=png&h=48&mask=ellipse&w=48 2x,\nhttps://www.datocms-assets.com/29850/1591833290-avatar512.jpg?auto=format&dpr=3&fm=png&h=48&mask=ellipse&w=48 3x"}},"bio":"好き: TypeScript, DDD, OOP／#YYTypeScript の主催者／Qiita 4位／株式会社クラフトマンソフトウェア取締役／『実践ドメイン駆動設計』邦訳レビュア／#分報 考案者／Web自動テストShouldBeeを開発"},"date":"2015年10月13日","tags":["JavaScript","ES6","Scala"],"category":"プログラミング","body":"<a href=\"https://c16e-esa-io-public-files.s3-ap-northeast-1.amazonaws.com/uploads/production/attachments/15637/2020/05/28/18740/9c703dfc-e9b5-4023-aa86-2ad4340be04a.png\" target=\"_blank\" rel=\"noopener noreferrer\"><img width=\"1200\" alt=\"image.png (56.9 kB)\" src=\"https://c16e-esa-io-public-files.s3-ap-northeast-1.amazonaws.com/uploads/production/attachments/15637/2020/05/28/18740/9c703dfc-e9b5-4023-aa86-2ad4340be04a.png\"></a>\n<p data-sourcepos=\"3:1-3:115\">ES6では<code>export</code>と<code>import</code>が追加されてモジュール化が明示的にできるようになりました。</p>\n<p data-sourcepos=\"5:1-7:45\">自分はサーバサイドをScalaで書いているのですが、<br>\nScalaの<code>import</code>などと比べると、ES6は結構違ったので、<br>\n気づいた点をまとめてみました。</p>\n<h1 data-sourcepos=\"9:1-9:29\" id=\"1-0-0\" name=\"1-0-0\">\n<a class=\"anchor\" id=\"ファイル名が明示的\" name=\"%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E5%90%8D%E3%81%8C%E6%98%8E%E7%A4%BA%E7%9A%84\" href=\"#%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E5%90%8D%E3%81%8C%E6%98%8E%E7%A4%BA%E7%9A%84\" data-position=\"1-0-0\"><i class=\"fa fa-link\"></i><span class=\"hidden\" data-text=\"ファイル名が明示的\"> &gt; ファイル名が明示的</span></a>ファイル名が明示的</h1>\n<p data-sourcepos=\"11:1-11:202\">ScalaやGoにはコンパイルがあるので、importを宣言する場合ファイル名を指定する必要がないが、ES6ではimportするときファイル名を明示する必要になる。</p>\n<p data-sourcepos=\"13:1-13:201\">つまり、Scalaの<code>import Foo</code>はES6では<code>import Foo from \"./Foo\"</code>となる。これはどうしようもない。同じスクリプト言語のPHPですらオートローダーがあるのに…。</p>\n<h1 data-sourcepos=\"15:1-15:49\" id=\"2-0-0\" name=\"2-0-0\">\n<a class=\"anchor\" id=\"ES6は&amp;quot;public&amp;quot;であることを明示する派\" name=\"ES6%E3%81%AF&amp;quot;public&amp;quot;%E3%81%A7%E3%81%82%E3%82%8B%E3%81%93%E3%81%A8%E3%82%92%E6%98%8E%E7%A4%BA%E3%81%99%E3%82%8B%E6%B4%BE\" href=\"#ES6%E3%81%AF&amp;quot;public&amp;quot;%E3%81%A7%E3%81%82%E3%82%8B%E3%81%93%E3%81%A8%E3%82%92%E6%98%8E%E7%A4%BA%E3%81%99%E3%82%8B%E6%B4%BE\" data-position=\"2-0-0\"><i class=\"fa fa-link\"></i><span class=\"hidden\" data-text=\"ES6は&amp;quot;public&amp;quot;であることを明示する派\"> &gt; ES6は\"public\"であることを明示する派</span></a>ES6は\"public\"であることを明示する派</h1>\n<p data-sourcepos=\"17:1-17:352\">ScalaにもES6にもパッケージのプライバシーがあるが、公開・非公開どちらを明示的にするかの戦略が異なる。Scalaはデフォルトでpublicになり、非公開を<code>private</code>キーワードで明示する。一方、ES6はデフォルトがprivateで、公開するものを<code>export</code>キーワードで明示する。</p>\n<h2 data-sourcepos=\"19:1-19:12\" id=\"2-1-0\" name=\"2-1-0\">\n<a class=\"anchor\" id=\"private\" name=\"private\" href=\"#private\" data-position=\"2-1-0\"><i class=\"fa fa-link\"></i><span class=\"hidden\" data-text=\"private\"> &gt; private</span></a><code>private</code>\n</h2>\n<p data-sourcepos=\"21:1-21:74\">Scalaでは公開がデフォルトなので、非公開は明示する。</p>\n<div class=\"code-block\" data-sourcepos=\"23:1-25:3\">\n<div class=\"code-filename\">\n<i class=\"fa fa-file-code-o\"></i>scala</div>\n<div class=\"highlight\"><pre class=\"highlight scala\"><code><span class=\"k\">private</span> <span class=\"k\">class</span> <span class=\"nc\">Foo</span>\n</code></pre></div>\n</div>\n<p data-sourcepos=\"27:1-27:39\">ES6では非公開がデフォルト。</p>\n<div class=\"code-block\" data-sourcepos=\"29:1-31:3\">\n<div class=\"code-filename\">\n<i class=\"fa fa-file-code-o\"></i>es6</div>\n<div class=\"highlight\"><pre class=\"highlight js\"><code><span class=\"kd\">class</span> <span class=\"nx\">Foo</span> <span class=\"p\">{}</span>\n</code></pre></div>\n</div>\n<h2 data-sourcepos=\"33:1-33:11\" id=\"2-2-0\" name=\"2-2-0\">\n<a class=\"anchor\" id=\"public\" name=\"public\" href=\"#public\" data-position=\"2-2-0\"><i class=\"fa fa-link\"></i><span class=\"hidden\" data-text=\"public\"> &gt; public</span></a><code>public</code>\n</h2>\n<p data-sourcepos=\"35:1-35:38\">Scalaでは公開がデフォルト。</p>\n<div class=\"code-block\" data-sourcepos=\"37:1-39:3\">\n<div class=\"code-filename\">\n<i class=\"fa fa-file-code-o\"></i>scala</div>\n<div class=\"highlight\"><pre class=\"highlight scala\"><code><span class=\"k\">class</span> <span class=\"nc\">Foo</span>\n</code></pre></div>\n</div>\n<p data-sourcepos=\"41:1-41:80\">ES6は非公開がデフォルトなので、公開は<code>export</code>で明示する。</p>\n<div class=\"code-block\" data-sourcepos=\"43:1-45:3\">\n<div class=\"code-filename\">\n<i class=\"fa fa-file-code-o\"></i>es6</div>\n<div class=\"highlight\"><pre class=\"highlight js\"><code><span class=\"k\">export</span> <span class=\"kd\">class</span> <span class=\"nx\">Foo</span> <span class=\"p\">{}</span>\n</code></pre></div>\n</div>\n<h1 data-sourcepos=\"47:1-47:32\" id=\"3-0-0\" name=\"3-0-0\">\n<a class=\"anchor\" id=\"exportのバリエーション\" name=\"export%E3%81%AE%E3%83%90%E3%83%AA%E3%82%A8%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3\" href=\"#export%E3%81%AE%E3%83%90%E3%83%AA%E3%82%A8%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3\" data-position=\"3-0-0\"><i class=\"fa fa-link\"></i><span class=\"hidden\" data-text=\"exportのバリエーション\"> &gt; exportのバリエーション</span></a>exportのバリエーション</h1>\n<p data-sourcepos=\"49:1-49:57\">exportのしかたにもバリエーションがある。</p>\n<h2 data-sourcepos=\"51:1-51:17\" id=\"3-1-0\" name=\"3-1-0\">\n<a class=\"anchor\" id=\"export default\" name=\"export%20default\" href=\"#export%20default\" data-position=\"3-1-0\"><i class=\"fa fa-link\"></i><span class=\"hidden\" data-text=\"export default\"> &gt; export default</span></a>export default</h2>\n<p data-sourcepos=\"53:1-53:89\">ある変数をモジュールとして公開する。1ファイル、1クラス向き？</p>\n<div class=\"code-block\" data-sourcepos=\"55:1-61:3\">\n<div class=\"code-filename\">\n<i class=\"fa fa-file-code-o\"></i>Hello.js</div>\n<div class=\"highlight\"><pre class=\"highlight js\"><code><span class=\"k\">export</span> <span class=\"k\">default</span> <span class=\"kd\">class</span> <span class=\"nx\">Hello</span> <span class=\"p\">{</span>\n  <span class=\"nx\">greeting</span><span class=\"p\">()</span> <span class=\"p\">{</span>\n    <span class=\"nx\">console</span><span class=\"p\">.</span><span class=\"nx\">log</span><span class=\"p\">(</span><span class=\"dl\">\"</span><span class=\"s2\">hello!</span><span class=\"dl\">\"</span><span class=\"p\">);</span>\n  <span class=\"p\">}</span>\n<span class=\"p\">}</span>\n</code></pre></div>\n</div>\n<div class=\"code-block\" data-sourcepos=\"62:1-65:3\">\n<div class=\"code-filename\">\n<i class=\"fa fa-file-code-o\"></i>app.js</div>\n<div class=\"highlight\"><pre class=\"highlight js\"><code><span class=\"k\">import</span> <span class=\"nx\">Hello</span> <span class=\"k\">from</span> <span class=\"dl\">\"</span><span class=\"s2\">./Hello</span><span class=\"dl\">\"</span><span class=\"p\">;</span>\n<span class=\"k\">new</span> <span class=\"nx\">Hello</span><span class=\"p\">().</span><span class=\"nx\">greeting</span><span class=\"p\">();</span>\n</code></pre></div>\n</div>\n<h2 data-sourcepos=\"67:1-67:9\" id=\"3-2-0\" name=\"3-2-0\">\n<a class=\"anchor\" id=\"export\" name=\"export\" href=\"#export\" data-position=\"3-2-0\"><i class=\"fa fa-link\"></i><span class=\"hidden\" data-text=\"export\"> &gt; export</span></a>export</h2>\n<p data-sourcepos=\"69:1-69:111\">変数をモジュールのメンバとして公開する。クラスに名前をつけてexportするとき。</p>\n<div class=\"code-block\" data-sourcepos=\"71:1-83:3\">\n<div class=\"code-filename\">\n<i class=\"fa fa-file-code-o\"></i>Hello.js</div>\n<div class=\"highlight\"><pre class=\"highlight js\"><code><span class=\"k\">export</span> <span class=\"kd\">class</span> <span class=\"nx\">Hello</span> <span class=\"p\">{</span>\n  <span class=\"nx\">greeting</span><span class=\"p\">()</span> <span class=\"p\">{</span>\n    <span class=\"nx\">console</span><span class=\"p\">.</span><span class=\"nx\">log</span><span class=\"p\">(</span><span class=\"dl\">\"</span><span class=\"s2\">hello!</span><span class=\"dl\">\"</span><span class=\"p\">);</span>\n  <span class=\"p\">}</span>\n<span class=\"p\">}</span>\n\n<span class=\"k\">export</span> <span class=\"kd\">class</span> <span class=\"nx\">GutenTag</span> <span class=\"p\">{</span>\n  <span class=\"nx\">greeting</span><span class=\"p\">()</span> <span class=\"p\">{</span>\n    <span class=\"nx\">console</span><span class=\"p\">.</span><span class=\"nx\">log</span><span class=\"p\">(</span><span class=\"dl\">\"</span><span class=\"s2\">Guten Tag!</span><span class=\"dl\">\"</span><span class=\"p\">);</span>\n  <span class=\"p\">}</span>\n<span class=\"p\">}</span>\n</code></pre></div>\n</div>\n<div class=\"code-block\" data-sourcepos=\"86:1-90:3\">\n<div class=\"code-filename\">\n<i class=\"fa fa-file-code-o\"></i>app.js</div>\n<div class=\"highlight\"><pre class=\"highlight js\"><code><span class=\"k\">import</span> <span class=\"p\">{</span><span class=\"nx\">Hello</span><span class=\"p\">,</span> <span class=\"nx\">GutenTag</span><span class=\"p\">}</span> <span class=\"k\">from</span> <span class=\"dl\">\"</span><span class=\"s2\">./Hello</span><span class=\"dl\">\"</span><span class=\"p\">;</span>\n<span class=\"k\">new</span> <span class=\"nx\">Hello</span><span class=\"p\">().</span><span class=\"nx\">greeting</span><span class=\"p\">();</span>\n<span class=\"k\">new</span> <span class=\"nx\">GutenTag</span><span class=\"p\">().</span><span class=\"nx\">greeting</span><span class=\"p\">();</span>\n</code></pre></div>\n</div>\n<h2 data-sourcepos=\"92:1-92:15\" id=\"3-3-0\" name=\"3-3-0\">\n<a class=\"anchor\" id=\"export {...}\" name=\"export%20%7B...%7D\" href=\"#export%20%7B...%7D\" data-position=\"3-3-0\"><i class=\"fa fa-link\"></i><span class=\"hidden\" data-text=\"export {...}\"> &gt; export {...}</span></a>export {...}</h2>\n<p data-sourcepos=\"94:1-94:135\">変数をモジュールのメンバとして公開する。クラスに名前をつけて、あとでまとめてexportするとき。</p>\n<div class=\"code-block\" data-sourcepos=\"96:1-110:3\">\n<div class=\"code-filename\">\n<i class=\"fa fa-file-code-o\"></i>Hello.js</div>\n<div class=\"highlight\"><pre class=\"highlight js\"><code><span class=\"kd\">class</span> <span class=\"nx\">Hello</span> <span class=\"p\">{</span>\n  <span class=\"nx\">greeting</span><span class=\"p\">()</span> <span class=\"p\">{</span>\n    <span class=\"nx\">console</span><span class=\"p\">.</span><span class=\"nx\">log</span><span class=\"p\">(</span><span class=\"dl\">\"</span><span class=\"s2\">hello!</span><span class=\"dl\">\"</span><span class=\"p\">);</span>\n  <span class=\"p\">}</span>\n<span class=\"p\">}</span>\n\n<span class=\"kd\">class</span> <span class=\"nx\">GutenTag</span> <span class=\"p\">{</span>\n  <span class=\"nx\">greeting</span><span class=\"p\">()</span> <span class=\"p\">{</span>\n    <span class=\"nx\">console</span><span class=\"p\">.</span><span class=\"nx\">log</span><span class=\"p\">(</span><span class=\"dl\">\"</span><span class=\"s2\">Guten Tag!</span><span class=\"dl\">\"</span><span class=\"p\">);</span>\n  <span class=\"p\">}</span>\n<span class=\"p\">}</span>\n\n<span class=\"k\">export</span> <span class=\"p\">{</span><span class=\"nx\">Hello</span><span class=\"p\">,</span> <span class=\"nx\">GutenTag</span><span class=\"p\">};</span>\n</code></pre></div>\n</div>\n<div class=\"code-block\" data-sourcepos=\"112:1-116:3\">\n<div class=\"code-filename\">\n<i class=\"fa fa-file-code-o\"></i>app.js</div>\n<div class=\"highlight\"><pre class=\"highlight js\"><code><span class=\"k\">import</span> <span class=\"p\">{</span><span class=\"nx\">Hello</span><span class=\"p\">,</span> <span class=\"nx\">GutenTag</span><span class=\"p\">}</span> <span class=\"k\">from</span> <span class=\"dl\">\"</span><span class=\"s2\">./Hello</span><span class=\"dl\">\"</span><span class=\"p\">;</span>\n<span class=\"k\">new</span> <span class=\"nx\">Hello</span><span class=\"p\">().</span><span class=\"nx\">greeting</span><span class=\"p\">();</span>\n<span class=\"k\">new</span> <span class=\"nx\">GutenTag</span><span class=\"p\">().</span><span class=\"nx\">greeting</span><span class=\"p\">();</span>\n</code></pre></div>\n</div>\n<h2 data-sourcepos=\"118:1-118:24\" id=\"3-4-0\" name=\"3-4-0\">\n<a class=\"anchor\" id=\"export { ... as ... }\" name=\"export%20%7B%20...%20as%20...%20%7D\" href=\"#export%20%7B%20...%20as%20...%20%7D\" data-position=\"3-4-0\"><i class=\"fa fa-link\"></i><span class=\"hidden\" data-text=\"export { ... as ... }\"> &gt; export { ... as ... }</span></a>export { ... as ... }</h2>\n<p data-sourcepos=\"120:1-120:108\">変数をモジュールのメンバとして公開する。名前を変えて公開する場合に使う。</p>\n<div class=\"code-block\" data-sourcepos=\"122:1-130:3\">\n<div class=\"code-filename\">\n<i class=\"fa fa-file-code-o\"></i>Hello.js</div>\n<div class=\"highlight\"><pre class=\"highlight js\"><code><span class=\"kd\">class</span> <span class=\"nx\">GreetingInEnglish</span> <span class=\"p\">{</span>\n  <span class=\"nx\">greeting</span><span class=\"p\">()</span> <span class=\"p\">{</span>\n    <span class=\"nx\">console</span><span class=\"p\">.</span><span class=\"nx\">log</span><span class=\"p\">(</span><span class=\"dl\">\"</span><span class=\"s2\">hello!</span><span class=\"dl\">\"</span><span class=\"p\">);</span>\n  <span class=\"p\">}</span>\n<span class=\"p\">}</span>\n\n<span class=\"k\">export</span> <span class=\"p\">{</span><span class=\"nx\">GreetingInEnglish</span> <span class=\"k\">as</span> <span class=\"nx\">Hello</span><span class=\"p\">};</span>\n</code></pre></div>\n</div>\n<div class=\"code-block\" data-sourcepos=\"132:1-135:3\">\n<div class=\"code-filename\">\n<i class=\"fa fa-file-code-o\"></i>app.js</div>\n<div class=\"highlight\"><pre class=\"highlight js\"><code><span class=\"k\">import</span> <span class=\"p\">{</span><span class=\"nx\">Hello</span><span class=\"p\">}</span> <span class=\"k\">from</span> <span class=\"dl\">\"</span><span class=\"s2\">./Hello</span><span class=\"dl\">\"</span>\n<span class=\"k\">new</span> <span class=\"nx\">Hello</span><span class=\"p\">().</span><span class=\"nx\">greeting</span><span class=\"p\">();</span>\n</code></pre></div>\n</div>\n<h1 data-sourcepos=\"137:1-137:32\" id=\"4-0-0\" name=\"4-0-0\">\n<a class=\"anchor\" id=\"importのバリエーション\" name=\"import%E3%81%AE%E3%83%90%E3%83%AA%E3%82%A8%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3\" href=\"#import%E3%81%AE%E3%83%90%E3%83%AA%E3%82%A8%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3\" data-position=\"4-0-0\"><i class=\"fa fa-link\"></i><span class=\"hidden\" data-text=\"importのバリエーション\"> &gt; importのバリエーション</span></a>importのバリエーション</h1>\n<h2 data-sourcepos=\"139:1-139:24\" id=\"4-1-0\" name=\"4-1-0\">\n<a class=\"anchor\" id=\"import ... from &amp;quot;...&amp;quot;\" name=\"import%20...%20from%20&amp;quot;...&amp;quot;\" href=\"#import%20...%20from%20&amp;quot;...&amp;quot;\" data-position=\"4-1-0\"><i class=\"fa fa-link\"></i><span class=\"hidden\" data-text=\"import ... from &amp;quot;...&amp;quot;\"> &gt; import ... from \"...\"</span></a>import ... from \"...\"</h2>\n<p data-sourcepos=\"141:1-141:33\">最も典型的なimport宣言。</p>\n<div class=\"code-block\" data-sourcepos=\"143:1-145:3\">\n<div class=\"code-filename\">\n<i class=\"fa fa-file-code-o\"></i>js</div>\n<div class=\"highlight\"><pre class=\"highlight js\"><code><span class=\"k\">import</span> <span class=\"nx\">Hello</span> <span class=\"k\">from</span> <span class=\"dl\">\"</span><span class=\"s2\">./Hello</span><span class=\"dl\">\"</span><span class=\"p\">;</span>\n</code></pre></div>\n</div>\n<p data-sourcepos=\"147:1-147:76\">Hello.jsが<code>Hello</code>を<code>export default</code>している場合にだけ使える。</p>\n<h2 data-sourcepos=\"149:1-149:28\" id=\"4-2-0\" name=\"4-2-0\">\n<a class=\"anchor\" id=\"import { ... } from &amp;quot;...&amp;quot;\" name=\"import%20%7B%20...%20%7D%20from%20&amp;quot;...&amp;quot;\" href=\"#import%20%7B%20...%20%7D%20from%20&amp;quot;...&amp;quot;\" data-position=\"4-2-0\"><i class=\"fa fa-link\"></i><span class=\"hidden\" data-text=\"import { ... } from &amp;quot;...&amp;quot;\"> &gt; import { ... } from \"...\"</span></a>import { ... } from \"...\"</h2>\n<p data-sourcepos=\"151:1-151:36\">これも典型的なimport宣言。</p>\n<div class=\"code-block\" data-sourcepos=\"153:1-155:3\">\n<div class=\"code-filename\">\n<i class=\"fa fa-file-code-o\"></i>js</div>\n<div class=\"highlight\"><pre class=\"highlight js\"><code><span class=\"k\">import</span> <span class=\"p\">{</span> <span class=\"nx\">Hello</span> <span class=\"p\">}</span> <span class=\"k\">from</span> <span class=\"dl\">\"</span><span class=\"s2\">./Hello</span><span class=\"dl\">\"</span><span class=\"p\">;</span>\n</code></pre></div>\n</div>\n<p data-sourcepos=\"157:1-157:74\">Hello.jsが<code>Hello</code>を単に<code>export</code>している場合にだけ使える。</p>\n<h2 data-sourcepos=\"160:1-160:33\" id=\"4-3-0\" name=\"4-3-0\">\n<a class=\"anchor\" id=\"import { ..., ... } from &amp;quot;...&amp;quot;\" name=\"import%20%7B%20...,%20...%20%7D%20from%20&amp;quot;...&amp;quot;\" href=\"#import%20%7B%20...,%20...%20%7D%20from%20&amp;quot;...&amp;quot;\" data-position=\"4-3-0\"><i class=\"fa fa-link\"></i><span class=\"hidden\" data-text=\"import { ..., ... } from &amp;quot;...&amp;quot;\"> &gt; import { ..., ... } from \"...\"</span></a>import { ..., ... } from \"...\"</h2>\n<p data-sourcepos=\"162:1-162:69\">同じファイルから、いくつか一度にimportする宣言。</p>\n<div class=\"code-block\" data-sourcepos=\"164:1-166:3\">\n<div class=\"code-filename\">\n<i class=\"fa fa-file-code-o\"></i>js</div>\n<div class=\"highlight\"><pre class=\"highlight js\"><code><span class=\"k\">import</span> <span class=\"p\">{</span><span class=\"nx\">Hello</span><span class=\"p\">,</span> <span class=\"nx\">GutenTag</span><span class=\"p\">}</span> <span class=\"k\">from</span> <span class=\"dl\">\"</span><span class=\"s2\">./Hello</span><span class=\"dl\">\"</span><span class=\"p\">;</span>\n</code></pre></div>\n</div>\n<p data-sourcepos=\"168:1-168:33\">上のコードは下と同じ。</p>\n<div class=\"code-block\" data-sourcepos=\"170:1-173:3\">\n<div class=\"code-filename\">\n<i class=\"fa fa-file-code-o\"></i>js</div>\n<div class=\"highlight\"><pre class=\"highlight js\"><code><span class=\"k\">import</span> <span class=\"p\">{</span><span class=\"nx\">Hello</span><span class=\"p\">}</span> <span class=\"k\">from</span> <span class=\"dl\">\"</span><span class=\"s2\">./Hello</span><span class=\"dl\">\"</span><span class=\"p\">;</span>\n<span class=\"k\">import</span> <span class=\"p\">{</span><span class=\"nx\">GutenTag</span><span class=\"p\">}</span> <span class=\"k\">from</span> <span class=\"dl\">\"</span><span class=\"s2\">./Hello</span><span class=\"dl\">\"</span><span class=\"p\">;</span>\n</code></pre></div>\n</div>\n<h2 data-sourcepos=\"175:1-175:35\" id=\"4-4-0\" name=\"4-4-0\">\n<a class=\"anchor\" id=\"import { ... as ... } from &amp;quot;...&amp;quot;\" name=\"import%20%7B%20...%20as%20...%20%7D%20from%20&amp;quot;...&amp;quot;\" href=\"#import%20%7B%20...%20as%20...%20%7D%20from%20&amp;quot;...&amp;quot;\" data-position=\"4-4-0\"><i class=\"fa fa-link\"></i><span class=\"hidden\" data-text=\"import { ... as ... } from &amp;quot;...&amp;quot;\"> &gt; import { ... as ... } from \"...\"</span></a>import { ... as ... } from \"...\"</h2>\n<p data-sourcepos=\"177:1-177:39\">名前を変えてimportする宣言。</p>\n<div class=\"code-block\" data-sourcepos=\"179:1-182:3\">\n<div class=\"code-filename\">\n<i class=\"fa fa-file-code-o\"></i>js</div>\n<div class=\"highlight\"><pre class=\"highlight js\"><code><span class=\"k\">import</span> <span class=\"p\">{</span><span class=\"nx\">Hello</span> <span class=\"k\">as</span> <span class=\"nx\">EnglishGreeting</span><span class=\"p\">}</span> <span class=\"k\">from</span> <span class=\"dl\">\"</span><span class=\"s2\">./Hello</span><span class=\"dl\">\"</span><span class=\"p\">;</span>\n<span class=\"k\">new</span> <span class=\"nx\">EnglishGreeting</span><span class=\"p\">().</span><span class=\"nx\">greeting</span><span class=\"p\">();</span>\n</code></pre></div>\n</div>\n<p data-sourcepos=\"184:1-184:50\">Scalaの<code>import {Foo =&gt; Bar}</code>のようなもの。</p>\n<h2 data-sourcepos=\"186:1-186:29\" id=\"4-5-0\" name=\"4-5-0\">\n<a class=\"anchor\" id=\"import * as ... from &amp;quot;...&amp;quot;\" name=\"import%20*%20as%20...%20from%20&amp;quot;...&amp;quot;\" href=\"#import%20*%20as%20...%20from%20&amp;quot;...&amp;quot;\" data-position=\"4-5-0\"><i class=\"fa fa-link\"></i><span class=\"hidden\" data-text=\"import * as ... from &amp;quot;...&amp;quot;\"> &gt; import * as ... from \"...\"</span></a>import * as ... from \"...\"</h2>\n<p data-sourcepos=\"188:1-188:69\">モジュールまるごと名前を変えてimportするケース。</p>\n<div class=\"code-block\" data-sourcepos=\"190:1-194:3\">\n<div class=\"code-filename\">\n<i class=\"fa fa-file-code-o\"></i>js</div>\n<div class=\"highlight\"><pre class=\"highlight js\"><code><span class=\"k\">import</span> <span class=\"o\">*</span> <span class=\"k\">as</span> <span class=\"nx\">Greetings</span> <span class=\"k\">from</span> <span class=\"dl\">\"</span><span class=\"s2\">./Hello</span><span class=\"dl\">\"</span><span class=\"p\">;</span>\n<span class=\"k\">new</span> <span class=\"nx\">Greetings</span><span class=\"p\">.</span><span class=\"nx\">Hello</span><span class=\"p\">().</span><span class=\"nx\">greeting</span><span class=\"p\">();</span>\n<span class=\"k\">new</span> <span class=\"nx\">Greetings</span><span class=\"p\">.</span><span class=\"nx\">GutenTag</span><span class=\"p\">().</span><span class=\"nx\">greeting</span><span class=\"p\">();</span>\n</code></pre></div>\n</div>\n<h1 data-sourcepos=\"196:1-196:11\" id=\"5-0-0\" name=\"5-0-0\">\n<a class=\"anchor\" id=\"まとめ\" name=\"%E3%81%BE%E3%81%A8%E3%82%81\" href=\"#%E3%81%BE%E3%81%A8%E3%82%81\" data-position=\"5-0-0\"><i class=\"fa fa-link\"></i><span class=\"hidden\" data-text=\"まとめ\"> &gt; まとめ</span></a>まとめ</h1>\n<ul data-sourcepos=\"198:1-201:0\">\n<li data-sourcepos=\"198:1-198:61\">ES6の<code>import</code>はファイル名を明示する必要あり</li>\n<li data-sourcepos=\"199:1-199:73\">ES6は\"public\"であることを明示する(デフォルトはprivate)</li>\n<li data-sourcepos=\"200:1-201:0\">ScalaとES6でだいぶ書き方が違う</li>\n</ul>\n<p data-sourcepos=\"202:1-202:66\">解説に間違っている部分があれば教えて下さい！</p>\n"}},"pageContext":{"id":"DatoCmsPost-5142977-ja","description":"ES6ではexportとimportが追加されてモジュール化が明示的にできるようになりました。 自分はサーバサイドをScalaで書いているのですが、 Scalaのimportなどと比べると、ES6は結構違ったので、 気づいた点をまとめてみました。 ファイル名が明示的 ScalaやGoにはコンパイルがあるので、importを宣言する場合ファイル名を指定する必要がないが、ES6ではimportするときファイル名を明示する必要になる。 つまり、Scalaのimport FooはES6ではimport Foo from \"./Foo\"となる。これはどうしようもない。同じスクリプト言語のPHPですらオー","toc":[{"tag":"h1","depth":1,"href":"#%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E5%90%8D%E3%81%8C%E6%98%8E%E7%A4%BA%E7%9A%84","text":"ファイル名が明示的","html":"ファイル名が明示的"},{"tag":"h1","depth":1,"href":"#ES6%E3%81%AF&quot;public&quot;%E3%81%A7%E3%81%82%E3%82%8B%E3%81%93%E3%81%A8%E3%82%92%E6%98%8E%E7%A4%BA%E3%81%99%E3%82%8B%E6%B4%BE","text":"ES6は\"public\"であることを明示する派","html":"ES6は\"public\"であることを明示する派"},{"tag":"h2","depth":2,"href":"#private","text":"private","html":"<code>private</code>"},{"tag":"h2","depth":2,"href":"#public","text":"public","html":"<code>public</code>"},{"tag":"h1","depth":1,"href":"#export%E3%81%AE%E3%83%90%E3%83%AA%E3%82%A8%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3","text":"exportのバリエーション","html":"exportのバリエーション"},{"tag":"h2","depth":2,"href":"#export%20default","text":"export default","html":"export default"},{"tag":"h2","depth":2,"href":"#export","text":"export","html":"export"},{"tag":"h2","depth":2,"href":"#export%20%7B...%7D","text":"export {...}","html":"export {...}"},{"tag":"h2","depth":2,"href":"#export%20%7B%20...%20as%20...%20%7D","text":"export { ... as ... }","html":"export { ... as ... }"},{"tag":"h1","depth":1,"href":"#import%E3%81%AE%E3%83%90%E3%83%AA%E3%82%A8%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3","text":"importのバリエーション","html":"importのバリエーション"},{"tag":"h2","depth":2,"href":"#import%20...%20from%20&quot;...&quot;","text":"import ... from \"...\"","html":"import ... from \"...\""},{"tag":"h2","depth":2,"href":"#import%20%7B%20...%20%7D%20from%20&quot;...&quot;","text":"import { ... } from \"...\"","html":"import { ... } from \"...\""},{"tag":"h2","depth":2,"href":"#import%20%7B%20...,%20...%20%7D%20from%20&quot;...&quot;","text":"import { ..., ... } from \"...\"","html":"import { ..., ... } from \"...\""},{"tag":"h2","depth":2,"href":"#import%20%7B%20...%20as%20...%20%7D%20from%20&quot;...&quot;","text":"import { ... as ... } from \"...\"","html":"import { ... as ... } from \"...\""},{"tag":"h2","depth":2,"href":"#import%20*%20as%20...%20from%20&quot;...&quot;","text":"import * as ... from \"...\"","html":"import * as ... from \"...\""},{"tag":"h1","depth":1,"href":"#%E3%81%BE%E3%81%A8%E3%82%81","text":"まとめ","html":"まとめ"}],"ogpImageUrl":"https://www.datocms-assets.com/29850/1593190022-pastedimage20200627146.png?fm=png&mark64=aHR0cHM6Ly93d3cuZGF0b2Ntcy1hc3NldHMuY29tLzI5ODUwLzE1OTMxNTQ2MzYtdHJhbnNwYXJlbnQtcGl4ZWwucG5nP3c9NDAwJmg9NjQmZml0PWNyb3AmYmxlbmQ2ND1hSFIwY0hNNkx5OTNkM2N1WkdGMGIyTnRjeTFoYzNObGRITXVZMjl0THpJNU9EVXdMekUxT1RFNE16TXlPVEF0WVhaaGRHRnlOVEV5TG1wd1p6OXRZWE5yUFdWc2JHbHdjMlVtWm0wOWNHNW5KbmM5TWpVMkptZzlNalUyJmJsZW5kLWg9NjQmYmxlbmQteD0wJmJsZW5kLXk9MCZibGVuZC1tb2RlPW5vcm1hbCZtYXJrNjQ9YUhSMGNITTZMeTloYzNObGRITXVhVzFuYVhndWJtVjBMMzUwWlhoMFAzUjRkQzFoYkdsbmJqMXRhV1JrYkdVbE1rTnNaV1owSm5SNGRDMW1iMjUwUFhOaGJuTXRjMlZ5YVdZbE1rTmliMnhrSm5SNGRDMWpiMnh2Y2oweU1qRTRNVFltZEhoME5qUTlZek5XY0dKbkpuUjRkQzF6YVhwbFBUTXdKbWc5TmpRJm1hcmsteD02NCZtYXJrLWFsaWduPW1pZGRsZSUyQ2xlZnQ&mark-align=bottom%2Cleft&mark-x=100&mark-y=496&blend64=aHR0cHM6Ly93d3cuZGF0b2Ntcy1hc3NldHMuY29tLzI5ODUwLzE1OTMxNTQ2MzYtdHJhbnNwYXJlbnQtcGl4ZWwucG5nP3c9MTIwMCZoPTYzMCZmaXQ9Y3JvcCZtYXJrNjQ9YUhSMGNITTZMeTkzZDNjdVpHRjBiMk50Y3kxaGMzTmxkSE11WTI5dEx6STVPRFV3THpFMU9UTXhOVEE1TkRBdFkzSmhablJ6YldGdUxUQXhMbkJ1WncmbWFyay1hbGlnbj10b3AlMkNjZW50ZXImbWFyay13PTI1MCZtYXJrLXk9ODAmYmxlbmQ2ND1hSFIwY0hNNkx5OWhjM05sZEhNdWFXMW5hWGd1Ym1WMEwzNTBaWGgwUDNSNGRDMWhiR2xuYmoxdGFXUmtiR1VsTWtOalpXNTBaWEltZEhoMExXWnZiblE5YzJGdWN5MXpaWEpwWmlVeVEySnZiR1FtZEhoMExYQmhaRDB4TURBbWRIaDBMV052Ykc5eVBUSXlNVGd4TmlaMGVIUTJORDFTVmsweU5EUkhkVnBZYUhkaU0wb3dUREpzZEdOSE9YbGtUMkZ1YVMxaFYyZ3RUME5yYkU1cVdWZDRhRFEwUjI4MWNTMVZORFJITlRRMFIzRTBORWROTkRSTFNqWkxaV28yUzNGekpuUjRkQzF6YVhwbFBUVTFKbmM5TVRJd01DWm9QVFl6TUEmYmxlbmQtbW9kZT1ub3JtYWw&blend-mode=normal","otherPost":{"type":"author","title":"英語？日本語？マイクロサービスのエラーメッセージは何語が良い？","slug":"/posts/44"}}}}