読書リスト

●読了


■マスタリングTCP/IP[情報セキュリティ編] (2017/07/01〜07/14)

・情報セキュリティの概要から、それに使われている暗号化技術の基礎を知れる良い本だと思います。ホスト・ネットワーク・Webの分野のセキュリティに関しても紹介されています。個人的には、DHやMAC、VPNなどを知れた本です。

■DevOpsを支えるHashiCorpツール大全 (2017/08/05〜08/08)

・Vagrant,Packer,Terraform,Serf,Consulなどインフラ構成管理ツール群の概要を知れる入門書です。最近、「どうやれば早く帰れるか?」「作業ミスをなくせるか?」「楽できるか?」など考えていたところ、本書に出会いました。これをきっかけに、普段の業務に適用できないかを考えてみたいと思います。本書と合わせて、著者の方のSlideShareも参考になると思います。

■AmazonWebService実践入門 (2017/08/11〜08/13)

・AWSの主要サービスについて丁寧に解説している書籍です。Webコンソール上の操作と、AWS CLIでの操作が両方紹介されているのも利点だと思います。ネットなどにも多く情報が転がっているAWSですが、一度知識を整理したい方、初心者で何から手をつけていいかわからない方はいかかでしょうか。私は特に、VPC,AutoScaling,IAMについては一読した方が良いと感じました。

■DevOps導入指南 (2017/09/20〜 10/10)

・DevOpsを実践していくにあたって大変参考になる書籍だと思います。Vagrant,Ansible,Serverspecなどを使った、インフラを繰り返し構築・テストしてく方法など豊富な実践例が紹介されています。私が本書を手に取った理由は、従来行ってきた業務手順に限界を感じていたためです。「手作業ぽちぽちのインスタンス生成」「サーバ内で直書きする設定ファイル」「設定反映漏れのあるインスタンス」「このインスタンスいつなんのために作ったんだ?」と、混沌としていく環境。もしかすると皆さんも少なからず経験があるのではないでしょうか。そういった現状を改善するための手助けをしてくれる書籍だと思います。

■Amazon Web Service 基礎からのネットワーク&サーバ構築 (2017/11/12〜 11/18)

・AWS上でパブリックネットワーク、プライベートネットワークの構築方法をWordPressの構築を通して知れる書籍です。これまでオンプレの経験しかない人がAWS上にネットワークを構築するために大変参考になると思います。また、TCP/IP,TELNET,HTTP,DNSなどネットワークの基本的なプロトコルを実際にツールを使って挙動を確認しながら構築を行なっている点も大変参考になりました。AWSを初めて触る新入社員等の教育にもうってつけではないでしょうか。

■Infrastructure as Code (2017/10/11〜12/29)

・仮想化・クラウド時代のインフラをどのように構築・運用していくのかについて書かれている書籍です。様々なインフラ構成パターンが紹介されておりなぜそれが必要なのかを丁寧に説明されています。書籍内で様々なコラムが紹介されており、実際に現場にいる人間には痛いほどわかる教訓や事例が紹介されていてそれを読むのも楽しく感じました。全体的に理論的な内容になっているため、実際に本書を読んで実践し改めて見返すことでさらに理解が深まるものだと感じています。私も実際にInfrastructure as Codeを実践してみて本書のいわんとしている事を実感したと思います。

■エンジニアのためのGitの教科書 (2017/12/30〜2018/01/08)

・Gitの基本的なコマンドからGit flowやGitHub flowなどの運用方法まで知れるGitの入門書です。実際にサンプルコマンドがあり、動作を確認しながら理解できるため初心者に適している良書だと思います。これからGitをチームに取り入れようとしている方、また、すでにチームでGitを用いた運用が行われている方で一度知識を整理したい方は大変参考になると思います。私はGitをチームメンバーに広めるにあたってある程度説明できるようにするために本書を手にしました。Gitを用いた運用をチームに取り入れ、今までの業務を少しずつ改善できればと考えています。

■Jenkins実践入門(2018/01/08〜01/17)

・Jenkinsの利用方法をJavaのビルド自動化を題材として分かりやすく説明されています。ソースコードの静的チェック、JUnitの実行とレポート出力、ステップ数のカウントなど従来手作業で行ってきたものを全てJenkinsで自動化する手順が示されています。また、Jenkinsの構築・運用方法も丁寧に説明されているため、実際に導入して運用の際にも重宝する一冊だと思います。私は、インフラのCI/CDを行うにあたり本書を手にしたため、それらの記述が少なかった本書は少し物足りなく感じました。ですが、Javaなどのソフトウェアのビルド・デプロイの自動化を考えている方には大変参考になる書籍だと思います。

■24時間365日サーバ/インフラを支える技術(2018/02/22〜03/19)

・タイトルにある通り、サービスを提供し続けるための冗長化の構成やそれを支えるプロトコル・仕組みを丁寧に解説している書籍です。また、サービスを停止しないためだけではなくサービスのレスポンスをいかにして遅延させないようにする方法も紹介されており非常に参考になりました。私が特に知ることができてよかったと思うものは、ネットワークインターフェースを冗長化するBondingやHTTPのレスポンスを効率よくするKeep-Alive、VIPを実現させているGratuitous ARPなどサービスを支えている仕組みたちです。最近ではAWSやAzureなどパブリッククラウドが台頭しており、オンプレ環境で求められるこの辺りの知識を知らなくてもサービスを提供することができます。しかし、インフラを支える技術・知識を知っている人とそうでない人とでは設計の質に違いが出てくるのではないかと感じました。

■ビッグデータを支える技術 (2018/03/21〜4/17)

・ビッグデータの構成要素とその役割について解説している入門書です。ビッグデータはシステムの構成要素が多く、それぞれのミドルウェアの役割を理解するのが難しいのではないかと思っています。本書を通して、ビッグデータにはストリーミング処理、バッチ処理と大きく分けると2つの役割があることを理解し、その中で各ミドルウェアの果たす役割を学ぶことができます。ビッグデータの学習を始める最初の1冊として最適な書籍だと思います。

■C 頭とからだで覚えるCの基本(2018/06/11〜12/10)

・初学者の方にオススメできるC言語の入門書です。メモリやポインタといった基本的なところから始まり、プロセス間通信やソケット通信、スレッドプログラミングなど少し凝った内容も扱われています。私は「OSの仕組みを理解したい」「プログラムの動作原理を理解したい」と言う思いからC言語の学習を開始しました。インフラエンジニアとしてサーバを扱っていくうちに、場当たり的な対応やネットに転がっている情報をなんとなく理解して操作を行うのではなく、しっかりと自分で内容を理解したいと思うようになりました。そのために、OSや各種ソフトウェアの実装を覗けるようにC言語の学習を開始したところです。低いレイヤの世界は自分にとって未知のものが多いですが少しずつ理解していきたいと思っています。

■Webを支える技術(2019/01/04〜01/10)

・Webサービスを開発する際に必要となる基礎的な知識を学べる書籍だと思います。HTTPにおけるトランザクションの概念が大変参考になりました。また今までざっくりとしか理解してなかったHTTPのメソッドについても理解が深まりました。URLのリソース設計の指針も示されているので設計の段階にも参考になる書籍だと思います。私はWeb系をメインで仕事をやっているわけではありませんが、開発現場において意思疎通に必要になってくるものなのでインフラメインの人間でも知っておくべき内容だと思いました。

■リーダブルコード(2019/01/10〜01/17)

・言わずと知れた書籍ですね。IT業界にいる人なら一度は「読まなきゃな」と思ったことがある書籍ではないでしょうか。私も購入から長らく放置していましたがやっと読了しました。仕事でがっつりプログラミングをするわけではありませんがちょっとしたスクリプトでもこの書籍にあるような作法にしたがって書いていきたいと思いました(今までは書きなぐったものばかりだったので。)私が一番心に残ったフレーズがあります。これからは多少なりとも他人が読み易いコードを書いていきたいと思います。

エンジニアリングとは、大きな問題を小さな問題に分割して、それぞれの解決策を組み立てていくことに他ならない

■入門UNIXシェルプログラミング(2019/01/17〜01/26)

・シェルスクリプトの「こんなときはどう書いたら良いだろう?」といったちょっとした疑問を解決してくれる書籍だと思います。サンプルも多く載っているためその場その場で読み返すのにも使えると思います。普段そこまで凝った書き方をしないのであればあまり必要ないと思いますが既存のスクリプトを読んだりすると「なんじゃこりゃ!?」といった書き方に出くわすこともしばしば。。。といった人にお勧めできるかもしれません。私はtrapコマンドやexecコマンドを用いたリダイレクションなど今まであまり使ったことがないコマンドをしれた書籍でした。

■試して理解 Linuxの仕組み(2019/01/28〜02/15)

・とても面白い書籍でした。「この言葉何回も調べてるし、なんとなくは理解してるつもりなんだけど。。。」と、どこか腹落ちしていない方にとてもお勧めできる書籍です。タイトルにもある通り、「試して理解」することができる内容になっています。Linuxの勉強などをしていて抽象的な内容になるとどうしてもいまいち腹落ちしないことがありましたが、手元のPCでそれらの挙動を「サンプルコードを書いて」、「実行して」、「意図した結果かどうかを確認」することでより深い理解に繋がりました。普段は結果を見ているだけだったこともサンプルコードを書くことで、裏側でどんなことが起きているのかを体感することができました。新入社員の方には少しハードルが高いかもしれませんが、入社2~3年目の少しLinuxを触ったことのある人なら楽しく学ぶことができると思います。ぜひ皆さんもお手に取ってみることをお勧めします。

■プロのためのLinuxシステム構築・運用技術(2019/02/11〜03/07)

・Linuxの構築・運用に関するある種の「一般常識」を教えてくれる書籍だと思います。何を持って一般常識というかは難しいところではありますが、「プロのため」とあるように、仕事でお金をもらってシステムを構築する人ならば身につけておくべき知識が詰まっています。私自身知らなかったことも多く、もっと勉強していかないとなと思いました。これまで、体系立ててLinuxの構築・運用を学んだことが無い人、また、いきなり現場に配属されてみんなが何を基準に物事を判断しているのかがわからず困っている人の助けになってくれる書籍だと思います。

■プロのためのLinuxシステム・10年効く技術(2019/03/08〜04/18)

・Linuxの内部構造や動作がわかりやすく解説している書籍だと思います。私にとっては難しく感じる箇所もありましたが、他のLinux関連の書籍より一歩踏み込んだ内容が知れると思います。また、本書を通してよかったと思ったことは、「素振り環境」の構築方法やLinuxカーネルのビルド/解析手法が紹介されていたことです。素振り環境ではKVMを用いた検証環境の構築を通して、自分が「試したい」と思ったことをすぐに確認できるようになったことです。最近ではクラウドを用いれば良いのかもしれませんが、「手元で誰の迷惑にもならず、好き放題いじれる環境」というのは大いに勉強が捗るのではないかなと思います。Linuxカーネルについてもyumで更新される程度にしか扱ったことがありませんでしたが、実際にソースコードからビルドして、そのカーネルからシステムをブートさせるというのには少し感動しました。「10年効く」とあるように、基礎体力を上げて今後の知識・技術習得の支えになってくれるとても参考になる書籍だと思います。

■Web API The Good Parts(2019/05/03〜05/10)

・WebAPIを実装する人やHTTP仕様の基礎知識を知りたい方にはとても参考になる書籍だと思います。TwitterやAWS、Facebookなど実際に存在する企業のAPI設計を比較したりととてもわかりやすくWebAPの設計のポイントが紹介されています。私は業務でWebAPIの設計を行うことはないのですが、少し試してみたいものがあったのでそれを実践するにあったって事前知識として本書を手に取りました。本書を読んでいて感じたことは「WebAPIの設計などは技術者のレベルを測る対象になる」ということです。WebAPIを公に公開するにするにしろ、自社内で開発したクライアントアプリからのみ利用するにしろ、他人の目にその人の技術力が晒されるわけです。「なんだこのクソ仕様は」とか「いけてねーなこのAPI」と批判を浴びることになるかもしれません。世のデファクトスタンダード、積み上げられたベストプラクティスを知識として知り、自分で失敗しながらも学んでいくのが大切じゃないかなーと思ったところでした。

本書でも紹介されている世の中のWebAPIをまとめているサイトも設計の際に役立つと思います。

■チーム開発実践入門(2019/04/18〜06/01)

・タイトル通りITの現場でのチーム開発のプラクティスをまとめている書籍です。はじめの方で、チーム開発が行われていないデスマーチプロジェクトでの事例が紹介されており「あぁ、、同じようなような目にあったなぁ。。。」と悲しくなりながら読み進めていました。例えば、「検証環境がない」「データベースの再作成が困難」「起動するまで壊れていることに気付かない」「リリースが複雑で手順書が必要となる」など、皆さんも経験したことがあるのではないでしょうか。少なくとも私はこれまで関わってきたプロジェクトは全てこのタイプです(まぁ4年程度の経歴ですが)。そして、「これが当たり前なのだ」と思っていました。本書では「理想的なプロジェクト」として「バージョン管理」「チケット管理」「CI環境」「CD環境」「リグレッションテスト」などのプラクティスが紹介されています。正直、読んだ感想として「本当にこんなことを実践できてるチームが存在するのだろうか?無理だろ。」と信じられない気持ちでいます。「理想」と「現実」の乖離が自分の中で大きすぎて、その溝を埋められる気が全くしないというのが正直な感想です。ちょっと悲観しすぎでしょうか。本書の中で特にぐさっときた言葉があります。

テストコードを書かず、CIを行わず、さらにリファクタリングも行われずにメンテナンスされ続けたコードは、大きな負債となってビジネスの成長を阻害することさえあります。そのようなコードを「レガーシーコード改善ガイド」では「レガーシーコード」と定義しています。

p.35

自分自身もこの定義に加担する側の人間だなぁと思い、そうゆうところから少しずつ、少しずつ改善していけば良いのかなとちょっとだけ前向きな考えを持ちました。合わせて思ったことは、そういったプロジェクトやコードを責めることは間違えているなということです。これまで価値を提供し続け、利益をあげているものに対して敬意を払うことは忘れてはいけないと思いました。しかし、「レガーシーコード」の定義に当てはまっている現状がもしあるならばそこから目を背けるのもまた間違えではないかとも思います。そういった課題を共有し一緒に解消していけるチームで働いてみたいなぁと思いました。他力本願ばかりではいつまでたってもそうゆう未来は来ないと思うので自分ができる事から始めることを探すのにも良い書籍だと思います。私も自分のできることから実践していきたいと思います。

■GitHub実践入門(2019/06/01〜06/06)

・とある企業では新入社員の入社前に「本書+リーダブルコード」を渡しておくなんて情報をどっかで見たことがあります。それにも納得できるとても参考になる書籍でした。かくゆう私は、IT業界4年目にして本書を読了したわけですが、これまでわからないことはwebで調べつつなんとなくgitやgithubを使ってきました。本書を読んでいて「あー、もっと早く読んでおけばあの時のミスを無くせてたのになー」と長らく積読していたことを後悔する場面が何度かありました。例えば、git-flowでは「自分のトピックブランチに定期的にdevelopブランチをマージして最新のコードを取り込む」など。当然、トピックブランチ上で長らく開発していれば最新のコードと差分は出て行きますがふとPullReqを出した時に大量にコンフリクトが発生してえらい目にあうなど。また、[WIP]を使って早めにコードレビューができる状態にしてPullReq上で議論をしていくなど。言われてみれば当たり前のことですが、意外と失敗するまで見落としがちではないでしょうか?その辺の常識を教えてくれる書籍でもあります。また、デプロイベースのgithub-flowやリリースベースのgit-flowの考え方などブランチ運用に関することもとても参考になりました。やはり書籍を通した体系的な学習も大切ですね。

あと興味深かった内容として、Issueを活用したプロジェクト管理の項目がありました。プロジェクト管理ツールのRedmineやBacklogなどがありますが、それらを使わずにIssueをチケットの代わりとして開発に利用していく手法です。そうすれば、変更の履歴や経緯などを全て1箇所に集約できスムーズに履歴を追うことができるなと思いました。ブランチの頭にチケット番号をつけたりなどこの辺のツールとの連携手法はいくつか見てきましたがそんなことをせずに「Issue+Milestone」でシンプルに完結できるのには魅力を感じました。機会があればやってみようかと思います。

■インフラエンジニアの教科書(2019/06/07〜06/15)

・LINEのエンジニアの方が執筆されたことでも有名な書籍ですね。Twitter等でも時折見かけて興味があったため手に取ってみました。インフラエンジニアの業務内容からサーバ・OS・ネットワーク・ストレージ・データセンターのことなど幅広く紹介されています。「新入社員に読んでほしい」という筆者の思いにもあるようにこれからインフラエンジニアとしてこれから業務をされていく方はたぜひ目を通して自分が行っていくであろう業務を俯瞰してみると良いのではないかと感じました。また、すでにインフラエンジニアとして業務をされている方でも、普段自分が担当されている以外の分野については知らないことが多かったりするのではないでしょうか。私もOSの上からの業務がほとんどなため、サーバ機器、ネットワーク、ストレージなど読んでいて新しい発見がありました。一括りにインフラエンジニアといってもとても幅広いもので全てをカバーするのは難しいと思いますが全体を俯瞰できる本書は自分の立ち位置を把握する上でも参考になるのではないかと思いました。

■インフラエンジニアの教科書(2019/06/16〜06/22)

・前回の続編であるインフラエンジニアの教科書2を読了しました。前回の1が物理(ハード)より、2がソフトウェア(OS/ミドル)よりという印象を受けました。ご自身が苦手としている分野に合わせて1か2かを読むと良いのではないかと思います。特に2の方ではOSの動作原理などについて多くページが割かれているのでサーバサイドのエンジニアの方にはおすすめです。プロセスやスレッド、fork/execやCoW(copy on write)、仮想メモリ/物理メモリとCPUのMMU(memory managemant unit)など一度は聞いたことがある、また、業務を行う上で出てくるであろう言葉が丁寧に説明されています。これまで他のLinux関連の書籍やOSに関する書籍を読まれた方にはちょうど良い復習にもなると感じました。また、最終章の「インフラエンジニアとして目指す方向性」では、インフラエンジニアのキャリアパスとしてどのようなものがあるかや心構えなども紹介されています。私は最近「インフラエンジニアの技術力ってなんだろうか?」と考えることがあります。ガリガリ、プログラムをかけるわけでもないし?ミドルウェア自体を作っているわけでもないし?一体なんなんだ?と自問自答して、「自分自身何も技術力と呼べるものを持ってないな」と感じることがあります。本書の最終章を読んでいてすっと腹落ちした言葉ありました。「原理原則をよく理解すること」「直ちに手を動かすことができること」この2つがプログラマや他のエンジニアとの違いなのかなと感じたところです。目に見えて動くものを作っているわけではないけど、裏っかわでサービスを支えているエンジニアに必要な力なのかなと思いました。

■DNSがよくわかる教科書(2020/02/21〜02/28)

・ネットワークの基礎の1つであるDNSについて改めて見直してみました。初学者向けに書かれている書籍でとても読みやすかったです。多くの方はPCをセットアップする際にキャッシュサーバを指定する設定をするぐらいで普段そこまでDNSについて意識することはないかもしれないですね。インフラ周りを業務で行われている方でも権威サーバを構築してゾーンを運用される方はそこまで多くないのかなと個人的に感じてます。私も業務でDNSサーバをいじる機会は今までありませんでした。なので、本書を読みながらAWSのRoute53で取得したドメイン内でゾーン委任の設定を行い権威サーバを構築しながら勉強をしてみました。仕組みとして知っていてもやはり手を動かしながら動作確認することは大切だなと感じました。

■徹底解説v6プラス(2020/03/01〜03/04)

書籍のタイトルの通りv6プラスに関する解説書です。本書を手に取ったきっかけは自宅のNW環境の改善のためでした。これまで夜になると10Mbps以下まで通信速度が低下し、isoや容量の大きなインストーラ、書籍のダウンロードなどとても時間がかかって不満に感じることが多々ありました。「v6?速くなるの?」といった感じで軽い気持ちでISPや回線の契約を調べたりしながらv6プラス(MAP-E)の設定をやってみました。結果として夜間でも300Mbps程度速度が出て今までの不満は解消された感じです。その中で少しv6プラスの仕組みについて気になったので本書を手に取りました。IPv6についての知識もあまりないですが、読んでて普段意識することのないインターネット側のNW構成などを図解で知ることができてとても面白く感じる部分もありました。有線の設定はひとまず終わったので、次は無線の設定に取り組みたいと思います。v6プラスの設定は (YAMAHA)v6プラスでインターネット接続 : コマンド設定 が参考になりました。対応している機器 も用意する必要がありますが自宅のネットワーク速度に不満がある方は試してみるのも良いかもしれないですね。

●読み途中…


・セキュリティ最強の指南書 (2017/07/15〜)

・Zabbix統合監視実践入門 (2017/12/01〜)

・Serverspec (2018/01/18〜)

・Docker実践ガイド(2018/04/17〜)

・ふつうのLinuxプログラミング(2018/12/20〜)

・動くメカニズムを図解&実験 Linux超入門(2019/06/23〜)

・テスト駆動開発(2019/06/27〜)

・コンピュータアーキテクチャ技術入門(2019/07/24〜)

・プロフェッショナルIPv6(2019/07/29〜)

●未読


・ルータ自作でわかるパケットの流れ

・30日でできる! OS自作入門

・はじめてのOSコードリーディング

・Linuxのブートプロセスをみる

・詳解UNIXプログラミング

・OSSライセンスの教科書

・Ansible実践ガイド

・Amazon Web Service クラウドデザインパターン 実践ガイド

・Amazon Web Service クラウドデザインパターン設計ガイド

・Amazon Web Service クラウドデザインパターン 定番業務システム12パターン設計ガイド

・LinuxサーバHACKS

・LinuxサーバHACKS2

・ネットワークセキュリティHACKS

・ポケットスタディ情報処理安全確保支援士

・プログラマのためのDocker教科書

・インフラエンジニア教本(セキュリティ実践技術編)

・マイクロサービスアーキテクチャ