プログラマになりたい

おっさんになっても、プログラマでありつづけたい

「Amazon Web Services パターン別構築・運用ガイド」の増刷決定&正誤表リストのGitHub管理

 先月(2015/3/25)発売された「Amazon Web Services パターン別構築・運用ガイド」についてですが、売上げ好調で発売後1ヶ月を待たずに増刷が決定されました。ありがとうございます。

Amazon Web Services パターン別構築・運用ガイド

Amazon Web Services パターン別構築・運用ガイド

 またAmazonでは発売後1週間で品切れ状態になりました。その状態がずっと続いていたのですが、本日ようやく解消されていました。実に2週間以上。発売後ダッシュを掛けたい著者陣としては、もどかしいことこの上ない状態でした。編集部に状況を聞いていたのですが、どうも取次-Amazonの部分で詰まる場合があるようですね。

「Amazon Web Services パターン別構築・運用ガイド」の正誤表のGitHubでの管理



 本の増刷時には、できるだけ誤っている部分の訂正をします。誤植を発見した場合は、SBクリエイティブの編集部に連絡していただくと反映される形になっています。
SBクリエイティブ:AmazonWebServices パターン別構築・運用ガイド
 一方で、反映までのタイムラグがあったり、著者の方に連絡がくる場合もあります。また、ブログやTwitterで指摘して頂けるケースもあります。というところで、全ての指摘をうまく管理することが難しいのが現状です。そこで試しに、正誤表管理の為のGitHubのリポジトリを作ってみました。ここで管理して、SBクリエイティブのページや本に反映するように運用してみます。何か見つけたら、気軽にお知らせ頂ければありがたいです。
Home · takuros/aws-pattern-book Wiki · GitHub

 編集部に確認必要ですが、サンプルコードもここで公開してしまっても良いかと考えています。本来的には、全く間違いがない状態で公開すべきです。しかし、現実的には誤りが0というのは、中々実現が難しいです。また、書いていた当初と状況が変わることもしばしばあります。特にAWSでは機能のアップデートが頻繁で、昨日できなかったのが今日できるようになるということもあります。本というメディアで追随することは難しい部分もありますが、できるだけフォローできるように出来ることを色々試してみます。

Amazon Web Services パターン別構築・運用ガイド

Amazon Web Services パターン別構築・運用ガイド

See Also:
「Amazon Web Services パターン別構築・運用ガイド」の執筆環境
「Amazon Web Services パターン別構築・運用ガイド」の目次
AWSパターン別本の狙い。例えばAutoScalingを使えるように。「Amazon Web Services パターン別構築・運用ガイド」の裏話
『Amazon Web Services パターン別構築・運用ガイド』を書きました
『Rubyによるクローラー開発技法』を書きました
本を書く前に準備したこと、執筆中にしていたこと

実行計画が解れば怖くない。SQL実践入門

 技術評論社さんから、SQL実践入門を献本いただきました。ありがとうございます。
f:id:dkfj:20150416072810j:plain

SQL実践入門の主題



 この本の目的は、「パフォーマンスの良いSQLの書き方、特に大量データを処理するSQLの性能向上の方法を理解すること」とあります。そのパフォーマンス向上の為の解として、SQLが内部的にどう処理されているかを表す実行計画の読み解き方を、いろいろなケースを上げながらひたすら解説しています。そして、何故その実行計画になるのか、データ構造やDBの動きとともに説明しています。ということで、実行計画大事という基本かつ当たり前のことを、正面から取り扱っている良質のSQL本です。

SQL実践入門の構成



 SQL実践入門の章立ては、下記の通りです。

第1章:DBMSのアーキテクチャ──この世にただ飯はあるか
第2章:SQLの基礎──母国語を話すがごとく
第3章:SQLにおける条件分岐──文から式へ
第4章:集約とカット──集合の世界
第5章:ループ──手続き型の呪縛
第6章:結合──結合を制する者はSQLを制す
第7章:サブクエリ──困難は分割するべきか
第8章:SQLにおける順序──甦る手続き型
第9章:更新とデータモデル──盲目のスーパーソルジャー
第10章:インデックスを使いこなす──秀才の弱点
Appendix A:PostgreSQLのインストールと起動
Appendix B:演習問題の解答

1章の部分は、SQL以前のDBMS全般の知識です。2章が用語解説も兼ねながら、SELECTやGroup By、ビューやサブクエリと各種演算についての解説です。3章から、個々のテーマについて掘り下げて取り扱っています。手っ取り早くSQL力を付けるには、6章の結合の部分を熟読することをお勧めします。最後の10章は、インデックスを取り扱っている関係上、テーブル設計の部分についても言及しています。

Nested Loops, Hash, Sort Merge



 6章の章題の「結合を制する者はSQLを制す」にあるように、SQLのチューニングが必要な場合の殆どは、結合に関するものだと思います。その為、1章を割いて結合に関する解説をしています。結合の種類から動作原理までひと通りの説明があるので、ここを読むだけでだいぶSQL力があがります。内容としては、どのようなデータ構造・サイズであれば、どの結合が向いているのか、またその理由は何かなどで、かなり丁寧に説明しています。時間がない人は、まずはここから押さえると良いでしょう。 

「データベース実践入門」と「SQL実践入門」



 データベース関係といえば、同じく今年出版された「データベース実践入門」があります。こちらも同じ技評さんから出ていて、かなり良い本です。どちらを読めばよいのと聞かれたら、間違いなく両方とも読めと答えますが、どちらから読めば良いのと聞かれると「SQL実践入門」の方から読んだ方がよい人が多いと思います。
 データベース実践入門は、データベース設計の指針です。これに対してSQL実践入門は、SQLを扱うことに特化した本です。DB設計する人は、必然的にSQLを扱うことに習熟している必要があるので、SQL実践入門の方が先かなという気がします。

感想というか、SQLと私



 もう10年近く前ですが、機会があってMySQLの生みの親の一人、"Monty"ことMichael Widenius氏に話を伺ったことがあります。そこで、その当時悩んでいたパフォーマンスの劣化と思われるケースについて質問してみたところ、データの種類や件数、インデックスの情報を伝えると、ディスクI/Oがこれくらいだからこれくらいのパフォーマンスが出るはずと、人間実行計画のような神業を披露して貰ったことがあります。その上で、改善の手立てを指摘してもらいました。その経験があって、SQLのチューニングというのは、動作原理を知ることだということを知ることができました。
 そんなこともあるので、動作原理から理解するというのは重要だと思っています。この本は、様々なケースの実行計画を読み解いて、その動き及び裏にある動作原理について解説しています。そういった点から、SQLの理解が急速に進むのではと思います。職場の若手がSQL触っていたら、是非そっとこの本を脇においてやってください。そんな本です。

SQL実践入門──高速でわかりやすいクエリの書き方 (WEB+DB PRESS plus)

SQL実践入門──高速でわかりやすいクエリの書き方 (WEB+DB PRESS plus)

See Also:
日本一熱いデータベース論、「理論から学ぶデータベース実践入門」

本を書いたら、MARUZEN&ジュンク堂書店梅田店の店員さんと写真を撮ってもらえた

 誰よりも本屋さんを愛するRuby Kaja、@higakiさんの紹介で、MARUZEN&ジュンク堂書店 梅田店さんにポップを置かせて頂きました。その際、コンピュータ書籍の担当の南雲さんと一緒に写真も取ってもらいました。

f:id:dkfj:20150327183841j:plain
※1 写真の掲載の許可を頂いています。
※2 目を瞑ったおっさんが私です。

コンピュータ書籍の南雲さん



 今回ご対応して頂いたのが、コンピュータ書の南雲さんです。入社1年目でコンピュータ書籍担当になったそうですが、本人曰く、ジュンク堂の中でトップ5に入るほど、コンピュータが苦手らしいです。苦手なコンピュータ作業は、店長をおだててやって貰っているそうです。
 ただ非常に熱心で、各種コミュニティ関係のイベントに対する出張計画や、どういったラインナップであれば満足されるか、いろいろ考えているのが垣間見れました。また、たぶん本屋さんそのものが大好きで、しきりに定期的に見に来て本を眺めてくださいと言っていました。
f:id:dkfj:20150327183820j:plain

MARUZEN&ジュンク堂書店 梅田店



 ジュンク堂さんは、わりと店員さんによる選書に力を入れているそうです。1階に選書コーナーがあり、テーマごとに毎回担当が変わって並べているようです。帰りがけに見ていたら、今回お世話になった南雲さんの選書もありました。テーマは、若手&ベテランの選書。南雲さんは、入社1年目ということで、若手としてのご担当です。

f:id:dkfj:20150327190309j:plain

 なるほどと思って、ふんふんと見ていました。
f:id:dkfj:20150327190303j:plain

 すると、なかなか独創的な選書。何というか、本が好きというのが伝わってきます。が、それ以上なものが伝わってきます。とりあえず4階のコンピュータ書籍コーナに戻って、もう一度問いただしてみたいと思いましたが、時間がなかったので断念しました。

f:id:dkfj:20150327190326j:plain

感想



 私も本屋という空間が好きで時間があったら、よく入り浸っています。ただ関東に引っ越してからは、通勤圏内の駅に大きな本屋がなく、最近はあまり行っていません。今回、書店の店員さんと話したことで、改めて本屋って良いなぁと思いました。大阪の人は、是非MARUZEN&ジュンク堂書店梅田店に行きましょう!!選書にも力をいれていて、非常に面白い本屋さんです。
 あと、私はペン習字で人並みの字を書けるように努力すべきかと改めて思いました。

See Also:
「Amazon Web Services パターン別構築・運用ガイド」の執筆環境
「Amazon Web Services パターン別構築・運用ガイド」の目次
AWSパターン別本の狙い。例えばAutoScalingを使えるように。「Amazon Web Services パターン別構築・運用ガイド」の裏話
『Amazon Web Services パターン別構築・運用ガイド』を書きました
『Rubyによるクローラー開発技法』を書きました
本を書く前に準備したこと、執筆中にしていたこと

「Amazon Web Services パターン別構築・運用ガイド」の電子書籍化決定!!

aws

Amazon Web Services パターン別構築・運用ガイド  一番大切な知識と技術が身につく

Amazon Web Services パターン別構築・運用ガイド  一番大切な知識と技術が身につく

  • 作者: NRIネットコム株式会社,佐々木拓郎,林晋一郎,小西秀和,佐藤瞬
  • 出版社/メーカー: SBクリエイティブ
  • 発売日: 2015/03/25
  • メディア: Kindle版
  • この商品を含むブログを見る


 いよいよ明日3/25発売のAmazon Web Services パターン別構築・運用ガイドですが、嬉しいニュースがあります。何と、電子書籍化が決定しました。紙の本と同時に電子書籍版も発売の予定です!!AWS流に表現すると、「We are excited to announce that Amazon Web Services Pattern Configuration and Operation Guide Book is decided to e-book.」ということでしょうか。

電子書籍の必要性



 著者としても、かなり嬉しいニュースです。今回の本は、大型本でかつ分厚いです。かばんに入れるとズシリと重く、持ち運びは少し大変です。電子書籍化することにより、いつでも持ち運べて見せることも可能になります。
 また、前作のRubyによるクローラー開発技法 巡回・解析機能の実装と21の運用例の時の経験から、紙の本を買わないという層はもう既に一定数いるということが解ってきています。そんな中で電子書籍を出さないというのは機会損失そのものです。出版社さんとしては、まだまだ紙の本を中心に考える必要がある中で、今回の判断を下して頂いてありがたいことです。まだAmazonの選択肢には出てきていませんが、明日3/25には出てくるのではないかと思います。どちらが必要か判断して購入して頂ければありがたいです。
※追記 選択肢として出るようになりました。ただ404のエラーが出るようです。中の人の対応待ち?直接リンクだと購入できます。
Amazon.co.jp: Amazon Web Services パターン別構築・運用ガイド 一番大切な知識と技術が身につく 電子書籍: NRIネットコム株式会社, 佐々木 拓郎, 林 晋一郎, 小西 秀和, 佐藤 瞬: Kindleストア

Amazon Web Services パターン別構築・運用ガイドの予約状況



 ちなみに予約状況ですが、次のグラフにある通り、かなり順調です。日平均でいうとずっと1,000位台で、しばしば3桁台に突入しています。

f:id:dkfj:20150324061717p:plain

 著者としては、あとは発売後のレビューを待つばかりです。どんな意見があるか、待ち遠しいです。(正直、厳しい意見が出るのは怖いですが、鋼のハートを用意しているので大丈夫です。)

Amazon Web Services パターン別構築・運用ガイド  一番大切な知識と技術が身につく

Amazon Web Services パターン別構築・運用ガイド  一番大切な知識と技術が身につく

  • 作者: NRIネットコム株式会社,佐々木拓郎,林晋一郎,小西秀和,佐藤瞬
  • 出版社/メーカー: SBクリエイティブ
  • 発売日: 2015/03/25
  • メディア: Kindle版
  • この商品を含むブログを見る

See Also:
「Amazon Web Services パターン別構築・運用ガイド」の執筆環境
「Amazon Web Services パターン別構築・運用ガイド」の目次
AWSパターン別本の狙い。例えばAutoScalingを使えるように。「Amazon Web Services パターン別構築・運用ガイド」の裏話
『Amazon Web Services パターン別構築・運用ガイド』を書きました
『Rubyによるクローラー開発技法』を書きました
本を書く前に準備したこと、執筆中にしていたこと

AWS コマンドラインインターフェイス(CLI)とAmazon EC2 API Toolsの違い

aws

 慣れている方でもわりと混同されているものに、AWSのコマンドラインインターフェイス(CLI)とAmazon EC2 API Toolsがあります。元々あったのがEC2 API Toolsで、Javaベースで作られています。名前の通り、EC2を操作するコマンドを中心に展開されています。それに対してCLIは後発のツールで、Pythonベースで作られています。こちらは、EC2に限らず包括的にAWSを操作する為のツールとなっています。

CLIとEC2 API Toolsのコマンド

 言葉で説明するより、具体的なコマンドを見たらピンとくると思います。

 まずはCLIです。awsコマンドの後に対象のサービス(ec2等)、実行したいコマンドと続けます。下記の例は、インスタンス一覧を表示するコマンドです。実際には、この後に様々なオプションを付けます。

$ aws ec2 describe-instances

 次にEC2 API Toolsのコマンドです。ec2-から全てのコマンドが全て続いています。

$ ec2-describe-instances

 CLIはEC2 API Toolsのコマンド体系を引き継いでいるため、コマンドも非常に似ています。そのため、EC2 API Toolsに習熟していると、CLIもほぼ同様の操作で利用できます。反面、Googleで検索すると、検索結果が両者が混じりあうことが多いので、注意が必要です。

CLIとEC2 API Toolsの関係



 CLIとEC2 API Toolsの関係を、非常に大雑把に捉えると下記のような関係になります。

f:id:dkfj:20150321222250p:plain

 ポイントはCLIはEC2 API Toolsの大部分を包含するものの、完全に包含するものではないという点です。例えば、VM Importを行うec2-import-instanceコマンドは、EC2 API Toolsしかありません。

CLIとEC2 API Toolsのどちらを使うべきか?



 特別な事情がない限り、CLIを使うべきです。カバー範囲の広さや更新頻度など、CLIに分があります。また、見過ごせないのは、EC2 API ToolsはJavaベースということです。コマンドラインで実行するには、意外に負荷が大きいのです。CPUを結構使うので、microなどの小さなインスタンスの場合、高頻度で利用するとCPUが100%で張り付く場合もあります。

まとめ



 ということで、CLIがお勧めです。3/25に発売の「Amazon Web Services パターン別構築・運用ガイド」にも、結構CLIを取り上げています。Windows,Mac,Linuxそれぞれへのインストール方法や、基本的な使い方の解説の他に、随所にCLIを使った構築法も記載しています。

Amazon Web Services パターン別構築・運用ガイド

Amazon Web Services パターン別構築・運用ガイド

  • 作者: NRIネットコム株式会社,佐々木拓郎,林晋一郎,小西秀和,佐藤瞬
  • 出版社/メーカー: SBクリエイティブ
  • 発売日: 2015/03/25
  • メディア: 大型本
  • この商品を含むブログを見る

See Also:
「Amazon Web Services パターン別構築・運用ガイド」の執筆環境
「Amazon Web Services パターン別構築・運用ガイド」の目次
AWSパターン別本の狙い。例えばAutoScalingを使えるように。「Amazon Web Services パターン別構築・運用ガイド」の裏話
『Amazon Web Services パターン別構築・運用ガイド』を書きました
『Rubyによるクローラー開発技法』を書きました
本を書く前に準備したこと、執筆中にしていたこと

「Amazon Web Services パターン別構築・運用ガイド」の執筆環境

Amazon Web Services パターン別構築・運用ガイド

Amazon Web Services パターン別構築・運用ガイド

  • 作者: NRIネットコム株式会社,佐々木拓郎,林晋一郎,小西秀和,佐藤瞬
  • 出版社/メーカー: SBクリエイティブ
  • 発売日: 2015/03/25
  • メディア: 大型本
  • この商品を含むブログを見る

 今回の「Amazon Web Services パターン別構築・運用ガイド」は、会社の同僚たち4人で書き上げました。会社の同僚といっても、東京と大阪に別れていたり、日中に打ち合わせをする時間もないので、ほぼリモートのやり取りだけで完結させました。かなりスムーズにいったのですが、幾つか課題もあるので、忘れないうちにメモです。

執筆を支えるシステムの全体像



 リモートでやり取りをする為に、幾つかのツールを組み合わせて簡単な環境を作りました。方針としては、執筆に集中するために出来るだけSaaSを利用し、余計な時間を取られないようにしました。まずは全体像を見てください。

f:id:dkfj:20150321001245j:plain

 GitHubを中心にシステムを構築しています。

目次と担当割りを管理するGoogleスプレッドシート



 まず目次や担当割りなどは、Googleのスプレッドシートを利用しました。最初にテーマや想定の読者層を設定し、その上で大きく章割りをしました。そして、節単位で各テーマを配置し、さらに分解していくという作業をしています。そして、担当を決めました。今回は、アプリが得意な人間、ミドルが得意な人間、インフラ・運用が得意な人間と上手いことバラけていたので、担当もスムーズに決まりました。

システムの要、GitHub



 次にシステムの要であるGitHubです。とりあえずこれがあれば何とかなるというレベルで重宝していました。執筆のプラットフォームとしてGitHubの良い所は、MarkDownで書いておくと、そのままWebでほぼ誌面の形で見られるということです。これがために、MarkDownを使っているのかもしれません。あと、レビューの指摘事項にはIssueを使うと便利です。
※後述しますが、レビューの問題点はありました。
 今回は、節単位(3章の1とか)で分割しているので、基本的にはPush時にコンフリクトは発生することはありません。しかし、基本的には各自ブランチを作ってマージするという形でやっていました。ブランチの単位は節単位でしたが、1週間サイクルで動いてたので週単位のブランチになることもありました。いずれにせよ、執筆する際は、1週間単位で動くのがちょうど良さ気です。

CircleCIで継続的にドキュメントのビルド



 GitHubにPushすると、連携したCircleCIでPandocを使ってビルドするように設定していました。前回の反省で、MarkDownからの変換環境をローカルに持つと、他の端末で作業するときに面倒臭いという事態を避けるためです。特に今回は複数人なので、必須と考えていました。結果的には、このPandocでのビルド結果は、あまり重要にはなりませんでした。理由としては、後述のAtomです。

プレビュー付きのテキストエディタ Atom



 Atomはテキストエディタです。全員が使っていた訳ではないのですが、かなり重宝しました。何が便利かというと、MarkDownのプレビュー機能があることです。しかもリアルタイムに反映されます。執筆していると、ついつい文字ばかり書いてしまって、読むのを躊躇するくらいギッシリとしたページになってしまいます。プレビューをしながら書くと、文字が多くなってきたので画像や表、ソースを入れて調整しやすくなります。執筆時には、下記のスクリーンショットのようにプレビューしながら書くことが多かったです。

f:id:dkfj:20150321003055p:plain

 個人的には、Atomのプレビューに満足して、CircleCIのビルドしたPDFの精度を上げなかったのが少し失敗だったと思います。

連絡には、Gitter



 チャットツールとしては、Gitterを利用しました。GitHubの連携性に優れているというのが理由です。実際のところ、GitHubに連携することも少なかったので、ChatWorkやSlackでも良かったでしょう。ただ、Gitterも中々使いやすかったです。

課題



 執筆中は上記の構成で、全く問題は発生しませんでした。しかし、編集者との校正が始まると、一転して混乱が生じました。理由としては、校正にMSのワードやPDFを利用するようになるからです。そうなると、今まで活躍してきたGitHubは、単なるファイル置き場になってしまいます。編集者からのフィードバックのフォルダや、そのフィードバックに対する修正フォルダといった感じですね。ちょっと悲しいですね。
 対策としては、紙やPDFが出てくる最終校正の前までは、MarkDownのテキストファイルでやり取りできるようにすることです。その為には、CircleCIで作ったドキュメントの精度を上げて、かつビルド後の配布方法をメールやDropBoxなど、もっと直接的なものにすべきだったと思います。

課題その2



 ビルドしたドキュメントの精度ですが、これは如何に紙の誌面と同じように見せるかという点です。この点、MarkDownの記法での表現力は、正直物足りません。画像のサイズの指定であったり、コラムや注釈の書き方などに限界があります。もう少し表現力が高いものとしては、ReVIEWがあります。今回、どちらを採用するか悩んだのですが、フォーマットの普及率から考えて、MarkDownを採用しました。恐らく今後もそうなるでしょう。
 では、表現力の不足をどう補うか。まだ検討段階ですが、CSSを試してみようと考えています。素の文章を書いたMarkDownと、それに対となるCSS、またベースとなるCSSを用意します。そしてビルドサーバで、両者を合わせたドキュメントを生成すれば、うまくいくのではと妄想しています。この辺りは、今後試してみます。実際の電子化の工程の話を聞いてみたり、Kindleの書籍化をしている人の話を聞いてみたいですね。

まとめ



 執筆時にバージョン管理システムを使うのは、もう当たり前です。今は、原稿をいかにビルドするか。その段階に入っているのではと思います。理想は、すぐにKindleで出版できるレベルですね。

See Also:
「Amazon Web Services パターン別構築・運用ガイド」の目次
AWSパターン別本の狙い。例えばAutoScalingを使えるように。「Amazon Web Services パターン別構築・運用ガイド」の裏話
『Amazon Web Services パターン別構築・運用ガイド』を書きました
『Rubyによるクローラー開発技法』を書きました
本を書く前に準備したこと、執筆中にしていたこと

Amazon Web Services パターン別構築・運用ガイド

Amazon Web Services パターン別構築・運用ガイド

  • 作者: NRIネットコム株式会社,佐々木拓郎,林晋一郎,小西秀和,佐藤瞬
  • 出版社/メーカー: SBクリエイティブ
  • 発売日: 2015/03/25
  • メディア: 大型本
  • この商品を含むブログを見る

JAWS DAYS 2015で「Amazon Web Services パターン別構築・運用ガイド」を展示&プレゼントします

 今週末3/22(日)は、JAWS DAYS 2015です。AWSのユーザグループであるJAWSUG(Japan AWS User Group)の全国イベントです。実は、JAWSUGの全国イベントは2種類しかなく、そのうちの1つがJAWS DAYSになります。既に1,500人以上も申し込みされて、まだまだ増えています。
Making of JAWS DAYSは、こちらが参考になります。
JAWS DAYSの作り方 - What I'm thinking about...

 先日、実行委員長の@t_konparuさんと話していて、会場にて展示させて頂くことになりました。まだどこに展示されるか決まっていませんが、手にとって中身を確認できる形になると思います。また、最後にプレゼントさせて頂きます。どのような形でプレゼントするかも鋭意企画して頂いています。3冊ほど用意できるので、是非会場で見ていただければと思います。
詳細決まりましたら、追記します。

Amazon Web Services パターン別構築・運用ガイド

Amazon Web Services パターン別構築・運用ガイド

  • 作者: NRIネットコム株式会社,佐々木拓郎,林晋一郎,小西秀和,佐藤瞬
  • 出版社/メーカー: SBクリエイティブ
  • 発売日: 2015/03/25
  • メディア: 大型本
  • この商品を含むブログを見る

See Also:
「Amazon Web Services パターン別構築・運用ガイド」の目次
AWSパターン別本の狙い。例えばAutoScalingを使えるように。「Amazon Web Services パターン別構築・運用ガイド」の裏話
『Amazon Web Services パターン別構築・運用ガイド』を書きました
『Rubyによるクローラー開発技法』を書きました
本を書く前に準備したこと、執筆中にしていたこと