msksgm’s blog

msksgm’s blog

Webエンジニアです.日々の勉強,読書,映画観賞,美術観賞の記録を載せます.

「セキュア・バイ・デザイン」感想

概要

「セキュア・バイ・デザイン」を(途中から斜め読みで)読了しました。

感想について記述していきます。

感想

セキュリティを設計(デザイン)の観点から向上させる実装方法について記述された本です。 タイトルに「セキュリティ」という名前がついていますが、セキュリティバグ、セキュリティ要件などの脆弱性について詳細に触れられることはないです。 6、7 割がドメイン駆動設計(以下、DDD)の内容で、残りが例外、クラウド、マイクロサービスなどの設計についての内容でした。

自分がこの本によって 2 つの得られたことがあります。 1 つ目は DDD によって得られるメリットについて再定義(再認識?)したこと、2 つ目は設計(DDD に限らず)でセキュリティの観点から意識するべき知識を得られたことです。

この本の前半では、開発者はセキュリティよりも設計の方が強い関心があるため、より良い設計によって意識せずにセキュリティを向上させたり、セキュリティの専門家と同じ知識を持つ必要がなくなったり、脆弱性を把握しなくてよくなったりすることから、設計によるセキュリティ向上方法について紹介されます。 実装テクニックとして、不変生(immutability)、速やかな失敗(fail-fast)、妥当性確認(validation)が紹介され、DDD による、安全性の向上方法として、ドメイン・プリミティブ(不変で完結した概念を持つ)、Read-Once オブジェクト、ドメイン・プリミティブの応用が紹介されています。 どれも、設計の観点による実装方法であり 戦略的、戦術的 の両方の観点から DDD の意識を高めることができました。

本書の後半には、例外、マイクロサービス、クラウドの観点からセキュリティを向上させる方法について記述されています。 例外についてはビジネス例外と技術的例外を意識して実装したり、マイクロサービスは境界づけられたコンテキストを意識して分割するべきでコンテキストを超えるやりとりには気をづけること、クラウドの考え方ではエンダープライズ・セキュリティの3つの「R」(Rotate、Repave、Repair)について、解説がされています。 どれもセキュリティと関連させずに考えていたので、セキュリティについて新しい観点を得ることができました。

本書ほ日本語訳も文章構成も非常に優れているため読みやすかったです。 章ごとに前提知識(DDD、Twelve-factor、など)についてのわかりやすい説明があります。 そのため予習は不要な内容です。 しかし、 DDD と一部の基本的な脆弱性について知った方がいいと思います。 それらを知らないと、セキュリティに観点から何が拡張されたかわかりづらいからです。

まとめると、セキュリティの観点から設計についてまとめられた良書でした。 セキュリティの専門知識は不要で、セキュリティ向上の方法がまとめらているので、DDD を意識した実装の際に、実践しようと思いました。 他にも戦略的にも戦術的にも DDD のやることやメリットなどを再認識できたので DDD の理解を深めることができたと思います。 他の設計の箇所は理解が浅いので、今後読み返したいと思います。

「ドメイン駆動設計 モデリング/実践ガイド」、「ドメイン駆動設計 サンプルコード FAQ」感想

概要

ドメイン駆動設計 モデリング/実践ガイド」(以下、松岡本)を読了し「ドメイン駆動設計 サンプルコード FAQ」(以下、FAQ 本)一部読みました。 感想について記述していきます。

booth.pm

booth.pm

感想

松岡本は、約 100 ページで DDD について集約された本です。 FAQ 本は、松岡本が出版されてから松岡さんに集まった質問をもとに作成された本です。 質問に対する解答のほか松岡本の補完的な内容になっています。

以前読んだ際には、あまり理解できませんでしたが、今回は勉強会の教本として熟読した結果、以前よりは理解することができました。

msksgm.hatenablog.com

感想を簡潔に書くと、DDD について戦略的 DDD と戦術的 DDD をまとめた入門書として最適な内容だと思いました。 DDD とは、良いモデルとは、モデリングアーキテクチャドメイン層(エンティティ、値オブジェクト、リポジトリ、ファクトリー)、アプリケーション層、CQRS などと、一通り学ぶことができます。 本書で解説されているソースコードもわかりやすいですし、もっと具体的に知りたければ FAQ 本(載っていれば)か、「ドメイン駆動設計入門」(以下、成瀬本)を読めば良いと思います。

成瀬本はボトムアップなのに対して、松岡本はトップダウンな内容となっています。 どちらがいいかどうかは実践してみないとわからないので、今後実践していくことが目標になりました。

気になる点を強いて挙げるなら、モデリングの方法についてです。 モデリングをこのまま実践するには、実装時に不足な点が多く生まれそうだと考えました。 本書では、ソースコードの改善をしながらを前提としていたことと、FAQ 本でモデリング方法が変わっていたので、それらを踏まえるとあまり気にしなくていいと考えました。

FAQ 本については、松岡本と関連のある箇所だけ読みました。 松岡さんの意見がアップデートされていたり、詳細に書かれていたりするので、松岡本を読むときには必読です。 関連していない内容は、深掘りされた内容が多いので実践してからになりそうです。

「ドメイン駆動設計入門 ボトムアップでわかる!ドメイン駆動設計の基本」感想

概要

ドメイン駆動設計入門 ボトムアップでわかる!ドメイン駆動設計の基本」(以下、成瀬本)を読みました。 感想について記述していきます。

感想

タイトルの通り、ドメイン駆動設計(DDD)をボトムアップから理解する本です。 ボトムアップから入るので、戦術的 DDD の解説が主です。 値オブジェクト、エンティティ、リポジトリ、ファクトリなどの頻繁に解説される内容をソースコードベースに解説してくれるので、抽象的な説明はほとんどないためわかりやすかった印象です。しかし、終盤あたりになると複雑な実装の解説が登場し、紙面においてソースコードを読み取るのが難しかった印象があります。 ただ、サンプルコードも用意されているので、これらの戦術的 DDD を知りたい人にはお勧めできる内容だと思います。

気になった点として、境界づけられたコンテキスト、集約、ユビキタス言語といった戦略的 DDD の内容は終盤にでてきます。 終盤にでてくることに対して以下2つの意見を考えました。

  • DDD を導入するにあたって、これらを最後に持ち出すことはないと思う。この解説の仕方は DDD の考え方とマッチしているのか?
  • 集約やコンテキストは実装ベースじゃないと気がつけないことも多いそうだし、手戻りが発生しそう。ボトムアップで考えていくのも正解なのかもしれない

これは、自分自信は業務でも個人開発でも導入したことがないので、どちらが正しいかは判断ができませんでした。

この点に関連すると、他の DDD 本として、松岡さんの「ドメイン駆動設計 モデリング/実装ガイド」(以下、松岡本)が同時期に発売されています。 松岡本と成瀬本を比較すると、アプローチが真逆(松岡本がトップダウン、成瀬本がボトムアップ)です。 そのため2冊を比較しながら読むと DDD について異なる視点を得られどちらが正しいか考えるようになると思います。

著者の成瀬さんの YouTube チャンネル「なるセミ」でレビュアーによるパネルディスカッションがされているので、読む前か読後に視聴することをお勧めします。 レビュアーは DDD 界隈の有名人ばかりなので、この本に限らず DDD について非常に参考になる意見が飛び交っています。

www.youtube.com

直接的に関係ないですが、戦術的 DDD 学ぶさいには「ユースケース駆動設計実践ガイド」を読むといいと思います。 ロバストネス図によって、(UCDD 本の)ドメインモデル、ユースケース図、ユースケース記述を洗練させるアプローチを学ぶので、DDD をトップダウンで実践する気持ちになります。

こちらは ひろどら さんが解説動画だしているので、視聴をおすすめします。

www.youtube.com

「オラクルマスター教科書 Silver SQL Oracle Database SQL」感想

概要

オラクルマスター教科書 Silver SQL Oracle Database SQL」を読みました。 資格教本なので、書けることは少ないですが、感想を書いていきます。

また、合格した感想は zenn に書いたので試験自体について興味がある人はそちらを見ていただければと思います。

zenn.dev

感想

合格教本として MECE な内容でした。 章ごとに簡潔にまとまっており、章末問題も難しすぎず、簡単すぎずといった内容です。 所々にコラムが用意されており、試験範囲外であるが物理的な領域の話話などが記述されており興味深かったです。 最後に模擬試験が用意されています。翔泳社のサイトでも同じ問題を順不同で受けられますが、クリックするたびに答えがわかるため、最初の一回は翔泳社のサイトではなく、手元で受けてまとめて採点した方ががいいと思いました。

1〜3月の目標

概要

1月〜3月の目標です。

1〜3月の目標

生活習慣

ジム通います。 ベンチプレス 75kg、スクワット 80kg、デットリフト 70kg を目標にします。

勉強関連

以下を勉強していきます。

  • プログラミング言語
    • Go(Go 言語による Web アプリケーション開発、RealWorld HTTP、みんなの Go 言語、Go ならわかるシステムプログラミング、Go 言語による平行処理)
  • 設計
    • DDD(ドメイン駆動設計入門、実践ドメイン駆動設計入門、ドメイン駆動設計 モデリング/実装ガイド、FAQ、セキュアバイデザイン)
    • DB(達人に学ぶ DB 設計、失敗から学ぶ RDB の正しい歩き方、SQl パフォーマンス詳解)
    • その他(図解でなっとく!トラブル知らずのシステム設計、絵で見てわかる OS/ストレージ/ネットワーク)
  • Computer Science
    • 未定

英語

TOEFL の勉強をします。 3月までに、一度本番を受ける予定です。

趣味

技術記事の作成

未定