モジュール化(importとrequireの違い)

外部ファイル(モジュール)を読み込むことを目的に「import」と「require」が利用されているのを目にする機会があります。ここでは、それぞれの「違い」と「使い方」について整理します。

importとrequireの違い

  • require構文
    • CommonJSの仕様で node.js がサポートしている書き方です。
    • Node.jsで実行するなら、そのまま利用できます。
    • ブラウザで実行するなら、Webpack などを通じて依存関係を解決する必要があります。
  • module構文( import )
    • es2015 から利用できる書き方です。
    • 対応ブラウザがまだ少ないです。
      • Babel を通じて require構文 に変換後、Webpack などを通じて依存関係を解決する必要があります。
466-javascript-module-import-export_1.png

モジュールの種類

Node.jsを利用している際、以下のモジュールの違いを意識すると良いです。

  • コアモジュール
    • Node.jsが提供しいているモジュールです。
    • e.g. os fs path http
  • npmモジュール
    • サードパーティ製の外部ライブラリです。
    • e.g. express axios
  • ファイルモジュール
    • 自作モジュールです。

requireの使い方

以下のフォルダ構成で確認します。

.
├── moduleA.js
└── moduleB.js

関数をエクスポート

moduleA.js(require)

const moduleB = require('./moduleB.js')

console.log(moduleB('wakuwaku bank'))

moduleB.js(exports)

// NG
// exports = (name) => `Hello ${name}`

// OK
module.exports = (name) => `Hello ${name}`

実行結果

$ node moduleA.js
Hello wakuwaku bank

インスタンスをエクスポート

moduleA.js(require)

const moduleB = require('./moduleB.js')

console.log(moduleB.getFullYear())

moduleB.js(exports)

module.exports = new Date()

実行結果

$ node moduleA.js
2018

複数のエクスポート

moduleA.js(require)

const moduleB = require('./moduleB.js')

console.log(moduleB.hello('wakuwaku bank'))
console.log(moduleB.goodbye('wakuwaku bank'))

moduleB.js(exports)

exports.hello = name => `Hello ${name}`
exports.goodbye = name => `Goodbye ${name}`

実行結果

$ node moduleA.js
Hello wakuwaku bank
Goodbye wakuwaku bank

importの使い方

以下のフォルダ構成で確認します。

.
├── index.js
└── module.js

module.js (export)

export文 を先頭につけると外部から利用できるようになります。

export const hello = name => `Hello ${name}`
export const goodbye = name => `Goodbye ${name}`
export const date = new Date()

export default name => `Default ${name}`

index.js (import)
「複数のエクスポート」をインポート

import { hello, goodbye } from './module'

console.log(hello('wakuwaku bank'))
console.log(goodbye('wakuwaku bank'))
Hello wakuwaku bank
Goodbye wakuwaku bank

index.js (import)
「全てのエクスポート」をインポート

import * as xyz from './module'

console.log(xyz.hello('wakuwaku bank'))
console.log(xyz.goodbye('wakuwaku bank'))
console.log(xyz.date.getFullYear())
Hello wakuwaku bank
Goodbye wakuwaku bank
2018

index.js (import)
「デフォルト」をインポート

import xyz from './module'

console.log(xyz('wakuwaku bank'))
Default wakuwaku bank

index.js (import)
「デフォルト + α」をインポート

import xyz, { hello } from './module'

console.log(xyz('wakuwaku bank'))
console.log(hello('wakuwaku bank'))
Default wakuwaku bank
Hello wakuwaku bank

参考

【エンジニア向け】仕事を見つける方法

転職する

転職エージェントを活用する

転職サイトの場合、自身でサイト上から企業を探す必要があります。 一方「レバテックキャリア」 などの転職エージェントの場合、エージェントが企業を紹介してくれます。エージェントが間に入ることにより、日程調整や、条件交渉などもサポートしてくれます。

転職ドラフトを活用する

転職ドラフト」は、 企業がITエンジニアをドラフトという形で指名するサービスです。年収が最初に提示されるなどのメリットがあります。 ただ、初回登録時にレジュメ作成が必要で、すでにエンジニア経験が豊富にあるエンジニア向けのサービスかと思います。 レジュメ作成が手間ですが、自身のキャリアを見直す機会になり、他の仕事探しにも役立つはずです。

エンジニア転職保証のあるスクールを活用する

ある程度、開発経験のあるかたであれば、独学で必要なスキルを身につけることができるはずです。ただ、別業種からエンジニアに転職したい場合など、1から独学で学ぶのはハードルが高いです。そういった方は、スクールの活用を検討しても良いと思います。 「TechAcademy」は、エンジニア転職保証コースを提供しています。給付金制度の対象講座として認定されているため、金銭面の負担も抑えることができます。

フリーランスとして活動する

レバテックフリーランス」「ITプロパートナーズ」「ギークスジョブ」は、フリーランスエージェントサービスです。 エージェントによって、支払いサイトなど細かい違いはありますが、まずは良い案件を見つけることが重要です。 登録自体は無料なので、複数エージェントに登録して、より多くの案件を紹介してもらうのがおすすめです。

logo
わくわくBank.
技術系の記事を中心に、役に立つと思ったこと、整理したい情報などを掲載しています。