カテゴリ: TypeScript 更新日: 2026/02/01

TypeScriptのimport順序・構成を整えるコツ!モジュール設計の基本

TypeScriptプロジェクトのimport順序・構成を整えるTips
TypeScriptプロジェクトのimport順序・構成を整えるTips

先生と生徒の会話形式で理解しよう

生徒

「TypeScriptでプログラムを分けて書いていると、import(インポート)の行がぐちゃぐちゃになって読みにくいです。整理する方法はありますか?」

先生

「TypeScriptでは、モジュールという仕組みを使ってファイルを分割しますが、読み込みの順番や構成を整えることで、管理がずっと楽になりますよ。」

生徒

「どうすればきれいに整理できるんでしょうか?初心者の私でもできるコツを教えてください!」

先生

「もちろんです!まずはモジュールの基本から、きれいに整えるためのTips(秘訣)まで順番に見ていきましょう。」

1. モジュールとimportとは?

1. モジュールとimportとは?
1. モジュールとimportとは?

プログラミングを始めたばかりの方にとって、「モジュール」や「import(インポート)」という言葉は少し難しく感じるかもしれません。 簡単に例えると、「モジュール」は「部品」「import」は「部品を取り寄せること」です。

大きなプラモデルを作るとき、すべてのパーツが一つの袋に入っていたら大変ですよね。 普通は「頭のパーツ」「体のパーツ」「足のパーツ」というように、袋が分かれています。 プログラミングも同じで、一つのファイルに何千行もコードを書くと、どこに何があるか分からなくなります。 そのため、機能ごとにファイルを分けて作成します。この分かれた一つ一つのファイルが「モジュール」です。

別のファイルにある機能を使いたいときは、「このファイルを使います!」と宣言する必要があります。それが「import」です。 逆に、自分のファイルの中身を他で使わせてあげることを「export(エクスポート)」と言います。

2. なぜimportの順序を整える必要があるのか

2. なぜimportの順序を整える必要があるのか
2. なぜimportの順序を整える必要があるのか

プログラムが大きくなってくると、一つのファイルの冒頭に、何十行ものimport文が並ぶことがあります。 バラバラな順番で並んでいると、次のような問題が発生します。

  • どこから読み込んでいるのか探しにくい: 外部のライブラリ(便利な道具セット)なのか、自分たちが作ったファイルなのか区別がつきません。
  • 依存関係が不明確: どのファイルがどのファイルに頼っているのか、全体像が見えにくくなります。
  • 複数人での開発で困る: 人によって書き方が違うと、コードを合体させたときに見た目がバラバラになり、修正ミスが起きやすくなります。

本棚の本を「あいうえお順」や「ジャンル別」に並べるのと同じように、プログラミングでもルールを決めて並べることが大切です。

3. おすすめのimport順序のルール

3. おすすめのimport順序のルール
3. おすすめのimport順序のルール

一般的に、美しく管理しやすいとされるimportの順序をご紹介します。 基本的には、「遠くにあるものから近くにあるものへ」という順番で並べるとスッキリします。

① 外部ライブラリ(標準ライブラリ・npmパッケージ)

まずは、自分で作ったものではない、世の中で公開されている便利なツール(Reactやlodashなど)を一番上に書きます。 これらは「npm(エヌピーエム)」という仕組みを使ってインストールしたものです。

② 絶対パス(エイリアス)を使った指定

プロジェクトの設定で、ファイルの場所をショートカット(例:@/components/...)で指定している場合に、中間に配置します。

③ 自分のプロジェクト内の相対パス

同じフォルダや、少し離れたフォルダにある「自分で作ったファイル」を読み込みます。 ./(今の場所)や../(一つ上の階層)で始まるものです。

④ スタイルシート(CSS)など

最後に、デザインに関するファイル(.cssや.scss)を読み込むことが多いです。


// 1. 外部ライブラリ
import React from 'react';
import { useState } from 'react';

// 2. 内部の絶対パス(エイリアス)
import { CommonButton } from '@/components/atoms/Button';

// 3. 内部の相対パス
import { formatDate } from './utils';
import { UserProfile } from '../models/User';

// 4. CSSファイル
import './styles.css';

4. 「名前空間(namespace)」と「モジュール」の使い分け

4. 「名前空間(namespace)」と「モジュール」の使い分け
4. 「名前空間(namespace)」と「モジュール」の使い分け

TypeScriptには、コードを整理する方法として「モジュール」の他に「名前空間(namespace)」というものもあります。 初心者の方は、「基本的にはモジュールを使う」と覚えておけば間違いありません。

名前空間とは: 昔のTypeScriptでよく使われていた方法です。一つのファイルの中に、さらに小さな「箱」を作るイメージです。 しかし、現代のプログラミング(ESモジュール)では、ファイルそのものが「箱」の役割を果たすため、名前空間を使う機会は減っています。

もし古いプロジェクトをメンテナンスする場合以外は、ファイルを分けてimportexportを使う「モジュール」形式で設計しましょう。

5. 構成を整えるためのテクニック:Barrel(バレル)ファイル

5. 構成を整えるためのテクニック:Barrel(バレル)ファイル
5. 構成を整えるためのテクニック:Barrel(バレル)ファイル

「バレル(樽)」とは、複数のファイルを一つにまとめて、外から呼び出しやすくするためのテクニックです。 例えば、componentsフォルダの中に10個のファイルがあったとき、一つずつimportするのは大変です。

そこで、フォルダの中にindex.tsという名前のファイルを作り、そこですべてのファイルを中継(再エクスポート)します。

フォルダ構造の例:


src/
  components/
    Button.ts
    Input.ts
    Card.ts
    index.ts  <-- これがバレルファイル

index.tsの中身:


export * from './Button';
export * from './Input';
export * from './Card';

こうすることで、使う側は一行でスッキリと書けるようになります。


// バレルファイルを使わない場合
import { Button } from './components/Button';
import { Input } from './components/Input';
import { Card } from './components/Card';

// バレルファイルを使う場合(一行で済む!)
import { Button, Input, Card } from './components';

6. Linter(リンター)を使って自動で整列させる

6. Linter(リンター)を使って自動で整列させる
6. Linter(リンター)を使って自動で整列させる

「自分で順番を気にするのは面倒!」という方も安心してください。 プログラミングの世界には、コードの書き間違いや見た目を自動でチェックしてくれる「Linter(リンター)」という道具があります。 有名なかばん持ちのような存在として「ESLint(エスリント)」というツールがあります。

ESLintを設定すると、保存した瞬間にimportの順番を自動で「あいうえお順」や「ルール通り」に並べ替えてくれます。 初心者のうちから、こうした便利なツールを使って、機械に任せられる部分は任せてしまうのが、挫折しないコツです。

7. 絶対パス(パス・エイリアス)のススメ

7. 絶対パス(パス・エイリアス)のススメ
7. 絶対パス(パス・エイリアス)のススメ

深い階層のファイルを読み込むとき、../../../components/Buttonのように「点々(..)」がたくさん並ぶと、今どこにいるのか分からなくなります。 これを解決するのが「パス・エイリアス」です。

設定ファイル(tsconfig.json)を少し書き換えることで、プロジェクトの根っこ(ルート)からの場所を、いつでも@/~/という記号で書き始めることができるようになります。

これにより、ファイルを別のフォルダに移動させたときも、パスの書き換えが少なくて済むというメリットがあります。 初心者の方は、まずは「そういう便利なショートカットがあるんだな」と知っておくだけでも十分です。

8. 初心者が意識すべきフォルダ構成の基本

8. 初心者が意識すべきフォルダ構成の基本
8. 初心者が意識すべきフォルダ構成の基本

importをきれいに保つためには、そもそもファイルを置く場所(フォルダ構成)が整っている必要があります。 よく使われる構成の例を見てみましょう。

  • components: 画面のパーツ(ボタン、入力欄など)を入れる場所。
  • utils (又は lib): どこの画面でも使う共通の計算や、便利な関数を入れる場所。
  • types (又は models): データの形(型)を定義するファイルを入れる場所。
  • hooks: TypeScript特有の、複雑な処理を切り出した部品を入れる場所。

「どこに置けばいいか迷う」という状態を減らすことで、必然的にimport文も整理され、迷いのないきれいなプログラムになっていきます。

関連記事:
カテゴリの一覧へ
新着記事
New1
TypeScript
TypeScriptでパスエイリアスを設定する方法!baseUrlとpathsでコードをスッキリ整理
New2
JavaScript
JavaScriptのfor文の書き方を初心者向けにやさしく解説
New3
JavaScript
JavaScriptの関数でよくあるエラーとその解決法まとめ
New4
JavaScript
JavaScriptのイベント処理でよくあるエラーとその対処法
人気記事
No.1
Java&Spring記事人気No1
JavaScript
JavaScriptのインストール方法まとめ!Windows・Mac・Linux別にステップ解説
No.2
Java&Spring記事人気No2
JavaScript
JavaScriptのマウスイベントの使い方(click, mouseoverなど)
No.3
Java&Spring記事人気No3
JavaScript
JavaScriptのtoStringとString関数の違いを初心者向けに解説
No.4
Java&Spring記事人気No4
JavaScript
JavaScriptの純粋関数(pure function)と副作用の違いを理解しよう
No.5
Java&Spring記事人気No5
JavaScript
JavaScriptプログラムの実行方法まとめ!ブラウザ・Node.js・コンソールの使い方
No.6
Java&Spring記事人気No6
JavaScript
JavaScriptで文字列をforループで1文字ずつ処理する方法!初心者向け解説
No.7
Java&Spring記事人気No7
JavaScript
JavaScriptのDOMContentLoadedとloadイベントの違いを理解しよう
No.8
Java&Spring記事人気No8
TypeScript
TypeScriptの始め方:開発環境の構築手順【初心者向け】