builderscon 2024
技術選定と設計方針
フレームワークの指針に従う
戦術的DDD/モデリング
モデリングは重要になる
経験や価値観に左右される
Theory of Models
T字形ER法
モデルとは
モノそのものではなく、モノについての情報が記述され、共有される
(いくつか例外はあるが) そのまま実装される
Theory of Modelsの概要
個体指定子を使ってモノを集める
T字書式
左に個体指定子
右にその他の項目
画面ごとのT字書式を作成する例
ブログ記事をクロールして音声変換してポッドキャストにする
画面要素からモノごとにT字書式を作る
モノをEventとResourceに分ける
Eventを時系列に並べる
関係を構成する
Event, Resource
出来事に行為者が関与する
記事 (R) - 音声変換 (E) - エピソード (R)
Event, Event
先行-後続
クローリング (E) - 音声変換 (E)
Resource, Resource
対照表
記事 (R) - エピソード (R)
実装的には中間テーブル
小休止
Amazon Pollyで音声読み上げ
セット (集合) をつくる
集合の中に区分コードがあればサブセットに切り出す
例: 記事にカテゴリがあって、カテゴリごとに配信先を変える
ここから疑問点
URLは個体識別子なのでは
URLの他にIDカラム
事業の関係者が使っていない個体識別子を勝手に持ち込まない
事業にフィードバックする
帳票や画面がない場合は?
銀の弾丸はない
他の概念と組み合わせる
ドメイン駆動設計
イミュータブルデータモデル
サブタイプのモデリング
オニオンアーキテクチャが課題はあるけどベターだろう
ドメインモデルのトリレンマ
関数型ドメインモデリング
Railsでの例
要件に追加・変更があったら?
自分たちで考えてやっていくしかないでしょう
B/43
eKYC
本人確認
本人確認が必要な理由
法律
サービスの品質向上
B/43は犯罪収益移転防止法への対応のためやった
資金移動業者
前払式支払手段
厳しい制約
本人確認フローをどう作るか
ベンダーがあるがカスタマイズ性が低いなど課題がある
シームレスな本人確認体験を自前で作る
ITに不慣れなターゲット層の離脱を防ぐ
従来の本人確認
対面もしくは郵送
最短でも数日のタイムラグがある
2018年11月に犯罪収益移転防止法が改正され、オンラインで本人確認が可能に
オンラインでの本人確認方法
アプリ内で写真撮影する
ガイドライン・Q&Aが公開されている
本人確認システムのアーキテクチャ
撮影条件の閾値調整
Amazon Rekognition
類似度の例
双子だと99%以上になる
要注意人物・反社会勢力DB
審査用の管理画面
運用効率化
いろいろありますね
身分証偽造の事例
なぜ内製?
スタートアップだと払うのが難しかった、失敗すると終わっていた
オンボーディングから始めて、数をこなせてきたら難しい事例にもトライしてもらうようにする
権限管理は細かく
React Server Components (RSC)
コンポネント内からO/Rマッパーのメソッドを呼んでクエリできる、とか
テンプレートエンジンに似ている
おさらい: SPAとSSR
SPA
SSR
hydrationでイベントリスナを登録する
SSRが抱える問題
bundle size増大
ブラウザ上でのレンダーにコンポーネント全体がbundleされる
staticなのでサーバーでレンダーするだけでいいはずだが
SSRだとbundleに含めないようにすることができない
↑どういう制約による?
データ取得が煩雑
getServerSidePropsでDBからデータを引いてpropsとして渡す
コンポーネントから直接DB引けるならもっと楽では
ブラウザのbundleにDB操作用のモジュールが含まれるとエラーになる
コンポーネントでasync await使えない
RSC
async await使える
サーバー専用APIが使える
イベントリスナは登録できない
Client Componens
ブラウザでレンダーしていた従来のコンポーネント
'use client';
SCとCCは共存する
入れ子にできる
CCにSCを入れ子にするとは?
Server Actions
'use server';
SCで定義したServer ActionsをCCに渡せる
Taint API
何もしないとSCからCCに渡したpropsはユーザーから見える
taintした値をCCに渡すと実行時エラーになる
taintUniqueValue
↑これは何が提供しているAPI?
従来技術との違い
テンプレートエンジンとの違い
テンプレートをクライアント側でレンダーできない
erbとJavaScriptを組み合わせる例
SSRとの違い
CCをサーバーでレンダーしている、ととらえられる
RSCを使っていてもSSRできる
開発スタイルがどう変わるか
data fetch
コンポーネント内からデータ取得できる
抽象化のやり方は変わってない
SCとCCを使い分ける
インタラクティブにしたいところに 'use client'; をつける
振り子ではなく螺旋
すこやかなサービス運営のための PWG
SRE本31章に同じ概念が書いてある
共同編集できる議事録
非定型作業のログを見る
ヒヤリハットになることが多い
PWG用のMackerelダッシュボードを見て話す
コスト
SLOは定期的に見直す
プロダクトオーナーがPWGに参加している
SREsのソフトスキル向上
感度の高い非インフラエンジニアの育成
runbookを書けない監視は存在しないのがベスト
Embedded SREはインフラッテクリードという立ち位置になる
できる人とできない人がいる
ホー◯ページ・ビルダー 2024
ホームページ・ビルダー
クールなURLは変わらない
デジタルコンテンツの脆さ
htmlが好き
ActivityPub
トラックバックは廃れた
PA-APIのレートリミット
ブクログを使うのがよい
cyamli
YAMLでサブコマンド定義を書く
cyamli generateコマンドでコードを自動生成する
コマンドライン引数を解釈する仕組みが必要
型付けされたCLIを適切に扱う
言語ごとにコマンドライン引数を解釈する方法を調べたくない
サブコマンドごとに構造体を分ける
園芸
RISC-V
RISC-VエミュレータをRustで実装し、wasmに変換する
UART
Web Worker内でWASMを起動し、Web Worker外とはpostMessageでやり取りする
ブートローダーなし