Software Design の2023年6月号について、
- ざっくり内容紹介
- 個人的に気になった記事やポイント
をまとめている記事です。
サマリー記事の一覧はこちら。
特集①:クリーンアーキテクチャとは何か?
- クリーンアーキテクチャの背景
- 例の同心円の図が初登場したときの「ブログ記事でのクリーンアーキテクチャ」
- 記事の"どんでん返し"の部分に「クリーンアーキテクチャとはこのコンポーネント配置の様子に直接対応する言葉ではない」とあるw
- 結局なにが言いたかったの:
- ソフトウェアの構造には意図(誌面では「意識」)の異なる複数のレイヤーがあるよね
- レイヤーの関係は常に、詳細→主題のいち方向に依存する(これは円でいうところの中心→外側?)
- 違った!逆だった!
- なるほど、「主題」といえばたしかにドメインモデルの気はする
- (重要だったけど長かったので→はだいぶ意訳:)Railsがめちゃくちゃ流行っていた時代、MVCにとらわれすぎて「ソフトウェア設計って本来そういうもんやないやろ!」と言いたかった人が、特にWebから入った若手などを意識しつつ提唱したのが「クリーンアーキテクチャ」
- DDDが広まった時期とかぶったおかげで色々だるいことになった
- ここでもRailsの登場がトレンド化を促進させた…
- クリーンアーキテクチャの実体に迫る
- 関心の分離
- 凝集性
- 高めようね
- 結合性
- 下げようね
- 依存性
- これも下げようね
- 凝集性
- 例の同心円4つのやつの記事のデフォルメ説明+自分の理解:
- 内側から、事業戦略→サービスドメイン(コア仕様)→ビジネスとコンピュータの変換器→フレームワークとか外部DBとかのラッパー的な集まり
- 3つめと4つめの区別が難しい
- 実際、4つめは最も誤解されているケースが多いんだそう
- 3つめはかなり不安定な理解をしているかもしれない、でも「変換器」という説明は重要視されているっぽいのでけっこう近いかな?
- 実際の「プログラムコード」的なやつはここには登場しないっぽいことに留意する(たぶん)
- おそらくさらに外側があるとするとそこのイメージ?
- 3つめと4つめの区別が難しい
- 内側から、事業戦略→サービスドメイン(コア仕様)→ビジネスとコンピュータの変換器→フレームワークとか外部DBとかのラッパー的な集まり
- 関心の分離
- 例の同心円の図が初登場したときの「ブログ記事でのクリーンアーキテクチャ」
- ソースコードから理解する
- もともとこういう設計論の話とか全然興味ないタイプなんだけど、ソースを見るなら楽しく読めるかなと思っていたところ、前の章までで概要は理解できた気になったのでもうモチベーションがなくなった、ウケますね
特集②:改善につながるオブザーバビリティ
- ねらいと導入・改善の進め方
- 著者さん、New Relicの人だ、すごい
- 「監視」はシステムが出力する定量的なデータをもとに健康状態をチェックするもの、「オブザーバビリティ」は内部状態を観察することでエンジニアがシステム最適化の洞察を得られる能力、のこと
- 大事なもの3つ:
- ログ
- メトリクス
- トレース
- だけど実際は:
- どれか1つしかなくても目的を達成できていればいいよ
- この場合の目的ってなに???
- 逆に全部あっても足りないこともあるよ
- どれか1つしかなくても目的を達成できていればいいよ
Development
- 画像生成AIのしくみ(新連載)
- たぶん要望多かったんだと思うけど(自分も書いた気がする)、なんとなくネットで漁るモチベーションはないが雑誌レベルの段階的で体系的な文章を読みたかったのでとても嬉しい
- GAN
- Generative Adversarial Network、モデル
- 当然この中にそれぞれ特化したものなど多くのモデルが存在する
- ランダムなデータから偽物の画像を生成する部分、偽物と学習データセットの実物を区別しようとする部分
- 偽札づくりと警察に例えられる、警察が見抜けなくなるまで両者で切磋琢磨する
- Generative Adversarial Network、モデル
- Diffusion Model
- diffusionは拡散
- GANの課題であった多様性のなさを克服するもの
- 「黒いマジックで塗りつぶされた絵をもとに戻す」
- 100%塗りつぶされたものを99%にするのは難しくない、99を98に…という逆算を可能にするような学習をさせていく
- 出発点は「ノイズ画像」であるため、理論的にはどんなものへも変貌させられる
- どうやってただのノイズが実物のものに近づいていくかはもっとあとの連載で教えてくれるとのこと
- 計算量がとんでもない
- ピクセルごとらしいので、例えば256四方だと単純に65,536回、さらにノイズ除去は各1000回くらいあるらしいとのこと
- このあたりが最近のAI沸騰の中で聞く「コンピューティングリソースが課題だったのがすっと解決した」のやつなのかな?
- OpenAIがCLIPというのを発表した
- 「言語と画像の事前対照学習」
- めちゃ要約すると「絵とテキストの関連度を測れるもの」
- つまり…これを上記のノイズのやつとあわせると「答え合わせしあながらノイズ除去の方向性を寄せていける」になる!!なるほど!!はじめて中身知った
- その後LDM(Latent Diffusion Model)というモデルが出て、計算量の問題もちょっと改善しはじめている
- Latent:潜在的
- 画像のエンコーダとデコーダをくっつけたもの
そのほか
- ITエンジニア必須の最新用語解説「Devbox」
- PC内での分離された開発環境構築用ツール
- 仮想化技術ではない
- 仮想化レイヤーも当然ないのでオーバーヘッドがなく、コンパイルが遅くなったりもしない
- ベースは「Nix」というパッケージマネージャ
- これリポジトリに含めてお手軽にそれぞれで使えたりしたらよさそうよねと思ったらやっぱりありそう?(devbox.jsonがそれ?)
Software Design 2023年6月号
この号の分のみ単品で読みたい方は、普通にAmazonで買うのがおすすめ。
紙 or 電子書籍で選べます。