- 2024/12/23
- https://sansan.connpass.com/event/337268/
TypeScript開発にモジュラーモノリスを持ち込む
- Digitization部 Bill One Entryグループ / 秋山 雅之さん
- https://speakerdeck.com/sansantech/20241223-1
モジュラーモノリス
- Digitization部
- アナログ資産をデジタル化
- アーキテクチャ特性の1つとしてモジュール性
- モジュール性がないとコードの品質が低下する
- 技術的負債の量を抑えて開発生産性を維持するために必要なこと
- モジュラーモノリス
- 単一プロセスが別々のモジュールで構成される
- 独立して作業できる
- デプロイのために結合する必要がある
- レイヤードアーキテクチャ
- 技術レイヤーを水平に分割
- モジュラーモノリスは機能ごとに垂直に分割
- モジュール分割
- DBのテーブルもモジュールごとに分割し共有しない
- 同じテーブルを複数のモジュールからアクセスしてると改修はいるときの複雑さが増す
- テーブルのjoinが必須だと状況が違うことも
- モジュールの中をレイヤードアーキテクチャで
- モジュール外に公開するものだけをエントリーポイントのファイルでexport
- Lintによって縛る
- モノレポライブラリなどは使わなかった
- モジュールが明示的にexportしたものだけをimportするルールが守れればいい
- ルールは自作した
no-restricted-path
なんかはあるが
- DBのテーブルもモジュールごとに分割し共有しない
Denoで作るチーム開発生産性向上のためのCLIツール
- Strategic Products Engineering Unit Contract One Devグループ / 伊藤 遼太さん
- https://speakerdeck.com/sansantech/20241223-2
- https://github.com/itomise/deno-cli-app
DenoでCLI
- Contract One
- 法人向けの契約データベース
- 契約書をデータ化構造化して全社で活用できる
- ちょっとしたスクリプトのコード
- 個々人が作ったりルールなく量産されることが多い
- メンテされてなかったりドキュメントもなかったり
- 共通の実行環境を作って整備した
- Denoでやった
- 用途
- テスト用のデータ準備
- サンプルPDFを生成
- 運用作業の自動化
- AI生成系のコマンド
- Deno
- 標準機能が豊富
- 依存をかなり小さくできる
- 標準ライブラリもDenoコアメンバーが作ってる
- 小さい環境で小さくやるのに相性がいい
- Globalにインストールできる
- Denoの昨日で任意のコマンドでグローバルにインストールされる
- TypeScriptで書ける
- 開発がtsなので
- 標準機能が豊富
React Routerで実現する型安全なSPAルーティング
- Eight Engineering Unit Platformグループ / 鳥山 らいかさん
- https://speakerdeck.com/sansantech/20241223-3
React Router
- Eight
- 名刺アプリ
- Sansanで唯一のtoC
- web版もある
- 企業向けのサービスもある
- React Router
- 宣言的にルーティングを書ける
- 不正なURLへの遷移
- 直に書くとtypoとかundefinedの場合とか
- 型安全にURLを生成できるような関数を作る
- generatePath()がReact Routerから提供されてるのでそれを使うといい
- ルーティング変更時の修正量
- React Routerのv7からRemixが統合される
- v6.4からloaderとactionの概念が入っていた
- 機能が増えたこともあってルーティングが変わると影響が大きくなった
- パスに応じた型の自動生成
- 各ファイルでそれを読み込むと便利
型情報を用いたLintでコード品質を向上させる
- Bill One Engineering Unit Core Business APグループ / 江川 綾さん
- https://speakerdeck.com/sansantech/20241223-4
Typed Linting
- Bill One
- 請求書を管理するプロダクト
- Typed Linting
- 型情報を使って静的解析をする
- ASTに加えて型情報も使って解析する
- typescript-eslint
- 型情報を使うので実行時間は増える
- Rust製ツールでは
- BiomeやoxlintではまだTyped Lintingはできない
- パフォーマンス上の課題は変わらずあるため