社内オペレーション改善のためのTypeScript
この記事は MOSH Advent Calendar 2025 5日目の記事です。
TSKaigi Hokuriku 2025 のスポンサーセッションにて発表させていただいた「社内オペレーション改善のためのTypeScript」の完全版です。当日は4分枠で発表したこともあり、伝えきれない部分があったのでスライドの記述に追記する形でこの記事を公開しています。
また、LINE関連の実装は別記事にてまとめていますので合わせて読んでみてください。
問い合わせ数の増加を解決する
自社プロダクトである MOSH のユーザー数増加に伴って、問い合わせ数も日々増加しています。
このまま増えていくと全てを捌き切ることができなくなってしまうため、問い合わせ情報を事前に整理した上でヘルプデスクに連携する仕組みを構築しました。
既存の問い合わせ窓口の仕組み
- ヘルプデスクSaaSにすべての問い合わせを集約
- サイト内に設置したフォーム、LINE公式アカウント、メールなど複数の窓口が存在
既存の仕組みはヘルプデスク標準の外部連携機能やWebhookのみを使って構築されており、問い合わせデータを使いやすい状態に加工するなど全くしていない状態です。
既存システムの課題
外部からの問い合わせはカスタマイズできず、カテゴリ、ユーザー属性などが取り切れていない
LINEなど外部メッセンジャーからの問い合わせはテキスト本文のみが登録されます。
この問い合わせはカテゴリやタグなどを付けるタイミングがなく、担当者が内容を確認して設定する必要があります。
「手作業による運用コストの増加」「問い合わせ元が違うとデータ粒度が異なってしまう」という2つの問題を抱えています。

解決策を考える
この問題について「中間レイヤーを用意しプラットフォームごとの差分を吸収」することにしました。今回のケースではLINEを対象としているため、Messaging API を利用してLINE上で双方向のコミュニケーションが取れるように実装しています。
改修後の仕組み
Hono で実装した中継サーバがLINEからのWebhookを受信し、振り分けに必要な情報をLINE上で質問します。情報が揃ったタイミングでヘルプデスクに問い合わせデータを登録するという流れに変更しました。

技術選定について
- Hono (TypeScript)
- webフレームワーク
- Cloudflare Pages/Workers
- 実行環境
-
line/bot-sdk
- Messaging APIの呼び出しに利用
Hono
- TypeScript対応されている
- やりたいことがシンプルなのでフレームワークもシンプルにしたい
- ルーティングとfetchさえあればどうにかなるくらいの処理しか現状ない
- サーバレス環境で実行可能
- MOSHでは実行環境にCloudflareやLambdaを採用しているため
主な選定理由は上記です。
またMOSHではフルスタックTypeScriptでのプロダクト開発を推進している最中で、その波に乗る意味でもTypeScriptで書けるフレームワークが良いだろうと判断しました。
Cloudflare
- サーバレスでの実行環境の構築完了までの手間が少ない
- 開発に必要なデプロイ、プレビュー環境などのセットアップが簡単
- 前述したHonoとの親和性が高い
Cloudflare or AWS Lambdaという選択肢の中で今回は管理の容易なCloudflareを選定しています。
TypeScriptによる恩恵
型があることによって特に良かったと感じた部分について紹介します。
外部APIをTypeSafeに扱う
今回のケースではヘルプデスク側のAPIにPOSTしてデータ登録する必要があるのですが、その際にデータの形式が正しいのか、正しく登録できたか、などをチェックしなければいけません。
これらを事前に型定義した上で実装すれば実装中にミスがあってもTypeErrorの表示で気付くことができ、またどのようなインタフェースになっているかが型定義を確認するだけで把握可能です。
バリデーションの実施
Zodを使用してTypeSafeなバリデーションを実装可能です。
LINEからの特定のメッセージタイプのみ処理したいのであればそれ用にバリデーションを用意し、想定したメッセージタイプでなければバリデーション失敗→処理終了、といった実装が簡単にできます。
また、HonoのドキュメントにZodとの連携方法の記載があり非常に分かりやすいのも良かったです。
さいごに
小さい機能を提供するのに優れた構成でした。
規模が大きくなってきた時にどうなるかはまだ体験できておらず知見がありませんが、早く作って本番に出したいというケースにおいてHonoとCloudflareの組み合わせは非常に体験が良いです。
Discussion