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
Flow は今どうなっているか
Search
mizdra
PRO
August 13, 2026
Programming
210
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Flow は今どうなっているか
2026/07/24 に
TSKaigi Mashup Kansai #2
で発表した資料です。
mizdra
PRO
August 13, 2026
More Decks by mizdra
See All by mizdra
速さだけじゃない! VoidZero ツールが移行先に選ばれる理由
mizdra
PRO
6
870
60分で学ぶ最新Webフロントエンド
mizdra
PRO
51
29k
機密情報の漏洩を防げ! Webフロントエンド開発で意識すべき漏洩パターンとその対策
mizdra
PRO
19
11k
TypeScript Language Service Plugin で CSS Modules の開発体験を改善する
mizdra
PRO
3
9.3k
あなたの知らない Function.prototype.toString() の世界
mizdra
PRO
4
6.2k
React Server Components の疑問を解き明かす
mizdra
PRO
23
15k
はてなにおける CSS Modules、及び CSS Modules に足りないもの / CSS Modules in Hatena, and CSS Modules missing parts
mizdra
PRO
8
3.3k
大量の ESLint エラーに対処する技術 / The technology to fight with many ESLint's errors
mizdra
PRO
0
3.4k
Vue Language Server から生まれた Volar.js と、それが秘める可能性
mizdra
PRO
13
10k
Other Decks in Programming
See All in Programming
The Past, Present, and Future of Enterprise Java
ivargrimstad
0
570
ソフトウェア設計に溶けるインフラ ― AWS CDK のインフラ認識論
konokenj
3
780
改善しないと、タスクが回らない。 “てんこ盛りポジション” を引き継いだ情シスの、入社3ヶ月の業務改善録
krm963
0
260
Lean は証明の正しさを確認するためだけのツールって思ってませんか?
inoueasei
1
150
AI時代のPHPer生存戦略 ~「言語、もうなんでもよくない?」に本気で向き合う~
vivion
0
320
Detecting Compromised CI with eBPF and Cilium Tetragon
lizrice
0
180
PHP に部分適用が来るぞ!……ところで何それ?おいしいの? #phpcon / phpcon-2026
shogogg
0
640
Go 1.27 における memory allocation の高速化
andpad
0
170
ルールを書いて終わらせないハーネスエンジニアリング
yug1224
4
1.9k
Built Our Own Background Agent at LayerX
layerx
PRO
10
5.3k
PHP Application における Kubernetes 内 gRPC 通信
ganchiku
0
590
関東Kaggler会_NVIDIA_Nemotron_コンペ_振り返り
rick_ds
0
550
Featured
See All Featured
CSS Pre-Processors: Stylus, Less & Sass
bermonpainter
360
30k
Building Flexible Design Systems
yeseniaperezcruz
330
40k
Designing for Timeless Needs
cassininazir
1
440
Jamie Indigo - Trashchat’s Guide to Black Boxes: Technical SEO Tactics for LLMs
techseoconnect
PRO
0
620
コードの90%をAIが書く世界で何が待っているのか / What awaits us in a world where 90% of the code is written by AI
rkaga
63
45k
Organizational Design Perspectives: An Ontology of Organizational Design Elements
kimpetersen
PRO
1
790
The Straight Up "How To Draw Better" Workshop
denniskardys
239
140k
Automating Front-end Workflow
addyosmani
1369
210k
The Invisible Side of Design
smashingmag
301
52k
Measuring Dark Social's Impact On Conversion and Attribution
stephenakadiri
2
250
Bash Introduction
62gerente
615
220k
Navigating Algorithm Shifts & AI Overviews - #SMXNext
aleyda
1
1.5k
Transcript
Flow は 今どうなっているか id:mizdra 2026/07/24 TSKaigi Mashup Kansai #2 1
自己紹介 • mizdra (みずどら) • インターネット大好き • 株式会社はてな ◦ フロントエンドエキスパート
◦ フロントエンド会 (社内組織) の運営 2
今日のテーマ Flow 3
Flow とは • Meta 製のJavaScript 向け型チェッカー ◦ TypeScript みたいなやつ •
2014 年に公開 4
コード例 // @flow function greet(name: string, age: number): string {
return `Hello, ${name} (${age})`; } type User = { name: string, age: number }; const user: User = { name: "mizdra", age: 20 }; greet(user.name, user.age); greet(42, "oops"); // Error! 5
歴史 • かつては TypeScript の対抗馬的存在 ◦ 2016 年頃より TypeScript が覇権を握り始める
• Flow は次第に採用されなくなる 6
今の Flow • Meta 社内では使われている • 今も開発が続き、進化してる • 実は TypeScript
にも影響を与えてる どのように進化しているのかについて話します 7
Flow の基礎知識 8
Flow の型 • TypeScript と大体同じ ◦ 基本型 (boolean, number, string,
null, ...) ◦ keyof T, as const, T[K], A & B, x as T ◦ ユーテリティ型 (Pick, Omit, ...) • 型注釈書く場所も同じ 9
特筆すべき相違点 • void, empty • Exact object • Nominal classes
• object/interface/class の subtyping 関係 10
void, empty • void: TS の undefined のこと • empty:
TS の never のこと 11
Exact object • {x: number} 型はプロパティ x のみ含む型 type A
= {x: number}; const obj = {x: 1, y: 2}; const a: A = obj; // ERROR 12
Exact object • 追加のプロパティを許可するには... ◦ {x: number, ...} と書く type
A = {x: number, ...}; const obj = {x: 1, y: 2}; const a: A = obj; // OK 13
Nominal classes • class は nominal type として扱われる class Foo
{ a: number = 1; } class Bar { a: number = 1; } const foo: Foo = new Bar(); // ERROR 14
object/interface/class の subtyping 関係 15
まとめると • 基本的には TypeScript と同じ機能がある • より強力な静的保証を優先するため... ◦ 細かな違いがある 16
近年の Flow の変化 17
近年の Flow の変化 • モジュール境界の型注釈の必須化 (2020) • TypeScript との互換性の向上 (2023〜)
• 拡張構文 (2024〜) • 型チェッカーの Rust 化 (2026) 18
モジュール境界の型注釈の必須化 (2020) • export するやつは明示的な型注釈が必要 (※1) // NG export function
add(a: number, b: number) { return a + b; } // OK export function add(a: number, b: number): number { return a + b; } ※1: 厳密には、`export const VAL = 100;` のような ASTをパースすれば 型が分かるものは型注釈省略可能 19
何故このような厳しい制約があるのか • 型チェックのパフォーマンスのため • もっと言うと... ◦ Meta 社内の大規模なコードベースに耐えられるようにするため • この制約があると型チェックの並列化が容易
◦ 型チェック速度の向上に貢献 20
実は TypeScript に輸出されてる • モジュール境界の型注釈の必須化は... ◦ TypeScript の --isolatedDeclarations に相当
• 実装者が公演で「Flowを参考にした」と言ってる ◦ https://gitnation.com/contents/faster-typescriptbuilds-with-isolateddeclarations 21
TypeScript との互換性の向上 (2023〜) • かつては異なる構文・型名だったものを変更してる ◦ (x: T) → x
as T ◦ mixed → unknown ◦ $ReadOnly<T> → Readonly<T> ◦… 22
機能の輸入もしてる • Type Guard • Mapped Type • Conditional Types
• リテラル型, as const, const 型パラメーター 23
拡張構文 (2024〜) • JavaScript にはない構文がいくつか実装されてる 24
① component 構文 component Profile(name: string, age: number) { return
<div>{name}({age}歳)</div>; } • パラメーター部分を短く書ける ◦ TS だと ({name, age}: {name: string, age: number}) 25
② hook 構文 hook useWindowWidth(): number { // ... return
width; } • 型で hook と通常の関数を区別するためのもの ◦ より多くの問題を静的に検出できる ◦ function が hook になってるだけ 26
③ match 式 const message = match (result) { {type:
'ok', const value} => `成功: ${value}`, {type: 'error', const error} => `失敗: ${error.message}`, {type: 'loading'} => '読み込み中...', }; 27
何故拡張構文を追加しているのか • 近年 TypeScript では拡張構文を実装しない方針 • 一方 Flow は... ◦
2021 年に拡張構文を許容するように (※2) ◦ Meta 社内のニーズに応じて構文の拡張も検討する • TypeScript と正反対で面白い ※2: https://medium.com/flow-type/clarity-on-flows-direction-and-open-source-engage ment-e721a4eb4d8b 28
型チェッカーの Rust 化 (2026) • 型チェッカーが OCaml => Rust に
◦ 型チェックが概ね2倍速に • TS のように Go への移植も検討されたが... ◦ SWC や oxlint といったツールへの結合も検討したい ◦ 移植は大変なので、二度と後悔しない言語選択をしたい ◦ => Rust を選択することに 29
まとめ • Meta 社内以外では殆ど使われなくなったが... ◦ Flow は今も進化してる • 野心的な変更が次々行われてる ◦
TypeScript との互換性向上 ◦ 型チェックのパフォーマンス向上 ◦ 拡張構文 • 今後の進化にも是非注目しよう 30