Book

Oreillyの「Docker」を読んだ

Dockerのチュートリアルを軽く触った事しかなかったのですが、本番でDockerを運用しているシステムを触ることになったので手に取りました。 しかしDockerは進化のスピードが早くてどの本を買おうか非常に迷いましたね。

この本は2016年の出版ですが、パッと見た所そこまで難しすぎず、手を動かしながらDockerを体験できそうだったのと、 迷ったらオライリーでしょっていう安易な考え方で選びました。

2年の月日はこの分野では大きな差がありそうですが、 特に進化が激しそうなオーケストレーション周りはこの本とは別に直近に出版されたものも読んで、 Dockerの進化を疑似体験しつつ知識をアップデートしていこうという目論見です。

内容

DockerでHello Worldする所から始まり、簡単なWebアプリケーションの構築を通して、Dockerの基本的な操作を学べました。 これまでVMを触る事が多かった身としては、VMとの違いや利点も知りたい所でしたが、その点もしっかり押さえられている印象でした。 ただ単にVMに比べて起動が早いというわかりやすい利点の他に、Docer Hubを介したエコシステムが開発効率を上げてくれることを体感できます。 やはりその可搬性からデプロイまでも含めた流れが、VMとの大きな違いですね。 例えばサンプルにも出てきますが、既存の構成にキャッシュを組み込む際に、redis用のコンテナをサクッとpullしてリンクしてあげるような基本的な部分から Docker HubでのAuto Buildやステージング・本番で同一コンテナを利用する方法なども記載があり、 Dockerの思想を学びながら実際の現場で使えるようなイメージが湧きました。

要素としては、dockerコマンドやDockerfile, docker-compose, docker-machine等の基本的なコマンドや設定ファイルについて、 丁寧なサンプルが載っているので、写経していくには良かったです。 Dockerを利用したWebアプリケーションの構築やそのエンハンスを手を動かして一通り体験できるので、分かった気にさせてくれます。

特に面白かった所

これまで存在を知っていたconsul等のサービスディスカバリに触れられたことは、予想外の利点でした。 AWSのRDS等の各サービスを利用している際は内部DNSが裏で運用されて、利用する際はDNS名を意識すればよいだけですが、 Dockerで各コンテナ間で通信を行う際は、DNSでやるかどうかも含めて通信先を管理する必要があります。 そこでサービスディスカバリが必要になるわけです。 このDocker間の通信やサービスディスカバリがDockerで重要な位置を占めている点が知れた事が大きな収穫でした。

サービスディスカバリとコンテナの登録・削除を自動的に連携させるところまで細かく触れられていませんが、 手動でconsulやetcdのAPIを叩く事でコンテナの登録・削除を行う事でサービスディスカバリの働きを知る事ができました。

またホスト間をまたがったネットワークを構築するとなると、linkほど簡単に行かない点も興味深い点でした。 これまでAWSでEC2+RDSのようなオーソドックスな構成を運用する事が多かったため、 コンテナならではの考慮点がしっかり記載してある点は非常にためになりました。

まとめ

コンテナの良い所と苦労する点が非常にまとまってる本でしたが、 サンプルの通りに動かない点なども少々ありました。

それだけこの界隈の進化のスピードが早いという事でしょう。 やはりこの本だけでDockerを学ぶのではなく、直近に出た本でも知識のアップデートをしておく必要があると感じました。 特に、ネットワークやオーケストレーション周りですね。

とはいえ、Dockerをあまり触ったことのない方が一通り体験するには良い本だと思います。

「入門!論理学」を読んだ

「データベース実践入門」]] を読んでいて、これは論理学を学んでおかないと歯が立たないなと感じ、急遽読むことにしました。 論理学はプログラマが勉強すべき内容として、こちら でも紹介されていますね。

難しさに挫折するのは悔しい所ですが、ここは自分の知識のなさを素直に認めて急がば回れで行くことにしました。

内容

命題論理を中心に進めながら、述語論理にも触れていく構成になっています。 この本自体は著者も書かれていますが、式をバンバン出していくのではなく、敷居を下げつつ nnある程度内容を絞った上で論理学の入り口に連れていってくれます。

特に面白かった所

この本で扱う論理学では、公理と呼ばれる前提とされるもの、つまり証明せずに使って良いものは非常に少ないです。 否定、連言、選言、条件。この4つです。 この4つを用いて証明を進めていくことになります。

使って良いものが少ないので、証明の過程は最初は回りくどく感じます。

どれくらい回りくどいかというと、 「((Aではない) ではない) かつ B」 から 「AかつB」を証明するのに、 4ステップ必要なのです。

(1) ((Aではない) ではない) かつ B  ...前提
(2) (Aではない)ではない ...(1)より
(3) A ... (2)より
(4) B ... (1)より
(5) AかつB ... (3),(4)より

読み進めていくうちに、この回りくどさが納得感に変わっていくのが不思議な感覚でした。

仮定として述べられていないことはしつこいくらいに証明を重ねていく考え方は、 論理学に限らず非常に有用に感じました。 「AならばB」とした時に「BならばA」(逆) 「AでないならばBではない」(裏)は、必ずしも成り立たないのですが、 裏とか逆とかは日常では曖昧にされつつ、暗黙的に成り立つとみなされることもあります。 この辺りをはっきりしていくと、いろんな誤解も防げそうですね。

まとめ

とにかく論理学の雰囲気を楽しんでほしいという、著者の意図が非常にありがたい一冊でした。 おかげで論理学で使われる堅苦しい言葉にも少しは慣れました。 ド・モルガンの定理などは昔習ったことのあるものでしたが、 この本にそって再度学び直すことで、また違った景色を手に入れた気分です。

この本を読み終わって 「データベース実践入門」 を再度眺めて見ました。 ありがたいことに「読める、読めるぞ!」という気分に浸れました。 この本はデータベースの理論を学ぶ上で非常に良い導入になるんだと思います。

「初めてのAnsible」を読んだ

実際に仕事でも使ってるAnsibleだけど、使い始めた頃から本書にはお世話になってます。

改めて読み返してみると、最初のハードルから様々なプロダクトとの連携や高速化など、 痒いところに手がとどく内容だなと思います。

初めてAnsibleを触る人にも良いと思います。 あまり馴染みのないPython製のCRMをベースに話が進んでいく箇所は若干難儀しましたが。

特に面白かった所

前述の通りAnsibleの初歩から丁寧に解説してくれた上で、応用までしっかり導いてくれる一冊でした。 ある程度仕事で使った今でも、変数の付け方や高速化の手法など、細かな書き方の指針なんかも書いてくれていて、 はっとさせられます。

考えたこと

DockerやVagrantとの連携に関してはやはり実際に書いてみるのが一番だなと感じました。 それぞれのツールの役割が読んでるだけではよくわからなくなってしまいます。 写経の大事さが身にしみました。 ただ、Dockerのサンプルソースが一部分現時点では動かなくなっていました。 本書は1系の頃に書かれたこともあり、賞味期限も切れかけているのかなとも思います。

まとめ

この分野も日々進化しており、原著は2nd Editionが出ているようです。 まだ翻訳は出ていませんが、GitHubのサンプルソースをちらっとみた限り、 章立てもだいぶ変わっているようです。翻訳版は出るのでしょうかね、楽しみですね。

「Google ネット覇者の真実」を読んだ

これまで、Googleの成長をリアルタイムで体験しながらネットを利用してきたわけですが、 Googleが企業し、小さな企業から大企業へとなっていく華やかな成長の裏で、 中の人は何を考え、苦悩してきたのかがわかる本です。

内容

検索エンジンのキラーアイデアとなったページランクから始まり、打ち出の小槌のAdwardsにより、お金の心配なく企業を運営してきたGoogle。 そんなGoogleが「邪悪になるな」をモットーにしながらも、プライバシーや著作権の問題で、リアル世界では批判にさらされていく様子が克明に描かれています。 小さな企業だった頃はグレーゾーンを突き進んでイノベーションを起こしてきたGoogleが、 大企業になって無茶はできなくなっていき、リアルな世界と調整していくに当たって保守的にならざる得なくなるところが印象的でした。

特に面白かった所

ペイジが書いた初期の検索エンジンはJavaで書かれていたが、バグだらけで後にPythonで書き直されたそうです。 また、インデックスの更新に非常に時間がかかったりと、技術的には今のGoogleからは考えにくいようなレベル感の話がありました。 そんな中で、今では常識となっているメモリを使った高速化の手法を編み出していくわけですが、 当時としては画期的な訳で、それをゼロから考えついたというところは流石と思いました。

また、自由に見えるGoogleも思ったよりと不自由な状況になっている点も印象的でした。 大企業のしがらみからか、徐々にイノベーションを起こすだけの小回りが効かなくなっていく様が本書でも克明に描かれています。 そんな中でYoutubeという、著作権ギリギリの中でサービスを展開していく存在が非常に対照的に描かれています。 色々配慮したGoogle Videoは敗れ、Youtubeを買収することでイノベーションに乗っかることを選んだGoogle。 今後のGoogleはどうなっていくか考えさせられる買収劇でした。

考えたこと

ソーシャルの波にはすかり乗り遅れ、Facebookの後塵を拝しているGoogleですが、 最近は人工知能の分野で盛り返しているように感じます。 ブリンとペイジは創業当初から常にGoogleは人工知能の会社であると定義していたことを考えると、 大きな企業がイノベーションを起こすことは難しいと言われていますが、そこを覆す何かが起こらないかなと期待してしまいます。

まとめ

今となっては息をするように利用しているGoogleのサービスですが、 こんなにも著作権やプライバシーの問題に晒され、苦しんできたのかと驚かされました。 僕の中に漠然とあった、やんちゃなイメージのGoogleは実はもう存在していなくて、大人な会社がそこにはありました。 日本では特にGoogleのこういった苦悩は知られていないのかなとも思います。 多くのインタビューと取材によって書かれた本書は、本当のGoogleを知る上で良い一冊だと思いました。

「Infrastructure as Code」を読んだ

Infrastructure as Code(IaC)もずいぶん使い古された感のあるワードですね。

出始めの頃は自分もChefとかPuppetを使いさえすればいいもんだと勘違いしていました。

実際はもっと大きな考え方であり、この本は網羅的にIaCの考え方を抑えていってくれるので、 視野狭窄にならないようにするためにも、読んでおいて損はない本だと思いました。

内容

この本はIaCに関する技術的トピッックを取り上げるというよりかは、概念とか思想とかそういったものを教えてくれます。 よくあるアンチパターンとどうやってIoCを取り入れていくか、トピックごとにパターンを提示していきながら、 再現可能でセキュアで品質の高いシステムを作っていく方法が書かれています。

そう、システム。当たり前だけどシステムはインフラだけで動いてるんじゃないんです。

読んでる間は結局うちの組織にどうやって適用すればいいんだよっていう葛藤との戦いでした。 何度この本を読みながら天を仰いだことか。 IaCを適用していく上での組織論みたいな部分もあるにはあるんですが、 100個組織があったら100個の文化があるわけで、そんな綺麗に当てはまるわけもないですし、 そんな細かいところまでこの本も解決するつもりはなく、こんなベストプラクティスがあるよって程度です。

それでも、この本が提示してくれたメリットには夢がありました。

特に面白かった所

結局、アプリケーション開発の良い部分を、インフラに持って行こうという点が、特に後半では強くなります。 ユニットテストやCIをインフラに適応させていく話は、数年前はアプリケーション開発をやってた身としては、非常に納得感のあるものでした。 コードを描いてて、テストがあることによる安心感は相当なもんです。 そしてインフラに何か変更を加えるとき、様々な要素が検証環境と違うことがある中で本番環境に手を入れる時の緊張感も相当なもんです。

考えたこと

自分の組織に如何に適応していくかを考え続けた読書であったことは前述の通りです。 そして最後に思ったのは、結局アプリ・インフラとあまりに分かれている組織はダメなんだなということでした。 アプリはもっとインフラを理解しないといけないし、インフラももっとアプリを理解しないといけない。 これもずっと言われ続けてきていることですけど。

アプリ屋さんがセルフサービでインフラを構築できないと、IoCの求めている姿にはならないし、そのためにはインフラの知識が必要です。 そしてインフラ屋さんは、アプリケーションのニーズを理解しつつ、アプリ屋さんがセルフサービスでインフラを構築できるような基盤を整えていくことが必要になっていくんでしょう。

まとめ

古き良きインフラ運用のデメリットと、IaCがもたらしてくれる明るい未来を予感させてくれました。 まだまだやることがあるなと途方に暮れつつも、ワクワクさせてくれる本でした。