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

YAMAGUCHI::weblogの2023年を振り返る

はじめに

こんにちは、Cloud Operations担当者です。2023年も最後日となりました。そして私の誕生日です。だんだんと歳を重ねることが億劫になる年齢となってきました。例のやつを貼りました。よろしくお願いします。

www.amazon.jp

2020年3月から始まった新型コロナウイルスの猛威により様々な制限を設けることによって経済的な影響を抑えつつなんとかやってきた数年間でしたが、今年のゴールデンウィークを境に季節性インフルエンザと同じ5類感染症に分類されることとなりました。その是非はさておき、これにより様々な生活への変化が訪れ、私も数多くのオフラインイベントに登壇する機会が増え、仕事や生活が大きく変わった1年でした。

過去の年次の振り返りはこちら。

ymotongpooの2023年

去年立てた目標

  • オブザーバビリティ関連の展開
    • SRE関連含めたプラクティスの普及
    • OpenTelemetryイベントの実施
    • Collector関連でOSSを出したい
  • Goコミュニティ関連
    • Go Conference 2023 Springの運営を無事終わらせる
    • Gophers Japanの活動の拡大
  • 執筆・翻訳・監訳をすすめる
    • 新たな翻訳企画
  • キャンプ
    • 1年を通じたハンモック泊の充実
  • 語学
    • DELE受験

先に述べたように、新型コロナウイルスの分類が変更されたことによって生活が大きく変化し、当初考えていたようなことができなかったり、逆に思わぬ成果が多かった1年でした。

仕事

今年は社内の仕事で、技術的な仕事とプロジェクトリード的な仕事の割合ではだいぶ後者が増えてきたので、なかなか思うように時間が取れなかったのですが、いろいろとチャレンジングな仕事が多く出来たかなと思います。

イベント登壇

今年も去年に引き続き登壇が多かった1年でしたが、特にオフラインイベントでの登壇が増えた1年でした。ざっと記録を見てみましたが、今年だけでオンライン、オフライン含めて30イベントに登壇したようです。今年は意識してSLOに関する話を何度も繰り返し行っていました。少しはSREのプラクティスの普及に貢献できたのではないでしょうか。

主な登壇の記録は一旦こちらにまとめてあります。

github.com

イベント運営

自分でイベント運営をすることがかなり減ってきましたが、今年はGo Conference 2023とOpenTelemetry meetup 2023-10の運営に関わりました。

gocon.jp

opentelemetry.connpass.com

Go Conferenceは2代目座長の @tenntenn が今回で座長を退任し、来年は @sivchari さんが座長となります。2013年に勢いだけで始めたイベントが10年続いたのも、ひとえに毎年メンバーは違えど、一緒に運営してくださる皆様と、スポンサーや登壇者、そして毎回応援してくれる参加者などの、支えてくださる皆様のおかげに他なりません。これからもGo Conferenceが続くことを願っています。

OpenTelemetry meetupに関しては、3年くらいずっとやりたいという話を @katzchang としていて、今回オフィス移転前のCARTA HOLDINGSさんのイベントスペースをお借りして実現できました。2023年はOpenTelemetryに対する注目度が一段と高まった年だったので、良いタイミングで実施できたと思います。盛り上がりです。

執筆・翻訳・監訳

つぎのような目標を立てていました。

  • 執筆・翻訳・監訳をすすめる
    • 新たな翻訳企画

今年の頭に昨年末に校了した「オブザーバビリティ・エンジニアリング」が出版されました。

ymotongpoo.hatenablog.com

その半年後に、紆余曲折を経て数年越しで「SLO サービスレベル目標」が無事出版に至りました。2年強、コロナ禍でリモートワークが前提の中での翻訳作業でしたが、編集の高さんを始め、関係者のみなさまとは結局一度も直接お会いすることなく出版となりました。来年、機会があれば、今度こそご挨拶できればと思います。

ymotongpoo.hatenablog.com

また同じく、コロナ前から始まっていた企画であった「実践プロパティベーステスト」も無事に出版に至りました。鹿野さんには長年にかけてご迷惑をおかけしただけでなく、編集作業においては私の翻訳から、日本語として格段に上質なものにしていただき、本当に感謝しています。

ymotongpoo.hatenablog.com

2冊は単純に作業が滞った結果今年出版になってしまったというだけではあるのですが、1年に3冊出版というのはなかなかタフな仕事ではありました。特に「SLO サービスレベル目標」と「実践プロパティベーステスト」に関しては、今年を逃すともう出版できないかもしれないというプレッシャーにより無理にでも作業を進めたというのが本当のところではあります。

いずれにせよ、担当編集者のみなさまにも恵まれ、非常に充実した1年となりました。現在、また別の本の翻訳にすでに取り掛かっていて、そちらは早ければ来年第1四半期には出るのではないかと思います。そちらも楽しみにしていてください。

出張/旅行

新型コロナ禍以降、久々に出張などが復活し、海外への移動が多くあった1年でした。写真は初めて行ったクアラルンプールにあるペトロナスツインタワー

スペインは旅行でしたが、それ以外はすべて出張でした。シンガポールやマレーシアは時差が1時間しかないこともあり、本当に気持ちが楽な出張でした。歳を取るにつれて時差ボケが本当にきつくなってきて、サンフランシスコもバルセロナもどちらも本当に疲れました。

来年もすでに海外出張がいくつか決まっているので、現地の人々との交流がいまから楽しみです。

趣味

キャンプ

キャンプに関しては次のような目標を立てていました。

  • 1年を通じたハンモック泊の充実

今年は年の後半は後述する住宅購入やら、イベントやらで思ったほど時間が取れず、ハンモック泊に行けたのは年のはじめだけでした。合計で2回ではありましたが、3月と6月に行ったので、季節としてはだいぶ快適で、防寒対策はクローズドセルマットを用意する程度で、あとは寝袋の性能で十分でした。ハンモック泊での外の空気に直接触れながら寝る感覚は何度行っても爽快感があります。まだ雨のハンモック泊は経験したことがないので、来年はタイミングを見計らって実施したいです。

語学

去年に引き続きDuolingoを1年継続できました。毎日コツコツできるものは得意です。

去年は「DELEを受けるぞー」と息巻いていましたが、11月はCloud Next Tokyoの準備やら、家族旅行やらなにやらでまったく受験とか無理でした!早く受けられるようにしたいところです。いまの感じだと、受験をするとなるとリスニングが明らかに不得意なので、もう少し音声インプットを増やしたいと感じています。家族旅行で行ったスペインも、こちらが話しかけたり、あるいは文章の読み書きをするのはわりかしできるようになっていると実感できましたが、リスニングは他の3つの技能に比べるとレベルが低いように思います。来年は何かしら対策したいところです。

ところで、クアラルンプールに12月頭に行ったことで、思いがけず始めたインドネシア語およびマレー語ですが、文法がかなりわかりやすいので、このまま続けて行こうと思います。

その他

家を買った

去年奨学金を完済して負債がゼロになったばかりでしたが、今年はそれよりもずっと大きな住宅ローンという負債を抱えることとなりました。少し事情が特殊な形で家を購入したので、住宅ローンの審査がなかなか通らず、13行に審査を出してようやく2行から承認を得たという感じでした。ネット銀行は本当にテンプレートから外れると審査が厳しいということを学びました。

本当にこの図のとおりでした。(引用元: 住宅ローンの基本 | モゲチェック

紆余曲折ありましたが、無事に住宅ローンが組め、物件を購入できたので、あとは淡々と返していくだけです。新しい家は築浅の中古戸建てなので、大きなリノベーションが必要ないのが助かります。家具などはいま使っているものがだいぶ年季が入ってしまっているので、これを機に一新しようと思います。

普通自動二輪の教習

前述した物件は地方都市にあり、家の周りを移動するのに車だけだと個人的には不便だと思ったので、一旦原付一種を適当に買おうと思っていました。しかし他の地方都市に漏れず、家の周りは車社会のため、原付一種は馬力の低さゆえに発進や坂道で不満に感じそうだと思い、原付二種を買うことに決めました。とはいえ自分は中型自動車免許しか持っていない(歳がバレる)ので、原付二種には乗れません。こうした事情から、新しいことにも挑戦してみたかったのものあって、勢いで普通自動二輪の免許を取ることにして、年末に通い始めました。

まだ今の段階では卒業検定には至っていなくて、あと1時間第2段階の見きわめをしたあとに卒業検定という状況です。年明けの検定でどうなるか、まったくわかりませんが、合否は一旦置いといて、いままでちゃんと動かし方を知らなかった乗り物を動かせるようになるというのは単純に楽しいです。またこの歳になると、人に教えてもらえることのありがたさをしみじみと感じます。

原付二種を買うと決めてから通い始めた教習ですが、すでに今の時点で普通に中型バイクが欲しくなってるので、おそらくいずれ買うことになると思います。まずは免許を取ってから、いろいろとレンタルバイクで試してみます。

来年に向けて

来年はこんな感じでやっていこうと思います。

  • コミュニティ関連
    • OpenTelemetry meetup とかハッカソンとかやっていきたい
    • Go Conference 2024は久々のオフライン開催なので無事に行う
  • 執筆・翻訳・監訳
    • 1冊は翻訳本を出す
    • 同人でもいいので何かしら書き下ろしたい
  • 趣味
    • キャンプでハンモック泊やタープ泊などの軽量キャンプに行く
    • 普通二輪の免許を取得したらツーリングキャンプに行く
    • グリル料理を覚える
  • 語学

マレーシアに行ってきた

はじめに

こんにちは、Google CloudでオブザーバビリティやSREを担当しているエンジニアです。先日バルセロナに家族旅行に行ってきましたが、今年最後の出張として12月初旬にクアラルンプールに出張に行ってきました。

バルセロナに行くときはアムステルダムまで13時間、そこから乗継便で3時間強と体力的に疲れるフライトでしたが、それと比べたらクアラルンプールまでは直行便で7時間程度なので余裕でした。

旅程

日程 アクティビティ
11/30 NRT→KUL
12/1 マレーシアオフィスで仕事&登壇者懇親会
12/2 DevFest KL 2023
12/3-4 少し観光&KUL→NRT

気付きと感想

Malaysia Digital Arrival Card(MDAC)

マレーシアは90日間の滞在でパスポートの残存期間が半年以上あればビザなしで入国できますが、それ以外にMDACというデジタル入国カードを記入して、入国審査自動化ゲートを使うことを推奨されました。

これは今月1日から義務化されたそうなので、これからマレーシアに行く場合には事前に登録する必要があります。12/8からは登録していないと出発できないそうです。登録自体はパソコンでやればすぐにできるので、これから行くときは気をつけないといけないですね。

KLIA Ekspressを使って市内へ楽々接続

クアラルンプールの中心地はクアラルンプール国際空港(KLIA)から60kmくらい離れているのですが、KLIA Ekspressという特急を使うと一駅でKL Sentral駅まで着きます。乗車時間は30分ぐらいで料金も55MYR(2023年12月現在で1700円くらい)なので、一旦KL Sentralまで移動したい人にはとても便利でした。

会社のオフィスがまさにKL Sentral駅のすぐそばで、自分はKL Sentral周辺のホテルを取ったため、とても便利でした。

現金かQRコードでしか支払えないところがある

日本もそうですが、個人商店のような規模のお店だとクレジットカードを受け付けてくれません。そのため、現金かQRコード決済を用意しておく必要があります。最低限のセーフネットになる現金を用意しておくのが安全でしょう。

自分は海外に行った際にはソニー銀行のキャッシュカードを使って現地ATMから引き出しています。ソニー銀行は為替レートがかなりお得で、手数料もそんなに高くないと思うので便利に使っています。

moneykit.net

blog.moneykit.net

ネットの情報によると普通に過ごすだけなら1日50MYRもあれば十分とのこと。だいたい3日しか滞在しないし、カードが使えるところにも行くので、200MYR程度ATMから引き出した。

Grab超便利

シンガポール出張は度々あるため、現地での移動のためにGrabのアカウントはすでに持っていましたが、マレーシアでも配車サービスといえばGrabなので同じアカウントを便利に使えました。料金もだいぶ安く、KL SentralからSunway周辺まで20km近く、35分の乗車で34MYR弱でした(日本円で1000円程度)。

また先のQRコードでの支払いに関しても、Grab PayというのがあってGrabアカウントに旅券番号を登録すればすぐに使えます。

電車は券売機の機嫌を知るのが難しい

Grabは便利なんですが、基本的に公共交通機関を無理なく使える場合は乗りたい主義なので、電車も活用します。Rapid KLという鉄道がKL Sentral駅を中心にクアラルンプール市内をさまざまに接続しているので、ちょっと乗ってKLCCのほうへ行ってみました。

まず切符売り場で切符を買います。日本のSUICA的なTouch'n Goというカードもあるのですが、券売機を使ってみたかったので切符にしました。

www.touchngo.com.my

これが券売機です。

この券売機がなかなかに曲者で、まずカードを使おうと思ったら「調子が悪いのでクレジットカードはやってません」という感じで使えませんでした(券売機右上の赤くステッカーで隠してある部分)。まあでも現金が余ってたので特に気にせず買います。路線を選んで、行き先の駅を選ぶと支払いの画面になります。

ここが完全にトラップで、券売機によって使える現金がまちまち!写真を見てわかるように、使えない紙幣には大きくバツ印が書いてあります。この券売機は5MYR紙幣まで使えますが、別の券売機を使ったときは紙幣が一切使えませんでした。小銭をそんなに持ってなかったので、そのときは仕方なく別の券売機に並びなおすわけですが、最終的な支払いの画面までこのステータスがわからないので、ちょっとしたギャンブル気分でした。

マレーシア国産車がとても多い

マレーシアは長年首相を務めたマハティール元首相が国産車構想を打ち立て、1985年にプロトン社を三菱自動車三菱商事との合弁で作ったあとに、それをうけてダイハツ三井物産との合弁でプロドゥアというコンパクトカーメインの会社が立ち上がった、という話を、マレーシア滞在中に大量のプロトン車、プロドゥア車を見かけて調べてみて初めて知りました。

おそらくGrabで配車を頼むと、結構な確率でこの2社の車が来ると思います。

商業施設のCフロアの意味がよく分からなかった

クアラルンプール市内のビル施設には当然いくつも階があるわけですが、その中でフロア名が「C」となっているところがチラホラありました。ヨーロッパ文化圏、北米文化圏の国にそれぞれそれなりに行ったことがありますが、C階という区分けを見かけた記憶がないのでなんだろうと思っていました。

特定の階がC階になるわけではなく、ビルによってその階の位置はまちまちで、ただ共通項としては他の施設と繋がっている階がC階になっていたので、おそらくConnectionとかそんなような意味合いの言葉の頭文字だろうと思っていました。

これはKLCCの階

こちらはNU Sentralの階

で、NU Sentralのフロアマップを見て「Concourse」と書いてあったので、なるほどと思いました。実際英語版Wikipediaには次のような説明がありました。

en.wikipedia.org

C for "Casino" or "Concourse"

もしかしたら他の国でも見かけているかもしれないけれど、この頻度で見かけるのはクアラルンプールの特徴かなあと思いました。

Duolingoのインドネシア語コースが予想以上に役立つ

せっかくマレーシアに行くので、多少現地語がわかったほうがいいと思い、行く2日前から付け焼き刃でDuolingoでインドネシア語のコースを取り始めました。「え、マレー語じゃないの?」という疑問を持つのは当然で、本当はマレー語のコースを取りたかったんですが、Duolingoにはインドネシア語しかなかったので、そちらを始めました。

www.duolingo.com

インドネシア語とマレー語は文法や語彙などは近しいものがあるため、知っているとある程度現地で看板などが読めたりします。

www.tufs.ac.jp

インドネシア語、マレー語はダイアクリティカルマークを使わないアルファベットを使い、発音もほぼローマ字読み(eやcがわかりやすく音が違う)で、文法はわりとシンプルで覚えやすい感じなので、学びやすいなと思いました。

www.tufs.ac.jp

現地で現地語を理解するというのは、この上なく楽しいものなので、出張や旅行に限らず、なるべく様々な言語を習得していきたいものです。

早朝にNEXがない

成田に朝6時に到着したのはおそらく初めてでした。

ja.flightaware.com

到着してみてから初めて気がついたのですが、成田エクスプレスの始発が7時40分とかで、せっかく早く成田に着いたのに1時間くらい暇な時間ができてしまいました。

www.jreast-timetable.jp

www.keisei.co.jp

ちょっとだけ始発が早く、かつ山手線までの所要時間はとりあえず短い京成スカイライナーに乗るという手もありましたが、なにせ山手線に着く頃には通勤ラッシュとぶつかる時間帯だったので、疲れた体で荷物を持ってその中を移動するのもためらわれたため、成田線快速逗子行きで品川まで行きました。結局座れはしたものの品川まで1時間半くらい千葉方面からの通勤混雑に遭遇したため、次はこのあたりのスケジュールも考慮して帰ろうかと思います。

参照

スペインに行ってきた(2回目)

はじめに

こんにちは、Google CloudでオブザーバビリティやSREを担当しているエンジニアです。この記事はpyspa Advent Calendar 2023の6日目の記事です。昨日はしろうさんの「2023に有った無なこと」でした。

今年は本当に公私ともに疲れたので、11/19-27の日程でバルセロナに家族旅行をしてきました。そのときに気づいたこととか感想を書いてみます。

旅程

日程 アクティビティ
11/19 NRT→AMS→BCR
11/20 散歩、フラメンコライブ
11/21 サンパウ病院&サグラダ・ファミリア
11/22 モンセラット
11/23 市内バスツアー、外食
11/24 バルセロナ水族館、外食
11/25 バルセロナ動物園、外食
11/26-27 BCR→AMS→NRT

スペイン旅行と言いつつ、全日程バルセロナのみの旅行です。

気付きと感想

スペインは7年前に一度行っていて今回が2回めでしたが、前回は大人だけでの旅行で、今回は子どももいる旅行だったので勝手がだいぶ違いました。特に夜に気軽に遊びに行けないのは、バルセロナの旅行においてはだいぶ勝手が変わります。1度行ってる場所だからそんなに新しい気付きは無いだろうと思っていたら、前回と同行者も異なれば、自分のスペイン語力も違うこともあって、多くの気付きがありました。

シベリア上空通れないのきつすぎる

ロシアのウクライナ侵攻開始以降でヨーロッパに行くのが初めてでしたが、事前にわかっていたとはいえ13時間超のフライトはなかなか堪えました。シベリア上空が通れないので、行きは北極圏ルート、帰りは中国上空ルートで帰ってきました。

しかし、北極圏ルートなんて冷戦時代の過去の話と思っていたので、まさかこうしてそのルートを使う羽目になるとは思ってもみませんでした。昔と違ってアンカレジで給油しないで済むようになっただけマシとは言えますが、体が大きいのでエコノミーシートに13時間はなかなかにハードでした。またいろいろと国同士のいざこざはありますが、中国も上空を通してくれていることは助かりました。ここを通れないとなるとユーラシア大陸上空は中東経由とかにするしか無くなります。

ja.flightaware.com

ja.flightaware.com

またスペインは旅行当時の2023年11月には日本からの直行便が存在せず、今回はアムステルダムでの乗り換えにしましたが、乗継便の待ち時間も含めて片道20時間くらいかかったので、移動で相当体力持っていかれました。多少親バカになりますが、うちの子どもは長時間フライトにも関わらず移動中ぐずりもせず、iPadや機内エンターテインメントなどで静かに過ごしてくれて、本当に助かりました。これで13時間未満の直行便であれば余裕を持って家族旅行に行けるという自信にもなりました。

スペイン語で畳み掛けられる

新型コロナ禍に入ってからDuolingoでスペイン語の勉強を始めたんですが、3年位続けているといよいよ実際にスペイン語圏に行って試してみたいという気持ちになり、今回のバルセロナ旅行は個人的に修学旅行の意味も込めて行ってきました。毎日少しずつでも続けているだけあって、読み書きに関してはかなり分かるようになっていて、街頭の看板や文章、お店のメニューなんかはそのまま理解できることが多かったです。

また店員との挨拶や注文なんかのやり取りでは、こちらがスペイン語で話す分には普通に理解してもらえました。一方で、聞き取りはだいぶ難しいと感じました。こちらがゆっくりでもスペイン語を話すと、相手は普通のスピードでスペイン語で返してくるため、それを理解するのに苦労することがしばしばありました。「ゆっくり話してほしい」といっても結局0.95倍速くらいの速度で返されることが何度かあったため、ゆっくり話してもらうことは早々に諦めました。

英語のリスニングがまだ苦手で、全然聞き取れなかった頃の感覚を思い出して新鮮でしたが、最終的にスペイン語で意思疎通できなかったときは英語でやり取りできる事が多いので、安心感はだいぶ違いました。英語は国際語とはいえ、前回来たときの学びのとおりやはりスペイン語が話せるに越したことはないなと実感しました。

カタルーニャ語優先だけどスペイン語は全然使える

バルセロナ含むカタルーニャ自治州は、近年でも独立に関して住民投票が行われたりと、歴史的経緯から長らく中央政府との確執が強い地域です*1。独自の文化も持っていて、地域の言語であるカタルーニャ語を地域公用語としています。スペインの国家としての公用語スペイン語ではあるので、公共施設などではカタルーニャ語スペイン語、英語の3カ国語が併記してあるのがよく見かけられます。

これは動物園内の禁煙に関する注意書き。右側に太字で大きくカタルーニャ語、左側に太字でスペイン語、細字で英語が書いてあります。

これは水族館内の案内。上からカタルーニャ語スペイン語、英語。

これは駅の路線案内。左から太字で大きくカタルーニャ語、普通のウェイトでスペイン語、斜体で英語

そんなバルセロナですが「カタルーニャ語を話さなければ疎まれて無視される」というようなことはまったくなく、むしろスペイン語で話すのであれば歓迎されるようなことばかりでした。自治州として確執はあるものの、外国人旅行者がその国の言語を話そうとする姿勢を示すだけでだいぶ歓迎されているように思います。

バイクが多い

バルセロナ市街に長期滞在して気がついたのですが、市内を走っているバイクが非常に多かったです。

特にビッグスクーターを多く見かけました*2。目にしたもので多かったのはヤマハのXMAXスズキのBurgmanでした。警察も白バイにBMWビッグスクーターを採用したりしているくらいでした。

バイクが多いので、当然バイク駐輪場も充実しています。こちらはバルセロナ市街中心地のカタルーニャ広場の端にあるバイク駐輪場です。

他にも町中にバイク駐輪場がいたるところに設置されていました。

タクシーが多い

良くバルセロナの観光ガイドには「タクシーが多いから普通に手を挙げて捕まえましょう」みたいなことが書いてありますが、実際に観光にいってみて改めて意識してみると、どこを歩いていてもタクシーを見かけました。

この黄色と黒のペイントがしてあって、車両の上にTAXIという光るサインと緑ランプがあり、どこかに登録番号が書いてあるタクシーは正規タクシーなので安心して乗れます。料金は自治州が公表していて、記載のある何段階かのレートが適用されます。

料金 時間 初乗り km毎
T-1 平日昼間(8:00-20:00) €2.30 €1.21
T-2 休日終日 or 平日夜(20:00-8:00) €2.30 €1.45

他にあとT-3とT-4という料金体系がありますが、前者はタクシーアプリ(後述)経由での固定料金、後者はクルーズ船に乗るときの固定料金なので、流しで乗るときは上の2つの料金体系だけ気にしていれば大丈夫なようです。(空港など入るのに別料金が追加されることもあります)

タクシースタンドもあって、このような黄色でギザギザが書いてあるところで「TAXI」という看板がある場所で手を挙げて待っていればタクシーが来てくれます。

なお、Uberバルセロナでは使えませんが、上記のように流しのタクシーがたくさん走ってるのであまり困ることはありません。それでも自分の場合は、復路の飛行機が朝6時で、朝3時半には出なければならず、かつコンドの管理会社もタクシーの予約の手伝いはできないとのことだったので、仕方なくタクシー配車アプリを使いました。

www.free-now.com

FREE NOWというアプリが一番使われているとのことだったので、そちらを使ったのですが、最初だけSMS認証をしなければならず、使っていた海外SIMがSMSに対応していなかったので、その設定のためだけに日本のSIMを一瞬だけ使いました。日本でアクティベートしてから行くことをオススメします。使い方はUberとかと変わらず簡単で、かつちゃんと事前に予約した通りの時間に来てくれたので良かったです。料金も事前に提示してくれていたので安心でした。(おそらく上のT-3に該当する料金)

朝3時半でもちょっと移動して待っていれば捕まえられそうなくらいにはタクシーが走っていたので、一人で旅行している場合にはあまり必要ないと思います。

公共のゴミ箱が多い

上のタクシーが並んでる写真の手前部分に黒いゴミ箱があると思うんですが、あんなゴミ箱が街中にありました。町中でコーヒー飲んだりチュロス食べたあとのゴミなんかをそこに捨てられて便利でした。

そしてそれとは別にめちゃくちゃでかい分別ゴミ箱がところどころにあって「このでかいゴミ箱はどういう扱いなんだ...?」と疑問に思っていました。家庭ごみなんかもここに捨てに来るそうです。満杯になるとゴミ収集車がいい感じに集めてくれるそうです。

スーパーのレンチン食材も美味しい

「スペインはご飯が美味しい」というのはもはや説明の必要のないほどの周知の事実ですが、スーパーで売っているレンチンの食材も日本に引けを取らないほど美味しかったです。これはある日のもう疲れ切ってしまってコンドの中で食べることにした夕食の食卓ですが、ムール貝イカスミパエリア、スパニッシュオムレツ、ズッキーニスープのいずれもただ買ってきたものをレンジなりコンロで温めただけです。どれも満足でした。地元ビールはあまり好みではありませんでした。

スーパーといえば、生ハムにかける本場の熱意を感じました。

自転車専用道はあるにはある

日本では自転車は原則車道ということになって、急場しのぎで車線の端に自転車マークや走行帯を表す青い印を描いただけのところがほとんどですが、バルセロナ市街では一応専用道らしきものが確保されている場所がチラホラありました。

とはいえすべての道路がこうなっているわけではなく、ない場合は日本と同じように車道の端を走れという感じでした。日本と比較して思ったのは自転車に乗る人がアグレッシブで、連結バスの横を自転車がすり抜けようとしたけれど、車幅の狭さのせいでバスの窓にぶつかってる人が一人二人ではありませんでした。

観光バスは初手で乗っておくと便利

子どもが時差ボケで眠い中歩くのは嫌だからバスに乗りたいというので、到着3日目は一日市内観光バスに乗りました。バルセロナ市内観光をしてくれる観光バスは2種類あって、紫のほうがバルセロナ市が運営しているもの、赤いのが民営です。公共機関にお金を落としたほうがいいと思ったので自分たちは市が運営するものに乗りましたが、民営に乗っても大差はないと思います。

3日目で乗ることにしましたが、一番最初にこれに乗っておいたほうが良かったなと乗ってから思いました。理由としては「バルセロナ市街の全容を楽に大まかに知れる」「主要観光地のクーポンがもらえる」からです。

バルセロナは南東にある海岸から北西の山際の高級住宅街まで南北に高低差があるんですが、それを効率よく回るのはなかなか難しいです。特に南側の地区はあまり便が良くないので、さーっと流して主要な施設を様子だけ眺めたいという場合には観光バスは便利だなと思いました。

またバスに乗る際にもらえるクーポンを使うと主要な観光地がまあまあ割引される(家族全員分だとお茶するくらいは割り引かれる)ので、観光地に多く行く場合にはおすすめです。(オンラインで予約する場合に使えるクーポンコードも書いてある)

おわりに

まだ気付きはあったような気もしますが、気がついたらまた追記します。

スペインは今回が2回目でしたが、前回も今回もとても楽しく過ごせました。特に今回はスペイン語をある程度使えるようになってから行ったのでより楽しめました。やはり語学は楽しい。長時間フライトは大変ではありますが、また機会があれば、次はマドリードやマラガなんかに行ってみたいです。明日は渋川さんです。

参照

*1:サッカーでもレアル・マドリードFCバルセロナの対戦であるエル・クラシコ中央政府カタルーニャ地方の代理戦争的な意味合いを持っていることも有名。

*2:もちろん、普通のネイキッドやツアラーなども見かけましたが、スクーターの数が多かったです

「実践プロパティベーステスト」という本が出版されました #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年ほど停止しているので挙げませんでした