Yosuke Asai
はい、London Tech TalkのYosuke Asaiです。
Kenさん、今日もよろしくお願いします。
ken
はい、Asaiさん、よろしくお願いします。
Yosuke Asai
はい、ということで久しぶりにホストをやるんですけども、
今日は、Software Mistakes and Trade-offsの第8章の輪読会の収録をやっていきたいと思います。
ということで、この収録の輪読会をしたのが、
たぶん収録している今の1ヶ月くらい前なんで、結構前になっちゃったんですけど、
思い出しながら、その後の学びを活かして何かできたことがあったかとか、
そういうことも踏まえて話ができたらな、みたいなのは思っています。
よろしくお願いします。
Kenさんは、読んだと思うんですけど、今回は参加はしていないんですね。
ken
そうそう、参加できなかったんですよね。
だから、この収録を通して思い出す感じでいこうかなと思っています。
Yosuke Asai
ゲストの紹介を忘れていました、今日てっぺいさんが来ています。
てっぺいさん、よろしくお願いします。
Teppei Iwaoka
よろしくお願いします。
Yosuke Asai
一応自己紹介しておきますか、初めての方のために。
Teppei Iwaoka
はい、そうですね、初めての方は初めまして。
大阪でソフトウェアエンジニアをやっているてっぺいです。
リンドク会は前回のDDIAのときから参加させていただいてまして、
自分の関心からちょっと外れたところの技術の理解を深められたりとか、
参加者の中で交流することで技術を学ぶ影響をいただいたりとかっていうところがあって、
すごく楽しんでリンドク会に参加させていただいています。
よろしくお願いします。
Yosuke Asai
よろしくお願いします。
最近は結構忙しいですか、てっぺいさんは。
大学院もあって仕事もあってどんな感じですか。
Teppei Iwaoka
そうですね、仕事はだいぶ慣れてきて、
徐々に重要度の高いタスクとかを任せてもらえるようになってきて、
すごく楽しくなってきたなっていう感覚ですね。
ken
いいね。
Teppei Iwaoka
あと大学院の方がちょうど今学期が終わるタイミングなので、
ちょっと少し楽になってきたっていうような感じですね。
Yosuke Asai
もう2期目が終わるってことだよね。
Teppei Iwaoka
そうですね、なので3つ授業を取り終えることになるっていう感じになります。
Yosuke Asai
ちなみに何の授業を取ったんですか、今期は。
Teppei Iwaoka
今期はネットワークの授業と、
あとソフトウェアデベロップメントプロセスっていう、
ソフトウェアエンジニアが普通に普段やってるようなことを改めて復習するような内容と、
Yosuke Asai
そんな2つの授業を取ってましたね。
ken
例えばなんですか、ギットの使い方とかCICDとかそういうやつ。
Teppei Iwaoka
本当にCICDまで行かなくて、
本当に基礎的なところをやったような感覚で、
結構簡単だったなっていう印象なんですけど、
本当に一番最初の課題はギットにコミットしてプッシュしてみたいなところから始まって、
最後らへんになってくるとテストドリブンなデベロップメントとか、
アジャイルの開発手法とかそういうところまで学んでいくような感じだったんです。
結構普通にソフトウェアエンジニアとして働いていたら馴染みのあるような内容でしたね。
ken
なるほどね。美経験者とかも想定してるから、
そういうのを一つ挟んどいた方が業務にスムーズに入れるみたいなのも、
きっと想定してるんでしょうね。
そうですね。
てっぺえさん的には簡単かもね。
Teppei Iwaoka
そうですね。個人的には簡単だったし、
評判も結構評価がまとめられてるサイトみたいなのがあって、
そこを見たらわかるんですね。
なんかディフィカルティっていう数字が5段階でいくつかみたいになってて、
それが確か2.2とかそれくらい結構簡単なやつだったんで、
簡単だろうなっていうのは想定してたんですけど、
やった目的としては、この授業はチーム開発が入ってて、
それをちょっと経験してみたいなっていうところがあって参加してみました。
英語とかでちょっとやっていけるか自信がないなっていうところもあったんですけど、
内容的にはたぶんついていけるだろうから、
このちょっと簡単な授業で一発挟んでみようかなみたいなところで1個取ってみました。
Yosuke Asai
ちなみにチームメンバーはスコファイに広がってるんですか?
どんなところに行くんですか?
Teppei Iwaoka
そうですね。
一応タイムゾーンを考慮してチームを組んでくれるみたいで、
なんですけど、香港にいる人が1人、
あとアメリカにいる人が2人っていうような感じでしたね。
どういう考慮をして地理的な組み合わせになってるのかわからないんですけど、
でも全員香港の方と中国人2人とっていう感じで、
アジア系の方が多かったですね。
それも意図してるのかしてないのかちょっとわかんないんですけど、
でも結構新鮮な感じでした。
会社の外で英語で何かプロジェクトを進めてるっていうことを初めてやったので、
ちょっとすごく不安だったんですけど、
なんとなくこの経験を通してやっていけそうだなっていう自信が若干身についたなと思ってます。
ken
その他の3人とは仲良くなりました?
Teppei Iwaoka
なんか仲良く、多少ですね。
1人はすごい日本のカレーに興味があるみたいで、
ken
美味しいカレーの作り方教えてくれないみたいなメッセージのやり取りするぐらいの仲良くなる程度にはなりましたね。
それは仲良いね。
Teppei Iwaoka
ぼちぼちって感じですね。
Yosuke Asai
ロンドンテックトークの開発をしたから初めてじゃないかなと思ったんですけど、
でも確かに外国人とやるっていうのはやってなかったので、
それはまた新しい経験です。
けんさんは風邪ひかれてるって言ってましたけど大丈夫ですか?
ken
週末オンコールだったんですよ。
週末は24時間体制なんですよね。
昔別の収録で言ったかもしれないけど、
ウィークデーは平日は自分のワーキングアワー、起きてる時間、日中だけだから、
深夜カバーしなきゃいけないというのがないんですけど、
土日はみんなで持ち回りで24時間回してて、
2ヶ月に1回ぐらいと頻度は少ないんだけど、
その日は夜中の2時から次の日の2時までカバーするみたいな感じですね。
だから運が悪いと深夜3時とかに来るんですよ、ページが。
ピピピピって言って起きて、うわー来たーって言って、
それでちょっと寝不足になっちゃって、
ダブルパンチという感じで、
収録を1回リスクしてもらったんだよね。
Yosuke Asai
アラートが来なくても寝れないですよね。
ken
アラートが来るかもとものが寝てるとちょっと眠りが遅くなる。
その通りですよ、本当に。構えて寝るから。
Yosuke Asai
お疲れ様でした。
1ヶ月の方はとりあえずないと。
土日の運行以外はこれから。
ありがとうございます。
ということで本題に入っていきたいと思うんですけども、
ken
いきなりちょっと困っちゃうやつだね。
Yosuke Asai
読み飛ばしたくなるような感じはあるでしょうでしたけど、
なんか一般的じゃない内容だったんで、
なんていうか、だってはありましたけれども、
なんてこのデータの分析的なところも、
今のアプリケーション開発とかなり結びつくことが多いので、
やっぱり知っておいた方がいいなっていうか、
こういうところに詳しくなっておきたいなみたいなことは個人的にはすごい思いました。
なんかこの本を読んで、
僕はすごい勉強になったみたいなのありますか、てっぺいさん。
Teppei Iwaoka
そうですね。
なんかこう、
普段の業務であんまりこういうデータ分析系の業務はしないので、
すぐに活かせそうだなっていうところはパッと思いつかないんですけど、
何かそういう業務が今後出てきたときに、
パッとチャレンジ飛び込めるような下準備を作れたなっていう感じはしてて、
データはデータのある場所で計算した方が効率的だよっていうのが
特にここのメインのポイントかなと思うんですけど、
それとかもなんか、
うっかりデータを持ってきてから処理してしまうみたいなちょっとおバカなことをしてしまいかねない
ことかところかなと思うんですけど、
これを知ることでそういう基本的に大事にしておかないといけないことっていうのを
抑えられたかなって思ってます。
ken
なんだろう、こうバックエンド、
この章に限って言うと完全に対象としてジョブロールが違うなと思ってて、
今までの章だったら割とバックエンドディベロッパーとか
フロントエンドディベロッパーとかソフトウェアディベロッパーだったけど、
ここはこの章だけは例えばデータエンジニアとかデータプラットフォームエンジニアみたいな、
あとはスタートアップのSREというかプラットフォームエンジニアリング的な
なんかいう感じになっていて、
例えばこのディベロッパーの方がこの章を読んだときに
なんかどこまでこう、
なんだろうね、勉強になったと感じるかも。
本当にその人の興味関心次第でいいんじゃないかなと僕は思っていて、
別になんかここの書いてるスパークの話とか全然分かんなくても
キャリアを進めていける人っていっぱいいると思うんで、ディベロッパーで。
なんかすごいこうジェネラリスト的な本の書き方をする人だなと思ってて、
なんか自分が好きなこととか得意なことを衝立てで書いているから、
全部の内容を完全に理解しなくても、
僕らが今ブッククラブでやってるように興味ないところはスキップしたりとか、
Teppei Iwaoka
自分が唯一ある経験としてになりますね。
ken
これ面白そうですね。
日時のバッチって言ってるのが、いわゆるAWS Lambda Functionで実行しているところの話。
Teppei Iwaoka
そうですね。
たぶんラムダの中から次のラムダをチェーンしていくような形で、
いくつか中間データを作って最終的な結果にするみたいなことをやってたと思います。
ken
そこで作った中間データってざっくりどういう分け方してたか覚えてます。
たぶんこれがいわゆるシャーディング、パーティショニング的な考え方だと思うんですよね。
たとえばその日時のデータをガッと引っ張ってくるじゃん。
あわりとかで、あわり別に集計して中間データとしたのかとか、
もしくはユーザーのIDか何かから、
たとえばモジュールで常用で適当にパーティショニングしたのかとか、
あとユーザーIDの連番、1から1000、1000から2000とかでしたのかとかって、
たぶんそれなのかそういうことをせずに、
日時データが多分S3にヒットファイルとしてあり、
それをまるっとラムダで取っちゃって、まるっと加工して投げるみたいな。
ここ聞きたかったのは、この観点で今回のショーにもあったキーワード、
パーティショニングとかシャーディング的なことって何かしてたか、
もし覚えてたら聞いてみたいなっていう。
Teppei Iwaoka
そうですね。
これがパーティショニングなのかと言われるとちょっと違う気もしてるんですけど、
具体的にどういう分け方かってすごく明確に覚えてるわけではないんですけど、
どういうふうに請求のデータにつなげていくかっていうところで、
例えば閲覧のデータがレコメンド経由でクリックされたとか、
レコメンド経由で購入されたみたいなことを判定するために、
セッションが何時間続いていて、その中にクリックが起きているかとか、
購入のイベントが起きているかみたいなことを確認した上で、
最終的な請求データにつなげていくんですけど、
例えば全体のログの中から次の段階としてはセッションがつながっているクリックのイベントとか、
そういう感じで分けていっているっていうような感じでしたね。
ken
具体的なところが。
書き用によっては全然インフラコストの上振れしそうだし、
例えばS3の課金モデルってちょっと覚えてないですけど、
あれは単純にストレージ量だけだったかな、書き込み読み込みのネットワーク転送量とかによっても変わってきたか忘れてないですけど、
ラムダも結構メモリ食いそうですし、割と技術力が試されそうな運用設計になりそうですね。
ここらへんのツーリングは浅井くん使ったことあります?S3、ラムダって。
Yosuke Asai
今のときは使ってますけど、
確かにリーカー出してくると、でもエグレスってなんか料金が確かあって、
ラムダのネットワークはコストはなくないはずで、
ただメモリの使用量と実行時間に応じて課金されるという感じだと思うので、
実行時間が伸びたりメモリ使いすぎたりするとやっぱり金がかかっちゃうという感じだと思います。
ken
こういうのってデータのバリデーションとかも難しくないですか?
そういうシチュエーションがあったかわからないけど。
バグ押し込んだときにね。
Yosuke Asai
セーキュレーターに反映されるってことを、
例えばイベントをクリックすると10倍カウントしちゃったら
請求も10倍になっちゃうみたいな、
そういうのってどうやって対応するのかっていうのが気になります。
Teppei Iwaoka
たぶん賢いバリデーションっていうのはあんまり入ってなかったと思ってて、
最終的に出た結果をお客さんに確認してもらって、
それをお客さんが承認して初めて実際請求書を出すみたいな感じになってて、
そこは割と人間の目で頑張っていたのかなと思っています。
Yosuke Asai
DDIAのバッチプロセッシングとかのショーを思い出したんですけど、
バッチだったらやり直しができるみたいなのがあって、
もしバグを押し込んだりしてデータが間違ったりとか、
途中失敗してももう一回やり直せますみたいなのがあって、
そういう機構とかあるのかなみたいなのが、
ここまで詳しくわかんないかもしれないですけど。
ken
元データを削除しなければ、中間データっていうものなんで、
Linuxっていう添付ファイルみたいな感じなんで、
いくらでも上書きすればいいと思うんですよね。
元データさえちゃんと保存していれば。
ただ問題は現実問題、あんまりそれをやりまくっていると、
バッチを何回も回さなきゃいけないし、
運用も大変だし、ユーザーからの信頼も、
また間違ってますけどみたいな感じになっちゃうし、
回すたびにインフラコストもかかるんで、
あんまりスマートじゃないよねっていうのがあるので。
Teppei Iwaoka
実際に間違っていた処理が、
細かい計算でとかっていうよりも、
この月に請求を出すかどうかみたいなフラグを入れて、
初めて請求データが作られるみたいなことがあったりするんですけど、
それを運用側が付け忘れていたから請求データが作られてなくて、
その顧客のために再度回し直してみたいなことはやってましたね。
なのでちょくちょく回し直しがあったのと、
あとさっきの話だと、クリックのデータ、ログ自体がちゃんと出てて、
その元データがあって回し直しは全然できるんですけど、
ログ自体が10倍出ちゃっていたら、
それはちょっともうどうしようもない状況なのかなと思いますね。
ken
そうだね、確かに。
だから中間データの書き込みと読み込みをするそれぞれのラムダで、
ちゃんと単体テスト的なのを書いてコードで担保しつつ、
なるべく別のバリデーション用のラムダを書いたりとかして、
ユーザーに出すまでに自分たちで検証する術を書くとかになるんですかね。
Yosuke Asai
この内容ってやっぱりメモリを使おうっていう、
この後半の観点からちょっと逆を言ってるとは言わないですけど、
メモリを使ってメモリ上で処理していくというよりは、
毎回S3に読み込んで書き出してみたいなのをやってると思うんで、
そういう点で改善できそうだなみたいなところって、
Teppei Iwaoka
てっぺいさんなんかありますか、この章を。
そうですね、ちょっと料金がどうなるのかっていうのが一つと、
あとスピードがどうなるのかっていう二つが結構大事なのかなと思ってて、
メモリを使うようなスパークみたいなのを使ったときに、
S3に毎回置いて読み書きしているときよりも安くなるのかっていうのはちょっとわからないので、
もしそこが安くなるなら一つそこは改善できるのかなっていうところと、
あとメモリを使ったスパークみたいな処理を使うメリットとして、
ディスクのときよりも素早くなるっていうところがあるのかなと思うんですけど、
今回のケースで言うと1日1回とか回す程度の処理で、
それが全然1日で収まりきらないとかっていう感じでもなく、
何回も別に回し直してもそんなに困ることもないみたいな状況だったので、
速度っていう意味ではそこまで改善する必要もなかったのかなっていうふうに感じてますね。
Yosuke Asai
ありがとうございます。
ken
ビジネス要件がそこまで厳しくないのであれば、
エンジニアリングリソースをかけて作り込まなくてもいいよねっていうのは本当にその通りだと思いますね。
ちなみにこういうのっててっぺいさん好きな感じですか?
それとも面倒くさいですか?
どういう開発業務が好きなのかなと思って。
Teppei Iwaoka
そうですね、でも好きですね。
ただ経験はあんまりなくて、前の会社でこの話とかは、
わりと技術の深いところが求められるところだったなっていうのが唯一あるぐらいの経験なんですけど、
世界であんまりこういう経験はしてきてないので、どちらかというと今の業務とかでもそういう経験があんまりなくて、
より深いところに携わっていきたいなみたいな思いは常にありますね。
ken
いいっすよね。だから多分本当にコメント書いてくれてるけど、
てっぺいさんがこれをやった頃はこういうの初めてだし楽しいなと思ってやってたけど、
多分それから経験も積んでDDI名を読み、大学院でも似たようなことを勉強したら、
もうその時作ったシステムが日時バッチで物足りないみたいになってきた感じだと思うので、
これが例えばリアルタイムで求められるようなシステムを作るとか、
そういったところにチャレンジしていきたいなってなっていくのは自然ですよね。
Teppei Iwaoka
そうですね。ちょっと話それてしまうんですけど、
大学院の授業の方ではそういう分散処理とか、
ハイパフォーマンスコンピューティングとかそういう授業とかも、
あとクラウドコンピューティングとかそういうちょっと難しそうな授業もこれからあって、
そういうのも積極的にチャレンジしていこうかなと思ってますね。
ken
いいっすね。
分散システムここら辺の学習の一番の課題って、
個人開発めちゃくちゃしづらいと思うんですよ。
そんなコストもかけられないし、
あとやっぱり学校もテッペさんが言ってるね、
大学がどこまで支援してくれるかだけど、
例えば大学院とかコーセラーのクラスによっては、
フリーで使える枠とか提供してくれるけど、
かといってどこまで自分でかけるかってのが違うから、