【JavaScript】require とメタプログラミングで動的にファイルを作って読み込む

 業務で行うことはまずないですが、require を使うとこんなこともできるという紹介です。
 require は外部ファイルを読み込むための関数的な使い方をするキーワードです。これは次の様に使えます。
JavaScript コードモジュールの利用 – Mozilla | MDN

/** hoge.js */
module.exports = "hogehogehoge"

/** call.js */
const hoge = require('./hoge.js')
console.log(hoge) // hogehogehoge

 同じような動きをする import があります。普段はこちらの方をよく使います
import – JavaScript | MDN

/** hoge.js */
export default "hogehogehoge"

/** call.js */
import hoge from './hoge.js';
console.log(hoge) // hogehogehoge

 上記の例では同じ動きをするのですが実はこの二つはコードの読み込みタイミングが異なります。import はあらかじめ読み込まれ(コードをマシンに実行可能な語に変換してメモリ等どこかに展開)、require はその場で読み込みと実行をします。このため次のコード例の動作が起きます。

/** hoge.js は存在しない */

/** call.js */
const fs = require('fs');
// hoge.js をプログラム内で生成する
fs.writeFileSync('./hoge.js', 'module.exports = "hogehogehoge"')

// 生成された hoge.js を require する
const hoge = require('./hoge.js')
console.log(hoge) // hogehogehoge が出力される

 これを挙動を利用することで外部に中間コードを出力してそれを再利用するスクリプトを動かせます。例では簡易な JavaScript のみのコードなのであまり恩恵がわかりませんが、スクリプトの途中に別言語のプログラムの実行を挟んでその別言語プログラムの巨大な出力結果を JavaScript でプログラムとして扱って処理を続行、といったことや、あるコードを元に生成したコードを実行してそのコードを元に……、と連鎖させたい時などで便利です。

>株式会社シーポイントラボ

株式会社シーポイントラボ

TEL:053-543-9889
営業時間:9:00~18:00(月〜金)
住所:〒432-8003
   静岡県浜松市中央区和地山3-1-7
   浜松イノベーションキューブ 315
※ご来社の際はインターホンで「316」をお呼びください

CTR IMG