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つと様々なレベルでの性能最適化に関わる話をすることがありますが、一貫して広まってほしいと思っている考え方は「性能を改善するためには計測し目標を立てること」です。本書が、その普及の一助になることを期待しています。

「実践プロパティベーステスト」という本が出版されました #pbtbook

はじめに

こんにちは、Google Cloudのオブザーバビリティ/SRE担当者です。このたび私が翻訳しました「実践プロパティベーステスト PropErとErlang/Elixirではじめよう」という書籍がラムダノート社より去る11月1日に出版されました。書店ならびに各社オンラインストアでご購入いただけます。

実践プロパティベーステスト ― PropErとErlang/Elixirではじめようwww.lambdanote.com

電子書籍についてはラムダノート社のECサイトよりご購入いただけます。

実践プロパティベーステスト ― PropErとErlang/Elixirではじめよう(電子書籍のみ)www.lambdanote.com

「実践プロパティベーステスト」はどのような本か

本書の内容に関しては、すでにラムダノート社の書籍紹介ページで十分に説明されているので、まずはそちらをご一読ください。

www.lambdanote.com

プロパティベーステスト(以下、PBT)は関数型プログラミング言語界隈で発展してきた経緯もあり、ユニットテストやファジングと比較するとあまり浸透していないのが現状です。また使い始めようと思うとプロパティを書くところで難しさを覚え、独学でマスターするのはなかなかにハードルが高いものです。実際に私もその部分がネックで、PBTを学びたいと思いつつ、何度か挫折をしていました。そんな中、本書を初めてオンライン版で読んだときに、相変わらずFredのユーモアある解説に感心しつつ、この本であれば習得できるかもしれないと思いました。

本書は、まずPBTとは何か、それ自体の解説から始まり、PBTの根幹である「プロパティ」についての解説、そして探索をうまく行うために欠かせない「ジェネレーター」のカスタマイズ方法、失敗したテストを理解しやすくするための「収縮」の解説、さらにはステートフルなシステムをテスト対象にできる「ステートフルPBT」の解説、とPBTを一通り学ぶために必要な知識を網羅しています。解説に使うサンプルコードやその結果の特性はErlang/Elixirという言語やPropErというPBTフレームワークに依存する部分もありますが、他の言語のPBTフレームワークも大なり小なり同様の機能をサポートしていますので、読み替えを行うことでPBTより深く学べることでしょう。

そもそもPBT自体があまり脚光を浴びることはありませんでした。しかし計算資源をより活用して、ステートレスPBTでユニットテストを強化することはもちろん、ステートフルPBTでe2eテストを強化すること、それこそがソフトウェアエンジニアリングではないでしょうか。もちろん、PBTの場合、プロパティやジェネレーターの実装や、テストを走らせる上での時間的なコストはあります。これは私が普段触れているオブザーバビリティの領域でも同様です。網羅的かつ効率的に探索を行うことで、仕様策定時や実装時に気が付かなかった問題を発見し、その原因を突き止められる確率が高まることの価値は、ますます高まっています。そういった文脈で、本書は皆さんの道具箱に道具を1つどころか、引き出しを1つ追加してくれる、そんな一冊です。

「実践プロパティベーステスト」が出版されるまで

本書はFred Hebertによる "Property-Based Testing with PropEr, Erlang, and Elixir" という書籍の日本語訳版です。原著は2019年1月に出版されました。

以前私は同じくFred Hebertが著した "Learn you some Erlang for great good!" の日本語訳「すごいErlang ゆかいに学ぼう!」(以下、すごいE本)という本の翻訳を行いました。

すごいE本の詳細に関しては出版時にエントリーを書きましたのでご参照ください。

ymotongpoo.hatenablog.com

すごいE本ではErlangの基礎から始まり、OTPの発展的な使用方法まで網羅していました。もちろん、その中にはテストに関する章もあり、たとえばEUnitの関する基本的なところから、静的解析(Dialyzer)まで行うのですが、それ以外のより発展的な検証については一切触れられていませんでした。Erlangのエコシステムを知りつつ、他の言語で主に開発を行っていた身としては、Erlangの達人たちが使いこなしていたプロパティベーステスト(PropEr)に関する情報がもっと出てきてほしいなあと思っていました。

そんな折、2017年の半ばにFredがまたPropErに関するテキストをウェブで公開し始めました!

propertesting.com

そこにはいままで知りたいと思っていたプロパティベーステストをPropErで実施するための考え方を、すごいE本と同様に一から紹介してくれるものでした。しかも前回とは違い、Creative Commonsではなく、All rights reservedとのこと。これは本が出るのではないか?と思いウェブ版が完成した2018年後半のある日Fredに連絡してみると出版予定とのこと。そこで、すごいE本の編集を担当し、その出版後、オーム社から独立されラムダノートを設立された鹿野さんにダメ元で連絡してみました。

「Fredが書いたプロパティベースベストに関する良書があるんですが、翻訳できませんか」

ラムダノートでこの本を出版する場合、編集作業等で割かれる時間や在庫を考えると、この本はリスクの高いものであることは明らかでした。使用言語はErlang/Elixirという、一応知られてはいる言語であるものの、まだメインストリームとは言えない言語で、さらにテーマは発展的内容のプロパティベーステスト。それだけ見ればニッチ極まりない本です。

しかし、このプロパティベーステストという手法そのものは、計算機の力を活用した素晴らしいテスト手法で、原著出版当時からメジャー言語向けフレームワークも一応存在していました。この本によって需要を起こせるかもしれない、という期待も鹿野さんは理解してくださり、プロジェクトが始まりました。翻訳権の獲得から始まり、原稿用レポジトリの用意までが整ったのは2019年4月。そこからコツコツと翻訳を続けて半分程度まで終わっていたのですが、2020年3月に新型コロナウイルスの蔓延とともに仕事や家庭の状況も一変し、なし崩し的に一時翻訳が中断してしまいました。

その後、2022年5月にようやく生活が落ち着いたこともあり、また並行して走っていた他の翻訳プロジェクトが区切りが付いたため、一気呵成に取り組み2022年6月には一度翻訳を終わらせました。しかし、今度はここから訳文自体の日本語をより自然にする編集作業が始まりました。一度スケジュールが崩れてしまったため、鹿野さんには別の大きなお仕事の合間に編集を行ってもらいつつ、自分は細かな修正をするという作業が続き、とりあえず識者レビューをいただける形までになったのが2022年11月でした。識者レビューを経て、もう一度巻頭から編集し直して、2度めの識者レビューを頂いたのが今年の9月。そこから細かな修正が行われ、10月半ばに無事に校了したという流れでした。

私はこれまでオライリー・ジャパンでの翻訳でお二人の担当に付いていただき、オーム社とラムダノートでは鹿野さん、高尾さんに編集いただいたわけですが、やはり皆さん様々に特徴があると感じました。ラムダノートのお二人の編集は、編集者として徹底して日本語を整えてくださる印象がありました。実際に自分でも読み返してみると、編集前後で日本語として読みやすさが向上していると感じました。

気がつけばきっかけとなったウェブサイトの公開から6年も経っているわけですが、しかしながらその技術的な内容はまったく陳腐化していません。これはPBTがそれだけ強力な概念であるということの証左ではないでしょうか。早く出版できなかったのはひとえに自分の至らなさではあるわけですが、ようやく出版できていまは肩の荷が降りた気持ちです。

他言語におけるプロパティベーステストについて

本書はErlang/Elixirを中心にPBTの解説をしているわけですが、その考え方は汎用的なもので、他のプログラミング言語でも写経しながら進められると思います。以下が自分が知っていたり、ぱっと調べた限りでの他の言語でのPBTフレームワーク一覧です。(網羅しているわけではありません。)

もちろんフレームワークによって対応の度合いは異なるので、これらを使って本書をErlang/Elixirとまったく同様に進められるわけではありません。たとえばPythonのHypothesisではジェネレーターは意図してランダム値になるように振っていて、PropErのように意図して偏らせるようなことができません*1。また上には列挙していませんがGoのgopterというフレームワークではステートレスPBTしか実現できません*2

謝辞

書籍中の謝辞でも書いていますが、あらためて、本書は次のみなさまのご協力なしには出版はありえませんでした。特にErlang/Elixirに関しては趣味レベルの私とは異なり、業務でErlangとPBTを使われていた経験がある、また今まさに現役でErlang/Elixirを書いている皆様方からいただけたレビューは本書の質を最後に押し上げてくださるものでした。あらためて感謝いたします。

レビュアーのみなさま(五十音順)

  • 上西康太さん(@kuenishi)
  • 大田健さん(@sile)
  • 大原常徳さん(@ohr486)
  • 篠原俊一さん(@shino)
  • 宮崎達矢さん(@ta_ta_ta_miya)

ラムダノートのお二方

  • 鹿野桂一郎さん
  • 高尾智絵さん

いただいたレビュー(随時更新)

*1:無理やりに実現することは可能ですが、フレームワーク作者はその方針ではない

*2:gopterは開発が3年ほど停止しているので挙げませんでした

「SLO サービスレベル目標」という本が出版されました #slobook

はじめに

こんにちは、Google Cloudのオブザーバビリティ担当者です。このたび私が翻訳ならびに監修として関わった「SLO サービスレベル目標」という本がオライリー・ジャパン社より出版されました。本日より書店ならびに各社オンラインストアでご購入いただけます。

電子書籍版についてはオライリー・ジャパンのサイトよりePub、PDFの各種フォーマットにてご購入いただけます。

www.oreilly.co.jp

SLOがなぜ重要なのか

まず本書の意義について解説する前に、サービスレベル目標(Service Level Objective; SLO)がなぜ重要なのかについて改めてお伝えしたいと思います。

サイトリライアビリティエンジニアリング(SRE)において、その手法の名称にもあるように、「ユーザーの信頼性」というのは、その原理に根ざす重要な考え方です。システム運営に関わる人間および会計のリソースは有限であるため、サービスの品質もどこかで妥協しなければいけません。しかしその妥協がユーザーがシステムに期待する品質*1未満ではユーザーはサービスを利用してくれなくなってしまいます。そのためユーザーの満足度との相関が強い指標(サービスレベル指標)を発見し、その目標値(サービスレベル目標)を決める、というのがサービスレベル目標の考え方です。この目標は内部的なものであり、ユーザーとの契約ではないので、SLAと違い何度でも自由に見直し、より適切な値を探していくことになります*2

これは、システム運用の観点から見たビジネス的に重要な指標にもなり得るもので、SREというものが広く認知される以前から、データ駆動型経営をされている企業では名前こそ違えど、この観点から目標値を決めて運用してきたところもあるでしょう*3。SREではこれらの概念に対してSLI、SLO、さらにエラーバジェットやバーンレートといった名称と定義を与えて、さらにそれを継続的に運用していくという枠組みを作ったことに価値があると思います。一方で、こうした概念がSREとともになければならないかというとそんなことはありません。肝心なのは「自分たちが行っていることがSREかどうか」ではなく「自分たちのサービスがユーザーを満足させているのか」どうかであり、その文脈においてSLOという概念は各ビジネス指標のKPIと同様にいかなるビジネスにおいても考慮されるべきであるはずです。特にサービスの収益がシステムに依存している度合いが強ければ強いほど、このSLOという指標はビジネスにインパクトを与えているはずです。

2020年代において、たいていのビジネスはITシステムに依存していますから、このSLOという概念は会社組織の中で役職問わず理解されるべきものであると、私は考えています。「SLOをもっと使っていきましょう」という話に関しては次の文章でもう少し掘り下げて書きましたので、ご興味あればあわせてご一読ください。

zenn.dev

「SLO サービスレベル目標」はどのような本か

昨日SLO本出版イベントを開催いただきまして、書籍の内容もお話しました。お時間ある方はこちらもご覧ください。

www.youtube.com

本書はAlex Hidalgoが主著者として執筆し、また多くの共著者の寄稿を編集した "Implementing Service Level Objectives" という書籍の日本語訳版です。原著は2020年8月に出版されました。

本書は、同じくオライリー・ジャパンより出版されているSRE関連書籍のシリーズを補完する書籍だと思います。Google SREシリーズや「SREの探求」がSREの各種プラクティスを幅広くカバーしている総論であるのに対して、本書はタイトルにもあるとおり、サービスレベル目標(SLO)の実装と導入のみに焦点を当てて、その概念の説明から実装方法、さらに背景となる統計や確率の基礎知識、SLOに基づく運用を根付かせるための方法論や文化の構築など、SLOに関する各論を掘り下げて解説しています。

またその意味では、やはり私が翻訳に関わった書籍「オブザーバビリティ・エンジニアリング」にも近いですが、こちらはインシデントの解決に関連したオブザーバビリティの技術要件などに多くの焦点があたっている一方で、「SLO サービスレベル目標」はより前段階の開発と運用の判断を決定する部分に焦点を当てています。

SREを導入しようとしている、あるいはSREの導入を始めたが実践に苦労しているという人々と会話すると、やはり最も難しいと言われるのが、SLIの発見とSLOの設定です。そこから更にエラーバジェットを管理して、エラーバジェットのバーンレートを元にしたアラートで運用を行うレベルまでできているという組織はまだまだ多くありません。この理由の一つとしては、SLOという概念が難しい、ということではなく、その仕組みは単純だけれども、実際に機能させようとすると巷に手引きが少なく、各々が手探りで行っている部分が多いからだと思います。先の節でも書いたように、SLOはそれ単独でも十分に存在しうる重要な概念であるにも関わらず、です。また他にも改善を継続的に行うことに慣れるまでに時間がかかるということもあるかもしれません。

そんな中、私が本書が出版されたという知らせを目にしたとき、「Go言語による並行処理」を初めて読んだとき以上に興奮しました。本書の目次と内容を大まかに読んで、その興奮は本書は絶対に日本語でも出版されるべき書籍であるという確信へと変わりました。SREの実践において、最も重要だと思われるSLOに基づく運用を行うための手引きとして、これほどまとまっている資料は2023年現在、本書以外ありません。SRE本を読んだり、多くの企業がSREを導入しているという情報を耳にして、SREに興味を持ってSLOの導入を始めようと思っている方々、またSLOの導入から次の一歩を踏み出したいと思っている方々には必携の一冊であると思います。本書はSRE本を読んだことがなくても通して読めるようにできていますので、SREのプラクティスのすべてを実践するわけでなくても、非常に有益な内容となっています。また、先にも述べたようにSLO自体はSREとは離れて、単独で実践しうるものです。変化の早い時代において、ビジネス指標の1つとしてSLOを活用するためにも、有意義な一冊となっています。

本書は3部構成となっています。第1部はSLOの開発です。SLI、SLO、エラーバジェットといった概念を一から説明しています。初めてこれらの概念に触れる方は必ず第1部の章は通して読んでください。もしSRE本等でとこれらの概念をすでに理解している人であれば読み飛ばせるかもしれませんが、そのような場合でも念の為第1部は通して読まれることをお勧めします。特にSLOやエラーバジェットの計算に関する具体例を見ることで、自分の理解が合っているかを確認しながら振り返りができます。

第2部はSLOの実装です。第2部は第1部の理論を実際に導入する上で必要なプロセスに触れています。SLOを導入することへの各部署からの同意の獲得、SLOを支えるデータベースの仕組み、アラートの設計方法、SLIやSLOの計算のための数学的基礎知識、SLIとして使える指標、具体例を通したSLO設計の流れの確認、など、より実践的な内容が数多く紹介されています。特に9章は数学や統計の基礎知識を前提としていて、一瞥しただけで拒否反応が出てしまう人もいるかもしれませんが、安心してください。9章でも説明されているように、すべてがわからなくてもまったく問題ありません。個人的にはこの章は付録Bと同様に付録にしても良かったのではないかと思います。しかし、SLOの定義を厳密に行なおうと思えば、より細かな定義ができる、ということだけでも感じていただけたらと思います。

第3部はSLOに基づいた運用手法が実際に回り始めた後、それを維持し持続するために必要な内容が多く紹介されています。ここに書かれている内容は第1部と第2部を読み、実践を進めていく中でより理解が深まることでしょう。現在すでにSLOに基づいた運用を行っている方々には、非常に親しみのある内容になっていると思います。社内でより広くSLOを普及させるためのヒントになるような情報が多くあります。

関連書籍との関係性について

「SRE サイトリライアビリティエンジニアリング」と「サイトリライアビリティワークブック」

SREに関心を寄せる多くの方々がお持ちであろう書籍が上記の2冊です。前者は網羅的である反面、個々のSREのプラクティスに関する説明は個別のケースの説明にとどまるようなものであったように思われます。後者は書籍名が「ワークブック」とあるように、演習形式で代表的なプラクティスを少し掘り下げるもので、実際にSLOに関しては第2章〜第5章で解説されていますが、様々な場面でSLOを設定するための詳細、というよりは、SLOを活用するための一連の流れを体験するための入門という趣が強いです。

その観点で、「SLO サービスレベル目標」はSLOを中心として、理論的な側面、実践的な側面、文化的な側面など、SLOの導入と運用に関連するあらゆるトピックを網羅的に扱っています。実際に主著者であるAlexは、上記2冊のSLO関連の章の著者でもあり、「SLO サービスレベル目標」はそのテーマを掘り下げるために別途執筆されたものでした。

「オブザーバビリティ・エンジニアリング」

こちらは今年1月末に出版されたばかりの書籍ですが、こちらは書籍のタイトル通り「オブザーバビリティ」を自システム内に備えるための書籍です。本書の第12章と第13章においてSLOとの関連性を解説していますが、これはオブザーバビリティからの観点での解説です。こちらがオブザーバビリティをシステムに備えるための実装に関する解説を行っているのに対して、「SLO サービスレベル目標」ではシステムが計装すべきテレメトリーシグナルの決定に影響を与えるSLOの設定や、その可視化やそれに基づいたアラート設定に関する解説をしています。

また「SLO サービスレベル目標」が、どちらかと言うとユーザーの信頼性を維持するための施策(すなわち、インシデントが起きる前の施策)に重点を置いているのに対して、「オブザーバビリティ・エンジニアリング」では、インシデントも含めて、必要なときにシステム内部の必要なテレメトリーデータを分析できることを主眼としています。

したがって「オブザーバビリティ・エンジニアリング」と「SLO サービスレベル目標」はかなり相互補完的な書籍であると考えています。

「入門 監視」

「入門 監視」の原著 "Practical Monitoring" は2017年11月に発行された書籍です。本書は、まだSREがそこまで広く普及していなかった時期に、従来のシステム監視の視点から見た、現代的な監視に関して著した良書だと思います。本書では直接はSLOという言葉を使って解説はしていませんが、関連する話題はたくさん出てきています。

先にも述べましたが、SLOというのはSREを実践している人だけのものではありません。「入門 監視」では「ビジネスKPI」というビジネス側の目標値を監視する話がありますが、現代のサービスにおいてはシステム側のKPIもビジネスに十分影響を及ぼしていると思います。両者でしっかりと目標値を持った監視ができれば、より充実したシステム運用ができると思います。その観点で、本書と「SLO サービスレベル目標」を読むと、従来のシステム監視を行っているシステムにおいてもSLOが十分に有用であることが理解いただけると思います。

「入門 監視」の発刊当初の私の書評に関してはこちらにあります。 ymotongpoo.hatenablog.com

謝辞

本書のまえがきでも触れましたが、あらためて編集者の編集者のオライリージャパンの髙恵子さんに感謝いたします。そもそも本書の翻訳の企画は私から髙さんへの持ち込みで、当初は別企画が走ろうとしていたところを無理を言ってこちらに変えさせていただきました。また今回は当初は監訳のみという予定だったのですが、翻訳の品質に納得が行かなかったことやプロセスに問題があると感じ、私からはかなり要望を出す結果となりましたが、できる限りのことをしていただきました。諸々とストレートに意見したりと、髙さんには苦労をおかけしたことも多々ありました。また思わぬ予定変更でスケジュールがずれたりとトラブルもあり、結果2021年2月から始まった企画が、2年半近くかかりましたが、その分思い出深い企画となりました。*4 またpyspaの方々を始めとするオンラインコミュニティの皆様には、翻訳修正に苦労する中、多くの励ましをいただきました。一人でも黙々と作業を行う中でも、チャットであってもねぎらいの言葉をかけてもらえるだけで慰めとなりました。みなさま本当にありがとうございました。

おわりに

本書にも書かれている通り、本書の内容は1つのモデルでしかありません。本書を読めばすべてが解決する銀の弾丸ではありませんが、なにもない場所から始めるよりも遥かに優れた出発点になることは間違いないでしょう。本書のいたるところで繰り返し述べているように、本書を元に、組織内で多くの議論を交わしながら、SLOの導入を行う企業が少しでも増えることを願っています。

また本書に関するイベントを7/25にForkwellさんに開催いただきます。オンライン開催ですので、お時間あればご参加ください。

forkwell.connpass.com

*1:ここはさらに注意して考える必要があって、ユーザーの期待値にも幅があり、中には非常に厳しい要求をする人もいます。自分たちのビジネスがユーザーに価値を提供するために必要な品質、と考えるほうが良いかもしれません。

*2:もちろんSLOを公開しても構いません。実際にどの程度のサービスレベルを提供しようと考えているかの透明性を高めることになります。

*3:SREの語源にもなったような信頼性工学、あるいは安全工学に関連する領域では、たとえば工場における生産効率等に関する多くの指標が提示されています。

*4:この紆余曲折に関しては、要望があればどこかに記録を残そうと思います。

2022年版のState of DevOps Reportの日本語訳が公開されました

はじめに

こんにちは、Google CloudでオブザーバビリティとSREの担当をしているものです。毎年公開されると多くの方に参照いただいているState of DevOps Reportの最新版である2022年版が、日本語を含む10ヶ国語に翻訳されました。こちらのページで言語設定を日本語に設定いただいた上でPDFを申請すると日本語版がダウンロード出来ます。

cloud.google.com

これまでもすでに英語版が広く紹介されていたと思いますが、改めて日本語版が出たことで、より多くの方々におすすめできるようになったと思います。(次のスクリーンショットはfour keysに加えて、5番目の指標として信頼性が加わったことを解説しているページ)

State of DevOps Reportとは

あらためて、State of DevOps Report(以下、SODR)とはGoogle Cloudの一組織であるDORA(DevOps Research and Assessment)が2014年より行っている、DevOpsの業界動向に関する年次調査レポートです。DORAは書籍『Accelerate』(日本語訳版は『LeanとDevOpsの科学』というタイトルで出版されています)の著者陣が中心となって設立された調査機関で、2018年にGoogle Cloudの一部となりました。それ以降も、ベンダーに中立な調査機関として、継続して調査を行っています。

SODRは多くのDevOps系の記事やプレゼンテーションで参照されているのでもしかしたらどこかで目にしたことがあるかもしれません。(たとえば次の @t_wada さんのスライドのp.18以降から紹介されています。)

speakerdeck.com

上の『LeanとDevOpsの科学』は非常に有名なのでよく参照されていますがSODRはそこからのトレンドの変化を追っていくのに非常に役立つ資料となっています。まだ上の書籍しか読んだことのない方は、ぜひSODRも読んでみてください。上にありますように2022年版は日本語版が出ましたので、それを眺めるだけでも面白いかと思います。

2023年版向けの調査が始まっています

SODRが成立しているのは多くの企業の方々に調査に参加いただいているからこそです。

goo.gle

毎年多くの企業に参加いただいた結果、年次の追跡調査が可能となり、結果トレンドの変化などがさまざまに分かってきました。一方で、これまで英語のみで調査を行い、調査結果としてのSODRも英語版のみしかなかったためどうしても英語圏に偏った調査となっていました。(下図はSODR 2022のp.63より抜粋。日本からの参加者は全体の1%でした。)

今年の調査もすでに開始していますが、今年は調査の多言語化にも取り組んで、近々日本語でも調査が可能となります。*1多くの国からの調査が集まることで、各地域でのトレンドなどが見えてくることと思います。(追記 2023.06.02 日本語版のサーベイが公開されましたのでリンクを挿し換えました)

昨今もDevOps、SRE、Platform Engineeringなど、さまざまなキーワードが飛び交っています。しかし、その実態として、業界全体の各組織でどのような取り組みがなされているのでしょうか。それを明らかにしていこうという取り組みがSODRです。少しお時間かかる調査ではありますが、ぜひご協力ください!よろしくお願いします。

*1:公開され次第追って紹介します

「オブザーバビリティ・エンジニアリング」という本が出版されました #o11yeng

はじめに

こんにちは、Cloud Operations担当者です。このたび私が翻訳として関わった「オブザーバビリティ・エンジニアリング」という本がオライリー・ジャパン社より出版されました。本日より書店ならびに各社オンラインストアでご購入いただけます。

www.ohmsha.co.jp

電子書籍版についてはオライリー・ジャパンのサイトよりePub、PDFの各種フォーマットにてご購入いただけます。

www.oreilly.co.jp

また上記書籍情報ページに質問は報告を行うための連絡先も記載されておりますので、なにかありましたらそちらよりお問い合わせください。

TL;DR

「オブザーバビリティ・エンジニアリング」はオブザーバビリティの概念を理解し、それを実際にシステムに備えるために必要な技術要件を知り、実践につなげるための書籍です。オブザーバビリティを実践いる方やこれからオブザーバビリティを活用していく方には必携の書籍になると思います。ぜひご一読ください。

「オブザーバビリティ・エンジニアリング」のおすすめの読み方

本書は350ページ程度の中型本で、技術書としてはちょうどよいボリュームだと思います。したがって、オブザーバビリティに関して包括的に理解を深めたいという方であれば頭から通して読み進めていただければと思います。本書は「オブザーバビリティ」と呼ばれるシステムの性質に関して、その技術的な要件や具体的な実装方法、導入の際の文化的側面などを扱った書籍です。そのため、オブザーバビリティの大局観が得られずなにか参照したい方、これからオブザーバビリティを導入していくための考慮事項を把握したい方、オブザーバビリティの技術要件を理解することで既存のシステム監視との差異を理解したい方におすすめです。

本書を読むにあたって、関連書籍として同様にオライリー・ジャパンから出版されている「入門 監視」をご覧いただけると、オブザーバビリティと監視の関連についてより深い理解が得られると思います。また「SRE サイトリライアビリティエンジニアリング」「サイトリライアビリティワークブック」などのサービスレベル目標やアラートの設定に関する章も、本書のテーマと大きく関連しているので、SREの推進としてオブザーバビリティの実践や導入をされている方は、そちらも参照いただくのが良いと思います。

いわゆるSRE本はSREをテーマに横断的にプラクティスを紹介しているのに対し、本書はオブザーバビリティをテーマに概念的な話から具体的な実装の話までを一気通貫で紹介しているので、併読することでオブザーバビリティがSREの中でどこに位置しているのか、何を可能にするのかの理解が明確になると思います。

一点、私のあとがきにも書きましたが、本書はHoneycomb.ioというオブザーバビリティSaaS企業のエンジニア3名によって著されているので、その点に留意して読み進める必要があります。本書の具体例がどうしても彼らの製品の機能や実装による説明になっていので、その背景にある技術や思想を常に意識しながら読みすすめると、皆様が利用しているツールやシステムにおいてどのように適用できるか、何が達成されているかの理解が進むかと思います。

出版に至るまでの話

本書はCharity Majors、Liz Fong-jones、George Mirandaによって著された、 "Observability Engineering" の日本語訳です。

本書が出版されたのは2022年6月だったのですが、本書はEarly Releaseの対象になっていたのと、著者の一人であるLiz Fong-Jonesが元々Googleで同じチームでの同僚だったこともあり、出版以前に最初の数章が公開されてからすぐに読み始めていました。本書が解説しようとしている内容は、SREがだいぶ普及してきた現在において、サービスレベル目標をもとにした運用をする上で切っても切り離せないオブザーバビリティの獲得を行う方法であり、正式版の出版をかねてより期待していました。実際に正式版が出版され、改めてその内容は「オブザーバビリティ」の定義を解説し、本来の監視(モニタリング)と技術的にどのように異なる要件が必要なのかを解説した素晴らしい書籍であると感じました。「オブザーバビリティ」という用語が本来の意味合いから離れて、監視系ツールのマーケティング用語として濫用され、ただ「監視」という用語の置き換えとして用いられるケースが散見される中で、利用者側がその用語の意味を正しく理解するということは非常に重要であると考えています。当たり前ではありますが、そもそも別の言葉が導入されたということは概念として異なるからです。

こういった背景から、日々コミュニティで親しく、また「Java開発者のための関数プログラミング」「Go言語による並行処理」での編集としてお世話になった、オライリー・ジャパンの瀧澤さんに本書を日本語化する意義を紹介したところ、2022年7月半ばには早速企画にしていただき、そのまま翻訳の流れとなりました。また同様にいくつかのコミュニティでかねてよりオブザーバビリティやOpenTelemetryに関する情報を共有している大谷さん(以後、かっちゃん @katzchang)も翻訳に興味があるとのことだったので、半分ずつ担当して共訳することとなりました。

前述の通り、かっちゃんとは以前からオブザーバビリティに関して意識合わせがだいぶされていたこともあり、共訳の作業は大変スムーズでした。私自身が共訳をするのが初めてだったこともあって、訳語の統一などの点で難しさを感じた点もありましたが、自分の担当箇所の初校分に関しては9月中には終わらせることが出来ました。ただ、その後本業がだいぶ立て込んでしまい、見直しの時間があまり取れなかったので、レビュワーの方々にはだいぶ負担をおかけしてしまいました。

謝辞

訳者あとがきにおいても掲載いたしましたが、本業の合間を縫って、年末のお忙しい中、短い時間にもかかわらず有意義なレビューを数多くくださったレビュワーの皆様に感謝致します。

レビュワーの皆様(五十音順)

オライリー・ジャパン

  • 瀧澤昭広さん(@turky

レビュワーの皆様にはエンジニアとしての観点から多くのコメントを頂き、また解釈が不明瞭な部分に関しては、より明瞭になるように対案をいただくなど、非常に有益なコメントを頂きました。中でも何名かには多大なレビューを頂きました。瀬尾さんには、レビューが少なくなりがちな後半からレビューをいただくなど、訳者としてありがたかったです。松浦さんは「入門 監視」を始め多くの翻訳をされていることもあり、訳に関して良い対案をいただきました。馬場さんには、文章として説明が甘くなって部分(原文に原因があるものも多かったのですが)の的確な指摘をいただきました。若山さんには細かな解釈に関して指摘を数多くいただきました。

瀧澤さんに、Sphinxを使った執筆環境を用意いただいたことで、私は大変執筆しやすかったです。「Go言語による並行処理」を翻訳したころから、更にパワーアップして、瀧澤さん側でSphinxが生成するXMLからInDesignへの流し込みを自動化するスクリプトを作成されていたことで、依頼してから1日程度で組版された原稿をいただけるというのは、レビューを行う際に非常に有益でした。実際に執筆をされたことがある方は実感されると思うのですが、原稿のレビューを行う際に、フォーマット(テキストファイル、PDF、紙など)が異なるだけで見え方がまったく異なります。様々なフォーマットでの確認を手早く数多く行えるということは、ソフトウェアのレビューと同様、非常に有用です。ラムダノートの鹿野さんもそうでしたが、編集担当者がポストプロダクションの領域も担当されていることの心強さを感じました。

またかっちゃんとは本書の翻訳に関して、そもそもの本の立ち位置やその価値の認識、背景技術の理解など、息があっていたので、チャットで大きな反対意見でぶつかって議論になることはなく、ツーカーで作業を進めてこれたのはとても気持ちのいい体験でした。翻訳作業はこれまで割と孤独に行っていたので、息のあった共訳者がいる頼もしさを感じました。また機会があったら一緒にやりたいです。

あらためて、みなさまありがとうございました。

おわりに

手前味噌にはなってしまいますが、私が今現在で「SREおよびオブザーバビリティに関して読むべきN冊」という書籍を挙げるとするならば、確実にそのリストの上位に入るべき一冊だと考えています。ぜひ多くの方のお手にとっていただき、日本においてもオブザーバビリティに関する議論がより活発になることを願っております。

参照