• トップ
  • ブログ一覧
  • ISUCON部に参加したので取り組みとかをまとめてみる
  • ISUCON部に参加したので取り組みとかをまとめてみる

    こま(エンジニア)こま(エンジニア)
    2023.05.15

    IT技術

    概要

    この記事では、ISUCON部になぜ参加したのか・何をやっているのか、背景・取り組みを書き連ねてみます。

    前回

    参加したきっかけ

    前置き

    元々、遅い画面や機能を調べて解決するような課題をいくつか経験してはいました。
    ですが、とりあえずよくある手法を調べて試してみる程度しか理解できておらず、自信をもって解決できたなとは感じられませんでした。

    業務では、締切があることからどうしてもそれなりなところで妥協しがちです。
    かといって、個人開発ではパフォーマンスを意識するような規模まで触った経験もなく、何かいい感じに学べる手段とかないかな〜と思っていました。

    そんなときに、締切を気にする必要がない・それなりな規模のアプリケーションを好き勝手に触れる環境が手に入るとあっては、飛びつくしかありません。
    ということで入社して日が浅い身ではありますが、ISUCON部へと参加いたしました。

    (実際はそこまで確固たる決意のもとではなく、面白そうだな〜ぐらいのノリで足を踏み入れました。)

    何を目標とするか

    参加するのであれば、活動を経てどうなりたいのか目標を見据えておきたいところです。
    せっかくなのでこの場で何を目指していくのか整理してみたいと思います。

    何がわからないのかを知る

    パフォーマンス改善と呼ばれる課題には、たくさんの要素があります。
    例えばデータベース・Webサーバ・アプリケーションのコード・言語の設定など、見るべきところは膨大です。

    ISUCONの課題としてつくられたアプリケーションに向き合うことで、数ある要素において、今自分は何を分かっていないのか明確にしたいと考えています。
    分からないところが定まれば、足りないものを補うために何をすれば良いのか見えてくるはずです。

    まずはパフォーマンス改善における自分の現在位置を知っておきたいなと思っています。

    基礎を修める

    ISUCONのスコアだけに着目すれば、よくある定石をとりあえずネットで調べて試していけば良さそうです。
    しかし、それではあらゆる課題に応用できるような知識を確立することはできません。

    よって、ISUCONのアプリケーションを触っていく中で、パフォーマンスをどう測るか・問題をどう見つけるかなど、パフォーマンス改善の基礎を確立したいです。
    とはいってもすぐに習得できるような近道は無いので、ほかの技術を学ぶときと同じように、公式ドキュメントなどとにらめっこしながら立ち向かっていきたいなと考えています。

    取り組み

    具体的に何をやってきたのか、これまでの試行錯誤を簡単に書いてみます。

    本を読んでみる-定石を知る

    達人が教えるWebパフォーマンスチューニング 〜ISUCONから学ぶ高速化の実践を読むことから始めました。

    独断のもと学び始めると大体失敗してきたので、まずは本から体系的な知識を手に入れます。
    既に1度通読しましたが、遅い処理をどう見つけ・どう改善し・改善後の状態をどう評価するか、といったようにパフォーマンス改善の一連の流れが詳しくまとまっていました。
    本を読んだ後だと、パフォーマンス改善もテストコードのように、場当たり的なやり方ではなく一定の定石に従って取り組めるものだと捉えられるようになりました。

    これを1冊読んでおけば、何から手をつけたら良いか分からない状態から抜け出せるはずです。

    一歩ずつ基礎を固める

    ありがたいことに上で紹介した本では、今ISUCON部で取り組んでいるアプリケーションを題材としています。
    ですので、本に書かれた流れに従って手を動かすことで、パフォーマンス改善の流れを体感することができます。
    本の中でも手厚く解説が書かれていますが、基礎を固めるためにはもう1歩深みに入り込みたいところです。

    公式ドキュメントと仲良くなりたい

    そこで、手を動かすときには、必ず公式ドキュメントに目を通すようにしました。
    試行錯誤していると、何のためにこうするんだろう・これは何を意味するんだろうなどなど多くの疑問が浮かび上がってきます。
    疑問に思ったところを公式ドキュメントを拠り所に一歩ずつ調べていくと、自信をもってパフォーマンスを改善していけるはずです。

    具体例

    例えば、MySQLのスロークエリログについて学ぶ過程を考えてみます。
    最初は本を読みながら、遅いクエリをログに出力する方法や、ログを集計するコマンドなど、おおまかな流れを掴みます。
    この段階では、見よう見まねでならなんとか同じ手順を再現できるかな〜、ぐらいまで理解が進んでいました。
    ここから、設定値には何を設定できるんだろう、mysqldumpslowコマンドの書式はなんだろう・出力された内容の1つ1つは何を表しているんだろう、などなど気になったところを掘り下げていきます。
    公式ドキュメントと戦いながら疑問を解決し、一連の手順を自分の言葉でまとめることで、理解を深めます。

    すると、本を読んだだけでは具体的な手順で留まっていた知識を、要点を掴んだ抽象的な知識へと昇華させることができるはずです。
    私自身まだうまく言葉にはできませんが、このように公式ドキュメントを頼りに知識を抽象的なものへと圧縮させることで、基礎となる土台がつくれるようになるのかなと考えています。

    スコア上げ

    スコアを上げていくのは、取り組みというより試行錯誤の副産物みたいなものですが、それでもスコアが上がっていくとうれしくなります。
    知識を積み上げていくのも楽しいですが、やはりがんばったことでスコアが伸びていくと、ゲーム感覚で更に熱中することができると思います。

    まだまだパフォーマンス改善にも入門したばかりなので、これからもISUCONを通じてもっともっと強くなりたいですね。

    まとめ

    ISUCON部について参加した経緯や取り組みをつらつらと語ってみました。
    こうして文章にしてみると、自分が何を目指しているのか改めて見直すことができてよきでした。

    ISUCON部に興味がありましたら、ぜひ参加してみてください。

    つぎの記事は新田さんに書いていただく予定です、よろしくお願いいたします(:

    こま(エンジニア)

    こま(エンジニア)

    おすすめ記事