d-kimusonのブックマーク (20)

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

    こんにちは!BC チームでエンジニアをしている id:d-kimuson です。 今回は外部リレーションに関して型安全性の乏しい TypeORM の Data Mapper パターンを独自のユーティリティ型を使ってちょっとマシにする方法を紹介します。 前提: TypeORM の外部リレーションについて TypeORM では ManyToMany 等のデコレータを使ってスキーマに Foreign Key を書くことができます。 // 公式ドキュメントのサンプルです @Entity() export class Category { @PrimaryGeneratedColumn() id: number @Column() name: string @ManyToMany((type) => Question, (question) => question.categories) quest

    TypeORMのData Mapperパターンにおけるリレーションの型安全性を担保する - Mobile Factory Tech Blog
    d-kimuson
    d-kimuson 2023/09/06
    書きましたわよ
  • NestJS Way より TS Way を意識したバックエンド設計事例と Tips - Mobile Factory Tech Blog

    こんにちは!BC チームでエンジニアをしている id:d-kimuson です。 最近、弊チームで構築した社内向け Web API のバックエンド設計をしたので事例として紹介しようと思います。 フレームワークとして NestJS を採用していますが、NestJS Way よりも TS Way を意識した設計をしており、このエントリの主題でもあるため、TS Backend の設計事例として読んでいただければと思います。 対象システムの概要 社内の他サービス向けの Web API で、他チームのサービスを経由してエンドユーザーに届く中間システム チーム内のサービスからもチーム外のサービスからも叩かれる想定 チーム外からも叩かれるため、なんらかのスキーマを共有したいというモチベーションがある → 2023 年現在で標準的な OpenAPI Specification (以後 OAS と呼びます)

    NestJS Way より TS Way を意識したバックエンド設計事例と Tips - Mobile Factory Tech Blog
    d-kimuson
    d-kimuson 2023/07/21
    NestJS使いつつも関数型軸で設計しようぜ、みたいな記事書きました
  • pnpm fetch で Docker キャッシュを活かす - Mobile Factory Tech Blog

    pnpm には Docker でキャッシュを利用しやすくする fetch というコマンドが用意されています この記事では pnpm fetch を使ってキャッシュを利用しやすい Dockerfile を書いていく方法を紹介します Docker のマルチステージビルドとキャッシュ Docker にはマルチステージビルドという機能が存在し、単一の Docker イメージ下で実行するのではなく、ビルドやインストール, 番実行等に分けて Docker イメージ を作成できます Dockerfile でマルチステージビルドを行う際の例を示します ARG NODE_VERSION=18.15.0 FROM node:$NODE_VERSION-buster as builder # build 処理 RUN pnpm build FROM node:$NODE_VERSION-slim as run

    pnpm fetch で Docker キャッシュを活かす - Mobile Factory Tech Blog
    d-kimuson
    d-kimuson 2023/05/15
    書きました
  • エンジニア以外の職種も勉強会を開こう - Mobile Factory Tech Blog

    🎄モバイルファクトリー Advent Calendar 2022! 毎週土曜日は「良いモノ」を作る技術というテーマで、モバファクの非エンジニアが知見やTipsをお届けします! こんにちは。「駅メモ!」開発チームディレクターの id:Torch4083 です。 この記事では、エンジニア以外の職種による勉強会を増やすメリットについて改めて整理し、実際に開催する際に役立つ事例を添えてお伝えいたします。 まえおき:モバファクの社内制度 それって、エンジニアはなにがうれしいの どうやってるの 勉強会のケース 輪読会 LT会 ワークショップ プレゼン・講義形式(+ 質疑応答) 具体例 ゲームプランニング勉強会 『イシューからはじめよ』輪読会 おわりに まえおき:モバファクの社内制度 弊社には「1日の業務時間のうち1時間は勉強に充ててOK!」という制度があります。(「シェアナレ」と呼ばれています) 業

    エンジニア以外の職種も勉強会を開こう - Mobile Factory Tech Blog
    d-kimuson
    d-kimuson 2023/03/14
  • 仕組みやプロセスに興味がない - ミネムラ珈琲ブログ

    1on1で喋っていて気づいたこと。 ぼくは仕事をうまくやる上で、仕組みとかプロセスで解決することにあまり興味を持っていない。チームメンバーがそれをやってくれることに対してウェルカムだし、自分でもそういう解決をしてるんだけど、質的には興味がない。 例えばチームにおいて1人の特殊な知識や能力で仕事がうまくいっているとする。そうするとその人がいなくなったときにどうすんのって話がよくあって、なんらか仕組みで解決しましょうってことによくなる。 が、ぼくは「別になんもやらなくてもいいんじゃん?」とか思ってしまう。仕事の回し方なんて人それぞれだ。1人の特殊なキーパーソンがいなくなったところで、残った人や新しく入ってきた人が別の特性を発揮して新しい仕事の回し方が成立するものだと思っている。なんなら過去のやり方の再現を前提に引き継ぐみたいなのは下手したら残ったチームメンバーに合わない業務を強制しかねないぐ

    仕組みやプロセスに興味がない - ミネムラ珈琲ブログ
    d-kimuson
    d-kimuson 2023/01/24
  • モバファクテックブログの記事管理を GitHub リポジトリに乗せてアドベントカレンダーを運用してみた - Mobile Factory Tech Blog

    メリークリスマス 🎉 BC チームの id:d-kimuson です。アドベントカレンダーもとうとう最終日となりました! 今年のアドベントカレンダーでは、初日の記事は僕が執筆をしました この記事を書いていて、レビューをお願いしていたら以下のような投稿をもらいました 社内ではドキュメントサービスとして DocBase を使っているので、技術ブログの下書きを DocBase に書いていたのですが、Pull Request で行うレビューに比べてレビューがしづらいよね、というものです 課題があれば解決するのがエンジニアです かねてからローカルで書けたほうが執筆体験良いのに... と思っていたこともあり ローカルで記事を執筆できる GitHub 上でレビューができる ような仕組みを整えて、今年のアドベントカレンダーのお試し運用をしてみたので紹介します ローカルで執筆できる環境の整備 エンジニア

    モバファクテックブログの記事管理を GitHub リポジトリに乗せてアドベントカレンダーを運用してみた - Mobile Factory Tech Blog
    d-kimuson
    d-kimuson 2022/12/25
    テックブログをローカルで執筆して Github でレビューする運用にしてみた話を書きました!
  • MySQL のインデクスが利用されないクエリ等を自動検出する ExplainPolice の運用について

    LINE株式会社は、2023年10月1日にLINEヤフー株式会社になりました。LINEヤフー株式会社の新しいブログはこちらです。 LINEヤフー Tech Blog LINE 株式会社 B2B Platform 開発担当フェローの Matsuno です。 LINE の Business Platform ではメインのデータベースとして MySQL を利用しています。MySQL は非常に高速に動く OSS の RDBMS なので、とても便利に利用させていただいております。 MySQL はとても高速なのですが、うっかり index を使わないクエリを発行した場合に実行がとても遅くなってしまうことがあります。LINE の Business Platform はとても多くのお客様が利用されるので、B2B としては異例なほどトラフィックが多く、少し遅いクエリが発生した結果としてサイト全体がダウンして

    MySQL のインデクスが利用されないクエリ等を自動検出する ExplainPolice の運用について
    d-kimuson
    d-kimuson 2022/12/14
  • TS 4.9 satisfies operator を使って React Router のナビゲーションを型安全にしてみる - Mobile Factory Tech Blog

    BC チームでエンジニアをしている id:d-kimuson です 11月にリリースされた TypeScript 4.9 から satisfies operator が追加されました。satisfies operator が追加されたことで 「React Router でのナビゲーションを型安全にする」がやりやすくなったのでやってみました この記事で紹介するコードは TS Playground で試すことができます React Router v6.4 からオブジェクト形式でルーティングをかけるようになり、ルーティング宣言から型を拾いやすくなった React Router v6.4 から createXXXRouter のAPIが追加され、コンポーネントではなく、プレーンオブジェクトでルーティングを書けるようになりました import { createBrowserRouter } from

    TS 4.9 satisfies operator を使って React Router のナビゲーションを型安全にしてみる - Mobile Factory Tech Blog
    d-kimuson
    d-kimuson 2022/12/01
    アドカレ1日目書きました!
  • モバイルファクトリー Advent Calendar 2022 - Mobile Factory Tech Blog

    こんにちは!モバイルファクトリーでエンジニアをしている id:d-kimuson です! 今年もモバイルファクトリーの Advent Calendar をお送りします 🎉 Advent Calendar 2022 モバイルファクトリー Advent Calendar 2022 では モバイルファクトリーの社員がプロダクトで使っている技術や興味のある技術での知見、Tips 等を毎日投稿していきます! 昨年は、140 字くらいのコンパクトな記事でも OK というルールを設定して Advent Calendar を開催しました。 今年も昨年のルールを継承しつつ、コンパクトな記事から内容の濃い記事まで幅広く投稿していきますので、ぜひお楽しみください! また、今年は例年とは少し趣向を変えて 「良いモノ」を作る技術 というサブテーマを設定しています。 テックな記事に加えて、毎週土曜日の記事ではデザイ

    モバイルファクトリー Advent Calendar 2022 - Mobile Factory Tech Blog
    d-kimuson
    d-kimuson 2022/11/30
    今年もアドカレやっていき💪
  • 配列の filter で直和型を絞り込むときのユーザー定義型ガードを比較的型安全に書く

    配列の filter メソッドでは直和型が絞り込まれない 配列 の filter メソッドでは直和型の絞り込みができないことが知られています type User = { id: number name: string } declare const maybeUsers: (User | undefined)[] const users /*: (User | undefined)[] */ = maybeUsers.filter( (maybeUser) => maybeUser !== undefined ) !== undefined しているので自明に undefined は除かれて User[] 型に推論されてほしいところですが、callback は boolean を返すだけなので (User | undefined)[] に推論されていしまいます ユーザー定義型ガードによる解

    配列の filter で直和型を絞り込むときのユーザー定義型ガードを比較的型安全に書く
    d-kimuson
    d-kimuson 2022/09/24
  • GitHub Actionsの共通したアクションを切り出してシンプルに保つ

    こんにちは。スターフェスティバル株式会社の ikkitang です。 さて、皆様 GitHub Actions 使ってますか? 弊社では大半のプロジェクトGitHub Actions が活用されていて、 月 1 回の WinSession で知見が共有されたりしています。 GitHub Actions の素敵な所はイベントの柔軟さだと感じています。それによって GUI での操作が想起できて、直感的にイベントをフックさせて Workflow を作っていくことができます。とはいえ、Workflow が増えてくると別の Workflow をコピペで持ってきて必要な Step を書き換えるなんてことをすることがないでしょうか。 そこで、今回は Workflow の保守性を上げるために Step の共通化について調べてみました。 ちなみに今回説明にあたって GitHub にサンプルを用意してみま

    GitHub Actionsの共通したアクションを切り出してシンプルに保つ
    d-kimuson
    d-kimuson 2022/01/18
  • TypeScriptの型定義から型ガードを自動生成する type-predicates-generator の紹介

    TypeScript の型定義からユーザー定義型ガード(type predicate)とアサーション関数を自動生成するツールを作ったので紹介します!間違った実装を書いてしまう可能性があるユーザー定義型ガードを自動生成することで、安全かつ手軽にアプリケーションの型を守ることができます! type predicate と問題点 API や JSON のパース等で外部からやってきた値に型付けをするときや型定義の存在しないライブラリを使用する時、型注釈や as をそのまま使ってしまうと想定していない値がきたときに気付くことができません type Task = { id: number titile: string description: string } const task: Task = JSON.parse("...") // any 型を返す関数に対して注釈を書く task /* :ta

    TypeScriptの型定義から型ガードを自動生成する type-predicates-generator の紹介
    d-kimuson
    d-kimuson 2022/01/17
  • 「メリハリのある TypeScript」で運用しながら型安全性を高めやすい TypeScript リプレースを行う - Mobile Factory Tech Blog

    こんにちは、21 卒エンジニアの id:d-kimuson です。 モバイルファクトリーでは、最近のプロダクトではフロントエンドTypeScript を採用していますが、僕がアサインされているプロダクトは歴史が長く JavaScript で書かれていて、今回 TypeScript へのリプレースを行いました。 既存プロダクトの TS リプレースではしっかり型付けすることは難しいので、型チェックオプションを緩くしてリプレースすることが多いと思います。しかし、既存コードからリプレース後のコードまで全て型安全性が担保できなくなってしまうので、後からの strict 化は非常に大変になってしまいます。 今回のリプレースでは、型チェックオプションは緩くしない代わりに @ts-nocheck や @ts-expect-error を使用することで、段階的に型安全性を高めやすい形でリプレースを行いま

    「メリハリのある TypeScript」で運用しながら型安全性を高めやすい TypeScript リプレースを行う - Mobile Factory Tech Blog
    d-kimuson
    d-kimuson 2022/01/17
    型安全性を守りやすい TypeScript 移行方針について書きました!
  • 技術ブログが書ける開発をする - Mobile Factory Tech Blog

    この記事はモバイルファクトリー Advent Calendar 2021の25日目の記事です。 メリークリスマス🎉 エンジニアのid:kfly8です。 技術ブログの「ネタがない」といったコメントや「この記事の課題がよくわからない」といった記事レビューをすることがあります。技術アドベントカレンダーの時期は、短期間に記事が集中するので、特に困らせているように感じます。 普段から意識する習慣で、楽ができないかと考えると、「技術ブログが書ける開発をする」のが良いと思いました。 誤解しないでほしいのが、「技術ブログを書くために開発をしよう」と言いたいわけではないです。あくまで、チーム、事業の目的ありきです。 ただ「技術ブログが書ける開発をする」ことは、普段の開発の質を高めると思っています。 技術ブログが書ける開発とは? モバファクの技術ブログでは、「課題を解決する方法や経験を発信したい」と思ってい

    技術ブログが書ける開発をする - Mobile Factory Tech Blog
    d-kimuson
    d-kimuson 2021/12/27
  • NestJS 製のプロジェクトのテストを@swc/jest で高速化する - Mobile Factory Tech Blog

    NestJS は Node.js 向けのウェブフレームワークです。その特徴として Decorator を用いてクラスやメソッドにアノテーションをする仕組みを提供しています。 例えば API のエンドポイントを定義する場合は次のようなコードを実装します。 import { Controller, Get } from '@nestjs/common'; @Controller('cats') export class CatsController { @Get() findAll(): string { return 'This action returns all cats'; } } 高速な TypeScriptトランスパイラの実装として esbuild や SWC が有名です。今回は SWC の jest binding である @swc/jest を ts-jest の代わりに使

    NestJS 製のプロジェクトのテストを@swc/jest で高速化する - Mobile Factory Tech Blog
    d-kimuson
    d-kimuson 2021/12/17
  • MySQL 5.7 でクエリだけでランキングを実現する方法 - Mobile Factory Tech Blog

    ここ半年、競プロをこつこつ頑張っているエンジニアの id:dorapon2000 です。好きなアルゴリズムは累積和です。 解決したい課題 「MySQL 5.7 内で完結できるように、クエリだけでランキングを取得したい」 データベースのデータを使って調査をする際、ランキングを出したいこと、あるいはランキングを基にした処理をしたいことがあります1。アプリケーション側で集計・ソートして値を取得することもできますが、1回限りの調査の場合、わざわざコードを書くことが億劫です。 MySQL 8.0ではRANK関数が導入されたため、そちらで簡単にランキングを取得できます(記事末尾に参考で記載)。今回は、RANK関数導入以前のMySQL 5.7 で、クエリから一発でランキングを取得することを目指します。 検証環境 MySQL 5.7.36 scoreというテーブルを作成し、1万レコードのscore(0〜9

    MySQL 5.7 でクエリだけでランキングを実現する方法 - Mobile Factory Tech Blog
    d-kimuson
    d-kimuson 2021/12/11
  • 外からやってくる値から TypeScript の型を守るライブラリ・ツールまとめ - Mobile Factory Tech Blog

    こんにちは、新卒エンジニアの id:d-kimuson です 先日 type-predicates-generator という型定義からユーザー定義型ガード・アサーション関数を自動生成するツールをリリースして紹介記事を書いたのですが、感想とかを眺めていたら同じく外部から来た値に安全な型付けをするためのライブラリやツールの情報をいくつも観測しました この辺りのランタイムチェックライブラリの情報ってあまりまとまっていない印象で自分が知らないものもいくつかあったので、調べつつ簡単にまとめられたらなと思ってこのエントリを書きました 外部からやってきた値を型安全にするにはざっくりと 型生成によるアプローチ ランタイムチェック用の独自型を書かせるアプローチ 型情報からランタイムチェック関数を自動生成するアプローチ の 3 つのアプローチがあると思うので、それぞれのアプローチごとに紹介します ① 型定義

    外からやってくる値から TypeScript の型を守るライブラリ・ツールまとめ - Mobile Factory Tech Blog
    d-kimuson
    d-kimuson 2021/12/10
    ランタイム型チェックのライブラリとかとかをまとめました
  • TypeScript の型情報を展開して見やすくする VSCode 拡張機能を作った

    TypeScript の読みにくい型を展開して読みやすくする拡張機能を作りました! 動機 TS を書いてると型が読めないから、変数に束縛して補完で探ってが必要なことが度々あって、展開した型をみれるなにかがないかなーと思っていました TypeScript の CompilerAPI なるものを知ったので、いい感じに型を抜き出して VSCode のツリービューに渡せば良いじゃんって思って調べてみたら同じ試みをされてる方がいらっしゃったのですが、残念ながら断念されてました type-explorer がポシャった話 - sisisin のブログ 端的に言うと、compilerAPIAPI が充実してないから逐次展開するみたいなことはできないそうで ただ、拡張機能開発もやってみたかったというのもあったので、とりあえずダメ元で作ってみたら割と良い感じになったので公開しました 作ったもの Typ

    TypeScript の型情報を展開して見やすくする VSCode 拡張機能を作った
    d-kimuson
    d-kimuson 2021/12/10
  • コミットメッセージにブランチ名を自動挿入する - Mobile Factory Tech Blog

    こんにちは、新卒エンジニアの id:kaoru-k_0106 です 何をしたか 私のチームでは、コミットメッセージの先頭にチケット番号を入れるルールがあります。 例えば、PROJECTNAME-123 〇〇の処理を変更しただと、PROJECTNAME-123の部分がチケット番号です。 最初はこれを手動で入力していたのですが、時々入力を忘れることがあり自動挿入しようと思いました。 ちょうど、トピックブランチ名がチケット番号だったので、ブランチ名を使う方針で実装をしました。 導入手順 その1 Gitのコミットテンプレートを設定する Gitのコミットテンプレートとは、コミットメッセージエディタを開いたときにデフォルトで設定されている文字列です。 この設定は、次のようにテンプレートファイルを作成し、git configで設定できます。 % echo '[branch-name]' > ~/.com

    コミットメッセージにブランチ名を自動挿入する - Mobile Factory Tech Blog
    d-kimuson
    d-kimuson 2021/12/06
  • VSCode で TypeScript の交差型のプロパティを省略せずに見れるようにする - Mobile Factory Tech Blog

    VSCode でホバーして型情報を見ようとすると、交差型はプロパティが展開されません プロパティの型を展開する Mapped Types を通すことで省略せずにプロパティを見ることができます。プロパティが交差型になっていることもあるので、再帰的にプロパティを Mapped Types に通すような型を定義しておいて、通すことでプロパティを全て確認できます type Expand<T> = T extends object ? T extends infer O ? { [K in keyof O]: Expand<O[K]> } : never : T type Temp = Expand<`確認したい型`> 厳密でなくとも簡単にどんなプロパティがあるか把握したいだけなら組み込みの Required や Partial を使うのが手軽です。ただし、あくまでデバッグ用途でそれぞれ省略可能プロ

    VSCode で TypeScript の交差型のプロパティを省略せずに見れるようにする - Mobile Factory Tech Blog
    d-kimuson
    d-kimuson 2021/12/02
  • 1