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
10
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
自動化したのに回らないテスト運用の壁ーAI時代の品質責任と生産性
mfunaki
0
130
Android CLI
fornewid
0
220
自動化したのに回らない テスト運用の壁―AI時代の品質責任と生産性
mfunaki
0
150
実装をデザインガイドラインに追従させるための取り組み / 260731-dip-mosh-design-system
dachi023
0
120
Jindong: Introducing Declarative Haptics in Compose Multiplatform
l2hyunwoo
0
110
複数の Claude Code が"放置"されてしまう問題をCLI ダッシュボードを自作して解決した話
sumihiro3
1
680
数百円から始めるRuby電子工作
tarosay
0
140
AWS CDK を「作」ってみた 〜フルスクラッチで見えた CDK の裏側〜 / aws-cdk-from-scratch
gotok365
3
2.8k
変わらないものが、変わるものを決める — 意図駆動開発 × イベントソーシング × イミュータブル | What Doesn't Change Decides What Can — IDD × Event Sourcing × Immutability
tomohisa
0
1.5k
【やさしく解説 設計編・中級 #4】ルールの寿命と、システムの年輪
panda728
PRO
2
180
使いながら育てる Claude Code — 開発フローの1コマンド化 × 繰り返し指摘の自動仕組み化
shiki_kakaku
0
1.7k
Go 1.27 における memory allocation の高速化
andpad
0
160
Featured
See All Featured
Mind Mapping
helmedeiros
PRO
1
310
A Tale of Four Properties
chriscoyier
163
24k
GraphQLの誤解/rethinking-graphql
sonatard
75
12k
Building AI with AI
inesmontani
PRO
1
1.1k
Reflections from 52 weeks, 52 projects
jeffersonlam
356
21k
Getting science done with accelerated Python computing platforms
jacobtomlinson
2
420
VelocityConf: Rendering Performance Case Studies
addyosmani
332
25k
The Psychology of Web Performance [Beyond Tellerrand 2023]
tammyeverts
49
3.5k
Building a A Zero-Code AI SEO Workflow
portentint
PRO
0
660
"I'm Feeling Lucky" - Building Great Search Experiences for Today's Users (#IAC19)
danielanewman
230
23k
Why You Should Never Use an ORM
jnunemaker
PRO
61
10k
Refactoring Trust on Your Teams (GOTO; Chicago 2020)
rmw
35
3.7k
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