「TypeScriptを活用した型安全なチーム開発 2024」に参加してきました

TypeScript開発にモジュラーモノリスを持ち込む

モジュラーモノリス

  • Digitization部
    • アナログ資産をデジタル化
  • アーキテクチャ特性の1つとしてモジュール性
    • モジュール性がないとコードの品質が低下する
    • 技術的負債の量を抑えて開発生産性を維持するために必要なこと
  • モジュラーモノリス
    • 単一プロセスが別々のモジュールで構成される
    • 独立して作業できる
    • デプロイのために結合する必要がある
  • レイヤードアーキテクチャ
    • 技術レイヤーを水平に分割
    • モジュラーモノリスは機能ごとに垂直に分割
  • モジュール分割
    • DBのテーブルもモジュールごとに分割し共有しない
      • 同じテーブルを複数のモジュールからアクセスしてると改修はいるときの複雑さが増す
      • テーブルのjoinが必須だと状況が違うことも
    • モジュールの中をレイヤードアーキテクチャ
      • モジュール外に公開するものだけをエントリーポイントのファイルでexport
    • Lintによって縛る
      • モノレポライブラリなどは使わなかった
      • モジュールが明示的にexportしたものだけをimportするルールが守れればいい
      • ルールは自作した
        • no-restricted-path なんかはあるが

Denoで作るチーム開発生産性向上のためのCLIツール

DenoでCLI

  • Contract One
    • 法人向けの契約データベース
    • 契約書をデータ化構造化して全社で活用できる
  • ちょっとしたスクリプトのコード
    • 個々人が作ったりルールなく量産されることが多い
    • メンテされてなかったりドキュメントもなかったり
  • 共通の実行環境を作って整備した
    • Denoでやった
  • 用途
    • テスト用のデータ準備
    • サンプルPDFを生成
    • 運用作業の自動化
    • AI生成系のコマンド
  • Deno
    • 標準機能が豊富
      • 依存をかなり小さくできる
      • 標準ライブラリもDenoコアメンバーが作ってる
      • 小さい環境で小さくやるのに相性がいい
    • Globalにインストールできる
      • Denoの昨日で任意のコマンドでグローバルにインストールされる
    • TypeScriptで書ける
      • 開発がtsなので

React Routerで実現する型安全なSPAルーティング

React Router

  • Eight
    • 名刺アプリ
    • Sansanで唯一のtoC
    • web版もある
    • 企業向けのサービスもある
  • React Router
    • 宣言的にルーティングを書ける
  • 不正なURLへの遷移
    • 直に書くとtypoとかundefinedの場合とか
    • 型安全にURLを生成できるような関数を作る
      • generatePath()がReact Routerから提供されてるのでそれを使うといい
  • ルーティング変更時の修正量
    • React Routerのv7からRemixが統合される
    • v6.4からloaderとactionの概念が入っていた
    • 機能が増えたこともあってルーティングが変わると影響が大きくなった
    • パスに応じた型の自動生成
      • 各ファイルでそれを読み込むと便利

型情報を用いたLintでコード品質を向上させる

Typed Linting

  • Bill One
    • 請求書を管理するプロダクト
  • Typed Linting
    • 型情報を使って静的解析をする
    • ASTに加えて型情報も使って解析する
    • typescript-eslint
    • 型情報を使うので実行時間は増える
  • Rust製ツールでは
    • BiomeやoxlintではまだTyped Lintingはできない
    • パフォーマンス上の課題は変わらずあるため