藤原氏の自己紹介と、担当した章について

草野翔氏(以下、草野):著者紹介にいきたいと思います。左からの順番でいくので、まずは藤原さんお願いします。

藤原俊一郎氏(以下、藤原):はい。藤原です。(スライドを示して)カヤックという会社のSREをやっていて、ISUCONをずっと昔からやっています。技術評論社さんから話がきて、メールで「ISUCONとWebパフォーマンスチューニングの本を書きませんか?」みたいなことを最初に言われたので、言い出しっぺ的な立場です。

ISUCONは優勝を4回していて、2022年を含めて出題も3回することになっていて、どれだけISUCONが好きなんだという感じなんですけど。

最初に技術評論社さんから声をかけられて「書きませんか?」と言われて、書いてみたいと思いつつ、見てわかるとおり非常にいろいろなことを書かなければいけなくて、「これを1人で書くのは無理だな」と思いました。

ISUCON運営SlackというすごいSlackがあって、過去のISUCONの運営や協力してくれた人が入っている、恐ろしい人たちがいっぱいいるSlackですが、そこで「書きたい人いませんか?」と言ったら、この5名が「興味あります」と言ってくれたので、結局6人で書きました。

(スライドを示して)僕が書いたのは3つで、3章と4章と付録Aを書いています。僕が最初に人を集めた時に、「これなら書けるぞ」とそれぞれ言ってもらって、それで僕がそれらじゃないことを書こうかなと思いました。負荷試験をやるという大事なところを、仕事で負荷試験をやるのでもともと書きたかったのですが、そのあたりの話を書いています。

あとから出てくるcatatsuyさんが作った「private-isu」という、社内ISUCONのアプリがあるのですが、それを例にして負荷をかけて、実際に速くしていくようなことを書いています。

あとは「攻略実践」という、「本に書いてあることだけを使って(スコアを)500倍にする」という付録もあるので、これもおもしろいと思います。これで終わりです。僕は以上です。

馬場氏の自己紹介と、担当した章について

草野:はい、ありがとうございます。ということでバンバンいきますよ。次は馬場さんよろしくお願いします。

馬場俊彰氏(以下、馬場):はい。馬場といいます。(スライドを示して)TwitterのIDは@netmarkjpというものでやっています。ISUCON歴は、第1回から参加していて、ISUCON大好きです。第1回にプロジェクターを持ち込んで参加したのは、たぶん我々が初めてだと思います。

「SELinux=Enforcingで勝つんだ」と言って、一応入賞はできました。第1回なので11年、12年前に@matsuuさんと@ishikawa84gさんと一緒に参加して、途中でちょっといろいろ組換えも発生しましたが、今も当時のチームメイトと一緒に出ています。

第1回の話をしましたが、当時はレギュレーションもまだ緩いし、雰囲気も非常に緩かったんですよね。なので、プロジェクターを持ってくる人があまりいませんでした。ディスプレイ持ち込みとかもなかった中で、エクストリームな我々は、個人でプロジェクターを持っている人がいたので、その人にお願いしてプロジェクターを持ってきてもらいました。

レギュレーションが緩かったので「映画でもかけるか」と言ってDVDを流そうかと思っていました。我々の業界なので、Facebookのソーシャルネットワークを借りてきて流そうとして、当日の朝に@matsuuさんに借りてきてもらおうとしたら、全部貸出中でした。なのであえなくfailできませんでした。今だったら反則負けですね。当時はまだ(その)レギュレーションはなかったと思います。

第1回は午前中は非常に好調で、昼時点でトップでしたが、1時間のんびりご飯を食べて、帰ってきたらトップじゃなくなっているという苦い経験をしました。第1回で優勝したのが藤原さんで、「やばい、こんな人がいるのか」と思いましたね。藤原さんは第2回も優勝なので、もうその時点でレジェンド扱いされていたかなと思います。

(スライドを示して)私が担当したのは第1章です。最初の章で「チューニングの基礎知識」を担当しました。本当に基本の「き」から基本の「ん」までタイトルも付けています。実践できるようになると、ISUCONに参加して「できることがない、どうしていいかわからなかった」が「時間が足りない」に変わるんじゃないかなと思っています。

戦いの土俵に立つための章かなと思っています。先ほど話しましたが、藤原さんは2回連続で勝っているんですよね。なので、もうなんというか、ぐうの音も出ないわけです。「勝てる人は毎回勝てるんだ」ということがハッキリしちゃったわけです。そこからヒーローが生まれて、「じゃあどうやったらそれに近付けるか」ということを考え始めるわけですよ。

「勝てる人は毎回勝てるんだから、方法論なり何かあるんだろう」と、ストーキングばりに観察をするわけです。直接お話できる機会もあったりしたので、いろいろお話を聞いたり、どうやったらそこにたどり着けるか・近付けるかをいろいろずっと考えてやってきたわけです。

それが方法論になって理論ができて。理論ができれば実際にできるわけではありませんが、理論がないと実践は完全に運になってしまうので、その理論を固めていきたいということで。そういうのがずっと好きなんですよね。取締役CTOとかをやっていたので、「最低限の結果は絶対に出したい」といことをずっとこだわってやってきていて、その成果というか、集大成みたいなものがここにできたという感じです。

同じ流れで『Webエンジニアが知っておきたいインフラの基本』という本も書きましたが、こちらのほうがもっとチューニングに特化して書けたので、よかったなと思っています。この第1章だけではなく、この本全部を何度も繰り返していくと、きっとちょっとずつ強くなれるんじゃないかなと。自分もなりたいなと思っています。という感じで、私は以上です。

中西氏の自己紹介と、担当した章について

草野:ありがとうございました。じゃあ次にいきますよ。whywaitaさんよろしくお願いします。

中西建登氏(以下、中西):中西といいます。(スライドを示して)サイバーエージェントで働いています。TwitterのIDは@whywaitaです。肩書きにCloudMakerと書いてありますが、これは弊社の名刺システムに肩書きを書くところが自由記述欄になっていたので、バックエンドエンジニアとかインフラエンジニアとかをそのまま書くのはおもしろくないなと思って、CloudMakerと書き、それを無限に使い続けています。

ISUCON歴は書いていないのですが、最初(に参加したのは)はISUCON5で、たぶんこの中では1番若輩者かなと思います。そのあとISUCON8で学生時代に総合優勝して「すごい!」とメチャクチャ言われたのですが、その後たった1人で学生で総合優勝するすごい人が出てきたので、完全にどうでもよくなった感じです。

そのあとは、ISUCON10の時点で社会人になっていました。この時にプライベートクラウドのチームにいて、CloudMakerという名前のとおりクラウドを作っていて、そこでインフラ提供として参加しました。なので、学生時代にやっていたコミュニティに還元できたかなと思っています。

ISUCONを含め、いろいろなインターネットコミュニティに顔を出したりしていて、(ISUCONも)おもしろいコミュニティだと思っています。

(スライドを示して)「モニタリング」と「OSの基本知識とチューニング」という2つの章を担当させてもらいました。モニタリングはISUCONもそうですし、みなさんがWebアプリケーションを運用する中で「モニタリングで必要」ということはわかるのですが、「実際にどうやればいいんですかね」とか。実際に運用してみた時に確かにグラフは出るものの「このグラフは結局何ですかね」みたいな感じのことを悩む人が、けっこういるんじゃないかなと思っています。

そういった方に向けて、「モニタリングはそもそもどういうことを目的にするんだっけ」というところや、あとは実際に運用している時に「こういうところが間違えがちだよ」とか「詰まりがちだよ」というところを書かせてもらいました。9章はOSの基礎知識で、今回はLinuxに注力して書かせてもらいました。

最近だと、ISUCONぐらいでしかOSのパラメータの設定はしない人もけっこう多いと思いますが、意外とそうでもない(場面も多い)と思っていて。「OSはそもそもどういうことをやっているんだっけ」という取り組みを紹介したり、プラスして、ISUCONやいろいろなWebアプリケーションの運用の中で、「具体的にこういうところをチューニングするとけっこう速くなるよ」とか、「ISUCONのスコアも上がるよ」といったところを書きました。

なので、この2つはみなさん取っつきづらいというか、「あまり知らないんだよね」という人も多いと思いますが、そういったかたの入門になればいいかなと思っています。以上です。よろしくお願いします。

長野氏の自己紹介と、担当した章について

草野:よろしくお願いします。次に行っちゃいますよ。kazeburoさんです。よろしくお願いします。

長野雅広氏(以下、長野):長野といいます。(スライドを示して)Twitterは@kazeburoです。今はさくらインターネットという会社で、waita君と同じようにクラウドを作っています。ISUCON歴は、知っている方も多いかと思います。(ISUCON1というように)1はついていなかったと思うのですが、最初のISUCONで@tagomorisさんが「こういうことをやりたい」ということで、「おもしろそうだね」と一緒に始めました。(@tagomorisさんは)たぶん今日(のイベントを)見ていると思います。

941さんを誘って、あとはその時にライブドアの役員をやっていた伊勢さんに「やっていいか」と聞いて始めたのが最初のISUCONです。最初のISUCONと、その次の年にやったISUCON2でも問題を作成して、ISUCON3では藤原さんのところが問題を作ってくださりましたが、ISUCON3とISUCON4で優勝をして、そのあとISUCONの予選落ちを何回もして、ISUCON9でもう一度予選の問題作成をしました。

先ほども出てきましたが、今回の問題の執筆をする前に、catatsuyさんが作った社内ISUCONのprivate-isuに一生懸命取り組んで、それから書き始めています。ISUCONが大好きで、(ISUCONが)終わったあとに環境を自分で用意してずっと一生懸命やっていて、「その日の最終的なスコアの何倍が出たぜ」みたいなことをやることが好きです。

実際にprivate-isuでもすごくやり込んでいて、サーバー環境によっても違って数字が前後するし、本の中では3,000ぐらいの初期スコアになるのですが、最終スコアとして110万ぐらいまで上がり続けるまでやり続けました。

実際に本を書くので後半のやり込みはほとんど無駄ですが、最初はインデックスを作ったり、N+1を丁寧に潰すようなことをやり、後半はキャッシュしてひたすらデータベースをできるだけ使わないみたいな。「何の本を書くんだっけ」みたいなことをやりつつ、内容を詰めて本を書きました。

(スライドを示して)担当したのは第5章の「データベースのチューニング」です。データベースは、何かしらちゃんとしたものを書こうとすると、すごく広大な沼です。正しいことを書こうと思ってしまうと、それだけで何十ページも必要になってしまいます。膨大な知識が必要になってくるので、話を聞いて、最初に何を書こうかと非常に悩みました。

(スライドを示して)今掲げているデータベースの種類と、その中でいわゆるMySQLやPostgreSQLのRDBMS(Relational DataBase Management System)だけではなく、memcachedや最近のNewSQLと言われているものを紹介して、その次にデータベースの負荷を調べる方法を書いています。

waita君のところでモニタリングというキーワードが出ていましたが、データベースに特化するところで、MySQLのSHOW PROCESSLISTやスローログ、あとは書籍にはあまりなったことはない、少なかったと思われるpt-query-digestの作り方・使い方を紹介しています。

あとは、それらからどうやって問題を発見して解決するかというところで、インデックスの使い方やN+1問題の発見と解消、その他の話題について書きました。

過去のISUCONでデータベースがない年もありましたが、だいたいデータベースが最初のボトルネックになっていることがあって。インデックスやN+1問題をどこで見つけて何をしたらいいかという最初の一歩が、この章を読むことでわかるかなと思っています。

何をすればいいかまったくわからない状態から抜け出して、ISUCONをもっと楽しんでいただけるような感じになればいいなと思って書きました。ということで以上です。

金子氏の自己紹介と、担当した章について

草野:ありがとうございます。次はcatatsuyさんです。よろしくお願いします。

金子達哉氏(以下、金子):お願いします。(スライドを示して)PR TIMESという会社でCTOをやっています。ISUCON歴は書いていませんが、ISUCON4が初出場でした。その時は新卒でしたが、kazeburoさんたちのチームに敗北して、僕が準優勝だった思い出があります。

そのあとにISUCON6の本選とISUCON9の予選の出題をしました。ISUCON9の予選は、kazeburoさんと一緒に出題しました。これは愚痴ですが、今回書籍にGoのgolang.org/x/sync/singleflightを使ったコード例を載せたのですが、このライブラリがinterface{}を使用することがすごく嫌なので、genericsを使って型を指定できるようにしてほしいです。

Goの公式のIssueに一応立てたのですが、特に進展はありません(登壇時点)。ちょっとパッチをあてればすぐにできるので、なんとかしたいと思っています。

(スライドを示して)僕が書いたのは6章、7章、8章です。先ほどの藤原さんと近くて、動き方として、他の人が書いている章にはなく、「ISUCONの問題を解く上で必要なところは何だっけ」というところで書く章を決めた感じでした。

Webアプリケーション開発をやったことがあるけれど、どうすれば高速化できるのかわからないような人向けの内容だと思っています。

というのも、この本にはアプリケーション側の話は5章のN+1クエリの解消と、あとは7章・8章以外にそんなに書かれていないと思うので、アプリケーション側について知りたいと思ったらこのあたりを読むといいのかなと思っています。

「クラウドだから、今時そういう知識はいらないよね」みたいなことを言っている人がたまにいるのですが、そういう人に「そうじゃないんだよ」とわかってもらうために、8章は「CDN(Content Delivery Network)やオブジェクトストレージサービスを使う時もこのあたりの知識がいるよね」という話を書いたつもりです。

ISUCONの問題を解く時に、他の章では説明のない解法や疑問点を、「キャッシュってどうやって使うんだっけ」とか、「リバースプロキシ、Nginxはよく見るけど、そもそもなんで挟むんだっけ」といったところを解消したりとか。あとは、実際にサービスを開発する上で陥りやすい問題に触れたつもりなので、そのあたりをやっていければいいかなと思います。

(スライドを示して)ちょっとこれは迷ったことで、Nginxの細かいTipsやGoの細かい話を書こうかなと思ったのですが、あまり細かい話を書いても本の趣旨と異なるのかなと(思い)、極力他のソフトウェアや言語でも通用する話になるようにしました。ただ細かい話を知りたい人もいるかもしれないので、コラムでいくつかは拾うかたちにしました。

Goだけではなくて、PHPや複数言語の紹介をしています。ISUCONで活用できるTipsも紹介しつつ、実務で活用できる知識もけっこう意識していて、先ほど言ったセキュリティ・CDN・オブジェクトストレージの使い方についても言及しています。ただ、特定のCDNの使い方を解説するのも書籍の立ち位置上難しかったので、Nginxの挙動を中心に紹介をしています。

7章のキャッシュの話も、あまり詳しくない人にとっては「こんな方法もあるんだ」みたいな感じで参考になるのではないかなと思っています。以上です。ありがとうございます。

草野氏の自己紹介と、担当した章について

草野:ありがとうございます。次は僕ですね。rosylillyといいます。みなさんよろしくお願いします。肩書きがとても長いので端折っていますが、宇宙海賊合同会社という会社の代表をやりつつ、株式会社ハンマーキットでCTOをやりつつ、株式会社Tech ConsiglieでCTOをやりつつ、株式会社プロモータルで相談役をやりつつ、IPTech特許業務法人の技術顧問をやっています。以上のはずです。

ということで、ISUCONはISUCON10からなんやかんやで運営のお手伝いをしています。ISUCON10の時は作問、ISUCON11の時はアドバイザーと動画作りで、ISUCON12もお手伝いでちょっと関わっています。事前講習をなぜか毎回やっていて、(ISUCON10からISUCON12の)この3回はやっているので2022年も事前講習をやります。みなさん参加してもらえたらうれしいです。

それ以外だとISUCON4で出題したり、ISUCON5で準優勝したり、ISUCON9で優勝できてメチャクチャうれしいというエモいブログを書いたりしていました。

今日の愚痴は、みんなが適当にスライドを書いたりしたやつが「あとで僕が司会なのでお化粧しますね」と言って適当に渡していたら、みんながフォーマットをバラバラに書いてきて超大変でした。それらしくまとまった感じにしましたが、ぜんぜんまとまっていなくて「大丈夫かな」と感じながらやっています。「いいんだ!」「OK!」「大丈夫!」という感じです。

(スライドを示して)担当した章は付録Bの「ベンチマーカーの実装」です。ISUCON本の中ではここだけがかなり異質で、「ISUCON」という名が付いているだけあるなという章です。みんなが「パフォーマンスチューニングをしてアプリを速くするぞ」と言っている話の中で、たった1章だけ「その速くなったやつをとにかく負荷をかけて落とそう」という、「いかに効率的にWebアプリケーションを落とすか」という話をしている章です。

「この話に僕はいらないんじゃないか」と3回ぐらい(みんなに)言っていて、読む人がいないという話をしたんだけれど、(みんなが)「いる!」とすごく言うから、他の著者のみんなに応援されながら書きました。

「この世に対象読者はいないでしょ」と思っていたら、フラゲ組の人がもうすでに1人いて、「これのおかげでベンチマークが書けます! ありがとうございます!」とメチャクチャ言われていて、「あ、すごい。対象読者がいた」と思ってすごく感動しました。

ただ、ベンチマーカーの作りを知るのは、どこに何が起こるか予測できるようになることとほとんどイコールなんですね。ISUCONの運営をするとISUCONが強くなるということはよく言われていることですが、その中でももっとも効くことが、ベンチマーカーを書いてみることだと僕は思っています。

実際に効果が出るので、ベンチマーカーを実装してみてどういう挙動になるかとか、どういう風に負荷を高めることに工夫がされているかを知るのは、逆説的にユーザーストーリーを追うことになって、実際のWebパフォーマンスに対してどうアプローチするのかにも効いてきます。

ベンチマーカーの作り方から学ぶWebアプリケーションを速くする方法もあると思うので、みなさんぜひ読んで、ベンチマーカーの実装が増えるといいなと思っています。ベンチマーカーを作れる人が増えると、ISUCONベンチマーカーが増えます。

僕は人生の趣味としてISUCONのベンチマーカーを読み続けるという異常な趣味があって、僕はずっと誰かが書いたベンチマーカーの実装を探しているので、みなさんがGitHubにベンチマーカーの実装を上げてくれると僕がすごく喜ぶということで。みなさんのベンチマーカーの実装をお待ちしています。

本日は司会進行ということで、なぜ司会進行かというと、先ほどお話したような内容を書いた人だからです。みなさんにいろいろ知ってほしいのは、ちゃんとWebアプリケーションを速くする話です。

僕は負荷をかける話をしないので、今日僕は著者陣にむちゃぶりをして負荷をかけることで、著者陣がすごく苦しむ姿を見ながら、楽しくニコニコとコーヒーを飲んだりしようかなと思っています。みなさんよろしくお願いします。

(次回に続く)