Slide 1

Slide 1 text

小さな疑問を大事にすると 成長に繋がる Jun. 9th, 2024 Satoru Takeuchi X: satoru_takeuchi 1

Slide 2

Slide 2 text

はじめに ● はなすこと ○ ソフトウェア技術者として成長する考え方の一つを紹介 ○ 参考書をじっくり見る、大きなソフトウェアを作るといった大がかりなことではない ○ 日々のちょっとしたことが後で役立つことを過去の経験をもとに紹介 ● 主なターゲット ○ 技術者として成長したいが、うまくいかないと思っている人 ○ それでいて、なんとなく日々を過ごしてしまっている人 2

Slide 3

Slide 3 text

基本的な考え方 ● やること ○ 日々の小さな疑問が生まれたときに、そのままにせず調べる ● 効果 ○ 調べたこと自体で知識が増える ○ 達成感が得られる ○ その後思わぬところで役立つこともある 3

Slide 4

Slide 4 text

概念図 もとの状態 4 既存知識

Slide 5

Slide 5 text

概念図 もとの状態 好奇心が湧く 5 既存知識 ここがわからん… 既存知識

Slide 6

Slide 6 text

概念図 もとの状態 調べて理解 好奇心が湧く 6 既存知識 新たな 知識 ここがわからん… 既存知識 既存知識 完全理解!

Slide 7

Slide 7 text

概念図 もとの状態 調べて理解 好奇心が湧く 別の時に… 7 既存知識 新たな 知識 ここがわからん… 既存知識 既存知識 完全理解! 新たな 知識 既存知識 ここがわからん… 別の機会に 得た知識

Slide 8

Slide 8 text

概念図 もとの状態 調べて理解 好奇心が湧く 別の時に… 8 役立った! 既存知識 新たな 知識 ここがわからん… 既存知識 既存知識 完全理解! 新たな 知識 既存知識 ここがわからん… 新たな 知識 既存知識 新たな知識 別の機会に 得た知識 完全理解!

Slide 9

Slide 9 text

実例 ● 疑問 ○ lsblkというブロックデバイスをリストするコマンドの仕組みが気になった ● 調査結果 ○ lsblkの仕組みが明らかになった ● 数か月後 ○ lsblkの実行結果を利用する別コマンドの挙動で困ることがあった ○ 過去の知見を生かして対処できた 9

Slide 10

Slide 10 text

疑問に至るまでの流れ ● 背景 ○ 自分は業務でRookというCeph(分散ストレージ)を管理するツールのメンテナをしている ■ https://github.com/rook/rook ○ RookはCephが使うOSDというデータ構造をブロックデバイス上に作る ■ 1. lsblkコマンドを実行してデバイスのタイプ (e.g. disk、part)を調べる ■ 2. Cephがサポートしているタイプであれば、 OSDを作る ● 疑問 ○ lsblkコマンドはTYPEフィールドの値をどこから持ってきているのか ? 10

Slide 11

Slide 11 text

調査した 1. 気になるから調べてみよう(ここ重要) 2. ソース見ればわかるやろ a. 見るべきところは数十行なので 30分くらいで読み終えられた 3. 完全理解してスッキリ ● 📝 lsblkの挙動を詳しく説明している過去動画 ○ lsblkのtypeフィールドのしくみ ○ https://youtu.be/x_QSV1tM3qY 11

Slide 12

Slide 12 text

それから数か月後… ● ブロックデバイスのI/O障害をエミュレーションするという発表をした ○ これは仕事じゃなくて趣味 ○ blkidのソースを見たことは忘れていた ○ 📝 発表資料 ■ device mapperによるディスクI/O障害のエミュレーション ■ https://speakerdeck.com/sat/ozhang-hai-noemiyuresiyon ● 発表後にLTをしたくなった ○ I/O障害のエミューレーションが実際に役に立つことを紹介したい ! ■ 発表は機能紹介だけに留まっていて、実例が無かった ○ イベント中にライブで LT資料を作ることにした ■ Cephのデータの一部を壊しても、元の状態に復旧できることを示そうとした 12

Slide 13

Slide 13 text

問題発生 ● おさらい: RookはCephが使うOSDというデータ構造をブロックデバイス上に作る 1. lsblkコマンドを実行してデバイスのタイプ(e.g. ディスク、パーティション)を得る 2. Cephがサポートしているタイプであれば、OSDを作る ● I/O障害エミュレーション機能を使うと、ブロックデバイスのタイプが、Cephによって サポートされないものになってしまう 13

Slide 14

Slide 14 text

解決策 ● デバイスマッパー設定時にパラメタをうまく設定すると、I/O障害を発生させる対象 のブロックデバイスのタイプを任意のものにできる ○ lsblkのソースを読んでなければわからない実装依存のハック ○ 実運用ならやらないが、今回はサンプルのデモなので OKと判断 ● パラメタを設定してブロックデバイスのタイプをCephがサポートするものに見せか けたところ、うまく動いた ○ スカッとした&「あのときのことがこんな形で役に立つとは」と感動 ● 📝 技術的な話 ○ 分散ストレージはすごいぞ ○ https://speakerdeck.com/sat/fen-san-sutorezihasugoizo-4af53638-99ea-416b-9841-66ccbc7e4 5cd 14

Slide 15

Slide 15 text

まとめ ● 日々生まれる小さな疑問を放置せずに調べてみることで新しいことがわかる ○ 疑問は小さければ小さいほど楽 ○ やってるうちに一筋縄ではいかないとわかったら中断するのも手 ● これを繰り返せば技術者としての引き出しの数はどんどん増えていく ○ 調べた当時は小さなことがわかるだけでも、将来につながる ● 書籍などで体系的に学ぶのが苦手な人にはとくにお勧め ● 注意 ○ 常に成長し続けなくてはならないわけではない ○ ずっと成長成長言ってると疲弊してしまうのでほどほどに 15