$30 off During Our Annual Pro Sale. View Details »
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
fs2-io を試してたらバグを見つけて直した話
Search
Chen
December 13, 2024
Programming
0
730
fs2-io を試してたらバグを見つけて直した話
Chen
December 13, 2024
Tweet
Share
More Decks by Chen
See All by Chen
約 5 年のゲーム開発 ~リリースまでがこんなに大変でした~
chencmd
1
640
Scala におけるコンパイラエラーとの付き合い方
chencmd
2
1.4k
Language Server Protocol の歴史について (a.k.a. 考古学者になる方法)
chencmd
1
130
Other Decks in Programming
See All in Programming
堅牢なフロントエンドテスト基盤を構築するために行った取り組み
shogo4131
8
2.5k
Claude Codeの「Compacting Conversation」を体感50%減! CLAUDE.md + 8 Skills で挑むコンテキスト管理術
kmurahama
1
630
The Art of Re-Architecture - Droidcon India 2025
siddroid
0
120
Python札幌 LT資料
t3tra
6
1k
Pythonではじめるオープンデータ分析〜書籍の紹介と書籍で紹介しきれなかった事例の紹介〜
welliving
2
540
Rubyで鍛える仕組み化プロヂュース力
muryoimpl
0
160
AIエージェントを活かすPM術 AI駆動開発の現場から
gyuta
0
460
안드로이드 9년차 개발자, 프론트엔드 주니어로 커리어 리셋하기
maryang
1
130
Patterns of Patterns
denyspoltorak
0
270
LLM Çağında Backend Olmak: 10 Milyon Prompt'u Milisaniyede Sorgulamak
selcukusta
0
130
C-Shared Buildで突破するAI Agent バックテストの壁
po3rin
0
410
AIコーディングエージェント(skywork)
kondai24
0
200
Featured
See All Featured
Side Projects
sachag
455
43k
Reality Check: Gamification 10 Years Later
codingconduct
0
1.9k
The Success of Rails: Ensuring Growth for the Next 100 Years
eileencodes
47
7.9k
Understanding Cognitive Biases in Performance Measurement
bluesmoon
32
2.8k
How GitHub (no longer) Works
holman
316
140k
Making the Leap to Tech Lead
cromwellryan
135
9.7k
The agentic SEO stack - context over prompts
schlessera
0
560
Google's AI Overviews - The New Search
badams
0
870
svc-hook: hooking system calls on ARM64 by binary rewriting
retrage
1
25
Applied NLP in the Age of Generative AI
inesmontani
PRO
3
2k
A Guide to Academic Writing Using Generative AI - A Workshop
ks91
PRO
0
160
How Software Deployment tools have changed in the past 20 years
geshan
0
30k
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