YAMAGUCHI::weblog

海水パンツとゴーグルで、巨万の富を築きました。カリブの怪物、フリーアルバイター瞳です。

『効率的なGo』という本が出版されました #efficient_go

はじめに

こんにちは、Google Cloudのオブザーバビリティ/SRE担当者です。出張中で発売日にきちんとした記事が書けなかったのですが、去る2月24日に私が翻訳しました『効率的なGo―データ指向によるGoアプリケーションの性能最適化』という書籍がオライリー・ジャパン社より出版されました。書店ならびに各社オンラインストアでご購入いただけます。

www.oreilly.co.jp

電子書籍版はオライリー・ジャパンのサイトにPDFおよびEPUBでの提供がありますので、そちらよりご確認ください。

『効率的なGo』をなぜ翻訳しようと思ったのか

私は業務において、SREやオブザーバビリティに関わる各種プラクティスの啓蒙や、それらの各種製品(Google Cloudのプロプライエタリ製品やオープンソースソフトウェア、その他関連製品なんでも)を使った実践などを解説したりしています。ここ数年でのオブザーバビリティに対する注目が高まったこともあり、計装やAPMに関する情報はだいぶ増えてきたように思います。一方で、ボトルネックの究明を行った後の最後の一歩、ボトルネックの改善をどう行うのかについては、アプリケーション開発の文脈に渡されてしまい、あまり一般的な解説が得難い領域でした。

そんな中、『オブザーバビリティ・エンジニアリング』の翻訳の第2校がちょうど終わる頃に、原著 "Effecient Go" の出版が決まり、急いでその内容を確認したところ、まさにその解説が得難い領域をテーマとした書籍であったこと、そして内容もGoに限らない、アプリケーション性能改善一般に触れる書籍であったことから、翻訳の企画をオライリー・ジャパンへと持ち込みました。

ここ最近私が関わったオライリー・ジャパンでの翻訳書籍は、企画が立ち上がった順序で言うと、『SLO サービスレベル目標』『オブザーバビリティ・エンジニアリング』の順だったのですが、ちょうどこの順序でサービス全体のマクロな視点の目標設定から始まり、それを効率よく観察するためのオブザーバビリティの獲得、そして問題がある場合の原因の究明までは理解ができますが、最後の性能改善の部分が足りないとと考えていました。そこにおあつらえ向きに本書が出版され、まさに福音でした。

また本書がGoで解説していたことも大きいです。自分が最も使う頻度が高く、長らく関わっているプログラミング言語なので、『Go言語による並行処理』と同様に、内容の理解は他の言語で解説されたものよりもできるからです。

こういった偶然が重なり、本書を翻訳する機会を得ることとなりました。

「効率的なGo」はどのような本か

本書は次のような読者に有益であると考えています。

  • Goによって開発されたプログラムのパフォーマンスを改善したいと考えているエンジニア
  • 他の言語でのパフォーマンス改善方法を知っているが、Goでの方法を知らないエンジニア
  • パフォーマンス改善一般について理解したい方
  • Goがどのようにリソースを使うか、理解を深めたいエンジニア

本書は書籍タイトルにもあるとおりGo製のプログラムを中心として、そのパフォーマンス改善手法について解説していますが、Goに限らない、プログラムのパフォーマンス改善において汎用的な考え方が紹介されています。

また本書はGoのランタイムからOSまでという、これまであまり解説がまとまった形で得られなかった低レイヤーの解説にもある程度のボリュームが割かれている書籍なので、初級者向けの書籍では刺激が得られないエンジニアにも、非常に興味深い内容になっていると思います。

関連図書

本書の関連図書として私からいくつか挙げてみます。

まず先にも紹介しましたし、本書の訳者まえがきにも書いたのですが、『SLO サービスレベル目標』『オブザーバビリティ・エンジニアリング』は真っ先に挙げたい書籍です。

もちろん自分が翻訳に関わったからでもありますが、先にも紹介した通り、一連のオブザーバビリティの獲得と性能改善というシナリオを大局的に理解するために必要な情報はこの3冊で網羅されています。

そしてプログラムの性能問題の調査に関しては『詳解 システム・パフォーマンス』を外すわけにはいきません。非常に分厚く、また価格も高いので購入がためらわれるかもしれませんが、逆にこの内容の充実ぶりで7000円を切る価格で販売されているというのは破格と言っても過言ではありません。内容も、非常に丁寧に解説されていますし、頭から通して読まなくても、辞書的に使えるところが素晴らしいです。一人一冊とまでは言わないまでも、一社に一冊は備えておくことをおすすめしたいです。

本書にならんでGoの内部挙動を紹介する書籍として紹介したいのは『Goならわかるシステムプログラミング』です。本書より少しだけ上のレイヤーで広くGoのランタイムの解説をしています。システムコールのレベルでGoのランタイムとOSの関係性を知りたい場合にはおすすめの書籍です。

また本書で解説されている内容の中で、GoプログラムとCPUに関する章(第4章)がありますが、そちらに興味を持たれた方は『プログラマーのためのCPU入門 』をおすすめします。より一般的な立場からプログラムとCPUはどう連携して動くのかを深く解説されている書籍です。

おわりに

私は職業柄、システム全体、サービス単体、関数1つと様々なレベルでの性能最適化に関わる話をすることがありますが、一貫して広まってほしいと思っている考え方は「性能を改善するためには計測し目標を立てること」です。本書が、その普及の一助になることを期待しています。