msksgm’s blog

msksgm’s blog

Webエンジニアです。日々の勉強記録、技術書感想、美術観賞感想を投稿します。

「実践ドメイン駆動設計」感想

概要

実践ドメイン駆動設計」(以下、IDDD 本)を読みました。 前提(ドメイン駆動設計(以下、DDD)の経験、読了時間)、感想、DDD で実践していること、次に DDD で勉強すること、を記述します。

前提

DDD の経験

DDD の関連書籍では以下の本を読んだ経験があります。 特に、この本を読む前に「ドメイン駆動設計モデリング/実装ガイド」(以下、松岡本)を熟読しました。松岡本を題材にして、知り合いの間で勉強会も実施しました。

DDD の原典である「エリック・エヴァンスのドメイン駆動設計」(以下、エヴァンス本)は読んでいません。 もともと、IDDD 本はエヴァンス本よりも先に読むことを決めていました。

書籍以外の経験では、読書開始時点では、戦略的 DDD は業務でモデリングの実践を提案し、戦術的 DDD は本で読んだ以上の知識はありませんでした。

目的

以下の効果が得られることを目的に読み始めました。

  • エヴァンス本よりも先に読むことで、エヴァンス本を読む際に具体的なことから抽象的なことを理解できるようにする
  • 実践的な内容を学び、既に読んだ DDD の書籍を復習、知識の定着につなげる
  • 複数の境界づけられたコンテキストを想定した DDD の実践方法を学ぶ

読了時間

知り合いの間で勉強会を企画し、自身がファシリテーターとして進めました。 ファシリテーターの役割は当日の司会進行、勉強範囲の要約、意見だしなどです。 ペース配分は全 14 章を 14 週間にわけて読み進めていきました。1 週 1 章ペースです。 1 週間に 8 時間かけて予習して、当日 2 時間ぐらい勉強会をしたので、大体(8 + 2)時間 × 14 週で 140 時間かけました。 また、この本を読むにあたって、「『実践ドメイン駆動設計』から学ぶ DDD の実装入門」(以下、副読本)を副読書として扱い、勉強会を進行しました。 勉強会については、後日 zenn にまとめようと考えています。

あらかじめ勉強会メンバーで、松岡本の勉強会をおこなっていました。 DDD に関する基礎的な知識の認識合わせをするためです。 こちらも自身がファシリテーターを務めて、期間は 3 週間ほどでした。 準備時間は 4 時間から 6 時間で当日 2 時間の勉強会でした。なので、大体(6 + 2)時間 × 3 週で 24 時間かけました。

他には「ドメイン駆動設計入門」(以下、成瀬本)を個人的な副読本 2 冊目として使っていました。 成瀬本はサンプルコードが多く、戦略的 DDD のリファレンスになります。 そのため、IDDD 本で該当する章を読み終えたら、成瀬本のサンプルコード(C#)を Go でリプレイスすることで、知識の定着と実装時の肌感を覚えようとしました。そのため、実際にかけた時間は 200 時間ぐらいだと見積もっています。 実装したソースコードは zenn に解説記事を投稿し、GitHub のリンクも載せています。

以下は、IDDD 本と成瀬本の対応です。

ドメインオブジェクト IDDD 本 成瀬本 zenn
エンティティ 第 5 章 Chapter3 リンク
値オブジェクト 第 6 章 Chapter2 リンク
ドメインサービス 第 7 章 Chapter4 リンク
ファクトリ 第 11 章 Chapter9 リンク
リポジトリ 第 12 章 Chapter5 リンク
アプリケーションサービス 第 14 章 Chapter6 リンク
集約 第 10 章 Chapter12 リンク

感想

この本を熟読することで、確実に DDD の知見を深め、レベルアップできると思いました。 読了時間にも書いた通り、200 時間ぐらい DDD に時間を費やしたので、戦略的 DDD と戦術的 DDD の考え方を体に染み込ませることができました。 その結果、目的の「実践的な内容を学び、既に読んだ DDD の書籍を復習、知識の定着につなげる」「複数の境界づけられたコンテキストを想定した DDD の実践方法を学ぶ」を達成しました。 「エヴァンス本よりも先に読むことで、エヴァンス本を読む際に具体的なことから抽象的なことを理解できるようにする」も、具体的な内容を学べたので、エヴァンス本が読みやすくなったのではないかと考えています。 また、DDD 界隈でエヴァンス本と並んで評価されている IDDD 本を 14 週間かけて読み切ったことは自信にもつながりました。

DDD の入門書だけを読んで満足している人、次に読む書籍を探している人、エヴァンス本を読むことに尻込みしている人にぜひ読んでほしい内容です。 なぜなら、入門書では基本的すぎる例だったり抽象的な説明だったりする場合が多いからです。 そうすると、戦術的 DDD の実装パターンの理解が間違っていたり、戦略的 DDD のモデリングが軽視されたりします。結果、DDD に対して曖昧な認識になってしまう印象を持っています。 IDDD 本では戦術的 DDD、戦略的 DDD ともに1つの項目につき、どの書籍よりも詳細な解説がされるので、知見を深められます。 加えて、IDDD 本では、SaaSOvation というプロダクトを DDD によって解決していく様子をストーリー形式で学びます。 戦略的 DDD が本当に解決しようとしてしていること発見し、戦術的 DDD によって具体的にソースコードに落とし込んでいくため、実践的なことを学べます。これは DDD の目的の 1 つである継続的な改善をおこなっていることになります。 他にも、完成したサンプルコードも GitHub に上がっているため、解説した項目がどのように繋がっていくのかわかります。

読み進めるには、副読本を持っていることは必須です。IDDD 本の解説で抽象的すぎたり日本語がわかりづらかったりする部分をわかりやすく解説してくれます。 副読本の参考文献に、数多くの資料が載せられており、これらを探す手間が省けたと実感できます。 1 つ難点を言えば、IDDD 本の内容から省略されている部分が数多くあります。そのため、IDDD 本で気になった部分を知れない場合もあります。 しかし、それを差し引いても IDDD 本を理解するための心強い味方になってくれます。 加えて、松岡本をあらかじめ読んでおくことを強く推奨します。なぜなら、DDD 入門書として適切な薄さで、DDD について一通り学ぶことができるからです。 IDDD 本を読むときに、初見の単語や原則をあらかじめ省いておけるので、心理的な負担を減らすことができます。 あと、自分は経験がありませんでしたが、メッセージ基盤に関する知識があると「アーキテクチャ」「ドメインイベント」「境界づけられたコンテキストの統合」あたりを読む際に楽だと思いました。

この本を読む上で特筆する注意事項は、エヴァンス本の一解釈であることを認識することだと思いました。 また、日本語が読みづらかったり技術が古かったりするのも難点でした。 これについて詳細は後述します。

IDDD 本を人に薦めるなら、以下のように説明します。

  • DDD の具体例が多くて良い本
  • 詳細な説明は日本語で書かれた他書籍のどれよりも勉強になる
  • 具体から抽象の順番で学びたい人は、IDDD 本からエヴァンス本を読むことを推奨する(自分はエヴァンス本を読んでいませんが)
  • しかし、IDDD 本を読んでもエヴァンス本を読まなくて良い理由にはならない
  • しっかり読もうとすると相当時間がかかるので、時間がかかるのでエヴァンス本だけでも良い(理解にかかる時間の差はわかりませんが)
  • 理解度が変わるため、GitHub のサンプルコードは読んだ方がいい
  • 推薦する理由は多いが難解な本なので、DDD を学習する 1 冊目には向かない。松岡本から読んだ方が良い

より具体的に良かった点と悪かった点について記述します。

良かった点

全体を通して良かったといえることは、戦略的 DDD と戦術的 DDD に対して深い洞察と詳細な解説があることです。この本は全 14 章のうち、最初の 3 章が戦略的 DDD、残りの 11 章が戦術的 DDD の内容です。 具体的に良かった点は 3 つあります。 それぞれ記述します。

1 つめは戦略的 DDD についてです。 3 章(100 ページほど)にわたって、戦略的 DDD の必要性、やり方について解説していることが良かったです。 他の書籍では軽く扱われがちな戦略的 DDD についてしっかり触れます。 具体的には以下について知ることができます。

  • DDD 必要とする基準
  • 導入するにあたっての課題
  • ユビキタス言語
  • 境界づけられたコンテキストを定めることによって得られるもの
  • ドメインサブドメイン、コアドメイン
  • なぜ SaaSOvation は最初失敗しそうになったのか

特にドメインサブドメイン、コアドメインを定めることによって、ビジネス的な優位性、リソース配分なども考えられることは、ビジネス側との意思疎通にも繋がり非常に有用なメソッドだと考えました。 また、コンテキストマップによって境界づけられたコンテキストの関係(「巨大な泥団子」「顧客/供給者」「公開ホストサービス」「公表された言語」)を定義します。 コンテキストマップはシステムを俯瞰してみることができる一助になり、技術的な影響範囲の方向性、どちら側に腐敗防止層を実装するのかわかるようになります。 大規模かつ複雑なシステムの設計を目的にしている IDDD 本のストーリーで、その重要性について理解し、DDD に関係なく普段の業務でボトルネックになっている理由を気づけるようになりました。

2 つめは戦術的 DDD についてです。 他のどの書籍よりも戦術的 DDD について詳細な解説がされます。 例えば、入門書では「同一性を気にするのがエンティティです」という解説がよくあります。 それ自体は間違っていないですが、IDDD 本ではそれに加えて以下のようなことも解説します。

  • 同一性を判断するための一意な識別子はどのように生成するのか
  • エンティティは DB に保存する前後のどちらのタイミングなのか
  • そのドメインオブジェクトは本当にエンティティなのか

他にも以下のような戦術的 DDD の実装方法で紹介し、割と簡単に説明されがちなドメインオブジェクトに対して詳細なユースケースを記述しています。

  • ドメインサービスはステートレスでユビキタス言語の名前をつける(機械的に HogeService みたいな名前をつけない)
  • ファクトリはドメインオブジェクトの保存と生成で使われるタイミングが違う
  • 値オブジェクトの 5 つの特性、永続化の方法

一概に「ドメインオブジェクトについて理解した」と思っている人でもこの本で初めて知る原則やユースケースも多いと考えています。 特に第 8 章の「ドメインイベント」というエヴァンス本では記述されていない内容です。 メッセージング基盤を使った境界づけられたコンテキストの統合(通信)は、日本語資料の解説をあまり見たことがありません。 境界づけられたコンテキスト間の通信方法の知見だけでなく、DDD からマイクロサービスへの導入にもつながる知見も得られました。 関連して、第 13 章の「境界づけられたコンテキストの統合」は、Rest API による統合とメッセージング基盤を使った統合は、実利用を想定した場合、考慮するのが必須の項目だと考えています。そのため、この章は非常に参考になりました。

3 つめは一貫してヘキサゴナルアーキテクチャを用いた、層の役割、依存の分離の解説です。 クリーンアーキテクチャ、オニオンアーキテクチャについて解説した書籍、ネットの記事はあります。 しかし、どのようにわけて実装していくのかについて逐一具体的に述べた解説はほとんどないでしょうか。 この書籍ではヘキサゴナルアーキテクチャを用いて解説をします。どこにインタフェースを配置するのか、腐敗防止層はどうするのかを納得感を持ちながら読み進めることができました。 読み終えた今は全てのアーキテクチャがヘキサゴナルアーキテクチャでいいのではないかという気持ちになります。

他には、読み切ろうと思える内容だったことがよかった点です。 難しい本は最後まで読もうとすると本当に使わない知識だったり、難しすぎる内容が数多くでてきて心が折れたりします。 その点にいて、IDDD 本は内容が良かったため最後まで読み切れました。

まとめると、戦略的 DDD と戦術的 DDD の両方でレベルアップができることは間違いないので良書だと感じました。

悪かった点

悪かった点は 4 つあります。

1 つめは、文章についてです。副読本が必須になっている理由の 1 つは IDDD の文章が悪いからです。 より具体的にいうなら、以下があげられます。

  • 長い
  • 日本語訳でよくわからない箇所がある
  • 英語の本でありがちな独特な言い回しがきつい

「長い」は付録を除いても 519 ページあるからです。ページ数だけでなく文字も小さいため、1 ページ読むのにも時間がかかります。そのため心理的負担が大きいです。全て読むことが必須というわけでもなく、冗長に感じる部分も多くあります。 「日本語訳でよくわらない箇所がある」は、その意味の通りです。日本語訳が 2015 年、原著が 2013 年に出版されています。当時の英語書籍は読みづらい印象が多いです。なので仕方がない部分だとも考えられます。致命的に読めないはほとんどないですが、同じ意味の違う言葉がでてきたり、初見の単語がでてきたりと、時間がかかる理由になります。 「英語の本でありがちな独特な言い回しがきつい」は、個人的に端的な文章の方が理解しやすいから書きました。

2 つめは、IDDD 本もエヴァンス本の一解釈であることです。 エヴァンス本が伝えたいことを反影していると言われており、エヴァンス本人が IDDD 本にコメントを寄稿しています。 しかし、それらを踏まえてもあくまで著者(ヴォーン・ヴァーノン)の経験則と思想が入っている部分が散見されます。 戦術的 DDD も戦略的 DDD の両方とも深い知見を得られたと実感していますが、納得できない部分もありました。 なので、読むにあたっては自身が納得できるラインや真似しようと思えるラインを持つ必要があります。

3 つめは、使用技術が古いことです。 使用言語は Java 7 で O/R マッパに Hibernate を使用しています。 本の出版日が 2013 年なので仕方ない部分がありますが、Java 7 は古すぎますし、Hibernate は最新版が 2016 年で止まっているため書籍のために学ぶにはハードルが高いです。 加えて、書籍に掲載しているサンプルコードと GitHub のサンプルコードが対応していない部分があります。 GitHub 更新されたログがないので、書籍の出版時点で修正するか、第 2 版を出版してほしいです。

4 つめは、第 8 章「ドメインイベント」を終えたあたりから、内容が薄くなってくることです。 その時点で、DDD で守るべきことを一通り学び、繰り返し実践例を見ているので、同じ内容を繰り返し学んでいるようになります。 そのため、途中から得られるものが減ってきて飽きてきます。 山場は割と中盤あたりまでということを意識して読んだほうがいいと思いました。

どの不満点も、IDDD 本を読む心理的なハードルになります。 致命的な欠点ではありませんが、難解な書籍だと思って読んだ方がいいです。

DDD で実践していること

この本を読む一方で以下のことにも取り組んでいました。 どれも、DDD 導入のデメリットのコスト(周囲の合意と時間をとる、ソースコードが増える、など)がかかりました。 しかし、それを差し引いてもメリットがあると考えています。 業務においては、まだ完遂していませんが、この調子で継続していきます。

次に DDD で勉強すること

DDD について次を勉強するつもりです。全体的に以前よりも難しい部分に手を出せるようになったと感じています。

  • エヴァンス本を読む
    • ようやく DDD の原典に挑戦できる土台ができたと考えている
  • DDD を実践する
  • DB に対する知見(設計、パフォーマンス、SQL)を得る
    • DB 設計をアプリ設計に依存させない知識が必要だと感じている
  • ドメインイベントについて学ぶ
    • 一番面白かった分野のため。「マイクロサービスパターン」が良さそう
  • DDD の知見をさらに深める
    • 「Learning Domain-Driven Design」「Domain Modeling Made Functional」あたりが気になる

まとめ

  • 戦略的 DDD、戦術的 DDD の両方について、知見を深めることができる良書だった
  • 読みにくい部分、技術的に古い部分が多く読み切るには気合が必要(副読本が必須)
  • IDDD 本完読後もエヴァンス本を読むことは必須
  • エヴァンス本に並んで評価されている書籍を読み切ることができたのは、自信につながった
  • DDD をより発展させた部分に手を出せるようになった
  • 業務に落とし込んで実践できるようになった

「SAML入門」感想

概要

SAML 入門」を読みました。 前提(認証認可関連の知識、読了時間、目的)、感想、次に認証認可で勉強すること、まとめを記述します。

booth.pm

もともと zenn の book で執筆されていた記事らしいです。

zenn.dev

前提

認証認可関連の知識

認証認可では、OAuth 関連では Auth 屋さんの書籍(2022 年 4 月 24 日時点 3 冊)と OAuth 徹底入門を読みました。 なので、OAuth と OIDC について一通り触れた経験があります。 しかし、SAML についてまったく勉強したことがないです。

目的

以下の効果が得られることを目的に読み始めました。

  • SSO の実装方法の 1 つである、SAML について基本的なことを学ぶ
  • 実践レベルの知識の定着は求めていない

読了時間

1 日 30 分で 5 日ほどだったと記憶しています。 なので、2 時間 30 分ほどで読み終わりました。

感想

SAML の登場人物、認証フロー、やりとりする情報、渡し方などが 1 冊にまとめられており、一通りの知見を獲得できました。 SAML の知識はまったくないので、これの内容が全てなのかわかりませんが、端的な説明と図で読みやすいと感じました。 そのため「基本的なことを学ぶ」という目標を達成しました。 タイトル通り入門には適切な難易度だったと考えます。 実際に体験できるサンプルコードやチュートリアルはないです。そのため手を動かして学ぶことはできませんでした。

普段 SAML を使った SSO の仕組みについて意識することが少ないです。 SAML 入門、自体が悪いわけではないのですが、認証情報のやり取りの部分は具体的に感じられず、単語を知る程度に止まってしまいました。 実践レベルの知識の定着は求めていないので問題ありませんでしたが、もっと具体的に学べる機会がほしいため、できれば個人で何かしたいです。 SAML を使った認証があるかわかりませんが、Keycloak を使って SSO の仕組みを学ぶつもりです。

次に認証認可で勉強すること

  • 「Keycloak 入門」で認証認可の仕組みを手を動かしてしる
    • SAML は使えるかわかりませんが、SSO を実装できるらしいのでやってみます

まとめ

  • SAML 入門」というタイトル通り、入門書として適切な内容だった
  • ただしサンプルコードがないので、具体的に学べない。なので、あまり知識が定着しなかった
  • 具体的なことをやるには個人でやる必要がある

「シダネルとマルタン展」感想

シダネルとマルタン

「シダネルとマルタン展」にいってきました。 会場は SOMPO 美術館でした。 会期は 2022 年 3 月 26 日(土)〜2022 年 6 月 26 日(日)です。

www.sompo-museum.org

概要

以下は、公式サイトからの引用です。

19 世紀末から 20 世紀初頭のフランスで活躍した画家、アンリ・ル・シダネル(1862-1939)とアンリ・マルタン(1860-1943)に焦点をあてた、国内初の展覧会です。印象派を継承しながら、新印象主義象徴主義など同時代の表現技法を吸収して独自の画風を確立した二人は、幻想的な主題、牧歌的な風景、身近な人々やその生活の情景を、親密な情感を込めて描きました。「最後の印象派」と言われる世代の中心的存在であった二人は、1900 年に新協会(ソシエテ・ヌーヴェル)を設立、円熟期には共にフランス学士院会員に選出されるなど、当時のパリ画壇の中核にいました。 二人は深い友情で結ばれ同じ芸術観を共有しながらも、それぞれの活動拠点に由来して、異なる光の表現を追求します。シダネルは北フランスに特有の霞がかった柔らかな光を、マルタンは南仏の眩い光を描き出しました。本展では、世紀末からモダニスムへ至るベル・エポック期に、独自の絵画世界を展開した二人の道のりを、約 70 点の油彩・素描・版画を通して辿ります。

「シダネルとマルタン展 最後の印象派、二大巨匠」より引用

タイトルと解説の通り、「最後の印象派」と呼ばれる 2 人の作品が全てです。 70 展ほど展示されている作品のうち、版画と素描の 12 展を除いた全ての作品が印象派の作品です。

感想

様々なタッチで描かれた印象派の作品を見ることができて、印象派の絵に対する印象が変わりました。 今まで印象派は、色をまだらに乗せてるため、リアリティがなく感じ、わかりづらい絵が多いという印象がありました(ゴッホやモネの絵も、ある意味わかりづらい方だと考えています)。

しかし、今回見た絵画は印象派の描き方でありながらリアリティを感じさせる作品が数多くありました。 ぼやけているため遠くから見ると、脳が補完し写実的に描いた絵画以上にリアリティを感じさせていたと考えています。 人の目は本来焦点を合わせて箇所以外は、ぼやけます。そのため絵画をみたときに集中して見ている部分以外はぼやけているのは逆に自然に思えました。

加えて、印象派の色の重ね方は光の表現に厚みを持たせている印象を持ちました。光により柔和な表現を持たせていると感じました。そもそも目の前の色は単色であるとは限らないので、あえて様々な色を塗っていることにより、より人の目に近い光の表現になっているのだと考えました。

あと具体的に説明できないのですが、丘などの傾斜が傾斜らしく感じました。他のどの写実的に描いた絵よりも、傾きや道の通りを感じました。これは自身の勘違いの可能性があります。

もちろん、以前の印象通りよくわからなく感じる絵もありました。 例えば、人の目があえて描かれていない絵画を 2 枚ほど見ました。目が描かれていないのに正面をみた絵だったのでとても不気味に感じました。他には、あまりにも草木が抽象的に描かれすぎているものがあり、一周まわって印象的に感じました。 これらは、2 人の巨匠が、試行錯誤をしていたときだったの可能性があります。

まとめると、2 人の画家が描いた印象派の絵を数多くみることができます。 印象派は写実的な絵画と比べてわかりづらかったりしますが、様々な創意工夫がされた絵だと感じることができます。 その方法はある意味、写実的な絵以上にリアリティがあると感じました。 印象派に興味がある人は、鑑賞しにいくといいのではないでしょうか。

「Learning Go」感想

概要

Learning Go」を読みました。 前提(自身の Go の経験、読み終わるのにかかった時間)、感想、次に Go で勉強すること、を記述します。

前提

Go の経験

一応業務(バッチ処理)でも使っています。 Go で API を作成した経験は業務ではなく、個人開発で何度か作成した程度です。その際には RealWorld を参考して作成しました。 「ドメイン駆動設計入門」の記述されている戦術的 DDD の実装パターンを Go を用いて実装した記事を zenn に投稿しています(全 7 記事)。 Context、ポインタの知識が曖昧で、平行処理と Reflect はほとんどわかっていないです。

Go の書籍は「改訂 2 版みんなの Go 言語」を拾い読み、「エキスパートたちの Go 言語」の序章を読んだ程度です。 Tour of Go は何度かやっています。

読み終わるのにかかった時間

26 日間かけて読みました、1 日 2 時間読んだ日もあれば、30 分しか読んでいない日もあります。 なので、平均 1 時間ぐらいだったと考えます。

感想

オライリー・ジャパンサブスクリプションを利用しています。 Go の書籍を漁っていたところ、この書籍「Learning Go」を見つけました。 2021 年出版で日本語訳がありませんでしたが、テストとエラーのところだけをみたところ良さそうだったので、読むことにしました。

Go の Context、テスト、エラーの学習のために読みましたが、個人的には 2022 年 4 月 17 日時点で、Go の詳細な入門書としては一番ではないかと考えています。 なぜなら、Go のシンタックスを学べるだけでなく、歴史的経緯と Go の哲学の観点から解説してくれるからです。 単純な書き方だけでない、「なぜこうなったのか」という本質的な解説により、他の言語を学んだ状態だと一癖二癖あると(個人的には)感じた Go が以前よりも取っ付きやすく良い言語に感じました。 Tour of Go をなんとなく理解して、軽く API サーバーを作ったぐらいの人だと、特に得られるものが多いのではないでしょうか。 変数や型から始まるので初歩的なところから良い復習になると考えます。 また、ある程度書き慣れてきた人にも Go の本質を知れるという意味では非常におすすめできます。

個人的には、インタフェース、エラー、テストは参考になる人が多いと思いました。 具体的には以下です。

  • インタフェースの記述方法の由来(なぜimplementsを書かずに実装するのか)
  • エラーのラップと比較(errors.Iserrors.As
  • テストの書き方(スタブ、go-cmp、テーブルドリブンテスト)

これらは疑問をもったり不安だった部分が多かったので、良い学びになりました。 学んだことを活かしたくて、過去の自分のテストを書き直したくなり、実際に一部書き直しました。 また、他の書籍ではあまり触れられないジェネリクスについても書いてあるので、そういった点においても有益でした。 Context、平行処理、Reflect についても理解を深めたかったのですが、 英語を翻訳して読んでいくには内容が重く、結局読み飛ばしてしまいました。 ここらへんはもう一度時間をかけて読みたいです。

Effective Go が更新されなくなり(参考)、書籍「プログラミング言語 Go」も Go 1.8 のリリースにより、古くなってきています。 なので、割とモダンな Go の書き方を学ぶ点においても、この書籍は有効だと思いました。 ただし、この本の Go のバージョンも 1.5 なので、読むとしたら早めに読むことを推奨します。

2022 年 4 月 22 日に「実用 Go 言語」オライリー・ジャパンら出版されます。 著者は渋川よしきさんです。 渋川よしきさんは、過去にも Go の書籍(Go ならわかるシステムプログラミングRealWorldHTTP)を執筆し、どれも高い評価を受けています。 どちらも、本質を捉えた書籍となっているため、今回の Go 言語の実用書も同じように本質を捉えているのではないかと予想していて、非常に期待値が高いです。 なので、無理して「Learning Go」を読む必要はなく、「実用 Go 言語」を読んだ方がいい可能性もあります。 ただ、「実用 Go 言語」の目次に Reflect と Context がないので、互いに補完しながら読んだ方がいい説もあります。

次に Go で勉強すること

個人的な課題は Context、Reflect、平行処理、ポインタだと実感しています。 特に、Context、Reflect は実際に使う場面が多い(と考えている)ので、もう一度「Learning Go」を読み、RealWorld を実装する中で身につけようと考えています。 平行処理は「Learning Go」でも紹介されていた、「Go 言語による並行処理」で学ぼうと考えています。ポインタはあまり復習を考えていないです。いろいろ書きましたが、平行処理とポインタは優先度が低いのでしばらく手をつけない可能性が高いです。

まとめ

  • Learning Go」は Go の本質を初心者向けにもわかりやすく解説した書籍で、初学者から中級者まで非常におすすめできる書籍だった
  • Effective Go が更新されなくなり、「プログラミング言語 Go」が出版されてから時間が経ちつつあるので、新しめの書籍で学びたい人にもおすすめできる
  • ただし「実用 Go 言語」が出版されるので、それを買った方がいい可能性もある

2022/08/10 追記

日本語訳版の「初めての Go 言語 ── 他言語プログラマーのためのイディオマティック Go 実践ガイド」が 2022/9/26 に発売されます。

Auth屋さんの書籍を全て読んだ感想

概要

Auth 屋さんの書籍を全て(2022 年 4 月 18 日現在)読んだので、全体を通しての感想です。

authya.booth.pm

Auth 屋の 3 冊(2022 年 4 月 18 日現在)を読み切った感想

今回で、Auth 屋さんが出している書籍を全て読み切ることができました。 過去に「OAuth 徹底入門 セキュアな認可システムを適用するための原則と実践」という本を読みました。 この書籍は、日本語が読みづらかったり、独特な言い回しがあったり、突然新しい単語が出てくるなどと、初学者にとって読みづらいところが多くありました。 なので、私自身も読み進めるのに苦労し、読み終えた時には OAuth と OIDC に対する知識は割と曖昧なままでした。 この書籍自体は サンプルコード(Node.js)が実際に処理の中身を見ることができるので、その点についてはおすすめしています。 しかし、正直 amazon レビューの評価に対して、人(特に初学者)にはおすすめしていません。

対して Auth 屋さんの 3 冊の書籍は初学者にもおすすめできる内容でした。 理由は 3 点あります。 1 つ目は、コンパクトにまとまっていることです。書籍が薄いので心理的ハードルが低く読み始められます。また、わからなかったところをすぐに読み返すことが可能です。なのでリファレンス的な使い方が可能です。 2 つ目は、文章構成、出典が明記、筆者の体験談から生まれたコラムが素晴らしいことです。ネットの記事だとポジショントークな記事やポエムのような文章、ソース不明なことに起因する非推奨な書き方などがあります。私はそれらに対してうんざりしていました。対して、Auth 屋さんの本は RFC の出典、歴史的経緯、体験談なども書いており、納得感を与えてくれます。 3 つ目は、チュートリアルがあることです。ネットの記事でも雰囲気で理解できますが、具体的に体験していないためすぐに忘れやすいです。個人的に手を動かして理解する派なので非常に助かりました。

全ての本を読んだ上で、OAuth と OIDC について理解が深まったかについて記述します。 読了前と読了後では、明らかに理解度の差があります。以前と比べて雰囲気で説明していた部分が減ったと考えます。 OAuth と ODIC は、ほとんど似たような流れと図なので、よく忘れたり混乱していました。 当時と比べると理解度が上がりました。 しかし、理解度に自信があるかと言われるとそんなことはありません。 それは Auth 屋さんの本のせいではなく、単純に経験の数が足りないからです。 なので、今後は実践の段階でリダイレクトが正しく発生しているのか確認したり、再び読み返したりしようと思います。 具体的に次は、「SAML 入門」と「認証と認可 Keycloak 入門 OAuth/OpenID Connect に準拠した API 認可とシングルサインオンの実現」を読もうと考えています。 また、この本を読んだ後は「OAuth 徹底入門」読みやすくなっていると思います。なので、具体的な内部の処理を理解するために読み返してみようと考えています。

長くなりましたが、Auth 屋さんの本は OAuth 関連を学ぶ上でのファーストステップとして最適です。 今後もお世話になると思います。 現在 4 冊目も執筆中らしいので、期待です。