Software Design の2023年7月号について、
- ざっくり内容紹介
- 個人的に気になった記事やポイント
をまとめている記事です。
サマリー記事の一覧はこちら。
特集①:gRPCで始めるWeb API開発
- 筆者さんまた知ってる方だった…(しかもなぜかフォローしていただいている…)
- gRPCの特徴と登場背景
- マイクロサービス間の通信やモバイルアプリとバックエンドとの通信によく使われる
- これよく見るけど、なんで「ウェブとバックエンドの間」は違うのか理解できてない、読んでたらわかるかな
- Protocol Buffersによるデータスキーマの定義、コード生成
- 各プログラミング言語への対応度の高さ
- HTTP/2による双方向ストリーミング
- 上記の答えがすぐここにあったw
- ブラウザ上のJSはHTTP/2のストリーム操作ができない
- これ用のgRPC-Webというのもあるらしい
- gRPCはRPCの一種で、Protocol BuffersをIDLとして使用する
- Protocol Buffersにはメッセージ(Message)のバイナリを持っていて、各プログラミング言語のデータ構造と対応する形で(デ)シリアライズできる
- たぶんこれが一番強いメリットよなあという気が初心者目線では思う
- このあたりまで含めてすべて自動生成されたコード(スタブ)に隠蔽されていて、クライアント側のコードがとても読みやすい状態を保てる(そう)
- IDEの補完にも強いとのこと
- 「事前に気づかないけど実際に新しい技術を触ったとき好きか嫌いか大きく分かれる超重要なポイント」ですよね
- 背景はパフォーマンス主にパフォーマンス、特にGoogle規模のマイクロサービス基盤だと秒間数百億回にもなる、あとモバイルやIoTデバイスでは計算資源が限られているのも課題だった
- RESTとの比較
- わかりやすい対象リソースに限定されないエンドポイントをつくろうとしたとき、エンドポイント名やメソッド名に困るシーンがよくあるが、gRPCはそもそも全てが関数定義のような形になっているため、迷いがない。たしかになー。
- しかし、メソッドで操作種別が判別できるとキャッシュを使うかどうかの判定がわかりやすく、CDNとの連携もやりやすい。これもたしかに。
- GraphQLとの比較
- 似てるよなーと思っていたが実際そうらしい
- しかしパフォーマンス向上のコンセプトが違う:
- GraphQLは「一回のレスポンスで必要な情報をまとめて取ってこれるようにする」のが趣旨
- gRPCでそれをやろうとすると画面ごとに操作の定義が必要になってしまったりする
- ってことは、対象リソースが同じだけど呼ばれるシーンによって必要なフィールドパターンが多岐にわたるようなシナリオではGraphQLのほうが向いているのかな?
- リゾルバの実装が必要
- 双方向通信ではない
- マイクロサービス間の通信やモバイルアプリとバックエンドとの通信によく使われる
特集②:はじめようSvelte
- ちょうど最近ドキュメント読むのとチュートリアルをやり直したのでタイミングがよい
- いまは Svelte 3 、2022年リリース
- 周辺ツール
- SvelteKit
- SSRが基本だけどadapterというプラグインを使うとSSGやSPAも可能
- adapterによってはNetlifyやVerselなどにも対応できる
- SvelteKit
- あとは基本的な内容がつづく
- 単純な文法説明とかチュートリアル的な内容は紙面だとやっぱり読むモチベーション出にくいね
Extra Feature
- GoFデザインパターン歴史探訪
- スルーめ
Development
- Stable Diffusionで学ぶ画像生成AIのしくみ「Stable Diffusionを試してみよう」
- 事前学習済みのDiffusion.Modelを簡単に作成できる「Diffusers」というライブラリを使う
- Colabで使う
- GPUを使う設定にしておく
- ライブラリの準備(コマンドあり)
- Stable Diffusionのアーキテクチャ
- おさらい:Diffusion Modelは「ノイズ状態から少しずつノイズを除去していって最終結果に近づけるやつ」のこと
- 計算量が多く時間がかかる
- 現代では「画像そのものに対してはノイズ除去は行わず、いったん画像を潜在変数という特徴量に圧縮してから行う」LDMという手法がメインとのこと
- 最後にこの潜在変数とかいうのを実際の画像に変換する的な感じ
- おさらい:Diffusion Modelは「ノイズ状態から少しずつノイズを除去していって最終結果に近づけるやつ」のこと
- 新時代の分散型SNS「Nostr]
- 分散型SNSのプロトコル自体がいくつかあり、その例が下記:
- ActivityPub
- マストドン、Misskeyとか
- AT Protocol
- この間Blueskyで知った
- Nostr
- 知らない単語だったので気になってこのコーナーを読んでたけど、新しいプロトコルという感じだったぽい
- ノスター、ノストラ だむす?
- ActivityPub
- 公開鍵と秘密鍵のペアを保持する、これが唯一の自己証明
- なるほどなー、分散型というだけに、むしろいままでこのタイプのなかったのかという感じ
- 署名もシュノア署名で同じ雰囲気
- ただし楕円曲線版
- 分散型SNSのプロトコル自体がいくつかあり、その例が下記:
そのほか
- ITエンジニア必須の最新用語解説「Dart 3」
- 100% null 安全になった
- 2の時点では変数へのnullの代入を明示的に宣言するというアプローチのみで制限されていたが、今回でnullの変数は一切存在できなくなった
- なんかこれを見て逆に色々わからなくなった、それってつまりnullの概念自体ないってこと…?
- 「健全なnull安全 (sound null safety)」というらしい
- 2の時点では変数へのnullの代入を明示的に宣言するというアプローチのみで制限されていたが、今回でnullの変数は一切存在できなくなった
- その他の機能追加
- レコードの導入
- 一瞬ググったのみだが他の言語でいうところのタプルっぽい
- パターンマッチング
- クラス修飾子
- レコードの導入
- 100% null 安全になった
Software Design 2023年7月号
この号の分のみ単品で読みたい方は、普通にAmazonで買うのがおすすめ。
紙 or 電子書籍で選べます。