Go ならわかるシステムプログラミング 第 2 版
ゴーナラワカルシステムプログラミング ダイニハン
- 著者:
- 渋川よしき(シブカワヨシキ)
- 出版社:
- ラムダノート
- 出版日:
- 2022年03月23日頃
- 一覧:
- 2022 年に出た技術書
- ISBN:
- 9784908686122
- 在庫:
- メーカー取り寄せ
なぜ注目されているか
書籍紹介
OS やメモリのこと、もう少しだけ詳しく知っておきたい。でも何から手を付けたらいいかわからない。教科書を読んでみても、ふだん書いているコードと違いすぎていまいちピンとこない……。
本書は、そんな方々のために、アプリケーションのコードから降りていくことで俯瞰的かつ具体的に低レイヤを自分の糧にできる、たくさんのエンジニアに読まれた書籍「Go ならわかるシステムプログラミング」の改訂版です。
Go で書かれた「ふつうのアプリケーションのコード」から始めることで、「身近なコードの世界」と「メモリや CPU の世界」との間の巧妙で豊かなつながりが見えてきます。
技書の森解説
普段書いているアプリケーションのコードから一段ずつ下へ降りていき、OS とメモリの世界を Go 言語で確かめる技術解説書です。『Go ならわかるシステムプログラミング 第 2 版』は渋川よしき氏の著書で、技術書出版社のラムダノートから 2022 年 3 月に刊行されました (A5 判)。元になったのは 2016 年 9 月から 2017 年 8 月にかけて ASCII.jp の「プログラミング+」コーナーで連載された Web 連載で、これを書籍化した 2017 年刊の初版に対し、第 2 版ではコマンドシェルや実行ファイルが起動するまでの流れといった、経験的になんとなく知っているだけで済ませがちな話題の章が追加され、分量が増しています。著者は HTTP プロトコルの解説書『Real World HTTP』 (オライリー・ジャパン) でも知られるエンジニアです。
全 19 章の構成: デバッガーからコンテナ自作まで
構成は、デバッガー を使って "Hello World!" の裏側を覗く第 1 章に始まり、Go の入出力インタフェースである io.Writer と io.Reader、システムコール、TCP と UDP のソケット通信、ファイルシステム、コマンドシェル、プロセスとシグナル、スレッド と goroutine の並列処理、メモリ管理と ガベージコレクタ、実行ファイルが起動するまで、時間の扱い、コンテナと進む全 19 章です。付録では乱数、TLS、ssh というセキュリティ関連の OS 機能と、デバッガーが対象プログラムを止めたり進めたりする仕組みまで扱います。最終章で libcontainer を使ってコンテナを自作する流れは、Docker を日常的に使う人にとってブラックボックスの底を見る体験になります。
Go で低レイヤへ降りるというアプローチ
本書のアプローチを象徴するのが、第 2 章の節タイトルにある「io.Writer は OS が持つファイルのシステムコールの相似形」という視点です。C 言語で学ぶ従来のシステムプログラミングでは、ポインタ演算やメモリ管理という言語側の困難が主役になりがちで、OS の機能そのものへたどり着く前に消耗しやすいのが実情でした。Go は標準ライブラリのインタフェースが OS の機能の写し絵として設計されているため、普段のコードの延長線上に低レイヤが見えてきます。さらにスレッドと goroutine の関係やガベージコレクタの挙動といった、言語ランタイムと OS の役割分担そのものも主題に含まれており、Go を仕事で使う人には二重に実利のある構成です。
『ふつうの Linux プログラミング』などとの使い分け
C で学ぶ王道を選ぶなら『ふつうの Linux プログラミング』 (青木峰郎 著、SB クリエイティブ、第 2 版 2017 年) が定番で、gcc と C を通じて Linux の流儀を体に入れる本です。仕事の言語が Go で、バックエンドやインフラ寄りの業務からシステム層へ降りたいなら本書が近道になります。また同著者の『Real World HTTP』はアプリケーションから上のプロトコル方向を掘る本で、下の OS 方向を掘る本書と対をなす関係にあり、Web バックエンドの足元を固めたい人は 2 冊で補完し合えます。
前提知識の注意点と向いている読者
注意点として、本書は Go の文法そのものを教える入門書ではないため、Go を全く書いたことがない人は文法の入門書を先に済ませる方がスムーズです。Linux カーネルのソースコードやスケジューラの内部実装まで読みたい人にも、カーネル専門の解説書 が別途必要になります。その上で、Web アプリケーションは書けるがその下で何が起きているかを説明できない、ソケットやシグナルやプロセスという運用現場の語彙を実装レベルの理解へ引き上げたい、というバックエンドエンジニアにとって、手を動かした分だけデバッガーもコンテナも中身の見える道具に変わっていく本書は、費やす時間の元が取りやすい 1 冊です。
言及した記事 (6 件)
【最新技術に振り回されない】 低レイヤーに強くなるための鉄板コンテンツ集
♡ 1078CPU, コンパイラ, OS, システムプログラミング, 低レイヤ2024年版機械学習・データ分析の必須10冊+ガチ90冊+Next5冊=105冊
♡ 868本, 機械学習, データ分析, データサイエンス2025年版機械学習・データ分析の必須10冊+ガチ89冊+Next5冊=104冊
♡ 460本, 機械学習, データ分析, データサイエンスGoならわかるシステムプログラミング第2版が出たので書評しますね
♡ 26go, programmingGoでAWS LocalStack(S3)操作を簡単にするツール作った
♡ 1Go, Linux, AWSGoならわかるシステムプログラミング Wrap Up
♡ 0Go
この本に興味がある方におすすめ
関連する本
関連記事
障害対応の夜に思い出す、あの本の 1 ページ
本番障害の緊迫した場面で、過去に読んだ技術書の知識が助けてくれることがあります。「いつか役立つ」知識が「今この瞬間」に変わる読書の価値を考えます。
データベース本ガイド - SQL から設計まで学べる技術書の選び方
データベースの基礎から設計、パフォーマンスチューニングまで学べる技術書の選び方と学習順序を紹介します。
OS / 低レイヤー本ガイド - コンピューターの仕組みを学ぶ技術書の選び方
OS、コンパイラー、ネットワークなど低レイヤーを学べる技術書の 4 ジャンルと、どこから始めるべきかの指針、賞味期限の見極め方を紹介します。