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
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
Tamashoo
May 23, 2026
26
0
Share
typescript-goで変わるリンターの世界 — Flintという第三の選択肢
Tamashoo
May 23, 2026
Featured
See All Featured
Designing for Timeless Needs
cassininazir
1
220
The Organizational Zoo: Understanding Human Behavior Agility Through Metaphoric Constructive Conversations (based on the works of Arthur Shelley, Ph.D)
kimpetersen
PRO
0
330
The Anti-SEO Checklist Checklist. Pubcon Cyber Week
ryanjones
0
140
Everyday Curiosity
cassininazir
0
210
Balancing Empowerment & Direction
lara
6
1.1k
Building Applications with DynamoDB
mza
96
7k
Agile Leadership in an Agile Organization
kimpetersen
PRO
0
150
svc-hook: hooking system calls on ARM64 by binary rewriting
retrage
2
250
Product Roadmaps are Hard
iamctodd
PRO
55
12k
Building Experiences: Design Systems, User Experience, and Full Site Editing
marktimemedia
0
510
Agile that works and the tools we love
rasmusluckow
331
21k
The Language of Interfaces
destraynor
162
26k
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