Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
fs2-io を試してたらバグを見つけて直した話
Search
Chen
December 13, 2024
Programming
950
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
fs2-io を試してたらバグを見つけて直した話
Chen
December 13, 2024
More Decks by Chen
See All by Chen
不幸な GC
chencmd
0
1.1k
約 5 年のゲーム開発 ~リリースまでがこんなに大変でした~
chencmd
1
720
Scala におけるコンパイラエラーとの付き合い方
chencmd
2
1.6k
Language Server Protocol の歴史について (a.k.a. 考古学者になる方法)
chencmd
1
200
Other Decks in Programming
See All in Programming
APNsからLive Activityを開始する話
yumnumm
0
180
Python Lambdaにおけるテストしやすい設計とAI支援の活用 / Designing Testable Python Lambda Functions with AI
kitano_yuichi
1
220
Web Framework Benchmark Battle 2026, Any%
a_matsuda
3
3k
Railsのためのパスキー実践入門 〜マルチテナントSaaSでの意思決定〜
utakaha
3
1.3k
HTML-in-Canvasで作る未来のWeb UI表現
clockmaker
5
5.9k
自作Discord音声botをLambda MicroVMsに移行した話 / Migrating My Discord Voice Bot to Lambda MicroVMs
akihisaikeda
0
160
Event is what happens
moro
2
1.7k
コーディング自動化の次へ。人の介入をゼロにするファクトリーとサポートAIによる実践
timakin
5
4.8k
AI時代のシニアエンジニアとは
yosuke_furukawa
PRO
12
10k
Inertia Rails: The One-Person Framework with React & Friends
skryukov
0
170
現場と育てるRailsモデリング 〜Spreadsheetから始めたモデル設計〜
siroemk
2
1.1k
残高管理から台帳サービスへの進化
artoy
1
220
Featured
See All Featured
Let's Do A Bunch of Simple Stuff to Make Websites Faster
chriscoyier
508
140k
How STYLIGHT went responsive
nonsquared
100
6.3k
Mozcon NYC 2025: Stop Losing SEO Traffic
samtorres
1
580
実際に使うSQLの書き方 徹底解説 / pgcon21j-tutorial
soudai
PRO
203
77k
Jess Joyce - The Pitfalls of Following Frameworks
techseoconnect
PRO
1
460
コードの90%をAIが書く世界で何が待っているのか / What awaits us in a world where 90% of the code is written by AI
rkaga
63
47k
Bootstrapping a Software Product
garrettdimon
PRO
306
120k
GraphQLの誤解/rethinking-graphql
sonatard
75
12k
Navigating the moral maze — ethical principles for Al-driven product design
skipperchong
2
650
The Illustrated Guide to Node.js - THAT Conference 2024
reverentgeek
1
590
Building Adaptive Systems
keathley
44
3.3k
Google's AI Overviews - The New Search
badams
0
1.6k
Transcript
fs2-io を試してたらバグを見つけて直した話 by Chen (@Chen__TS) Scala わいわい勉強会 #4 / 2024-12-13
君だれ? 通称 : ちぇん Twitter : @Chen__TS GitHub : @ChenCMD
趣味 : プログラミング お仕事: バックエンドエンジニア ハイトラフィックを捌くサービス を主に Scala で運用保守する人
fs2-io って? fs2 というライブラリの一部 fs2-io ファイルやネットワークの操作を簡単に行える拡張 fs2 って? ストリーム処理のライブラリ データを少しずつ処理する仕組みを提供
大量のデータや非同期処理を効率よく安全に扱える 3/18
とある日の出来事・・・ 「fs2-io、業務で使えないかなぁ」 と思い、趣味の開発プロジェクトで使う スクリプトにお試し利用していた スクリプトはざっくり言うと みたいな処理 i. 特定のファイルを読み込んで ii. データを特定の規則に沿って加工して
iii. 別のファイルに書き込む 4/18
fs2-io でスクリプトを作る fs2-io には Files というファイル IO を扱うモジュールがある 特定のファイルを読み込んで の関数でファイルの中身を行単位で読み込める
def readUtf8Lines(path: Path): Stream[F, String] 別のファイルに書き込む の関数でファイルに行単位で書き込める def writeUtf8Lines(path: Path): Pipe[F, String, Nothing] 5/18
fs2-io でスクリプトを作る fs2-io には Files というファイル IO を扱うモジュールがある 特定のファイルを読み込んで の関数でファイルの中身を行単位で読み込める
def readUtf8Lines(path: Path): Stream[F, String] 別のファイルに書き込む の関数でファイルに行単位で書き込める def writeUtf8Lines(path: Path): Pipe[F, String, Nothing] 諸事情で writeUtf8Lines の実装では足りない部分があった 6/18
じゃあコードを読んで自前で実装してみよう writeUtf8Lines のコードは のような感じ def writeUtf8Lines(path: Path, flags: Flags): Pipe[F,
String, Nothing] = in => in.pull.uncons .flatMap { case Some(_) => in.intersperse(lineSeparator).append(Stream[F, String](lineSeparator)).underlying case None => Pull.done } .stream .through(writeUtf8(path, flags)) 7/18
「これ、やっちゃダメな処理してね・・・?」 8/18
念の為検証してみる 「でもユーザー数も多いライブラリだし、まさかなぁ」 念の為、ざっくり Minimum な検証用コードを書いて検証してみる @main def main: Unit =
{ val program = Stream .eval(IO { println("side-effect 1"); "out1" }) .append(Stream.eval(IO { println("side-effect 2"); "out2" })) .through(Files.forIO.writeUtf8Lines(Path("text.txt"))) .compile .drain program.unsafeRunSync() } 9/18
「バグった!!!!!!!」 10/18
バグを見つけた!! 念の為既知のバグかどうか を調べた が、特に見当たらない なので Issue を建てた 恥ずかしながら英語に めっぽう弱いので機械 翻訳を使った
最近の機械翻訳はまぁ まぁ伝わるので助かり ますね
「これ・・・私でも直せるんじゃね?」 12/18
れっつ修正 - テストを書く まずはテストを書いた テストを書くことで、バグの修正前と後で問題が起きなくなっていること を保証できる 将来的にバグが再発しないことも保証できる 大体の場合他のテストケースを参考にすると書きやすい 今回の場合は 10
分程度で書けた 13/18
れっつ修正 - バグ修正 テストを commit / push して CI に落ちることを確認したあと、バグ修正
を行った 実際の修正内容は説明するとそれだけで 5 分以上かかるので省略 今回の場合 30 分程度で修正出来た 14/18
れっつ修正 - バグ修正 修正内容 15/18
PR を作成する 修正が終わったので PR fs2 リポジトリには PR テ ンプレートが無かった ざっくりとバグ報告
Issue の番号と原因 を書いておいた というわけで出来た
まとめ みんなが使ってるようなライブラリにも案外バグがある 直感は大体当たる 違和感を感じたら検証してみるのがおすすめ Issue は大体の場合テンプレートに沿って書くだけで OK 最近の機械翻訳は程々に伝わるので英語が苦手でも大丈夫 行けそうだなと思ったら PR
も出してみるのがおすすめ 17/18
fs2-io を試してたらバグを見つけて直した話 by Chen (@Chen__TS) Twemoji : CreativeCommons-BY-4.0 Scala わいわい勉強会
#4 / 2024-12-13 18/18