- HOME >
- Jamstack用語集 >
- export default function
export default function
エクスポート デフォルト ファンクション
export default function を分かりやすく
Next.js の公式ドキュメントを読むと次のようなソースコードが頻繁に登場します。
export default function Page() {
return <h1>Hello, Next.js!</h1>
}
この export default function
とは一体何なのでしょうか?
export default function
は、JavaScript モジュールシステムの一部であり、特定のモジュールからデフォルトでエクスポートされる関数を定義するための構文です。モジュールは、関数や変数などを一つのファイルにまとめ、他のファイルから利用できるようにするもので、JavaScript におけるコードの再利用性を高めます。
export default function
は通常、モジュールからエクスポートされる唯一の関数または値であり、他のファイルからこの関数をインポートする際には、任意の名前をつけることができます。これは、名前付きエクスポート(named exports)とは対照的で、名前付きエクスポートではエクスポートされる名前とインポートする名前が一致している必要があります。
例えば、以下のようにexport default function
を使用して、デフォルトエクスポートを行うことができます。
// components/Hello.tsx
export default function Hello() {
return <h1>Hello, world!</h1>
}
この関数は、別のファイルから次のようにインポートして使用することができます。
// pages/index.tsx
import WelcomeMessage from '../components/Hello'
const HomePage = () => {
return <WelcomeMessage />
}
export default HomePage
ファイル名と関数名は一致させる必要はあるのか?
Next.js においては、ファイル名と関数名は一致させる必要はありません。ただし、一致させることでコードの可読性が向上するとともに、開発者間での混乱を避けることができます。
例えば、次のようなコードでも問題ありません。
// pages/AboutPage.tsx
export default function About() {
return <h1>About Us</h1>
}
この場合、URL パスはファイル名に基づいて /AboutPage
となりますが、コンポーネントの名前は About
となります。ファイル名とコンポーネント名が一致していないと、開発者がファイルと関連するコンポーネントを認識するのが難しくなることがあります。
したがって、一般的には、ファイル名とその中の主要なエクスポート(特に、デフォルトエクスポート)は一致することが推奨されます。これは強制的なルールではありませんが、良い開発習慣と言えます。
デフォルトエクスポートと名前付きエクスポートの違い
JavaScript モジュールシステムでは、export default function
(デフォルトエクスポート)とexport
(名前付きエクスポート、named export)の 2 つのエクスポート方法があります。
デフォルトエクスポート(export default function
) は、各モジュールが一つだけ持つことができます。デフォルトエクスポートは、モジュールからインポートする際に任意の名前を付けることが可能です。
// components/MyComponent.tsx
export default function MyComponent() {
return <div>Hello, world!</div>
}
// pages/index.tsx
import Component from '../components/MyComponent'
一方、名前付きエクスポート(export
) では、モジュールごとに複数のエクスポートが可能ですが、エクスポートした関数や変数はその名前でインポートする必要があります。これは、エクスポート時とインポート時の名前が一致している必要があるということです。
// utils/helpers.ts
export function helperOne() {
//...
}
export function helperTwo() {
//...
}
// otherFile.ts
import { helperOne, helperTwo } from './utils/helpers'
それぞれのエクスポート方法には利点と欠点があります。デフォルトエクスポートはインポート時に名前を自由に選べる一方で、名前付きエクスポートはコードの可読性と追跡性を向上させます。どちらの方法を使用するかは、プロジェクトの要件やチームのコーディング規約によります。
export default function を使うメリット
export default function
を使用する主なメリットは、その簡易さと柔軟性です。デフォルトエクスポートは、モジュールからエクスポートされる唯一の値であるため、他のファイルからインポートする際には、エクスポートされた関数の名前を覚えておく必要がありません。また、インポートする際に任意の名前を付けることができるため、コードの可読性を向上させることができます。
また、Next.js では、デフォルトエクスポートは特別な意味を持ちます。Next.js では、pages
ディレクトリ内の.js
、.jsx
、.ts
、.tsx
ファイルは自動的にルートとなり、そのファイルのデフォルトエクスポートされる関数がそのページのコンポーネントとして扱われます。そのため、Next.js の環境下では、ページコンポーネントを作成する際にはexport default function
が頻繁に用いられます。
// pages/about.tsx
export default function About() {
return <h1>About Us</h1>
}
このようにすると、/about
という URL でAbout
関数の返り値が表示されます。export default function
は、これらのページコンポーネントを簡単に作成し、管理するための手段となります。
export default function を実装
それでは、具体的な実装を見てみましょう。ここでは、ユーザーの名前を表示するUser
コンポーネントを作成します。このコンポーネントは、ユーザーの名前を props として受け取ります。
まず、User
コンポーネントを定義しましょう。
// components/User.tsx
type UserProps = {
name: string
}
export default function User({ name }: UserProps) {
return <h1>Hello, {name}!</h1>
}
次に、このUser
コンポーネントを使用するページを作成します。
// pages/index.tsx
import User from '../components/User'
export default function HomePage() {
return <User name="John Doe" />
}
ここでは、User
コンポーネントをインポートし、name
属性に任意の名前を設定しています。これにより、ホームページを開くと「Hello, John Doe!」と表示されます。
このように、export default function
は、Next.js と TypeScript を使用した開発において、モジュールのエクスポートとインポートを管理し、コードの再利用性と可読性を向上させる重要なツールとなります。特に Next.js では、ページコンポーネントを作成する際に頻繁に使用されるため、その使い方を理解しておくことは大切です。