---
title: Node.jsにESMファイルが直接実行されたかを確認できる機能が追加
url: https://roboin.io/article/2025/06/12/node-js-now-supports-import-meta-main/
description: Node.js v24.2.0では、スクリプトが直接実行されたのかモジュールとして読み込まれたかを判定するimport.meta.mainが追加されました。
publishedDate: 2025-06-11T16:27:40.996Z
modifiedDate: 2025-06-11T16:27:40.996Z
thumbnail: https://roboin.io/api/media/file/node-js-24-2-0-release-note.png
thumbnailAlt: Node.js v24.2.0のリリースノートのスクリーンショット
thumbnailCaption: 画像：[Node.js v24.2.0のリリースノート](https://nodejs.org/en/blog/release/v24.2.0)
---

# Node.jsにESMファイルが直接実行されたかを確認できる機能が追加

これまで、Pythonの`__name__ == "__main__"`のように、Node.jsでCommonJSのスクリプトが直接実行されたのかモジュールとして読み込まれたかを判定するには、`require.main === module`が使われてきました。

```typescript
if (require.main === module) {
    // 直接実行されたときにだけ実行するコード
}
```

一方で、ESModulesの場合は、次のように記述できました。

```typescript
import url from "url";

const self = url.fileURLToPath(import.meta.url);

if (process.argv [1] === self) {
    // 直接実行されたときにだけ実行するコード
} 
```

- 参考：[Node.jsライブラリ/ツールをESMに移行する[Node.js 12+]](https://zenn.dev/azu/scraps/8251dab75562c8#comment-7794011b02f529)

これは、実行されたファイルのパスと自身のパスを比較することで、直接実行されたかを判定するという手法ですが、判定のためにライブラリーのインポートが必要になるなどの問題点がありました。

Node.js v24.2.0では、より簡単に判定できる`import.meta.main`が追加されました。Node.js v24.2.0以降では、次のように簡単に判定できます。

```typescript
if (import.meta.main) {
    // 直接実行されたときにだけ実行するコード
}
```

古いバージョンのNode.jsではこの新しい手法を使えませんが、Node.js v24.2.0以降を前提としたプロジェクトでは、 `import.meta.main` を採用するのがよいでしょう。

## 参考リンク

- [Node.js — Node v24.2.0 (Current)](https://nodejs.org/en/blog/release/v24.2.0)