Upgrade to Pro — share decks privately, control downloads, hide ads and more …

cls-hooked による実行コンテキストの保存と利用

cls-hooked による実行コンテキストの保存と利用

NestJS meetup #5

Hiroaki KARASAWA

March 31, 2023
Tweet

More Decks by Hiroaki KARASAWA

Other Decks in Programming

Transcript

  1. 2 自己紹介 • 氏名 ◦ 唐澤弘明 or @karszawa • 所属

    ◦ 株式会社 dinii ◦ 飲食店の POS システムやモバイルオーダーを作っています ◦ 【顧客情報 x 喫食情報】で飲食業界で初めて CRM を実現しています • 興味 ◦ TypeScript, React, GraphQL ◦ NestJS 歴 ⇒ 3年(ダイニーに入社してから)
  2. dinii と NestJS 4 • ダイニーのバックエンドは NestJS によるモノリスです ◦ 最近

    Modular Monolith っぽく分割し始めた ユーザー数【450万人】到達! 🎉🎉🎉
  3. cls-hooked is … 6 Continuation-Local Storage ( Hooked ) •

    Async hooks の便利なラッパー Async hooks is … • Node.js の API で非同期処理のライフサイクルを追跡できる 🤨 • その関数がどういうコンテキストで呼び出されたかを記録できる 🤔 • 関数の呼び出しごとに呼び出しの粒度で情報を保持できる 🧐
  4. 実用例 ① リクエストごとの id を保存してロガーで出力 11 ヘッダーから x-request-id を抽出 事前に定義した

    context にセット context を作成(グローバルで OK) AppModule にて利用 ※ Express.js の app.use と同じ NestMiddleware として実装できる
  5. 実用例 ① リクエストごとの id を保存してロガーで出力 12 先程の context から値を取得 logger

    で出力 ※ ちなみに winston を使っています ※ ちなみに winston の出力先はこんな感じ 開発環境 ⇒ Human readable format 本番環境 ⇒ JSON で標準出力 + Sentry