Mobile Factory Tech Blog

技術好きな方へ!モバイルファクトリーのエンジニアたちが楽しい技術話をお届けします!

TypeORMのData Mapperパターンにおけるリレーションの型安全性を担保する

こんにちは!BC チームでエンジニアをしている id:d-kimuson です。 今回は外部リレーションに関して型安全性の乏しい TypeORM の Data Mapper パターンを独自のユーティリティ型を使ってちょっとマシにする方法を紹介します。 前提: TypeORM の外部リレーシ…

NestJS Way より TS Way を意識したバックエンド設計事例と Tips

こんにちは!BC チームでエンジニアをしている id:d-kimuson です。 最近、弊チームで構築した社内向け Web API のバックエンド設計をしたので事例として紹介しようと思います。 フレームワークとして NestJS を採用していますが、NestJS Way よりも TS Way …

モバファクテックブログの記事管理を GitHub リポジトリに乗せてアドベントカレンダーを運用してみた

メリークリスマス BC チームの id:d-kimuson です。アドベントカレンダーもとうとう最終日となりました! 今年のアドベントカレンダーでは、初日の記事は僕が執筆をしました この記事を書いていて、レビューをお願いしていたら以下のような投稿をもらいまし…

TS 4.9 satisfies operator を使って React Router のナビゲーションを型安全にしてみる

BC チームでエンジニアをしている id:d-kimuson です 11月にリリースされた TypeScript 4.9 から satisfies operator が追加されました。satisfies operator が追加されたことで 「React Router でのナビゲーションを型安全にする」がやりやすくなったのでや…

モバイルファクトリー Advent Calendar 2022

こんにちは!モバイルファクトリーでエンジニアをしている id:d-kimuson です! 今年もモバイルファクトリーの Advent Calendar をお送りします Advent Calendar 2022 モバイルファクトリー Advent Calendar 2022 では モバイルファクトリーの社員がプロダ…

Vue2 (nuxt2) で TypeScript の型を守る Tips

こんにちは、ブロックチェーンチームの id:d-kimsuon です Vue2 では TypeScript がサポートされており、公式の TypeScript のサポートのドキュメント に従うことで TypeScript で書いていくことができます しかし、素直に書いていくと any 型になってしまっ…

「メリハリのある TypeScript」で運用しながら型安全性を高めやすい TypeScript リプレースを行う

こんにちは、21 卒エンジニアの id:d-kimuson です。 モバイルファクトリーでは、最近のプロダクトではフロントエンドに TypeScript を採用していますが、僕がアサインされているプロダクトは歴史が長く JavaScript で書かれていて、今回 TypeScript へのリ…

外からやってくる値から TypeScript の型を守るライブラリ・ツールまとめ

こんにちは、新卒エンジニアの id:d-kimuson です 先日 type-predicates-generator という型定義からユーザー定義型ガード・アサーション関数を自動生成するツールをリリースして紹介記事を書いたのですが、感想とかを眺めていたら同じく外部から来た値に安…

VSCode で TypeScript の交差型のプロパティを省略せずに見れるようにする

VSCode でホバーして型情報を見ようとすると、交差型はプロパティが展開されません プロパティの型を展開する Mapped Types を通すことで省略せずにプロパティを見ることができます。プロパティが交差型になっていることもあるので、再帰的にプロパティを Ma…

CommonJS と ESModules が混在している環境で、lodash を lodash-es に置き換え、バンドルサイズを減らす

こんにちは、21卒エンジニアの id:d-kimuson です。 先日、プロダクトで使用している lodash を lodash-es に置き換えることで、バンドルサイズの削減をしました。 lodash を lodash-es に置き換える話はよくありますが、今回のプロダクトは運用歴が長く Com…