Jekyll2023-11-21T06:58:15+09:00http://b.l0g.jp/feed/index.xmlb.l0g.jpdoublemarket『詳解 Terraform 第3版』を翻訳しました2023-11-21T00:00:00+09:002023-11-21T00:00:00+09:00http://b.l0g.jp/books/2023/11/21/terraform-up-and-running-ja<p>『<a href="https://www.oreilly.co.jp/books/9784814400522/">詳解 Terraform 第3版</a>』という本が本日2023年11月21日、オライリー・ジャパンから出版されました。米O’Reillyから出版されている『<a href="https://www.terraformupandrunning.com/">Terraform: Up and Running, 3rd edition</a>』を私が日本語訳したものです。この本は原著の初版が出版された頃からぜひ自分で翻訳したいと思っていたので、やっとここに至れて個人的にとても嬉しいです。</p>
<center><img border="1" src="/images/2023-11-21-terraform-up-and-running-ja/terraform-ja.jpeg" /></center>
<ul>
<li>目次(詳細は<a href="https://www.oreilly.co.jp/books/9784814400522/#toc">オライリーのページ</a>へ)
<ul>
<li>第1章 なぜTerraformを使うのか</li>
<li>第2章 Terraformをはじめよう</li>
<li>第3章 Terraformステートを管理する</li>
<li>第4章 モジュールで再利用可能なインフラを作る</li>
<li>第5章 Terraformを使うためのヒントとコツ: ループ、条件分岐、デプロイ、その他のつまずきポイント</li>
<li>第6章 シークレットを管理する</li>
<li>第7章 複数のプロバイダを使う</li>
<li>第8章 本番レベルのTerraformコード</li>
<li>第9章 Terraformのコードをテストする</li>
<li>第10章 チームでTerraformを使う</li>
</ul>
</li>
<li><a href="https://www.amazon.co.jp/dp/4814400527/">Amazonの書籍詳細</a></li>
</ul>
<p>帯などにはTerraform 1.0対応とありますが、より詳しく言うと原著はTerraform 1.2までの変更が含まれており、かつ日本語版ではTerraform 1.5までの変更(原稿を仕上げたのが1.6発表の直前でした)に関しても訳注としてできるだけ情報を追加しています。ちなみに第3版とありますが、翻訳の元になった原著が第3版なためで、日本語ではこれが最初の版です。</p>
<p>基本的にはAWSにリソースを作るチュートリアル形式で、インスタンスを1台デプロイする非常に短いコードから始まり、徐々にそこにリソースを追加していくような流れで進んでいきます。</p>
<p>とは言え、目次を見ていただくと分かるように単に文法を学んでいくだけではなく、Terraformをチームで使ったり複雑な使い方をしていくと必ず突き当たるであろう問題に対するベストプラクティスを提示する流れにもなっています。この本で取り上げられているこういったテクニックやベストプラクティスの主な点をいくつか抜粋すると次のようなところでしょうか。</p>
<ul>
<li>開発、ステージング、本番と環境が増えていくときのステートファイルの管理</li>
<li>Terraformコードを保存するリポジトリのディレクトリ構造をどうするか</li>
<li>モジュールはどういう時に使い、どう分けるべきか、どの程度の粒度にすべきか</li>
<li>リファクタリングの注意点</li>
<li>パスワードなどのシークレット管理</li>
<li>AWSとAzure、あるいはAWSの複数のリージョンといった複数のプロバイダの扱い方</li>
<li>テスト
<ul>
<li>1.6で導入されたterraform testは含まれませんが、プランテスト、terratest、インフラ(E2E)テストなどが含まれます。</li>
</ul>
</li>
<li>開発プロセスあるいはCI/CDへの組み込み</li>
</ul>
<p>これに加え第10章の冒頭ではTerraformを使っていないチームにTerraformを導入する場合の根回しの流れが書いてあるのですが、この記述がTerraformに限らず新しいツールや技術をチーム内で導入しようとした時の一般的あるある例になっており、個人的には面白かったです。</p>
<p>著者のYevgeniy Brikman氏は、Terraformを活用したインフラの構築運用などを手掛けるGruntwork社の創業者でありCTOです。この本はそのビジネスを通じた経験を元にして書かれており、Terraform導入にかかるコミュニケーション的な側面も、Terraformを使って顧客に対しサービスを提供してきた経験からくる知識でもあるのでしょう。また、長年Terraformコミュニティに貢献してきた人でもあります。</p>
<p>一方で、最近のTerraformのライセンス変更から始まった論争の中では、いち早くライセンス変更に異議を唱えており、その論争に端を発しTerraformからフォークされたOpenTofuプロジェクトの発起人の1人でもあります。</p>
<p>そのあたりからもうかがえるように、Terraformとそれを取り巻くエコシステムはやや先が見えない時代を迎えているとも言えますが、以前と比べると多くの人に使われるようになっており、その意味ではこれまでにない安定した時期を迎えているとも言えます。この本は、現時点のTerraformを使いこなそうと考える人に対しては、幅広い分野をカバーしており決定版と言っていいでしょう。今まで、日本のTerraformコミュニティの広がりに比べると広い範囲をカバーした日本語書籍は少ない印象でしたが、この本がさらに日本のTerraformユーザを増やす一助になればと思います。</p>doublemarket『詳解 Terraform 第3版』という本が本日2023年11月21日、オライリー・ジャパンから出版されました。米O’Reillyから出版されている『Terraform: Up and Running, 3rd edition』を私が日本語訳したものです。この本は原著の初版が出版された頃からぜひ自分で翻訳したいと思っていたので、やっとここに至れて個人的にとても嬉しいです。『入門 監視』を翻訳しました2019-01-18T00:00:00+09:002019-01-18T00:00:00+09:00http://b.l0g.jp/books/2019/01/18/practical-monitoring<p>サーバやネットワーク、セキュリティなどシステムの監視に関わる心構えや取り組み方を解説した「<a href="https://www.oreilly.co.jp/books/9784873118642/">入門 監視</a>」という本が、2019年1月17日にオライリー・ジャパンさんから出版されました。原書は「<a href="http://shop.oreilly.com/product/0636920050773.do">Practical Monitoring</a>」という本で、それを私が翻訳したものです。私が訳した本としては3冊目、オライリー・ジャパンさんから出版されるものとしては「<a href="https://www.oreilly.co.jp/books/9784873118406/">入門Kubernetes</a>」に続いて2冊目です。</p>
<center><img border="1" src="/images/2019-01-18-practical-monitoring/practical-monitoring.jpg" /></center>
<ul>
<li><a href="https://www.oreilly.co.jp/books/9784873118642/#toc">目次</a></li>
<li><a href="https://www.amazon.co.jp/dp/4873118646/">Amazonの書籍詳細</a></li>
</ul>
<p>私がこの記事を書くのにモタモタしているうちに、書評を書いてくださった方が早くもいらっしゃるのですが、いちおう翻訳者としてこの本について少し紹介しておこうと思います。</p>
<p>「入門 監視」のユニークなのは、監視と言うとどうしても特定の監視ツール(Nagios、Zabbix、Mackerelなどなど)の話になってしまいがちなのですが、そこをあえて特定ツールの名前をなるべく出さないようにしているところです。むしろ著者が冒頭の第1章から戒めているのは、ツール依存です。ツールから監視を考えると非効率な仕組みを作ってしまいがちであり、さらに監視とは単一の問題ではなく色々な問題が複雑に絡み合ったものなので、監視したいもの、監視すべきものを元にしてツールを選ぶという順番を取るべきであるという主張が書かれています。それ以降も、著者の経験を元にした監視のアンチパターン、デザインパターン、そしてサーバやネットワークからビジネスKPIの監視、セキュリティ監視などといった対象ごとの監視のポイントが書かれるという流れです。どの記述も著者の強い主張がにじみ出ているのですが、それでいて監視についての本質を突いたことが簡潔にまとめられています。</p>
<p>数年前私がとあるシステムの運用を引き継いだ時、監視は一通り設定されており、障害があれば気づける状態にはなってはいました。しかし、毎日大量のアラートメールが飛んできており、しかも大部分は無視してよいものでした。そのため、私の最初の仕事はそれらが自動的に既読になるようメールの設定をすることでした。その時点ではそんなものかなと思いつつ、あれこれ試行錯誤をしてそういった「慣れている人が見ないと本当に対応が必要かどうかわからないアラート」ばかりを生成する監視システムを改善していきました。初めてこの「入門 監視」の原書「Practical Monitoring」を読んだ時は、その時の試行錯誤の結果分かったことがほとんど書いてある!という驚きを感じたものです。この本を翻訳しようと思ったきっかけがこの驚きでした。とりあえず監視をしないといけないから監視ツールを導入したけれど本当に十分なのか分からない、意味不明なアラートメールがたくさん飛んできていて困っている、これからシステムの監視をしないといけないが何をしたらいいか分からない、といった監視の初心者の方が、監視に対する考え方を身につけるのにはとてもよい本です。</p>
<p>原文ではあえてツールに関する記述が少なくなっていますが、それだと監視に初めて触れる人にとっては抽象的な話ばかりになってしまうので、もう少し具体的な話を付録として付け加えればいいのになと、原書を読んだ時から考えていました。そこで、SaaS型サーバー監視サービスである<a href="https://mackerel.io/ja/">Mackerel</a>のプロダクトマネージャーである株式会社はてなの松木雅幸さん(<a href="https://twitter.com/songmu">@songmu</a>)に付録を書いていただきました。注意点などを含め分かりやすい解説を書いていただいたことで、本全体のバランスがずっとよくなったと確信しています。</p>
<p>ちなみに、「入門 監視」というどストレートなタイトル、短すぎるとは思ったものの特に違和感は感じませんでした。どうやら驚きを感じた人が多かったようですが。。</p>
<blockquote class="twitter-tweet" data-lang="ja"><p lang="ja" dir="ltr">正直「入門 監視」というタイトルに違和感を抱かない程度には監視脳になっています。</p>— songmu (@songmu) <a href="https://twitter.com/songmu/status/1084820477434945536?ref_src=twsrc%5Etfw">2019年1月14日</a></blockquote>
<script async="" src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>
<p>私もまさにこの感覚でいました。</p>
<h2 id="謝辞">謝辞</h2>
<p>今回も、レビュアーの方々には丁寧に本文をチェックしていただき、技術的な指摘から日本語としての読みやすさまで、様々なアドバイスをいただきました。レビュアーのみなさま、そして付録の執筆をしていただいたsongmuさんにはここで感謝を表したいと思います。</p>doublemarketサーバやネットワーク、セキュリティなどシステムの監視に関わる心構えや取り組み方を解説した「入門 監視」という本が、2019年1月17日にオライリー・ジャパンさんから出版されました。原書は「Practical Monitoring」という本で、それを私が翻訳したものです。私が訳した本としては3冊目、オライリー・ジャパンさんから出版されるものとしては「入門Kubernetes」に続いて2冊目です。『入門Kubernetes』を翻訳しました2018-03-12T00:00:00+09:002018-03-12T00:00:00+09:00http://b.l0g.jp/books/2018/03/12/kubernetes-up-and-running<p>コンテナを管理するオーケーストレータとしてデファクトスタンダードになりつつあるKubernetesに関する入門書『<a href="https://www.oreilly.co.jp/books/9784873118406/">入門Kubernetes</a>』を翻訳しました。2018年3月22日に、オライリー・ジャパンから発売されます。原著は『<a href="http://shop.oreilly.com/product/0636920043874.do">Kubernetes: Up and Running</a>』です。</p>
<center><img border="1" src="/images/2018-03-12-kubernetes-up-and-running/kubernetes-up-and-running.jpg" /></center>
<ul>
<li><a href="https://www.oreilly.co.jp/books/9784873118406/#toc">目次</a></li>
<li><a href="https://www.amazon.co.jp/dp/4873118409/">Amazonの書籍詳細ページ</a></li>
</ul>
<p>Kubernetesの開発者たちが直接Kubernetesを解説した本で、Kubernetesでアプリケーションを動かすために必要な色々な概念を、実際にKubernetesクラスタ上で動かしてみながら学んでいくという構成になっています。</p>
<p>また、チュートリアルだけでなく「なぜコンテナを使うべきなのか」「どういう経緯でKubernetesが生まれたのか」「マイクロサービスの何がいいのか」といった、コンテナやマイクロサービスが広まって来た背景についても書かれています。そのため、コンテナはほとんど触ったことがないという人でも読み始められるようになっています。</p>
<p>入門書なのでKubernetesの機能のすべてが網羅されているわけではありませんが、Kubernetesを理解するための基本的な事項については一通り書かれています。Kubernetesの公式ドキュメントはとても丁寧に書かれているので(ただし英語)、まずこの『入門Kubernetes』を読んでKubernetesの仕組みと基本的なリソースを学び、さらにその先を知りたい場合には公式ドキュメントを読み込んでいくというのにぴったりだと思います。</p>
<h2 id="日本語版独自の改善点">日本語版独自の改善点</h2>
<p>原著はKubernetes 1.5あるいは1.6をベースに書かれています。日本語版には、翻訳完了時の最新版であるKubernetes 1.9までに加えられた変更などを、注釈などの形でできるだけ反映しました。チュートリアルを簡単に進められるように、原著の内容に合わせて<a href="https://github.com/kubernetes-up-and-running/examples">サンプルデータのリポジトリ</a>が用意されているのですが、これも日本語版に合わせて<a href="https://github.com/doublemarket/kuar-examples-1-9">Kubernetes 1.9対応データを含むリポジトリ</a>を用意しました。</p>
<p>また、原著への「内容はいいのに誤植が多すぎる」といった指摘に対しては、翻訳の際にできる限り修正を反映させるようにしています。</p>
<h2 id="翻訳の経緯と謝辞">翻訳の経緯と謝辞</h2>
<p>英語を日本語に翻訳することで日本語の情報量を増やしたいという思いで、<a href="https://yakst.com/ja">人力翻訳コミュニティYakst</a>というサイトを作って翻訳したり、<a href="http://b.l0g.jp/uncategorized/sql-performance-explained-ja/">『SQLパフォーマンス詳解』というデータベースに関する本の翻訳</a>などをしてきました。その先に、いつかは書店で売られる本の翻訳がしたいと思っていたところ、機会をいただいて実現することになりました。</p>
<p>私自身Kubernetesに関してはまだまだ経験が浅いこともあり、Kubernetesの運用経験豊富なレビュアのみなさまからの指摘無しにこの本は完成しなかったといっても過言ではありません。レビューしていただいた<a href="https://twitter.com/mahata">@mahataさん</a>、<a href="https://twitter.com/ladicle">@Ladicleさん</a>、<a href="https://twitter.com/superbrothers">@superbrothersさん</a>、<a href="https://twitter.com/strsk">@strskさん</a>、<a href="https://twitter.com/deeeet">@deeeetさん</a>(順不同)には本当に感謝するばかりです。</p>
<p>「私は『入門Kubernetes』でKubernetesを始めました」という人がたくさん現れて、日本のKubernetesコミュニティがさらに盛り上がっていくことにつながれば、翻訳者としてこの上ない喜びです。みなさんぜひ読んでみてください!</p>doublemarketコンテナを管理するオーケーストレータとしてデファクトスタンダードになりつつあるKubernetesに関する入門書『入門Kubernetes』を翻訳しました。2018年3月22日に、オライリー・ジャパンから発売されます。原著は『Kubernetes: Up and Running』です。Tokyo Rubyist Meetupでデータベースのインデックスについて英語で話した2017-02-12T00:00:00+09:002017-02-12T00:00:00+09:00http://b.l0g.jp/databases/2017/02/12/giving-a-talk-at-trbmeetup<p>The English version is at the end of this post.</p>
<p><a href="https://trbmeetup.doorkeeper.jp/events/56308">2月10(金)に開催されたTokyo Rubyist Meetup</a>というイベントで、自分が翻訳した<a href="http://sql-performance-explained.jp/">SQLパフォーマンス詳解</a>という本をベースにして「How indexes work in relational databases」という題で発表した。題名からわかるように、英語での発表。</p>
<script async="" class="speakerdeck-embed" data-id="a54c372ef22749ff9af1d235dcaa7fe8" data-ratio="1.77777777777778" src="//speakerdeck.com/assets/embed.js"></script>
<p><a href="https://trbmeetup.doorkeeper.jp/">Tokyo Rubyist Meetup</a>は、Doorkeeperの社長<a href="https://www.doorkeeper.jp/team/paul">Paul McMahon</a>さんが主催している、Rubyのことを中心にしつつも色々なトピックを取り上げている英語話者向けの勉強会。Paulさんからお声がけがあって、DBエンジニアからの知見はRubyistにもうけると思うよということで、英語の勉強と本の宣伝とデータベース知識の整理の意味で発表することにした。Paulさん貴重な機会をくれて本当にありがとうございました!</p>
<p>内容的には、<a href="http://sql-performance-explained.jp/">SQLパフォーマンス詳解</a>(の<a href="http://sql-performance-explained.com/">英語版</a>)の第1章の要約みたいな感じで、インデックスがなぜ必要なのか、Bツリーインデックスはどうやってデータを探すのに役立つのかといった基本的なところを書いた。Active Recordばっかり使ってて、SQLがどう動いているのかあまり意識していなかったり、高速に応答するクエリをどう書いたらいいのかわからない人に向けて、インデックスコワクナイヨ、ということを言ったつもり。しかし特定のDB(MySQLとかPostgreSQLとか)についてあえて触れなかったので、内容的に抽象的すぎたかもしれない。こういう発表って、どの程度の人をターゲットにするかブレないようにすること、そして抽象的すぎず突っ込みすぎずな内容にもっていくのが難しい。</p>
<p>今年は意識的に英語でアウトプットしていこうと思っているので、できる限り機会を見つけてこういう場で発表するつもり。</p>
<hr />
<p>I gave a talk “How indexes work in relational databases” based on the book <a href="http://sql-performance-explained.jp/">SQL Performance Explained</a> at <a href="https://trbmeetup.doorkeeper.jp/events/56308">Tokyo Rubyist Meetup held on Feb. 10</a>.</p>
<p>(See the material above.)</p>
<p><a href="https://trbmeetup.doorkeeper.jp/">Tokyo Rubyist Meetup</a> is a tech meetup for English speaking Ruby engineers organized by the CEO of Doorkeeper Inc. <a href="https://www.doorkeeper.jp/team/paul">Paul McMahon</a>. One day, he gave me an email and suggested me to talk about a topic related to databases. I decided to talk something to practice my English, to promote the book, and to reorganize my thought on databases. Thank you very much Paul, this was my precious experience!</p>
<p>The talk was basically the summary of the chapter one of <a href="http://sql-performance-explained.com/">SQL Performance Explained</a>, including basic topics like why indexes are needed and how B-tree indexes search a record. The talk was for developers who use Active Record and don’t have enough knowledge about indexes and what I wanted to say for them is that don’t be afraid of indexes. I intentionally avoid to write about a specific database management system (MySQL, PostgreSQL, etc.) to focus on how indexes work in general but because of that, the talk might be too abstract. Hopefully, the talk was a good introduction to the internal of databases for attendees.</p>
<p>I’m going to talk at some more events in this year to improve my English skill.</p>doublemarketThe English version is at the end of this post.AWS, GCP, Azureの障害情報の提供方法とTwitterボット2016-10-24T00:00:00+09:002016-10-24T00:00:00+09:00http://b.l0g.jp/cloud/2016/10/24/aws-gcp-azure-status<p><a href="http://b.l0g.jp/misc/my-twitter-bots/">Twitterボットを作るのが趣味という記事</a>を以前書いたが、そのからみでAWS(Amazon Web Service)、GCP(Google Cloud Platform)、Microsoft Azureの主要3クラウドの障害情報Twitterボットを作った。面白いもので3サービスとも障害情報の提供方法やポリシーが違っていて、ボットのような障害情報を取ってきて通知する仕組みをつくるのはちょっと面倒。せっかくなのでボットの宣伝も兼ねて障害報告に関するサービス間の違いを挙げておく。自分で通知の仕組みを作ったり、サービスを選ぶときの参考に。</p>
<p>ちなみに、これらのサービスを既に使っている人は、単純にこれらのボットをフォローするか、Slack(<a href="https://get.slack.help/hc/en-us/articles/205346227-Add-Twitter-to-Slack">英語の公式ドキュメント</a>、<a href="http://qiita.com/YuukiOgino/items/54f427544fe2fa304a80">日本語記事</a>)やHipchat(<a href="http://www.e-agency.co.jp/column/zapier_twittertohipchat.html">Zapierを使った方法の日本語記事</a>)などにボットのツイートを通知するようにしておくと、障害検知の一環としても使えますのでぜひどうぞ。どのボットも障害発生時間などを日本時間に置き換えてツイートする仕組みです。</p>
<h1 id="aws">AWS</h1>
<h3 id="twitterボット">Twitterボット</h3>
<ul>
<li>全リージョン対象 <a href="https://twitter.com/awsstatusjp_all">@awsstatusjp_all</a>
<ul>
<li>下のボットのツイートも包含されるので片方フォローすればOK</li>
</ul>
</li>
<li>東京リージョン関連のみ <a href="https://twitter.com/awsstatusjp">@awsstatusjp</a>
<ul>
<li>東京リージョンのサービスと、S3やManagement consoleなどリージョンなしのサービスの障害が対象</li>
</ul>
</li>
</ul>
<h3 id="障害情報サイト">障害情報サイト</h3>
<ul>
<li><a href="http://status.aws.amazon.com/">http://status.aws.amazon.com/</a></li>
<li>大まかな地域ごとにタブが並んでおり、その中に地域内の全リージョン、全サービスが一列に並ぶ</li>
<li>障害があると左端の緑の丸がオレンジになり、障害の詳細がDetails列に簡潔に書かれる</li>
<li>他のサービスと比べると障害内容の記述はシンプルであまり詳細は書かれない</li>
<li>過去の障害履歴は下半分に1週間分(それ以前にもさかのぼれる)表示されるが、サービス数が多すぎてやや見にくい</li>
<li>比較的定型的な表現が多い</li>
<li>タイムゾーンはPST/PDT</li>
</ul>
<h3 id="機械的に障害情報を取る方法">機械的に障害情報を取る方法</h3>
<ul>
<li>全リージョンの全サービスの情報がそれぞれ1つずつRSSフィードで提供される</li>
<li>その他に<a href="http://status.aws.amazon.com/rss/all.rss">全障害情報が含まれるRSSフィード</a>もある</li>
<li>基本的には上記サイトに表示される内容がフィードにも書かれる</li>
</ul>
<h3 id="所感">所感</h3>
<ul>
<li>いいところ
<ul>
<li>リージョン及びサービスごとにフィードがあるので特定サービスごとに監視したい時は楽</li>
<li>定型的な表現が多いので訳したり表現を拾って処理を分岐したりしやすい</li>
</ul>
</li>
<li>悪いところ
<ul>
<li>過去の障害情報が見にくいので他サービスのように時系列の一覧などが欲しい</li>
<li>フィードの数が多すぎる(all.rssをうまく使えばいいが)</li>
<li>他サービスと比べて障害情報の詳細さが足りない</li>
</ul>
</li>
</ul>
<h1 id="gcp">GCP</h1>
<h3 id="twitterボット-1">Twitterボット</h3>
<ul>
<li>全リージョン対象 <a href="https://twitter.com/gcpstatusjp">@gcpstatusjp</a>
<ul>
<li>日本リージョンはまだない(<a href="http://googlecloudplatform-japan.blogspot.jp/2016/03/geo-tokyo-region.html">開設予定</a>)</li>
<li>現状、障害がリージョンごとにうまく分けて通知されないので日本リージョンができても別ボットにしづらそう</li>
</ul>
</li>
</ul>
<h3 id="障害情報サイト-1">障害情報サイト</h3>
<ul>
<li><a href="https://status.cloud.google.com/">https://status.cloud.google.com/</a></li>
<li>地域ごとやリージョンごとの区分けはなく、横軸が日時、縦軸がサービスのグリッドのみ</li>
<li>障害があるとグリッド状に赤(致命的障害)やオレンジ(一部障害)の丸が表示され、障害の詳細へのリンクが貼られる</li>
<li>障害内容の記述は詳細で、次の報告をいつまでにするかが必ず併記される
<ul>
<li>ただし次の報告時刻は守られない時もある様子</li>
</ul>
</li>
<li>過去の障害は<a href="https://status.cloud.google.com/summary">時系列に並んで表示</a>される</li>
<li>タイムゾーンはPST/PDT</li>
</ul>
<h3 id="機械的に障害情報を取る方法-1">機械的に障害情報を取る方法</h3>
<ul>
<li>サイトに掲載されている詳細情報や障害のレベル(Severity)、開始・収束時刻なども載ったJSONと、少し情報が少ないRSSの2つ</li>
</ul>
<h3 id="所感-1">所感</h3>
<ul>
<li>いいところ
<ul>
<li>フィードの他に詳しい情報を含む<a href="https://status.cloud.google.com/incidents.json">JSONフィード</a>が提供されている。しかもちゃんと<a href="https://status.cloud.google.com/incidents.schema.json">スキーマ情報</a>も別にある</li>
<li>Severityと障害の開始・収束時間があるのが非常にいい</li>
</ul>
</li>
<li>悪いところ
<ul>
<li>リージョンが障害情報の詳細にしか書かれないので、特定リージョンの障害のみを検出したりするのが困難</li>
</ul>
</li>
</ul>
<h1 id="azure">Azure</h1>
<h3 id="twitterボット-2">Twitterボット</h3>
<ul>
<li>全リージョン対象 <a href="https://twitter.com/azurestatusjp_a">@azurestatusjp_a</a>
<ul>
<li>アカウント名の文字数制限の影響で末尾がallじゃなくて悲しかった</li>
<li>下のボットのツイートも包含されるので片方フォローすればOK</li>
</ul>
</li>
<li>日本リージョン関連のみ <a href="https://twitter.com/azurestatusjp">@azurestatusjp</a>
<ul>
<li>日本のリージョンとグローバルサービスのみ</li>
</ul>
</li>
</ul>
<h3 id="障害情報サイト-2">障害情報サイト</h3>
<ul>
<li><a href="https://azure.microsoft.com/ja-jp/status/">https://azure.microsoft.com/ja-jp/status/</a> (<a href="https://status.azure.com/">https://status.azure.com/</a>でもアクセス可)</li>
<li>大まかな地域ごとにタブが並んでおり、その中に横軸リージョン、縦軸サービスのグリッドがある</li>
<li>障害があるとグリッドに赤丸や黄色三角が表示され、障害の詳細がページ上部に書かれる</li>
<li>障害内容の記述はGCPに近い詳細さで、今後の対応予定なども書かれる</li>
<li>過去の障害は<a href="https://azure.microsoft.com/ja-jp/status/history/">時系列に並んで表示</a>される</li>
<li>URLからすると障害内容は日本語で表示されそうに見えるが、リージョン名などのみ日本語であとは英語のまま</li>
<li>タイムゾーンはUTC</li>
</ul>
<h3 id="機械的に障害情報を取る方法-2">機械的に障害情報を取る方法</h3>
<ul>
<li>全リージョンの全サービスの情報が含まれるRSSフィードが1つのみ</li>
<li>障害内容の記述はサイトに表示されるものと同じだが、Severityなどの情報は含まれない</li>
</ul>
<h3 id="所感-2">所感</h3>
<ul>
<li>いいところ
<ul>
<li>かなり詳しい障害状況が報告される</li>
</ul>
</li>
<li>悪いところ
<ul>
<li>RSSフィードのスキーマが微妙(リージョンとサービスが同じCategoryに列挙されている)</li>
<li>障害がない時はRSSフィードの内容が空になる
<ul>
<li>どんな情報がどのように配信されるか分からない</li>
<li>障害が終わった時の情報がフィードから得られない</li>
<li>他サービスだと、障害収束後に「こんなのありました」という報告パターンがあるがそういうのをどう出すのか謎</li>
</ul>
</li>
<li>サイト上には表示されるがRSSフィードに載らない情報が多い</li>
</ul>
</li>
</ul>
<h1 id="全体的に">全体的に</h1>
<ul>
<li>利用者から見てもっとも丁寧な感じなのはAzureだが、フィードがいけてないので情報の加工は一番やりにくい</li>
<li>AWSは情報の詳細さが他サービスと比べて全然足りない</li>
<li>障害情報を加工して通知などに使いたい時には圧倒的にGCP。Severityや障害開始・収束時間など詳しい情報をパースしやすい形式で提供しているのはGCPのみ</li>
</ul>doublemarketTwitterボットを作るのが趣味という記事を以前書いたが、そのからみでAWS(Amazon Web Service)、GCP(Google Cloud Platform)、Microsoft Azureの主要3クラウドの障害情報Twitterボットを作った。面白いもので3サービスとも障害情報の提供方法やポリシーが違っていて、ボットのような障害情報を取ってきて通知する仕組みをつくるのはちょっと面倒。せっかくなのでボットの宣伝も兼ねて障害報告に関するサービス間の違いを挙げておく。自分で通知の仕組みを作ったり、サービスを選ぶときの参考に。英語をしゃべる機会を探して勉強会に行った話2016-10-16T00:00:00+09:002016-10-16T00:00:00+09:00http://b.l0g.jp/english/2016/10/16/english-study-sessions<p>いわゆる外資系企業に転職して半年、英語力の不足をひしひしと感じるのでさらにレベルアップすべく色々と試行錯誤中。お金をかけずに英会話の練習する機会は、探してみれば色々あるもの。最近行った英語に関する勉強会。</p>
<h2 id="1000-speakers-conference-in-english">1000 speakers conference in English</h2>
<p>金曜は<a href="http://1000-speakers.connpass.com/">1000 speakers conference in English</a>という、参加者全員が英語で3分のLTをするというイベントに参加、マイペースで続けている個人的な<a href="https://yakst.com/ja">翻訳プロジェクトYakst</a>について英語で話してきた。3分というのは非常に短いので、英語どころか日本語でもプレゼンしたことないという人でも、意外と話せてしまう時間。思ったよりゆるい雰囲気かつ参加者はエンジニアばかりではないというところが面白く、ネタがあるときには今後も積極的に参加してみたい。参加費無料。</p>
<script async="" class="speakerdeck-embed" data-id="50714901bdf948488a60ee93eaad0218" data-ratio="1.33159947984395" src="//speakerdeck.com/assets/embed.js"></script>
<h2 id="vital-japan--vital-english">Vital Japan / Vital English</h2>
<p>土曜は<a href="http://vitaljapan.com/">Vital Japan</a>という老舗かつ大規模な英語勉強会のイベントで、<a href="http://vitaljapan.com/event/20161015-vital-japan/">シリコンバレー企業のワークスタイルについての英語セッション</a>を聞いた。たった1000円で第一線で活躍するコンサルタントの英語のトークが聞け、さらに参加者同士で英語ディスカッションする機会もあるなんて、なんてお得な!</p>
<p>現職がシリコンバレー企業みたいなもの(本社はサンフランシスコ。SFもシリコンバレーに入る?)だし、<a href="https://www.amazon.co.jp/dp/B00OJVMK5O/ref=as_li_ss_tl?_encoding=UTF8&btkr=1&linkCode=ll1&tag=l0gjp-22&linkId=9bae2fda3db674521c7667455259760b">How Google Works</a>とか読んだ身としては特に目新しいトピックはなかったけれど、逆にディスカッションの時に他の参加者の話から日本企業の闇みたいなのを感じられて、その意味では興味深かった。</p>
<p>最後の質問時間に参加者から出た「シリコンバレー企業のやり方が非常にいいのはわかるが、既にルールでがんじがらめの日本企業を一般社員の力で変えていくにはどうしたらいいか?」という鋭い質問に対して、「日本企業でも、経営者と現場の社員は何が問題か既に気づいていて、中間管理職の存在がシステムを変えにくい原因になっているケースが多いように感じる。経営者が言っていることをよく聞いて、彼らと協力する方法を探せば道は開けるんじゃないか」とスピーカーのロッシェルさんが回答していたのが印象的だった。</p>
<p>また、Netflixに勤めているという日本人が、発音は日本人的だけれど的確な言葉を選んで非常に流暢に発言していて、まさに自分が目指すのはああいうレベルだよなと再確認。勉強会みたいなイベントは、何かの知識を得るために行くのだけでなく、自分よりできる人を目の前にしてその人に感化されてもっと頑張るモチベーションをもらいに行くところでもあるなと改めて思った。</p>
<p>ちなみに、いきなり全部英語は無理という人は、<a href="http://vitaljapan.com/vital-english/">Vital English 英語勉強会</a>というのもあり、こちらは説明が英語に加えて日本語でもされて、資料に従って会話の練習をするというような流れになっている。こちらも参加費1000円とは思えない非常に濃い内容。</p>
<p>他にもオススメの英語勉強会あったら <a href="https://twitter.com/dblmkt">@dblmkt</a> まで教えてください!</p>doublemarketいわゆる外資系企業に転職して半年、英語力の不足をひしひしと感じるのでさらにレベルアップすべく色々と試行錯誤中。お金をかけずに英会話の練習する機会は、探してみれば色々あるもの。最近行った英語に関する勉強会。AWSのEBSボリュームのスナップショットを定期的に取る2015-10-19T22:33:30+09:002015-10-19T22:33:30+09:00http://b.l0g.jp/aws/periodic-ebs-snapshot<p>小ネタだけど、久しぶりに技術的な内容の記事を書いてみる。最近はこういうのはQiitaに書くのが流行り?</p>
<h2 id="ebsボリュームのスナップショット">EBSボリュームのスナップショット</h2>
<p>インスタンスストレージ(インスタンスに無料で付いてくるローカルストレージ)と比べてEBSを使うことの利点の一つに、スナップショットを取れるというのがある。これはもちろん<a href="http://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/ebs-creating-snapshot.html">AWSのコンソールからの操作</a>でも、<a href="https://aws.amazon.com/jp/cli/">awscli</a>のようなツールを使ってもできるんだけど、いちいちこれらの操作をやるのは面倒になってくる。そうすると、</p>
<ul>
<li>自動で定期的にスナップショットを取りたい</li>
<li>古いスナップショットは自動的に消したい</li>
<li>複数のEBSボリュームのスナップショットをまとめて取りたい</li>
<li>全ボリュームのスナップショットを取る必要はなく、一部だけ取っておきたい</li>
</ul>
<p>みたいな話が出てくる。</p>
<p>そういう時にはもちろんawscliや各言語のSDKを使って自分でこれを実装してもいいのだが、<a href="https://github.com/colinbjohnson/aws-missing-tools">AWS Missing Tools</a>と言う、AWSに関するちょっと痒いところに手が届くツール集があって、これに含まれるEBSスナップショット取得用のスクリプト ec2-automate-backup.sh を使うと便利。</p>
<h2 id="ec2-automate-backupshの使い方">ec2-automate-backup.shの使い方</h2>
<p>拡張子でわかる通り単なるシェルスクリプトで、中ではawscliを駆使して処理を行っている。なので、前提としてawscliがインストールされていて、credentialの設定が終わっている必要がある。awscliのインストール方法については割愛。</p>
<p>awscliの用意が済んだら、リポジトリをクローンしてきてコマンドを叩けばよい。</p>
<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>
git clone https://github.com/colinbjohnson/aws-missing-tools.git
cd aws-missing-tools/ec2-automate-backup
</code></pre></div></div>
<p>コマンドのオプションは<a href="https://github.com/colinbjohnson/aws-missing-tools/tree/master/ec2-automate-backup">README</a>に書いてあるが、イマイチわかりにくい。最低限以下がわかればとりあえずのバックアップは取れる。</p>
<ul>
<li><code class="language-plaintext highlighter-rouge">-s [volumeid|tag]</code> : バックアップ対象のボリュームをボリュームID指定するか、特定のタグが付いているもので指定するかを選択する。tagを選んでおくと、例えば「Backup=true」と付いているボリュームを一括でバックアップする、ということが可能。</li>
<li><code class="language-plaintext highlighter-rouge">-v ボリュームID</code> : <code class="language-plaintext highlighter-rouge">-s volumeid</code>を指定した場合にボリュームIDを指定する。</li>
<li><code class="language-plaintext highlighter-rouge">-t 'タグ名,Values=値'</code> : <code class="language-plaintext highlighter-rouge">-s tag</code>を指定した場合にタグ名を指定する。上の例のように「Backup=true」のタグが付いているボリュームをバックアップする場合、<code class="language-plaintext highlighter-rouge">-t 'Backup,Values=true'</code>と指定する。ここちょっとわかりにくい。なお、<em>タグはEC2インスタンスではなくEBSボリュームに付ける</em>。</li>
<li><code class="language-plaintext highlighter-rouge">-r リージョン</code> : リージョン指定。ap-northeast-1とか。</li>
<li><code class="language-plaintext highlighter-rouge">-n</code> : タグ指定でスナップショットを取った時、スナップショットのNameタグに、元のボリュームIDを入れる</li>
<li><code class="language-plaintext highlighter-rouge">-k 日数</code> : 指定した日数以上経過したスナップショットは削除可能タグが付けられる</li>
<li><code class="language-plaintext highlighter-rouge">-p</code> : <code class="language-plaintext highlighter-rouge">-k</code>で指定した日数以上経過したスナップショットを実際に削除する</li>
</ul>
<p>具体的には、以下のようにコマンドを実行する。これは「Backup=trueタグが付いたボリュームのスナップショットを作成し、7日以上経過したスナップショットを削除する」例。</p>
<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>
bash ec2-automate-backup.sh -s tag -t 'Backup,Values=true' -r ap-northeast-1 -n -k 7 -p
</code></pre></div></div>
<p>実際の挙動的には、<code class="language-plaintext highlighter-rouge">-k 7</code>オプションがあるので7日経つとスナップショットにPurgeAllow=trueタグが付けられ、次の実行で<code class="language-plaintext highlighter-rouge">-p</code>オプションが効いてPurgeAllow=trueがついているスナップショットが消される、という流れになる。</p>
<p>これをcrontabに書いておくなりJenkinsで定期実行するなりしておけば、うっかりファイルを消してしまったとか、データベースがぶっ壊れたみたいな時にもサクッと戻せて幸せになれる。</p>doublemarket小ネタだけど、久しぶりに技術的な内容の記事を書いてみる。最近はこういうのはQiitaに書くのが流行り?Twitterボットを作るのがひそかな趣味2015-05-22T22:26:26+09:002015-05-22T22:26:26+09:00http://b.l0g.jp/misc/my-twitter-bots<p> </p>
<p>プログラミングの勉強にと思ってTwitterボットを作ってみたら、ことあるごとに「あっ、これもボットになってたら便利そう」と思うようになってしまって、さらにいくつか作るという流れ。それなりに便利なのができると、ほっといてもフォロワーが増えていくのが楽しくなってしまう。今まで作ったボットのまとめ。</p>
<h1 id="深田久弥bot-fukadakyuya_bot">深田久弥bot <a href="https://twitter.com/fukadakyuya_bot" target="_blank">@fukadakyuya_bot</a></h1>
<p>TLでフォロワーのみなさまと盛り上がったのがきっかけで、初めて作ったTwitterボット。ボットをフォローしているユーザが深田久弥の著書「<a href="http://www.amazon.co.jp/gp/product/4101220026/ref=as_li_ss_tl?ie=UTF8&camp=247&creative=7399&creativeASIN=4101220026&linkCode=as2&tag=l0gjp-22" rel="nofollow">日本百名山 (新潮文庫)</a><img style="border: none !important; margin: 0px !important;" src="http://ir-jp.amazon-adsystem.com/e/ir?t=l0gjp-22&l=as2&o=9&a=4101220026" alt="" width="1" height="1" border="0" />」に含まれる山名を含んだつぶやきをすると、同書の中からその山の特徴などを表した部分をリプライする。また、1日1回7:00にはランダムに抜粋をつぶやく。</p>
<blockquote class="twitter-tweet" lang="ja">
<p dir="ltr" lang="ja">
<a href="https://twitter.com/doublemarket">@doublemarket</a> 夕方、日本海に沈む太陽の余映を受けて、白山が薔薇色に染まるひと時は、美しいものの究極であった。みるみるうちに薄鼠に暮れて行くまでの、暫くの間の微妙な色彩の推移は、この世のものとは思われなかった。
</p>
<p>
— 深田久弥bot (@fukadakyuya_bot) <a href="https://twitter.com/fukadakyuya_bot/status/493185509611413504">2014, 7月 27</a>
</p>
</blockquote>
<p>最初はPHPで書いたのだがいつの間にかうまく動かなくなったりして、Rubyで書き換えた。ソースコードは<a href="https://github.com/doublemarket/twitterbot.rb" target="_blank">Githubに上げてある</a>。作った頃はRubyのエコシステムが良く分かってなくて、bundler使わずにやってたりして、自分でもどうやって動いてるのか理解してなかったなあw リプライする山名にどういう傾向があるのか気になったので、<a href="http://f.l0g.jp/" target="_blank">山名ごとにリプライ数を集計する仕組み</a>も作ってみた。基本的に富士山がダントツに多いのだが、例えば最近だと吾妻山や蔵王山(火山活動活発化)、立山(アルペンルート開通)といったように、急にリプライ数が増えた山があると、大体そこでは何かあったということが分かって面白い。</p>
<h1 id="山の天気-yamatenki">山の天気 <a href="https://twitter.com/yamatenki" target="_blank">@yamatenki</a></h1>
<p>毎朝7:30前後に、その週末に天気がいい(登山日和になりそうな)山を地域ごとにツイートする。 土曜と日曜それぞれ分けて判断するようになっている。祝日などの連休にも対応させたいが、めんどくさそうなので先送りしてしまっている。</p>
<blockquote class="twitter-tweet" lang="ja">
<p>
【南アルプス】今週末、山に行くなら「甲斐駒ヶ岳」「仙丈岳」「鳳凰山」「北岳」「間ノ岳」、日曜日なら「塩見岳」「悪沢岳」「赤石岳」「聖岳」「光岳」の天気が良いようです。 <a href="http://t.co/YU8l9oRZUo">http://t.co/YU8l9oRZUo</a> — 山の天気 (@yamatenki) <a href="https://twitter.com/yamatenki/status/599341524011372545">2015, 5月 15</a>
</p>
</blockquote>
<p>山名を含んだメンションを送ると、少し詳しい天気予報をリプライしてくれる。</p>
<blockquote class="twitter-tweet" lang="ja">
<p dir="ltr" lang="ja">
<a href="https://twitter.com/doublemarket">@doublemarket</a>【今週末の丹沢山】03/29土曜日は、くもり時々晴れ、降水確率は12時まで30%、18時まで30%。03/30日曜日は、くもり一時雨、降水確率は12時まで50%、18時まで50%。 (神奈川県西部) <a href="http://t.co/0Kh75x9Egg">http://t.co/0Kh75x9Egg</a>
</p>
<p>
— 山の天気 (@yamatenki) <a href="https://twitter.com/yamatenki/status/448258476980981760">2014, 3月 25</a>
</p>
</blockquote>
<p>こちらも最初はPHPで作ったが今はRuby製。<a href="http://t.l0g.jp/" target="_blank">天気が一覧で見れるページ</a>も定期的に生成している。 深田久弥botと違ってうざくない作りなのもあってか、フォロワーが4600以上(2015年5月)もいて、自分の作ったボットの中では一番多い。</p>
<h1 id="hatebu-english-hatebu_e">hatebu english <a href="https://twitter.com/hatebu_e" target="_blank">@hatebu_e</a></h1>
<p>はてなブックマークが一定数以上付いた日本語以外の(正確には、タイトルと本文に全角文字を含まない)記事をツイートする。<a href="http://yakst.com/ja" target="_blank">Yakstという主に英語のブログ記事などを翻訳して公開するサイト</a>を解説しているのだが、そのネタ探しの足しになるかと思って作った。</p>
<blockquote class="twitter-tweet" lang="ja">
<p>
GitHub Engineering (3 users) <a href="http://t.co/xWxAkjVCZI">http://t.co/xWxAkjVCZI</a> <a href="http://t.co/aDzjTh7OfY">http://t.co/aDzjTh7OfY</a> — hatebu english (@hatebu_e) <a href="https://twitter.com/hatebu_e/status/600682354470817792">2015, 5月 19</a>
</p>
</blockquote>
<p>誰得なのかよく分からないボットなので、フォロワーは少ないw</p>
<h1 id="aws障害情報全リージョン-awsstatusjp_all">AWS障害情報(全リージョン) <a href="https://twitter.com/awsstatusjp_all" target="_blank">@awsstatusjp_all</a></h1>
<h1 id="aws障害情報東京リージョン-awsstatusjp">AWS障害情報(東京リージョン) <a href="https://twitter.com/awsstatusjp" target="_blank">@awsstatusjp</a></h1>
<p>仕事でAWSを本格的に使い始めたので、手軽にAWSのステータス情報を知れる手段がないかと思ったのだが、いい感じのボットがなかったので作った。時刻を日本時間に直し、定型的な文言はなるべく日本語に翻訳するようにしている。GCPとかのボットもなければ作ってみようかな。</p>
<blockquote class="twitter-tweet" lang="ja">
<p lang="ja" dir="ltr">
日本時間2015年05月19日(火) 07:46:53 EC2 (サンパウロ) お知らせ Network Connectivity <a href="http://t.co/LMkNfK2ZYm">http://t.co/LMkNfK2ZYm</a>
</p>
<p>
— AWS障害情報(全リージョン) (@awsstatusjp_all) <a href="https://twitter.com/awsstatusjp_all/status/600433202222608384">2015, 5月 18</a>
</p>
</blockquote>
<blockquote class="twitter-tweet" lang="ja">
<p dir="ltr" lang="ja">
日本時間2015年05月16日(土) 00:36:27 EC2 (東京) 正常稼働中 [復旧済み] Network connectivity <a href="http://t.co/aq5bOVSJ4H">http://t.co/aq5bOVSJ4H</a>
</p>
<p>
— AWS障害情報(東京リージョン) (@awsstatusjp) <a href="https://twitter.com/awsstatusjp/status/599237837637062656">2015, 5月 15</a>
</p>
</blockquote>
<p>ちなみに、プロジェクトでHipchatやSlackなどのチャットツールを使っている場合、それぞれのTwitter連携機能を使ってこのボットのツイートを拾うようにすれば、AWSの障害情報が流れてくるようになって便利。</p>
<p>ボットを作ると、プログラミングの基礎もだが、Twitter APIやスクレイピングのテクニックなど、作るボットに応じて色々な技術が必要とされるので、新しい言語を覚える人とか、そもそもプログラミング初心者にはもってこいの課題になる。オススメです。</p>doublemarket 「SQLパフォーマンス詳解」という本を翻訳しました2015-04-07T17:45:15+09:002015-04-07T17:45:15+09:00http://b.l0g.jp/uncategorized/sql-performance-explained-ja<p> </p>
<p><a href="http://b.l0g.jp/wp-content/uploads/2015/04/sqlperformanceexplainedja.png"><img class="alignleft wp-image-1648 size-medium" style="border: 0px;" src="http://b.l0g.jp/wp-content/uploads/2015/04/sqlperformanceexplainedja-196x300.png" alt="sqlperformanceexplainedja" width="196" height="300" /></a>題の通り、「<a title="SQLパフォーマンス詳解" href="http://sql-performance-explained.jp/" target="_blank">SQLパフォーマンス詳解</a>」(原文タイトル<a title="SQL Performance Explained" href="http://sql-performance-explained.com/" target="_blank">SQL Performance Explained</a>)という本を翻訳しました。PDF版と印刷版が上記サイトから購入できます。</p>
<p>(追記 2017年9月から、渋谷の<a href="http://booklabtokyo.com/">BOOK LAB TOKYO</a>さんでも印刷版を販売していただいています。輸送コストの関係で、サイトから購入するより若干安くなっています)</p>
<p>リレーショナルデータベースにおいて、SQLとインデックスがどのように関連し、どのようにすればSQLのパフォーマンスを良くできるのかを解説した本です。特定のデータベース製品に焦点を当てた本は多数ありますが、この本ではOracle Database、PostgreSQL、MySQL、SQL Serverの4つのメジャーなリレーショナルデータベース製品を同時に扱っていて、それぞれのクセや特徴も分かるように書かれている点が非常にユニークになっています。また、ORMが生成するSQL文の違いなどにも言及されています。</p>
<p>前書きにもあるように、データへのアクセスパスを知っているのは他ならぬ開発者なので、開発者自身がSQLとインデックスについての知識を深めなければ本当の高速化はできない、というのが著者の考えのようですが、もちろんアプリ開発者だけでなくインフラエンジニア、データベースエンジニアの方々にもおすすめできる内容だと思います。</p>
<p>目次とそれぞれの内容は以下の通りです。</p>
<ul>
<li>第1章 インデックスの内部構造
<ul>
<li>インデックスとはそもそも何か、インデックスはどのような仕組みか</li>
</ul>
</li>
<li>第2章 where句
<ul>
<li>where句とインデックスの関連、例えば=を使った場合、likeを使った場合など演算子の違いによるインデックスの活用方法など</li>
</ul>
</li>
<li>第3章 パフォーマンスとスケーラビリティ
<ul>
<li>インデックスの作り方の違いによるパフォーマンスとスケーラビリティの違い</li>
</ul>
</li>
<li>第4章 結合処理
<ul>
<li>結合(join)とインデックスの関連</li>
</ul>
</li>
<li>第5章 データのクラスタリング
<ul>
<li>データのクラスタリング(HAクラスタなどではなく、いわゆるクラスタリングインデックスのこと)</li>
</ul>
</li>
<li>第6章 ソートとグルーピング
<ul>
<li>ソート(order by)やグルーピング(group by)とインデックスの関連</li>
</ul>
</li>
<li>第7章 部分結果
<ul>
<li>MySQLで言うlimitやPostgreSQLのfetch firstのような、結果の一部分を取得するSQL文とインデックスの関連</li>
</ul>
</li>
<li>第8章 データの変更
<ul>
<li>update, insert, deleteといった更新処理とインデックスの関連</li>
</ul>
</li>
<li>付録A 実行計画
<ul>
<li>各データベース製品での実行計画の表示方法とその読み方</li>
</ul>
</li>
</ul>
<p>既にご存知の方もいるかもしれませんが、<a title="Use The Index, Luke日本語版" href="http://use-the-index-luke.com/ja/sql/table-of-contents" target="_blank">Use The Index, Luke</a>という名でほぼ全文がWeb上で公開されています。とはいえWeb上で通しで読むのはかなり辛いですし、PDFあるいは印刷版を購入いただければ、作者・訳者とも嬉しい限りです。</p>
<p>私は、<a title="Yakst" href="http://yakst.com/ja" target="_blank">Yakst</a>というサイトで海外のブログ記事などを翻訳して公開するというのをやっているのですが、原著者(<a title="Markus Winand" href="https://twitter.com/markuswinand" target="_blank">Markus Winandさん</a>)が書かれた<a title="Yakst - SQLに対するMySQLと、NoSQLに対するMongoDBは似ている――主に有害な意味で" href="http://yakst.com/ja/posts/74" target="_blank">ブログ記事を翻訳させてもらった</a>のがきっかけで、この本の翻訳をやることになりました。オンライン販売だけの予定なので書店に本が並ぶわけではないとは言え、自分が訳した本が人に読まれることになるというのは、不思議な感覚です。Markusさんはオーストリア人で英語のネイティブスピーカーではないこともあり、原文は非常に分かりやすい英語で書かれているのですが、それでも翻訳の難しさ、自分の未熟さをひしひしと感じました。素晴らしい本を書いてくださった原著者のMarkusさん、私のつたない訳を丁寧にレビューしてくださった<a title="matsuu" href="https://twitter.com/matsuu" target="_blank">@matsuu</a>さん、ありがとうございました!</p>
<p>訳の問題など、ご意見ご感想ありましたら<a title="doublemarket" href="https://twitter.com/dblmkt" target="_blank">@dblmkt</a>までいつでもご連絡ください。</p>
<p>ちなみに、海外の有益な技術系ブログを翻訳して公開している<a title="Yakst" href="http://yakst.com/ja" target="_blank">Yakst</a>で、翻訳を一緒にやっていただける仲間も募集しておりますので、良かったらそちらも是非よろしくお願いします。</p>doublemarket MySQL Casual Talks Vol. 7まとめ2014-12-15T18:11:16+09:002014-12-15T18:11:16+09:00http://b.l0g.jp/mysql/mysql-casual-talks-7<p>ふう、<a href="http://mysql-casual.connpass.com/event/9767/">MySQL Casual Talks Vol. 7</a>行って参りました。前回は<a href="http://www.slideshare.net/doublemarket/mysqlcasual6fabric">自分が発表者</a>でもあったので、正直なところ他の人の発表を聞く余裕はなく(汗) 今回は、同僚の発表もあったので楽しみにしていったら、相変わらずの濃ゆい話が盛りだくさんで、非常に楽しめました。毎度の事ながら、<a href="https://twitter.com/myfinder">@myfinderさん</a>始め、会場提供・準備していただいたLINE</p>
<p>のみなさま、Oracleのみなさまに感謝です。</p>
<ul>
<li><a href="http://togetter.com/li/756928">Togetter</a></li>
</ul>
<h1 id="yoku0825さん-mysql-fabricつらい"><a href="https://twitter.com/yoku0825">yoku0825さん</a> MySQL Fabricつらい</h1>
<div style="margin-bottom:5px">
<strong> <a href="//www.slideshare.net/yoku0825/mysql-fabric-42641503" title="MySQL Fabricつらい" target="_blank">MySQL Fabricつらい</a> </strong> from <strong><a href="//www.slideshare.net/yoku0825" target="_blank">yoku0825</a></strong>
</div>
<ul>
<li>GAから半年なのに誰も使ってない</li>
<li>アメリカのイベントでは、MySQL Fabricだけに布がプレゼントされた(白目</li>
<li>Fabric対応コネクタが各種言語向けに用意されてる</li>
<li><a href="https://github.com/yoku0825/DBD-mysql/tree/support_mysql_fabric">yokuさん謹製fabric対応mysqlクライアント</a>
<ul>
<li>fabricとConnector/C経由で通信する</li>
<li>ro(スレーブ、分散される)とrw(マスタ、当然1台)のモードがある</li>
<li>マスタを落とすとちゃんと切り替わりますよ(デモ)</li>
</ul>
</li>
</ul>
<h1 id="tatsuruさん-mysql-on-ec2"><a href="https://twitter.com/tatsuru">tatsuruさん</a> MySQL on EC2</h1>
<ul>
<li>3年ぐらい運用、結構消耗</li>
<li>MHA組んでおく
<ul>
<li>ENIをつけておいて、マスタ切り替えはそれを付け替える</li>
</ul>
</li>
<li>Mackerelでモニタリング</li>
<li>バックアップスレーブでsnapshotとってる</li>
<li>スレーブ作る
<ul>
<li>snapshotから作る</li>
<li>dumpから作る</li>
<li>落ちたら捨てる前提(信頼性落とす、ダウンしたら捨てる)</li>
</ul>
</li>
<li>取りあえず2セット作って入れ替える、が可能なのがよい</li>
<li>スレーブのオートスケールは結構難しい
<ul>
<li>warmup難しい</li>
<li>5.7はできそう(buffer poolリストア)</li>
</ul>
</li>
<li>データはEBSに置いている
<ul>
<li>IOできなくなって死ぬことがある</li>
<li>ヘルスチェック工夫しよう</li>
</ul>
</li>
<li>RDSはちょっと高いけど楽
<ul>
<li>フェイルオーバーが長い</li>
<li>可用性がちょっと微妙でやめた(2012年ぐらいの話なので古いかも)</li>
</ul>
</li>
<li>ELBはDNSベースなのでちょっとってことでhaproxyで分散している</li>
<li>もはや自前でMySQL運用する時代じゃないよね</li>
</ul>
<h1 id="ヤフー三谷さん-mita2-percona-live行ってきた"><a href="https://twitter.com/mita2">ヤフー三谷さん @mita2</a> Percona Live行ってきた</h1>
<ul>
<li>Oracle(200セット), MySQL/Percona(300セット)を運用中
<ul>
<li>Exadataとかも</li>
</ul>
</li>
<li>Percona Live 10月にロンドンで開催されたのに参加してきた</li>
<li>XtraDB Cluster
<ul>
<li>ActiveActiveの構成、高い冗長性</li>
<li>ヨーロッパでは広く普及</li>
<li>OpenStackのバックエンドに使われている</li>
<li>本家のGroup Replicationと似てる</li>
<li>どのノードに書いても同期レプリされる</li>
<li>MySQL Clusterよりは本家MySQLに近くてハードル低い</li>
<li>Writeのスケールはできない(MySQL Cluster使おう)</li>
<li>SST(丸ごとコピー)、IST(差分)でDonorからデータを送る</li>
<li>ノードへの分散はHAProxyとか使う</li>
<li>ヘルスチェックの仕組みもXtraDB型に準備されてる</li>
<li>書き込みは楽観的ロック</li>
<li>コミットしてノード間の情報が食い違ってるとコミット時にエラー</li>
<li>従って書き込みはできるだけ1台がいい</li>
<li>オンラインalterはできない(今後サポート予定)ので、ローリングで変更していく</li>
</ul>
</li>
</ul>
<h1 id="ペパボ-okumuraさん-hfm-mysql-40をリプレイスした"><a href="https://twitter.com/hfm">ペパボ okumuraさん @hfm</a> MySQL 4.0をリプレイスした</h1>
<div style="margin-bottom:5px">
<strong> <a href="//www.slideshare.net/hifumis/mysql-casual-42634961" title="MySQL 4.0で9年動き続けたサーバを リプレイスしてバージョンアップした話" target="_blank">MySQL 4.0で9年動き続けたサーバを リプレイスしてバージョンアップした話</a> </strong> from <strong><a href="//www.slideshare.net/hifumis" target="_blank">Takahiro Okumura</a></strong>
</div>
<ul>
<li><a href="http://blog.hifumi.info/2014/12/13/mysql-casual-vol-7/">ブログ記事</a></li>
<li>2005年 4.0.25 -> 9年 -> 5.0.96にバージョンアップ</li>
<li>@tnmt 氏がカジュアルに5.6バージョンアップを指示するイシューを投げたところから始まった</li>
<li>しかしやる事になった時は何にも知識ありませんでした</li>
<li>たくさんの爆弾が仕込まれていた。。
<ul>
<li>マスタとスレーブの食い違いなどなど</li>
<li>ハードもソフトも古い</li>
</ul>
</li>
<li>検証の過程で色んなバージョンをインストールしたので、MySQL-AllStarというbox提供してます(4.0から5.6まで全部入り)</li>
<li>結局5.0まで上げることに</li>
<li>6/20 イベントがあるとレンタルサーバのアクセスが減るからwという理由でメンテ実施
<ul>
<li>ダンプからリストア、切り替えまで同じタイミングでやった</li>
<li>insertを実行するとbinlogが壊れることが発覚</li>
<li>失敗として切り戻し</li>
<li>5.0系を特定のgccでコンパイルすると起きるバグ?</li>
<li>gccの最適化のレベルによってテストが通ったり通らなかったり</li>
</ul>
</li>
<li>その後別のバグ発生
<ul>
<li>rpmbuild中に必要なファイルが消える</li>
<li>邪魔してたパッケージ消してビルド成功</li>
</ul>
</li>
<li>8/22無事バージョンアップ成功</li>
<li>4.0に入っていたデータの一部がリカバリできなかったのは手動で戻した</li>
</ul>
<h1 id="サイバーエージェント-strsk-さん-ソーシャルゲームdbの危機回避"><a href="https://twitter.com/strsk">サイバーエージェント @strsk さん</a> ソーシャルゲームDBの危機回避</h1>
<ul>
<li><a href="http://strsk.hatenablog.com/entry/2014/12/15/123211">ブログ記事</a></li>
<li>ギフトとかカードの情報が増えまくる
<ul>
<li>1日数十GB、論削だけで物理削除してなかったり</li>
<li>削除するのではなく、必要なデータだけをINSERT SELECTで抽出してテーブルを作り直すと速い</li>
<li>deleteしてもテーブル容量減らない(MVCCのバージョン管理のため)</li>
<li>pt-online-schema-changeでテーブル再構築</li>
</ul>
</li>
<li>レプリ遅延
<ul>
<li>truncateすると遅れる(deleteより遅い)</li>
<li>バッファプールを大きく使ってると遅くなるというバグ</li>
<li>結局deleteしました</li>
</ul>
</li>
</ul>
<h1 id="ryopeko-さん-q4m"><a href="https://twitter.com/ryopeko">@ryopeko さん</a> Q4M</h1>
<ul>
<li><a href="http://qiita.com/ryopeko/items/f42b65a11d7f1f74311e">ブログ記事</a></li>
<li>パーフェクトRuby出しました</li>
<li>Rubyの人はRedis使う人多い(sidekiqで)けどQ4M
<ul>
<li><a href="https://github.com/ryopeko/shinq">shinq</a></li>
<li>ActiveJobを利用</li>
<li>Rails 4.2に入る予定のキュー機能</li>
</ul>
</li>
</ul>
<h1 id="サイバーエージェント-kakerukaeru-さん-continuous-restore"><a href="https://twitter.com/kakerukaeru">サイバーエージェント @kakerukaeru さん</a> continuous restore</h1>
<ul>
<li><a href="http://kakerukaeru.hatenablog.com/entry/2014/12/13/213342">ブログ記事</a></li>
<li>DBのバックアップだけじゃなくてリストアも繰り返しやって、復旧可能性を担保</li>
<li>バァーン、バァーン、バババァーン</li>
</ul>
<h1 id="ijin-さん-consulでmysqlのフェイルオーバー"><a href="https://twitter.com/ijin">@ijin さん</a> ConsulでMySQLのフェイルオーバー</h1>
<ul>
<li><a href="http://ijin.github.io/blog/2014/07/11/mysql-failover-with-consul/">元ネタのブログ記事</a></li>
<li>consulはraftを使ってcap定理のcpを実現している</li>
<li>MHA発動時に実行されるfailover scriptでconsulのAPIを叩いてマスタのDNS名を変更する</li>
<li>consul event
<ul>
<li>eventをノードに伝えると伝播される(no guarantee)</li>
<li>watchで検知してスクリプトを動かす</li>
</ul>
</li>
<li>consul templateを使いましょう</li>
</ul>
<h1 id="kazeburo-さん-isuconのためのmysqlチューニング"><a href="https://twitter.com/kazeburo">@kazeburo さん</a> isuconのためのMySQLチューニング</h1>
<div style="margin-bottom:5px">
<strong> <a href="//www.slideshare.net/kazeburo/mysql-casual7isucon" title="ISUCON4 予選問題で(中略)、”my.cnf”に1行だけ足して予選通過ラインを突破するの術" target="_blank">ISUCON4 予選問題で(中略)、”my.cnf”に1行だけ足して予選通過ラインを突破するの術</a> </strong> from <strong><a href="//www.slideshare.net/kazeburo" target="_blank">Masahiro Nagano</a></strong>
</div>
<ul>
<li>my.cnfをチューニングする
<ul>
<li>innodb_flush_log_at_trx_commit=2で結構上がる</li>
<li>innodb_flush_method=nosync/O_DIRECTでも上がる</li>
<li>この2つのオプションさえちゃんとやっておけばおk</li>
<li>データ量に応じてinnodb_buffer_pool_sizeも</li>
</ul>
</li>
</ul>
<h1 id="neofact-さん-kuwa_tw-さん-nvmfs"><a href="https://twitter.com/neofact">@neofact さん</a>、 <a href="https://twitter.com/kuwa_tw">@kuwa_tw さん</a> NVMFS</h1>
<div style="margin-bottom:5px">
<strong> <a href="//www.slideshare.net/akuwano/ca-nvmfs-42665725" title="NVMFS 使ってみたとか 言っちゃって マジカジュアルな奴" target="_blank">NVMFS 使ってみたとか 言っちゃって マジカジュアルな奴</a> </strong> from <strong><a href="//www.slideshare.net/akuwano" target="_blank">Akihiro Kuwano</a></strong>
</div>
<ul>
<li><a href="http://d.hatena.ne.jp/akuwano/20141215">ブログ記事</a></li>
<li>圧縮効いて8〜6割の性能</li>
<li>容量的には半分ぐらいに圧縮できた</li>
<li>圧縮伸長でCPU食う(元々ioDriveではCPUバウンドだけどさらにきつくなる)</li>
</ul>
<h1 id="do_aki-さん-n1レプリケーション"><a href="https://twitter.com/do_aki">@do_aki さん</a> N:1レプリケーション</h1>
<ul>
<li>いつもの</li>
<li>特に進捗なし</li>
<li>Raspberry piでN:1 replication動きましたw</li>
</ul>
<h1 id="kamipo-さん-activerecord"><a href="https://twitter.com/kamipo">@kamipo さん</a> ActiveRecord</h1>
<ul>
<li>
<p><a href="http://kamipo.github.io/talks/20141212-mysqlcasual7/#/title">発表資料</a></p>
</li>
<li>
<p>ARのメンテナはみんなPostgreSQL派で、MySQLのプルリクは放置される傾向にある</p>
</li>
<li><a href="https://github.com/rails/rails/pulls/kamipo">いっぱいMySQLのプルリク投げた!</a>
<ul>
<li>For MySQLってつけたの全部放置されてるorz</li>
<li>機能をバックポートして<a href="http://qiita.com/kamipo/items/11b55caf329210923a9a">activerecord-mysql-awesome作った</a></li>
</ul>
</li>
<li>kamipoさんはすごいひと</li>
</ul>doublemarketふう、MySQL Casual Talks Vol. 7行って参りました。前回は自分が発表者でもあったので、正直なところ他の人の発表を聞く余裕はなく(汗) 今回は、同僚の発表もあったので楽しみにしていったら、相変わらずの濃ゆい話が盛りだくさんで、非常に楽しめました。毎度の事ながら、@myfinderさん始め、会場提供・準備していただいたLINE のみなさま、Oracleのみなさまに感謝です。