| 機能 | perfectionist | simple-import-sort | prettier-plugin | Biome |
|---|---|---|---|---|
| 基本ソート方法 | alphabetical/natural/line-length/custom/unsorted | alphabetical (Intl.Collator) | alphabetical (natural sort) | natural sort |
| ケース感度 | 設定可能 (ignoreCase) | 常に無視 (sensitivity: base) | 設定可能 | 自然順序 (A < a < B < b) |
| グループ数 | 無制限カスタム | デフォルト5、カスタム可 | 無制限カスタム | 無制限カスタム |
| TypeScript対応 | tsconfig統合、型インポート分離 | 型インポート対応 | TS 4.5+対応、型分離 | 型インポート分離 |
| 副作用インポート | デフォルト無視、設定可 | 順序保持 | デフォルト保持、設定可 | チャンク境界作成 |
| コメント処理 | パーティション作成可 | 洗練されたコメント移動 | 高度なコメントレジストリ | アタッチ/デタッチ区別 |
| 相対パス処理 | parent/sibling/index区別 | 文字置換による階層ソート | 正規表現マッチ | 距離概念ベース |
| Node.js builtins | node:プレフィックス認識 | node:プレフィックス優先 | <BUILTIN_MODULES> |
:NODE: マッチャー |
| カスタムキーワード作成 | ✅ (customGroups) | ❌ | ❌ | ❌ |
| カスタムアルファベット | ✅ | ❌ | ❌ | ❌ |
| 行長ベースソート | ✅ | ❌ | ❌ | ❌ |
| フォールバックソート | ✅ (タイブレーカー) | ❌ | ❌ | ❌ |
| 環境別対応 | Node.js/Bun | Node.js | Node.js | Node.js/Bun/Deno |
| 設定複雑度 | 高 (多数オプション) | 低 (1オプション) | 中 | 中 |
| エラー表示 | 詳細 | 最小限 (autofix推奨) | Prettier統合 | 情報レベル |
| フレームワーク対応 | ❌ | ❌ | Vue/Ember/Astro | ❌ |
| インポートマージ | ❌ | ❌ | ✅ (同一ソース結合) | ✅ (自動結合) |
| CommonJS require() | ✅ 完全対応 | ❌ | ❌ | ❌ |
| TypeScript import = | ✅ 完全対応 | ❌ | ❌ | ❌ |
- カスタムキーワード作成:
customGroupsで名前付きカテゴリーを定義し、groups配列で参照可能 - CommonJS require()対応:
const x = require('module')構文を認識・ソート - TypeScript import =対応:
import x = require('module')構文を認識・ソート - 混在モジュールシステム: ES6 importとCommonJS requireを同一ファイルでソート
- カスタムアルファベット順: 独自の文字順序定義 (
alphabet: "abcdefg...") - 行長ソート: コード行の長さでソート
- フォールバックソート: 同値時の二次ソート戦略
- TSConfig統合: パスエイリアス解決のための深いTypeScript統合
- 修飾子システム:
default、wildcard、named、require、ts-equals等の詳細な分類 - 環境別ビルトイン認識: Bunの特殊モジュール対応
- グループごとの個別ソート設定: 各グループで異なるソートタイプ/順序を設定可能
- newlinesBetween設定: グループ間の改行数を0〜n行で制御
- 文字置換による階層ソート:
../../utils→../utils→.の順序(Biomeとは異なるアルゴリズム) - Autofix専用設計: 手動修正を推奨しない最小限エラー
- 文字置換ソート:
.、/、_、-を特殊処理して正しい順序を実現 - 最長マッチ優先: 正規表現の最長一致でグループ決定
- 単一設定オプション:
groups配列のみで全動作を制御 - チャンク自動検出: コメント/空白行で区切られたインポート群を独立処理
- 外部インターフェース名でのソート:
import { a as b }をaでソート
- フレームワーク対応: Vue SFC、Ember、Astroのネイティブ対応
- インポートマージ: 同一ソースからのインポート自動結合
- Prettierプリプロセッサー統合: フォーマット前の前処理
- TypeScriptバージョン認識: TS 4.5+の新構文対応
- 高度なコメントレジストリ: コメントとインポートの関係性維持
- 安全な副作用インポート:
importOrderSafeSideEffectsで特定の副作用をソート可能 - 動的パーサープラグイン: Babel parser pluginを動的に追加可能
- チャンクベース処理: 論理的グループの自動認識
- 距離ベースソート: モジュールの「距離」概念による自動順序付け
- コードアクション実装: LSPベースのエディタ統合
- プロトコル対応:
jsr:、npm:、bun:プレフィックス - 統合ツールチェーン: 独立プラグインではなく完全統合
- インポート種別順序: 同一ソース内でnamespace → default → namedの固定順
- デタッチコメント認識: 空行で区切られたコメントを境界として認識
最大の特徴: 極めて高度なカスタマイズ性とレガシーコード対応
- カスタムキーワード作成(
customGroupsでmy-builtinsのような名前付きカテゴリー) - 唯一のCommonJS/TypeScript import =対応(他ツールはES6のみ)
- 5種類のソートアルゴリズム(alphabetical/natural/line-length/custom/unsorted)
- 無制限のカスタムグループ定義with AnyOf条件
- TypeScriptとの深い統合(tsconfig.json解析)
- 企業環境向けの詳細制御(修飾子システム、環境別対応)
- パフォーマンス最適化(正規表現キャッシュ、グループ計算キャッシュ)
最大の特徴: シンプルさへの徹底的なこだわり
- 設定オプション1つのみ(
groups配列) - ゼロ設定で動作する賢いデフォルト
- 自動修正前提の設計(手動修正を推奨しない)
- 依存関係ゼロで軽量
- ディレクトリ階層を理解する相対パスソート
最大の特徴: Prettierエコシステムとの完全統合
- フォーマッターとの一体化(前処理として動作)
- 複数フレームワーク対応(Vue/Ember/Astro)
- インポートの自動マージ機能
- 洗練されたAST操作(Babel generator使用)
- TypeScriptバージョンを考慮した構文生成
最大の特徴: 統合開発環境としてのアプローチ
- リンター/フォーマッター統合ツール
- チャンクベースの論理的グループ化
- コードアクションモデル(LSP統合)
- 設定不要のインテリジェント動作
- 距離ベースの直感的なソート順
各ツールがインポート文をどのように「まとまり」として認識し、処理するかの違い:
チャンクの定義: 隣接するimport/export文の連続として明確に定義
- チャンクの区切り要因:
- 通常の文(関数宣言、変数宣言など)
- side-effectインポート(
import "x")- 各side-effectが独立チャンク - detached comment(空行が続くコメント)
- export文(importチャンクを終了させる)
- チャンク内の処理:
- 各チャンクを完全に独立して処理
- チャンク間は自動的に空行で分離
- side-effectインポートは単独チャンクとして扱う
// Biomeが認識する6つのチャンク例
// チャンク 1
import A from "a";
import * as B from "b";
// チャンク 2 (side-effect)
import "x";
// チャンク 3 (side-effect)
import "y";
// チャンク 4
import { C } from "c";
// チャンク 5 (exportで終了)
export * from "d";
function f() {} // 通常の文でチャンク区切り
// チャンク 6
export * as E from "e";
export { F } from "f";チャンクの定義: import以外のノードで自動的にチャンクを分離
- チャンクの区切り要因:
partitionByComment: コメントでパーティション分割partitionByNewLine: 空行でパーティション分割- import以外のノード: export文、変数宣言、関数宣言等で自動的にチャンク分離
hasContentBetweenNodes(): 2つのimport間にトークンがあるとチャンク分離
- チャンク内の処理:
- 各チャンク内でのみソート(チャンクを越えてソートしない)
- selector + modifier システムでチャンク内グループ分類
- side-effectインポートもソート対象として処理
チャンクの定義: import以外のノードで明示的にチャンクを終了
- チャンクの区切り要因:
- import以外のノード:
isPartOfChunk()が"NotPartOfChunk"を返すノード(export文、変数宣言、関数宣言等) extractChunks(): コメントと空白のみを許可するimport文の連続
- import以外のノード:
- チャンク内の処理:
- 各チャンクを独立してソート
- チャンク境界を越えてソートしない
- チャンク間の順序は保持
// simple-import-sortの処理例
import D from "d"; // ↑ チャンク 1
import E from "e"; // ↑ (ソートされる)
import F from "f"; // ↑
const x = 5; // ← チャンク境界(import以外のノード)
import A from "a"; // ↓ チャンク 2
import B from "b"; // ↓ (独立してソート)処理の定義: 全import文を収集してソート、import以外のノードは元位置保持
-
処理の特徴:
- 全import文を収集: ファイル内の全import文を抽出してソート処理
- import以外のノードは位置保持: function、const、export等は元の位置に残る
- 境界を越えない移動: import文がimport以外のノードを越えて移動しない
- side-effectインポートとignoreコメントでソート対象から除外可能
-
実際の動作例:
// 入力 import { c } from "c"; import { b } from "b"; const myVar = 5; import { a } from "a"; import { d } from "d"; // 出力 import { b } from "b"; // ← ソート済み import { c } from "c"; // ← ソート済み const myVar = 5; // ← 元位置保持 import { a } from "a"; // ← ソート済み import { d } from "d"; // ← ソート済み
| 観点 | Biome | perfectionist | simple-import-sort | prettier-plugin |
|---|---|---|---|---|
| 処理方式 | 厳密なチャンク定義 | チャンク分離型処理 | ノード境界型チャンク | 全収集型ソート |
| チャンク区切り | 文・side-effect・コメント | import以外ノード・設定 | import以外ノード | なし(全収集) |
| import以外ノード | チャンク境界作成 | チャンク境界として機能 | チャンク境界として機能 | 元位置保持(境界として機能) |
| ソート範囲 | 各チャンク独立ソート | チャンク内のみソート | チャンク独立ソート | 境界内独立ソート |
| side-effect扱い | チャンク境界作成 | ソート対象として処理 | チャンク境界機能 | ソート対象外除外 |
| 改行制御 | 自動挿入 | 設定可能 | 順序保持 | 保持 |
| 複雑性 | 中(自動判定) | 高(詳細設定) | 低(自動判定) | 低(全収集処理) |
チャンク処理の特徴:
- Biome: 最も厳密で自動的なチャンク認識(side-effect、export、その他ノードで明示的に区切り)
- perfectionist: import以外のノードで自動チャンク分離、オプションでパーティション分割
- simple-import-sort: import以外のノードでチャンク終了、シンプルな境界認識
- prettier-plugin: 全import文を収集してソート、import以外のノードは境界として機能するが元位置保持