Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
typescript-goで変わるリンターの世界 — Flintという第三の選択肢
Search
Tamashoo
May 23, 2026
160
2
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
typescript-goで変わるリンターの世界 — Flintという第三の選択肢
Tamashoo
May 23, 2026
Featured
See All Featured
Site-Speed That Sticks
csswizardry
13
1.4k
Stewardship and Sustainability of Urban and Community Forests
pwiseman
0
470
Thoughts on Productivity
jonyablonski
76
5.3k
Mobile First: as difficult as doing things right
swwweet
225
10k
KATA
mclloyd
PRO
35
15k
Measuring & Analyzing Core Web Vitals
bluesmoon
9
960
The agentic SEO stack - context over prompts
schlessera
0
860
The Curious Case for Waylosing
cassininazir
1
450
Organizational Design Perspectives: An Ontology of Organizational Design Elements
kimpetersen
PRO
1
790
Fight the Zombie Pattern Library - RWD Summit 2016
marcelosomers
234
17k
Money Talks: Using Revenue to Get Sh*t Done
nikkihalliwell
0
460
Gemini Prompt Engineering: Practical Techniques for Tangible AI Outcomes
mfonobong
2
480
Transcript
typescript-go で変わるリンターの世界 - Flint という第三の選択肢 Tamasho Tomoya TSKaigi 2026 2026-05
自己紹介 名前: 玉正 智也(Tamasho Tomoya) 所属: 楽天グループ株式会社 業務: フロントとかBFF とか TypeScript
は触り始めて1 年くらい typescript-eslint に少しPR を出したことがある 1
1. リンターの仕組み 2. ESLint とRust 製Linter 3. Flint: ハイブリッド 4.
まとめ 2
1. リンターの仕組み 2. ESLint とRust 製Linter 3. Flint: ハイブリッド 4.
まとめ 3
TypeScript リンターの役割 リンターはAST( 抽象構文木) ルールや型チェックルールによって コードの解析を行う それぞれのルールについて簡単に紹介する 4
AST ルール: 構文木を見て判定 コード例: const x = 1 == 2;
↓ パース(型情報不要) BinaryExpression ├─ operator: "==" ← ここを見る ├─ left: 1 └─ right: 2 → "==" を検出 → 警告(eqeqeq ルール) 型情報は不要で、ファイルをパースするだけなので速い 5
型チェックルール: 型情報で判定 コード例: async function load() { fetch('/api/data'); // ←
await なし } 型グラフより: fetch() → Promise<Response> この Promise は未処理 → no-floating-promises が検出 (戻り値の型を知らないと判断できない) tsc の型解析が必要なので遅い →ESLint が遅いと言われる理由 6
2 種類のルール: まとめ AST ルール 構文木のみで動作 → 高速・軽量 スタイル・構文の問題を検出 型チェックルール
型情報が必要 → tsc をフル実行 型に起因するバグを検出できる → 両方必要だが、型チェックを有効にすると実行時間が遅くなる → 速度と拡張性のバランスがツール選定の主な理由 7
1. リンターの仕組み 2. ESLint とRust 製Linter 3. Flint: ハイブリッド 4.
まとめ 8
ESLint 強み エコシステム最大で、多種多様なルールが存在 ルールはTypeScript/JS で記述可能 →TypeScript のルールをTypeScript で記述可 jest ・react
・import など有名プラグインが充実 弱み 型チェック時に低速になる 9
Rust 製Linter 強み Rust 製でESLint より高速 フォーマッター内蔵のものもある(Biome ) 弱み 型チェックルールは非対応
or 対応中 カスタムルールはRust で書く必要がある →TypeScript+Rust の知識が求められる ESLint の全てのルールをカバーしているわけではない 10
比較 項目 ESLint Rust 製 理想 型チェックルール あり なし あり
カスタムルールの言語 TypeScript Rust TypeScript 速度 遅い 超高速 超高速 エコシステム 巨大 発展途上 巨大 11
1. リンターの仕組み 2. ESLint とRust 製Linter 3. Flint: ハイブリッド 4.
まとめ 12
Flint とは Josh Goldberg さん(typescript-eslint メンテナー)が主導する実験 的OSS リンター If I
Wrote a Linter, Part 1: Architecture GitHub: https://github.com/flint-fyi/flint TypeScript で書かれたルールや設定を、ネイティブ速度のコアに 委譲することで高速にできるというアイデア ESLint の拡張性とネイティブリンターの速度の両立が目標 13
Flint: ハイブリッドアーキテクチャ ネイティブ速度コア(typescript-go 等に委譲) └─ 高速パース + 型解析 ↓ ルールエンジン(TypeScript)
└─ TS でルール記述 ↓ Lint 結果出力 ネイティブ速度の処理を委譲する設計 ルールはTypeScript — TypeScript の知識のみで記述可能 Linter の組み合わせ不要 14
Flint とESLint の違い クロスファイルキャッシュ 他のリンターは変更のあったファイルのみの解析を行うが、 型チェックルールは依存関係も考慮する必要がある この機能では、 変更ファイルとの依存関係のある部分のキャッシュを無効化 することで、パフォーマンスを大幅に改善 TypeScript
で型安全な設定ファイル markdown やJSON などの非コードファイルも解析可能 詳しくは: What flint does differently 15
Flint が提供するもの 型チェックルールを高速に実行 カスタムルールをTypeScript で記述(Rust 不要) ESLint 互換で移行コストを下げる ⚠️ 注意
実用に耐えるレベルまでまだまだかかる見込み 開発が頓挫する可能性もある→OSS コントリビュートの余地がと てもある 16
1. リンターの仕組み 2. ESLint とRust 製Linter 3. Flint: ハイブリッド 4.
まとめ 17
まとめ Flint はESLint の拡張性とRust 製リンターの速度を両立させること を目指す実験的プロジェクト 試すなら個人プロジェクトから、興味があればコントリビュート も面白いかも 18