Upgrade to Pro — share decks privately, control downloads, hide ads and more …

typescript-goで変わるリンターの世界 — Flintという第三の選択肢

Sponsored · Your Podcast. Everywhere. Effortlessly. Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
Avatar for Tamashoo Tamashoo
May 23, 2026
26

typescript-goで変わるリンターの世界 — Flintという第三の選択肢

Avatar for Tamashoo

Tamashoo

May 23, 2026

Transcript

  1. 自己紹介 名前: 玉正 智也(Tamasho Tomoya) 所属: 楽天グループ株式会社 業務: フロントとかBFF とか TypeScript

    は触り始めて1 年くらい typescript-eslint に少しPR を出したことがある 1
  2. AST ルール: 構文木を見て判定 コード例: const x = 1 == 2;

    ↓ パース(型情報不要) BinaryExpression ├─ operator: "==" ← ここを見る ├─ left: 1 └─ right: 2 → "==" を検出 → 警告(eqeqeq ルール) 型情報は不要で、ファイルをパースするだけなので速い 5
  3. 型チェックルール: 型情報で判定 コード例: async function load() { fetch('/api/data'); // ←

    await なし } 型グラフより: fetch() → Promise<Response> この Promise は未処理 → no-floating-promises が検出 (戻り値の型を知らないと判断できない) tsc の型解析が必要なので遅い →ESLint が遅いと言われる理由 6
  4. 2 種類のルール: まとめ AST ルール 構文木のみで動作 → 高速・軽量 スタイル・構文の問題を検出 型チェックルール

    型情報が必要 → tsc をフル実行 型に起因するバグを検出できる → 両方必要だが、型チェックを有効にすると実行時間が遅くなる → 速度と拡張性のバランスがツール選定の主な理由 7
  5. Rust 製Linter 強み Rust 製でESLint より高速 フォーマッター内蔵のものもある(Biome ) 弱み 型チェックルールは非対応

    or 対応中 カスタムルールはRust で書く必要がある →TypeScript+Rust の知識が求められる ESLint の全てのルールをカバーしているわけではない 10
  6. 比較 項目 ESLint Rust 製 理想 型チェックルール あり なし あり

    カスタムルールの言語 TypeScript Rust TypeScript 速度 遅い 超高速 超高速 エコシステム 巨大 発展途上 巨大 11
  7. Flint とは Josh Goldberg さん(typescript-eslint メンテナー)が主導する実験 的OSS リンター If I

    Wrote a Linter, Part 1: Architecture GitHub: https://github.com/flint-fyi/flint TypeScript で書かれたルールや設定を、ネイティブ速度のコアに 委譲することで高速にできるというアイデア ESLint の拡張性とネイティブリンターの速度の両立が目標 13
  8. Flint: ハイブリッドアーキテクチャ ネイティブ速度コア(typescript-go 等に委譲) └─ 高速パース + 型解析 ↓ ルールエンジン(TypeScript)

    └─ TS でルール記述 ↓ Lint 結果出力 ネイティブ速度の処理を委譲する設計 ルールはTypeScript — TypeScript の知識のみで記述可能 Linter の組み合わせ不要 14
  9. Flint が提供するもの 型チェックルールを高速に実行 カスタムルールをTypeScript で記述(Rust 不要) ESLint 互換で移行コストを下げる ⚠️ 注意

    実用に耐えるレベルまでまだまだかかる見込み 開発が頓挫する可能性もある→OSS コントリビュートの余地がと てもある 16