📝

Prettierでimportの順番を自動で整理する

2023/02/26に公開

背景

フロントエンドPJのimport文は、複数のモジュールをインポートする際に使われます。
しかし、複数のモジュールをインポートする場合、どういう順番でインポートすればコードが見やすくなるのかは悩ましい問題です。
この記事では、PrettierのimportOrderを使って、import文を自動的に整理する方法を紹介します。

prettier-plugin-sort-importsのインストール

PrettierのimportOrder設定は、インポート文を特定の順序に並べ替えるためのものです。
importOrderを使うには、prettier-plugin-sort-importsというプラグインをインストールする必要があります。

npmでインストール

npm install --save-dev @trivago/prettier-plugin-sort-imports

yarnでインストール

yarn add --dev @trivago/prettier-plugin-sort-imports

importOrderの設定

importしたいファイルパスのパターンを列挙し、その順序でimportをソートしてくれます。

例えば、以下のような設定をすると、

{
  "importOrder": [
    "^react",
    "^@?\\w",
    "^[./]"
  ]
}

以下のようにimportがソートされます。

import React from 'react';
import { Button } from '@material-ui/core';
import { useUser } from './hooks';

デフォルトでは、"^[./]"というパターンが設定されていて、相対パスや絶対パスで始まるファイルを意味します。
他のパターンを追加したい場合は、自分のプロジェクトに合わせてカスタマイズしてください。

おまけ

自分がよく使う設定を紹介します。

module.exports = {
  // ...
  importOrder: [
    "^(react/(.*)$)|^(react$)",
    "^(next/(.*)$)|^(next$)",
    "<THIRD_PARTY_MODULES>",
    "",
    "^types$",
    "^@local/(.*)$",
    "^@/config/(.*)$",
    "^@/lib/(.*)$",
    "^@/components/(.*)$",
    "^@/styles/(.*)$",
    "^[./]",
  ],
  importOrderSeparation: false,
  importOrderSortSpecifiers: true,
  importOrderBuiltinModulesToTop: true,
  importOrderParserPlugins: ["typescript", "jsx", "decorators-legacy"],
  importOrderMergeDuplicateImports: true,
  importOrderCombineTypeAndValueImports: true,
  plugins: ["@ianvs/prettier-plugin-sort-imports"],
}
  • Reactは常に最初にインポートする
  • 次に、Next.jsの公式パッケージであるnext/image、next/linkなどをインポートする
  • その後に、サードパーティ製のパッケージをインポートする
  • グループ間に空行を挿入する
  • 最後に、types、config、lib、componentsの順でローカルファイルをインポートする

Discussion