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
fs2-io を試してたらバグを見つけて直した話
Search
Chen
December 13, 2024
Programming
0
640
fs2-io を試してたらバグを見つけて直した話
Chen
December 13, 2024
Tweet
Share
More Decks by Chen
See All by Chen
約 5 年のゲーム開発 ~リリースまでがこんなに大変でした~
chencmd
1
630
Scala におけるコンパイラエラーとの付き合い方
chencmd
2
1.3k
Language Server Protocol の歴史について (a.k.a. 考古学者になる方法)
chencmd
1
110
Other Decks in Programming
See All in Programming
ネイティブ製ガントチャートUIを作って学ぶUICollectionViewLayoutの威力
jrsaruo
0
130
2分台で1500examples完走!爆速CIを支える環境構築術 - Kaigi on Rails 2025
falcon8823
3
3.1k
WebエンジニアがSwiftをブラウザで動かすプレイグラウンドを作ってみた
ohmori_yusuke
0
170
私達はmodernize packageに夢を見るか feat. go/analysis, go/ast / Go Conference 2025
kaorumuta
2
490
LLMとPlaywright/reg-suitを活用した jQueryリファクタリングの実際
kinocoboy2
4
670
GraphQL×Railsアプリのデータベース負荷分散 - 月間3,000万人利用サービスを無停止で
koxya
1
1.1k
エンジニアとして高みを目指す、 利益を生み出す設計の考え方 / design-for-profit
minodriven
23
12k
XP, Testing and ninja testing ZOZ5
m_seki
2
280
なぜGoのジェネリクスはこの形なのか? Featherweight Goが明かす設計の核心
ryotaros
7
1k
Introducing ReActionView: A new ActionView-Compatible ERB Engine @ Kaigi on Rails 2025, Tokyo, Japan
marcoroth
3
920
ポスターセッション: 「まっすぐ行って、右!」って言ってラズパイカーを動かしたい 〜生成AI × Raspberry Pi Pico × Gradioの試作メモ〜
komofr
0
950
複雑化したリポジトリをなんとかした話 pipenvからuvによるモノレポ構成への移行
satoshi256kbyte
1
770
Featured
See All Featured
CoffeeScript is Beautiful & I Never Want to Write Plain JavaScript Again
sstephenson
162
15k
Why You Should Never Use an ORM
jnunemaker
PRO
59
9.6k
We Have a Design System, Now What?
morganepeng
53
7.8k
Visualization
eitanlees
148
16k
The Straight Up "How To Draw Better" Workshop
denniskardys
237
140k
GraphQLの誤解/rethinking-graphql
sonatard
73
11k
What's in a price? How to price your products and services
michaelherold
246
12k
Responsive Adventures: Dirty Tricks From The Dark Corners of Front-End
smashingmag
252
21k
Music & Morning Musume
bryan
46
6.8k
Navigating Team Friction
lara
189
15k
Cheating the UX When There Is Nothing More to Optimize - PixelPioneers
stephaniewalter
285
14k
Writing Fast Ruby
sferik
629
62k
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