0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

デフォルトエクスポートと名前付きエクスポートの違いと使い分け

0
Last updated at Posted at 2026-07-18

はじめに

プロジェクトを進める中で、以下のようなインポートに関する型エラーが発生することがあります。

モジュール '"@/components/hero"' にはエクスポートされたメンバー 'Hero' がありません。
'import Hero from "@/components/hero"' を使用するつもりでしたか?

このエラーは、エクスポート方法とインポート方法が一致していないことが原因です。

エクスポートとインポートの対応

エクスポート側(Hero.tsx) インポート側(page.tsx)
export default function Hero() { ... } import Hero from "@/components/hero"
export function Hero() { ... } import { Hero } from "@/components/hero"

デフォルトエクスポートをしている場合は import Hero from ...、名前付きエクスポートをしている場合は import { Hero } from ... のように記述する必要があります。

デフォルトエクスポート(export default

デフォルトエクスポートは、「このファイルの主役(メイン)はこれです」という意味を持つ書き方です。

メリット

  • インポート時に任意の名前を付けられる
  • シンプルに記述できる
  • ファイルの主役となるコンポーネントが分かりやすい
export default function Hero() {}
import Hero from "@/components/hero";

また、以下のように別名でインポートすることも可能です。

import MainVisual from "@/components/hero";

デメリット

  • インポート時に名前を自由に変更できるため、プロジェクト全体で名称が統一されにくい
  • 誤った名前でもコンパイルエラーにならないケースがあり、レビュー時に気付きにくい
  • IDEの補完やリファクタリングの恩恵を受けにくい場合がある

⭐️名前付きエクスポート(export

名前付きエクスポートは、「このファイルにはこのメンバーがあります」と明示する書き方です。

メリット

  • インポート時の名前が統一される
  • VS CodeなどのIDEで補完が効きやすい
  • リファクタリング時に変更漏れを検出しやすい
  • TypeScriptとの相性が良く、型安全性を保ちやすい
  • 1つのファイルで複数のエクスポートを管理できる
export function Hero() {}
export function HeroTitle() {}
export function HeroButton() {}

import { Hero, HeroTitle, HeroButton } from "@/components/hero";

デメリット

  • インポート時に { } が必要になる
  • 単一コンポーネントしかないファイルでは少し記述量が増える

現場ではどう使い分けられているか

プロジェクトの規模やチームの方針によって使い分けられています。

開発規模 推奨されることが多い書き方 理由
小規模・個人開発 デフォルトエクスポート 記述がシンプルで書きやすい
中〜大規模・チーム開発 名前付きエクスポート 命名の統一、保守性、リファクタリング性が高い
Next.jsの page.tsx・layout.tsx デフォルトエクスポート Next.jsの仕様上、デフォルトエクスポートが必要

近年は、React・TypeScriptを用いたチーム開発では、保守性や型安全性を重視して名前付きエクスポートに統一する運用を採用するプロジェクトも増えています。一方で、デフォルトエクスポートも現在も広く利用されており、どちらが絶対的に正しいというものではありません。

まとめ

どちらの書き方にもメリット・デメリットがありますが、個人的には名前付きエクスポートを採用したいと考えています。

理由としては、

  • インポート時の命名が統一され、コードの可読性が向上する
  • IDEの補完やリファクタリングとの相性が良い
  • TypeScriptで誤ったインポートを検出しやすい
  • チーム開発において保守性や一貫性を維持しやすい

一方で、Next.jsの page.tsxlayout.tsx など、フレームワーク上デフォルトエクスポートが求められるファイルについては、その仕様に従います

そのため、⭐️フレームワークで指定されている箇所以外は名前付きエクスポートを基本とする運用が、型安全性・保守性・開発効率の観点から適していると考えています。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?