「開発要件を変えたい」と思うことはあるか

草野翔氏(以下、草野):ここからはTwitterでみなさんに書いてもらった質問などに答えていきたいなと思っているので、いったんフリーテーマでいろんな話をしていきます。みなさん何か気になったやつありました? 「これの話をしたい」みたいなやつはありましたか? ないなら僕が拾います。

中西建登氏(以下、中西):どうぞ。

草野:拾います。「ISUCONを解く時に、自分がそのアプリをゼロベースだったらどう作るかと考えることがあるなぁ」という話があります。みなさんゼロベースでISUCONを解いて「この問題を作り直したい」とか、「この問題を根本的にやめたい」みたいなことはけっこうあるかという質問をしたいんですが、どうですか? 

ISUCON本で触れなかったすごい大事な点として、要件を変えるというのがあると思います。

(一同笑)

草野:「そもそもページャーを出すのやめよう」みたいな。「続きを見る以外のページングをやめよう」みたいなこともあると思うのですが、みなさんどうですか? 「開発要件を変えたいな」ということはあったりしないんですか?

藤原俊一郎氏(以下、藤原):常にそれはあるでしょう。

金子達哉氏(以下、金子):実際にはメチャクチャありますよね。

藤原:実際の業務だと、要件をいじってゼロにできるんだったらそれに越したことはないので、コードを直すよりそちらを第1に考えます。

草野:そういう時に出がちなものはあるんですか? この要件を書いて入れるとキツくなりがちな要件。

金子:ページャーとかはあるあるじゃないですか?

草野:ページャーはあるあるだよね。あとはなんだ。

金子:ページャーで真面目に出そうとするとそこで詰まっちゃったりするので、「バカページャー」と僕は呼んでいました(笑)。あえて手抜きの実装のページャーを出すという。

草野:バカページャーはどう作るの? 何をしないの? 「次へ」があるだけ?

金子:あまり覚えていない。次のページがあると書いてあるのに、実は次のコンテンツはなかったりとか。

(一同笑)

金子:そのあたりのページ数とかが微妙に合っていなかったりとか、チェックがけっこう適当みたいなものはあるある。

草野:なるほどね。根本的にやめたいことで「gRPCをやめたい」。gRPCをやめたい人がいるのか。おもしろいな。馬場さんの章に書いてあるんですか?

馬場俊彰氏(以下、馬場):「もうその項目を画面に表示するのをやめたらいいんじゃない?」とか。

(一同笑)

馬場:「ここで『いいね』の数を出さなければいいだけじゃん」とか、「コメント数とかいらないでしょう」ということがやっぱりあるじゃないですか。そういうのを削るだけで圧倒的に有利になることもあるので、実務ではそれを(要件を変えることを考えましょう)ということは書いてありますね。

藤原俊一郎氏(以下、藤原):ISUCONでいうと、昔『クッキークリッカー』的なゲームが本選のお題に出た時があって、その時にものすごく厳密にCookieの数を数えるので、BIGINTの計算が厳密じゃなきゃいけないんだけれど、下のほうの桁はもはや画面に出ていないんですよ。指数表記になっていて、それを指数表記で計算するのでもベンチマーカーに怒られるんですよ。

「こんなん指数表記でいいやん」って思ったこともありますね(笑)。「浮動小数点で計算してもいいんじゃない?」みたいなことは思ったことがあります。

草野:なるほどな。最近やりたくないこと。なんだろう。SPAになってきたから人の名前は表示したくないのはマジでありますね。ログインしているか・していないかだけにしたい。

金子:それはCDN(Content Delivery Network)でキャッシュしたいとかじゃないですかね。

草野:そうそう。どんどんCDNでキャッシュできるパーツをとにかく増やしたい気持ちになる。とにかく特定の人にだけ見られる投稿をやめたい。パブリックかそうじゃないか、どちらかにしたい気持ちが僕はすごくありました。

金子:それはアプリケーションの重要な要件だったりするので。

草野:そうなんだよね。

馬場:本当に重要なやつはいいですけどね。「どちらでもいいんじゃない」という場合もあるので。Twitterに(コメントが)ありますけど、「全部で何件ですということを、1の位まで必要か?」というのはありますね。

草野:1の位まではいらない気はしますけどね。「『いいね』の件数とか、過去にツイートした件数とかいらなくない? あれいる?」と日々思います。

初心者向けのアドバイス

草野:他に「初心者向けのアドバイスを何か1つでもいいのでお願いします」というコメントが来ています。初心者向けのアドバイスをみなさんお好きな順番でどうぞ。

金子:それこそISUCON本を読んで、private-isuを解いてみてほしいです。

藤原:private-isuはいいですね。

金子:private-isuは初心者向けにしてあるので。

馬場:あとは事前講習。

草野:事前講習をやっています。ハンズオンに参加してね。

金子:そういう人は座学だけ聞いても、ハンズオンまで参加しないと「なんかよくわかんなかったな」で終わりそうなので、意味はないんじゃないかなと思っています。

草野:座学で一応役立つようには書いているけど、なんでわからないかわからない状態はやはりキツイので、何か1問解いてみるのは事前講習でもメチャクチャおすすめしています。とりあえず何か1問。

藤原:やはりコードをGitHubなり何なりでちゃんと管理をして、変えてプッシュして、デプロイして再起動して、ベンチをかけてスコアが出るような流れを回せないと、まず何もできないので、それだけはできるようになってから参加したほうがいいと思います。

まず「SSH(Secure Shell)って何ですか?」と聞いているとたぶん時間の無駄。当日の時間がもったいないだけなので、そういう素振りはやってから参加するのは最低限してほしいかなとは思います。

中西:先ほどの話にもありましたが、実際に手を動かしてみるのにプラスして、最初にやることは決まっていると言いつつ、「過去にこれを最初にやっていい感じにスコアが上がったから、今回のこの問題に適用できる」と思って突っ込んでみると、「そんなことはぜんぜんありませんでした」ということはわりとよくある話だと思います。

そういったスッと手を動かせるような武器というか、ツールキットみたいなものを何個か持って、「どうやってそのツールキットの一つひとつを適用するんだろう」ということを無意識にというか、スッと手が動くようになると、ファーストステップが踏みやすいのかなという感じはします。

馬場:それはdstatとかpt-query-digestとかそのあたりの(ツール)ですか。

中西:そうですね。そういったツール類もそうだし、「ここが詰まっていそうだな」というものがスッとわかってスッと直せるみたいな。まぁそんな簡単に直るものは少ないんですが(笑)。

(一同笑)

藤原:スッとわかったら苦労はいらない。

馬場:だからこの本の付録Aがすごくいいんですよね。自分で考えながらやりつつ、「藤原さんは同じ情報から何を拾っているのか」という目の付けどころみたいなのを、見ながらわかるようになっています。

金子:ISUCONを解いて、「なんかやろうとしたけどちょっとわからなかった」みたいな人は、たぶん付録Aから読んだほうがいいんじゃないかなと、僕は個人的に思っています。付録Aから読むと、「こういう知識がないと進めないんだ」ということが最初からわかります。

付録Aに、「この仕様についてはこの章に書いてありますよ」と全部書いてあるので、「そうしたらこの章を読んでみよう」みたいになると思うんですよね。だからやってみたい人は付録Aから読むと意外といいかなと思っています。

藤原:ISUCONの競技の雰囲気がよくわからないみたいな人はそうですね。そうすると流れがなんとなくわかると思うので。

草野:なるほどね。初心者向けのおすすめ情報は他にはありますか?

金子:ここ数年のISUCONの過去問は、初心者には特につらい問題が多くなってきているので、けっこう初心者寄りにしているという点で、private-isuに価値があるのかなと思っています。あれを1回ざっくり全部解いてから行けば、ここ数年の過去問もある程度解けるようになっているんじゃないかなと思っています。

草野:ありがとうございます。

藤原:private-isuはおすすめですよ。

草野:僕は事前講習で死ぬほど初心者向けの話をするので「そっちも聞いてね」と思いつつ、一応別の話をしておいてかつ本も読んでねと思いつつ話をすると、これは学生向けの話ですが、なんと(ISUCONは)現代では使われていないSSHなるものを使って開発をさせることが多くて。

Dockerという流行りのやつやコンテナという未知のものがなくて、おじさんな感じのSSHが使われたりするので、意外とそのあたりのノウハウがない。

プロダクションが「SSHは別に使わなくていいよ」という感じの世界なので、SSHのリファレンスをなんとなくやっておくとか、ポートフォワードの根本的な入り方みたいなものは練習しておくといいです。VS Codeリモートでメチャクチャ豪華になっているんだけれど、VS Codeリモートを入れたら落ちる程度のスペックのサーバーしか配布されないことがあるので。

(一同笑)

中西:ありますね。

草野:ISUCON10だよね?

金子:ISUCON10のVS Codeはしょうがないですよね。あれはリモートサーバー上ですごく計算をしてsyntax highlightとかを表示しているっぽいので、どうしようもない

草野:絶対重いので。VS Codeリモートを使ったがために予選のサーバーが返ってこなくなることがあったので、豪華な開発環境がぜんぜん使えないみたいな。「今時こんなメモリ数でサーバーやらないよ」というレベルのやつが出てきたりします。

藤原:個人的にそれは嫌なんですよね。「普通にできるようにしたい」という気持ちはありますよね。メモリ1ギガとか「今時ないやろ」という感じですよね。

草野:でも単純に物理的なコストの問題が壁として迫っているので、つらいものがあるんです。わりとオールドスタイルな開発の手法にちょびっと慣れないといけないので、素振りはやっておくとだいぶ違います。そういう意味でも、素振りをしておくとだいぶ違う。1問でもいいからやっていくのは、けっこうおすすめの話です。

(次回に続く)