2019/5/26 はてブで話題になっていたので慌ててアップデート、Docker実践ガイド 第2版が発売されていたので追記&修正しました。
はじめに
本投稿はRecruit Engineers その2 Advent Calendar 2018の5日目の投稿です。
そもそものきっかけ
Rancher もくもく勉強&相談会 #02にて、現代的なインフラエンジニアとして
どのようなことを勉強したらよいかという相談を受けたので、書籍ベースで改めて考えてみました。
”どんな本でしたか”くらいしかまとめてないです。そのまとめも私の完全な主観である点はご注意ください。
筆者は何者?
Web系の会社でインフラエンジニアをやっています。
パブリッククラウドやコンテナ系の技術をベースに先進アーキテクチャの装着みたいな役割で
新規サービスを中心にインフラアーキテクトみたいなお仕事をやっています。
具体的には、アプリケーションの構成などをベースに非機能要件を含めてどのような
インフラ構成を実現するかと行った部分のリーディングを主に担当しています。
インフラエンジニアの定義(仮)
筆者自身が現代的なインフラエンジニアという職種自体をいまいち定義しきれていないので、
以下のような前提のもとで記述します。
- アプリケーション観点の機能要件の洗い出しなどは行わない
- ミドルウェアレイヤーまでの非機能要件(可用性・性能・セキュリティ)について中心的な役割を担う
- CI/CDのパイプライン構築についても中心となって対応する
現代的なというのはここではパブリッククラウド時代のと読み替えてもらっても構いません。
(適切な表現かというと微妙なところですが)
書籍のリスト
Amazonの回し者みたいになってしまいますが、書籍およびWebページへのリンクのリストを記載します。
- 開発組織全般に関わる話題
- システムのアーキテクチャに関わる話題
- 特定の技術に関わる話題
- サーバ・OS
- ネットワーク
- マスタリングTCP/IP 入門編
- Cisco Training and Certifications ICND1 (多分非売品)
- ストレージ
- データベース
- 仮想化技術
- Docker・Kubernetes
- VMWare/Xen/KVM
- コーディング(プログラミング)
開発組織全体に関わる話題
ピープルウェア
問題解決型組織を運営していく上で必ず読むべき名著です。
エンジニアリングマネージャーだけでなく、
数万人の社員を要する大企業の経営者の方が読んでも学びが得られると思います。
第1部は組織のマネージャーとして、各メンバーに継続的かつ安定的に高い生産性を
実現してもらう上での基本的な考え方についてまとめています。
個人的には品質第一主義の下りで、日本企業の名前がバイネームで挙げられている点については、
はるか昔にエンジニアリングとしてあるべき姿を実現できていたにもかかわらず、
なぜソフトウェア開発において日本全体として欧米に遅れを取ってしまっているのか
といった点について考え込んでしまいました。
(最近は少しずつ潮流も変わりつつ部分も見え隠れしますが)
第2部はオフィスの環境・設備の重要性について述べられています。
メモリ16GBはエンジニアの人権と言った話ではなく、そもそも知的生産を効率化する
オフィス全体の設計はどうあるべきかといった内容になっています。
ここを読めばアップルがジョナサン・アイブをプロダクト開発から一時的に離脱させてでも
新オフィスキャンパスのデザインに参加させた理由がわかると思います。
第3部は、人材採用の重要性について記述しています。
Joel on Softwareの採用面接ゲリラガイド(※)なども参考にしつつ読むと良いかもしれません。
(※と思ったら、Joel Spolskyさん、ソフトウェア開発者採用ガイドなんて本も出版されてるんですね。知りませんでした。)
第4部は、チームをより生産的な組織へと育て上げるために必要となる文化的観点についても述べられています。
流石にかなり昔から記述されている部分もあり、リモートワークなどについては少し配慮にかける部分もありますが、
大筋の考え方については同意です。
個人的には、スパゲティディナーの下り(と第2章)を読みながらPivotal社が頭に浮かびました。
第5部以降は筆者が内容を消化しきれていない部分があるので現時点では特にコメントはしません。
エンジニアリング組織論への招待
Twitterで話題になっていたので購入して読んだ一冊。
日本人でこういった本をしっかりかける人なんて今はいないと思っていたので、衝撃的でした。
ピープルウェアでは、どちらかというとマネージャとしての原則や事例のみの提示で
具体的に個々の自称に対してどう対応すべきかといったことはあまり記述されていませんでした。
本書では、様々なシチュエーションにおいて、どのようなフレームワークが活用できるかといった部分に
かなりの力点をおいて記述されていると感じました。
表紙デザインや章立てのタイトルが硬めにかかれていますが、
実際の内容的には可能な限り理解しやすく記述されていると思うので
通しで読んでおいたほうが良いと思います。
1章は、自身が思考を整理し具体化していくための方法やハマりやすい誤りなどについて
具体的に記述されています。
2章は、メンタリングの話題。
マネージャが1 on 1でメンバーのメンタリングを行う際に、どのような心構えで取り組むべきか
その中で活用することのできるテクニックおよびフレームワークについて述べられています。
ここについては新任マネージャ(またはメンターとしてメンバーの相談を受ける人)は一度は読んでおくことをおすすめします。
3章は、アジャイルに関しての話題。
アジャイルプロセスについて、そもそもアジャイルとは何でどのように捉えるべきかや、アジャイルプロセスの歴史、
リーンソフトウェア開発との関係性などをわかりやすく解説してくれています。
流石にここの部分だけでアジャイルプロセスについて体系的に理解するのは難しいと思うので、
後述のThe DevOps Handbookなどで具体的な進め方などについて補強することをおすすめします。
4章は不確実性の管理とスクラム開発?の具体的な進め方やマネージャまたはオーナーとしての
スケジュールの管理、チーム内に必ず発生するであろう不確実性に起因する不安へどのように
対応すべきかなどが述べられています。
5章は組織とアーキテクチャについての話題です。
生産性とはそもそも何なのか、その中における技術的負債とはどのようなもので
生産性にどんな影響を与えるのかといったことについて述べられています。
また、生産性を最大化させるための手段としての権限委譲、権限の衝突にどのように対処すべきか、
システムの内製・外注についての考え方などなど
かなり広範に渡る内容をぎゅっと濃縮して記述してくれています。
全体的に、技術組織のなかで発生しがちな問題についての捉え方と
フレームワークやテクニックとしてどのような手法が活用できるのかと行った観点で
具体的な取り組みにつながりやすい形で書かれていると感じました。
また、問題についての対処についてもよくコンサルティングの現場などで用いられている
手法をベースとして記述されているため、個別の項目を深堀したい際も容易であると感じました。
The DevOps Handbook 理論・原則・実践のすべて
少し息切れしてきたので個別書籍の少し記述量を減らします。
DevOpsのプロセスにおいて、そもそもDevOpsとは何なのかというところから、
具体的な取り組みについての記述までをまとめて記述してあります。
私(RYoMa_0923)のJapan Container Days v1812の発表
(改めて見直す、コンテナベースで作るメリット)はこの書籍の第1部の第3章と第3部の影響を強く受けています。
Effective DevOps
ピープルウェアとThe DevOps Handbook,
SRE サイトリライアビリティエンジニアリング ―Googleの信頼性を支えるエンジニアリングチームを
混ぜてエンジニアリング側面のエッセンスを抜き出したような内容になっています。
思想的なベースをピープルウェアで学び、DevOpsプロセスについて具体的な進め方を学んだ上で
本書で再整理するといった形がいいかもしれません。
その上で具体的なHow toとして
SRE サイトリライアビリティエンジニアリング ―Googleの信頼性を支えるエンジニアリングチーム
を読むと良いと思います。
システムのアーキテクチャに関わる話題
Webを支える技術
Webを支える技術としてWebの歴史、HTTPのフォーマットなどについてわかりやすく解説してくれている書籍です。
とくにURIとHTTPメソッドの関係性などについてはweb系システムを構築し始めたばかりの人必携だと思います。
最初の一歩として基本を学ぶのであればこの本で十分かと思います。
マイクロサービスアーキテクチャ ・プロダクションレディマイクロサービスアーキテクチャ
この2冊はセットで読むことをおすすめします。
前者はおもにアプリケーションエンジニア的観点からマイクロサービスを構成する上での
注意点や取り組み方について機能・非機能両方の視点から述べています。
マイクロサービスベースでシステムを構成する上で一通りの項目については網羅されているため、
マイクロサービスを使ったサービス開発に関わる方は目を通しておくことをオススメします。
後者はどちらかというとインフラエンジニアの視点から
マイクローサービスで作られたシステムを本番運用していく上で
設計段階で必要となる事柄等について述べられています。
チェックリストなどもついているので割合すぐに役立てることができると思います。
後者については少々マイクロサービス推しが強すぎる側面があるので、
その点については注意が必要です。
絵で見てわかるITインフラの仕組み
システムを個々の要素に分解していくと必ず最後はこの領域に行き着きます。
また、インフラエンジニアとしてこの辺りの話題については
知っておくべき内容なので一度は目を通しておいたほうが良いでしょう。
必ずしもこの本である必要はありませんが、記述のバランスの良さから本書を
選定しました。
Amazon Web Servicesクラウドデザインパターン設計ガイド 改訂版
AWSクラウドデザインパターン - Cloud Design Patternとしてweb上で無償で公開されています。
オンプレミスしか触ったことのないエンジニアがクラウドを始めて本格的に触る際などに最初に参照すると良いと思います。
(最近は更新が滞りがちなので最新のAWSのサービスに追従できていない部分がある点に注意が必要です)
基本的には書籍情報だとどうしても古くなりがちな部分があるのである程度習熟したら公式のドキュメントを参照したり、
公式の研修を受講したり、SAの方に協力いただくなどの方法を採ったほうが良いかもしれません。
(もちろんそれだけのお金はかかりますが)
特定の技術に関わる話題
サーバ・OS
Server+ テキスト SK0‐004対応版
物理サーバの規格や構成要素(+ネットワーク)、
それらに関連した基本的な業務プロセスについて簡単に解説してくれています。
いかにも資格試験対策本然としていますが、全体的にバランス良く内容が記述されているので
新卒1年目であったり、オンプレミスでのシステム構築が初めてという方におすすめです。
詳解システム・パフォーマンス
かなり高いレベルの知識を要求される書籍ですが、1章から3章にかけては
個別のサーバ・OSがどのような要素から構成され、パフォーマンスに影響する要素が
何であるかといった観点から整理されているので一度は読んでおいたほうが良いと思います。
4章は観測手法やツールについての概要についての解説5章以降は個々の要素について
徹底的に掘り下げるといった内容になっています。
1から3章は初級者でもある程度理解できると思いますが、4章以降は本格的にパフォーマンス測定や
チューニングに取り組む予定が見えてきた際や実際に困っているときに読んでみると良いかもしれません。
ネットワーク
他にもIPAのネットワークスペシャリストの対策本なども、全体感を理解する上で良いと思います。
マスタリングTCP/IP 入門編
ひとまずの入門としては3,4,6,7,8章あたりを読んでおくと良い(L2, L3, L4とその上という分類で)と思います。
IPv6などについては入門としては一旦は不要だと思います。
(ネットワークエンジニアとしてIPv6ベースのシステムを構築する場合は除く)
また、基本情報などのテキストなどでも近い情報を得ることはできる & もっと基礎的な内容に
噛み砕いて解説してあると思うのでおすすめです。
Cisco Training and Certifications ICND1 (多分非売品)
マスタリングTCP/IP入門編について実際に手を動かしながら学ぶ際に便利かもしれません。
こちらはCiscoの認定講座を受けない限りは手に入らない
& 個人で講座代金を支払うには現実的ではない価格だったと思うので、
会社などと交渉の上受講するようにしましょう。
ストレージ
IT技術者なら知っておきたい ストレージの原則と技術
ストレージの基本的な構造からサーバ-ストレージ間の接続形式、
FC, iSCSIとそれらの派生となるブロックストレージ、
ファイルストレージとしてのNASやオブジェクトストレージまでについて解説しています。
バックアップやレプリケーションについても解説しているため、
EMCの製品利用者でなくても役立つ内容となっています。
少し古い書籍なのでフラッシュストレージなどについて触れていないのが気になるところです。
最新の情報を含んだ改訂版が出版されることを期待します。
ストレージネットワーキング技術―SNIAストレージ技術者認定プログラム準拠
IT技術者なら知っておきたい ストレージの原則と技術をもう少しプロトコル寄りにしつつ、
初心者向けにしたものと認識してもらえると良いです。
特定の製品などに依存しない記述になっているので特にどこのベンダの製品といった部分を
意識することなく本書の記述は活用できると思います。
こちらも同様に最新の情報が含まれていないので改訂版を期待します。
データベース
※ 書籍貸出中のため写真なし ※
基本的に私がOracleデータベースな人だったので、Oracleのみになっています。
また、11gまでしか本格的に触ってないので11gR2までの情報です。
また、RACについてはあまり本格的に触れていないのでそちらについては記述しません。
書籍貸出中のため記憶をベースにすべて記述しているため内容について他の書籍の内容を
書いている可能性があるので注意してください。
プロとしてのOracleアーキテクチャ入門
Oracle Databaseを理解する上で非常に重要となる各種プロセスの動作および、
各種バッファ・キャッシュの役割について一通り解説してあります。
それぞれの役割について空で言えるくらいには理解しておかないと
DBAの方とのコミュニケーションコストが高くなりがちなので理解しておいたほうが得策です。
絵で見てわかるシステム構築のためのOracle設計
Oracle Databaseを実際に現場で設計するに際して考えなければならない事柄について記述してあります。
小規模なデータベースでは問題になることはあまりないかもしれませんが一定規模以上の
データベースになるとかなり重要になってくる事柄が多々記述されています。
新・門外不出のOracle現場ワザ エキスパートが明かす運用・管理の極意
Oracle Databaseの運用でぶつかりがちな各種問題について記述してあります。
超大規模なデータベースにおける統計情報の取り方などはある程度以上に大きくなったデータベースの
パフォーマンス管理に悩んでいるDBAの方にとっては福音になるかもしれません。
仮想化技術
Docker・Kubernetes
Docker 実践ガイド
Docker実践ガイド 第2版
流石に個別技術の解説内容(個別のコマンドの解説、説明しているツール)については、
出版以降のバージョンアップなどに伴い古くなっています。
しかし第1章、第2章については本書の著者が、エンタープライズも含めた幅広い知見があることもあり、
Web系ばかりが注目される中でエンタープライズでの活用などについても一つの見方を示してくれています。
また、DockerコンテナによるGUIの提供などなかなか一般的なDockerの書籍にはない記述もあるため、
最新の事情も含んだ新しめの書籍と一緒に読まれることをオススメします。
改訂版が出ることを期待してます。
第二版が出ており、内容的にもほぼ最新準拠となっています。(2019年5月時点)
変わらず、ハードウェア(DVD, Webカメラなど)の制御、GUIアプリケーションなどについての解説で抜きん出ています。
また、内容の記述的にも変わらず、アプリケーションよりはインフラレイヤーよりの内容の説明がかなり充実しているので、
良いでしょう。和書で、CRIUをつかったライブマイグレーションについて実際に解説しているのは本書のみだと思います。
(他あったら教えてください)
The Kubernetes Book: Version 3 - November 2018 (English Edition)
今回紹介する中で唯一の洋書です。
主に2章のKubernetes principles of operation部分がおすすめです。
具体的なリソースやマニフェストについては後の2冊のほうがおすすめです。
入門Kubernetes・Kubernetes完全ガイド
両者ともKubernetesの各種リソースの活用についてガッツリと記述されています。
入門Kubernetesは全体を通して読み、主要なリソースについて理解するのに便利です。
Kubernetes完全ガイドについてはKubernetesの主要リソースについてかなり
体系的かつ詳細に説明しているので、リファレンス的に活用すると良いと思います。
コーディング全般
リーダブルコード ―より良いコードを書くためのシンプルで実践的なテクニック
業務デコーディングを行う際には基本的に一人でずっとコーディングを行うことはなく、
複数人が携わることが普通です。
そのため可読性が非常に重要なものになってきます。
他人にとって読みやすいコード、理解しやすいコードを書くための基本的な考え方を
示してくれる本書はコードに関わる人は一度は目を通すことをお薦めします。
(カーニハンのプログラミング作法などもあるのですが、私がちゃんと読んでないのでこちらにしています。)
テスト駆動開発
テスト駆動開発についての世界的名著をテスト駆動開発の伝道師のt_wadaさんが翻訳したものです。
テスト駆動開発の進め方だけでなく、より良い実装とはどうあるべきかといった部分も含めた内容と
なっているためおすすめです。
AWS DevDay2018でもテストの存在しないコードにテストを追加しつつ着実にコードを改善するにはどうすべきかといった
形でのセッションがあり非常にわかりやすい解説でした。後日に動画が公開されることを期待しています。
(セッション資料)外部に依存したコードもテストで駆動する
t_wadaさんが補足として記述された付録Cが名文なのでそこも含めて原著よりお買い得。
アルゴリズムとデータ構造系のもので何か
どんなアルゴリズムやデータ構造を利用しているかはエンジニア間の
コミュニケーションコストを低減してくれるので覚えておいたほうが得策です。
(デザインパターンも含めてですが、ここまでインフラエンジニアにいきなり求めるのは酷なため外しています)
こちらについては特定の書籍をおすすめすることはしません。
(実際には私がすっかりどんな本で最初に学んだのかを失念していることもありますが)
Python
インフラエンジニアはAnsibleなどを通じてPythonコードと向き合うことが多いと思います。
このような観点か取り掛かりやすい言語としてPythonを選定しています。
(Chefを使っているならここはRubyになると思います。)
基礎Python 基礎シリーズ
Pythonの基本文法を学ぶ際のおすすめとして本書を挙げます。
みんなのPythonも選択肢として上がりますが、Kindle unlimitedで手に入るのでこちらをオススメしています。
Python Django入門 (1)
今回唯一のWebページです。
学習の意欲を高めつつ、理解度を図るうえで
なにかWebサービスを通しで1つ作ることがよいので取っ掛かりとして良いものを選んでみました。
通しでサービスを作る観点では本チュートリアルがおすすめという観点で記載しています。
(現在はDjangoのバージョンが2系列になっているためその点だけ注意してください)
Fluent Python―Pythonicな思考とコーディング手法
基礎シリーズ、DjangoによるWebアプリ制作ができるようになってから読んでみると良いでしょう。
実際のフレームワーク(Django)のコードなども本書を理解した上であれば読み解けるようになるはずです。
文量が多いので通しで読もうとせずに必要になったタイミングで適宜理解していったほうがいいでしょう。
Java
最近何かと話題になっているJavaです。
私の職場の場合大規模なサービスのサーバサイドはJavaで記述されているものが
大半なため記載しています。社内にJava資産がない方は特に気にしなくて良いと思います。
入門書としてはやさしいJavaなのですが、いかんせん私が読んだのが初版か第二版だったので
現行の第六版については判断できません。おすすめのものがありましたらコメント欄にてフォローをお願いします。
オラクル認定資格教科書 Javaプログラマ Bronze SE 7/8・Silver SE 8・Gold SE 8
写真はSE7ですが、現在はSE8になっています。
Lambdaなど大きな機能変更はあったかと思いますが基本的な部分は変わっていないので気にせず記述しています。
Java SEの基本的な機能についてはSilverまで、すこし応用的な内容やJDBCについての記述がGoldに含まれています。
Javaを使った実際の業務でJDBCを使わないことはほとんどないと思うのでGoldの内容まで理解しておくのがベターだと思います。
Effective Java
Java SEのGoldの内容まで理解しておけば本書の記述内容について理解できるでしょう。
(ただし即座に現場で活用するには現場での経験が必要とは思いますが)
インフラエンジニアであれば、頭から通しで読むというよりは
「おや?」と思う設計やコードにたまたま直面した際に本書を参照すれば、
アンチパターンを予防できるかもしれません。
逆に本職のJavaプログラマであれば必携の書と言えるかと思います。
つい先日第3版が出版されているのでそちらを購入しましょう。
Javaパフォーマンス
GCの仕組みから、JVMにおけるバイトファイルの最適化がどのように行われるか
といった普段なんとなく大事だとは思っているけど体系だって整理、理解しない事柄について
丁寧に解説しています。
Javaのアプリケーションでメモリ周りのチューニングには
インフラエンジニアも関わることが多く、この辺りの仕組みについて
理解しておくことは大いに役立つと思います。
内容の品質についても日本のJavaチャンピオンのうち2名(MS寺田さん、Acroquest谷本さん)
が関わっていることからも問題ないと思います。
まとめ
領域別にざっくりと、これまでに私が読んだ書籍のうちおすすめとなるものを
記載しました。ひとまずぱっと浮かんだ範囲のものを記載しただけなので
この部分をもう少し掘り下げてくれ!と言った要望やこの本はないのか?
といった意見については歓迎します。
(その中で選定に含まれなかったもので私の読んだ本であった場合は
選定理由に含まれない部分についても説明したいと思います。
なお、たまたま忘れている場合もあるのでコレはいれるべきと
思ったものについては謝辞を記載のうえ追記いたします。)
あくまでも本内容は私(RYoMa_0923)の個人の経験と読書遍歴に
基づくものということお忘れなきようお願いします。