お雑煮研究会

好きな焼肉は魚

Web Fetch API に準拠した JavaScript Webフレームワーク同士をつなぐ: Hono と React Router の一例

こんにちは。

この記事は UEC Advent Calendar 2025 の 4 日目の記事です。

昨日の記事は id:ushiromiya3 さんの 「天井画や壁画はあるのに床画はないよね」でした。

ykm11.hatenablog.com

自分は学部卒予定というのもあり 修士 / 博士後期課程への解像度が低いので、その世界が垣間見えて興味深かったです。


さて、本題に入ります。 私は普段 TypeScript で Web アプリケーションを書くことが多く、 バックエンドには Hono・フロントエンドには React Router をよく使っています。

Hono - Web framework built on Web Standards

React Router Official Documentation

Hono と React Router はどちらも Web 標準の Fetch API に準拠したランタイムモデルを採用しているため、Hono アプリケーションから React Router アプリケーションへ処理を移譲することができます。

この記事では、その具体的な方法を切り口に、Web Fetch API に準拠した JavaScript Web フレームワーク同士をつなぎ合わせることやその実用性について考えてみたいと思います。

Hono から React Router へ処理を移譲する方法

React Router には createRequestHandler() という API があり、
サーバーサイドのビルド成果物を渡すと次のようなシグネチャの関数を生成します。 ( ※ このシグネチャは簡略化されたものです )

(req: Request) => Promise<Response>

api.reactrouter.com

なんだか fetch() に似たシグネチャですね。 つまり、 createRequestHandlerフレームワークのサーバーサイドの処理を Web Fetch API レベルに抽象化しているといえそうです。

developer.mozilla.org

これにより、バックエンドロジックを記述したアプリケーションに React Router をつないでひとつのアプリケーションとしてデプロイできるようになります。

例えば Hono を使っている場合、このようなコードを書くだけでよいです。

import { createRequestHandler } from "react-router";
import { Hono } from "hono";

const reactRouterHandler = createRequestHandler(
  () => import("./build/server/index.js")
);

const app = new Hono();

// ここに通常の Hono バックエンドロジックを書く

// マッチしなかったリクエストは React Router に委譲する
app.all("*", async (c) => {
  return reactRouterHandler(c.req.raw);
});

export default app;

フレームワーク同士をつないで適材適所で処理を書く

JavaScript の Web フレームワークは基本的にフロントエンドかサーバーサイドのどちらか片方を主軸とするものが多いです。*1

フロントエンドフレームワークは「各ページで UI を高速に描画しユーザーと効率良く堅牢にインタラクションする」方向に進化してきました。 特にルーティングや Request / Response はフレームワークが抽象化しており、内部で様々な最適化が行われています。

そのため、Request / Response を直接触るような Middleware 的な処理を書こうとするとフレームワーク独自の作法に従う必要があります。 例えば Next.js では proxy というしくみが用意されていますね。

nextjs.org

一方でサーバーサイドフレームワークで Request / Response を触れるのは、生い立ちからして当然です。
そのため Middleware 的な処理も、素直なコードで記述できます。

Hono と React Router をつないだ場合、Middleware 的な処理は Hono のレイヤで処理することが可能になります。 すべてのページに BASIC 認証をかけたい場合も、これだけで済むはずです。

import { createRequestHandler } from "react-router";
import { Hono } from "hono";
import { basicAuth } from "hono/basic-auth";

const reactRouterHandler = createRequestHandler(
  () => import("./build/server/index.js"),
);

const app = new Hono();

app.all(
  "*",
  // basicAuth Middleware を React Router に処理を移譲する前に実行している
  basicAuth({ username: "admin", password: "password" }),
  async (c) => {
    return reactRouterHandler(c.req.raw);
  }
);

export default app;

このように、得意分野が異なるフレームワークをつなぎ合わせることで、行いたい処理をメンタルモデルに合った箇所に記述できるようになります。

新たに発生する課題

ここまで、フレームワークを Web Fetch API レベルでつなぐ利点を説明してきました。
しかし、実際には Web Fetch API レベルに抽象化されたフレームワーク同士をつなぐだけでは、アプリケーションを運用するには不十分です。

先述したような Hono と React Router をつなぐ例で、ユーザー認証のあるアプリケーションを作る場合を考えてみます。
ログインが必要なページでは、例えば次のような順番で処理を進めたいはずです。

  1. Hono 側で Cookie などを検証してユーザーの認可・認証を行う
  2. 認可・認証を通過した場合のみ React Router を呼び出す
  3. React Router 側のページコンポーネントで、ユーザー情報が必要な UI を描画する

このとき、React Router 側でユーザーの情報を取り出すために、もう一度 Cookie を検証しないといけなかったら面倒です。
理想的には、Hono から React Router にユーザー情報を渡して、React Router 側では直接値にアクセスできたほうがよいでしょう。

つまりフレームワークをつないで実用的なアプリケーションを作る上では、 フレームワーク間で JavaScript の値をやりとりできる 必要性がありそうです。

Hono から React Router に JavaScript の値を渡す

Hono と React Router をつなぐ場合、このような要求に応えることが可能です。

冒頭で紹介した React Router の createRequestHandler() で生成される関数のシグネチャは、ここまで簡略化した形で書いていましたが、実際にはこのようになっています

( request: Request,
  loadContext?: MiddlewareEnabled extends true
    ? RouterContextProvider
    : AppLoadContext,
) => Promise<Response>;

今回は MiddlewareEnabled が true の場合に絞って説明しますが、 RouterContextProvider というのは React Router v8 で Middleware が導入されるのに合わせて追加される予定の概念です。

reactrouter.com

React Router における RouterContext というのは loader や Middleware などのサーバーサイドの処理の間で値を共有するためのしくみで、RouterContextProvider は各 RouterContext を束ねて管理しています。

createRequestHandler()で生成した関数の第 2 引数に RouterContextProvider を渡せるということは、Hono 側から JavaScript の値を RouterContext として React Router に渡せそうですね。

ということでそれを実際に試した結果を GitHub で公開しています。 この例は実際のアプリケーションとやや遠いものの、応用すると Hono 側で認証したユーザー情報を React Router に渡すなどが可能です。 プライベートで作っているアプリケーションではこの構成を試していますが、一定程度実用的だと感じています。

github.com

まとめ

Web Fetch API レベルで JavaScript の Web フレームワークをつなぐのは実用的なのか、という問いについて、Hono と React Router を例に考えてみました。

個人開発の規模感では、この構成は自分のメンタルモデルにかなり合っていて、書いていて違和感がありません。 バックエンドは Hono、フロントエンドは React Router と、各フレームワークが得意とする分野に注力できるのが気に入っている点です。

とはいえ、これはあくまでプライベートの開発規模での話であり、実際に業務レベルのプロダクトで使った場合、フレームワーク間のデバッグやログ収集といった運用まわりの課題が発生するはずです。

それでも、Web 標準のインターフェイスフレームワークをまたいで処理を接続できるのは新鮮な体験で、触っていて楽しいと感じました。 今後もこういった土管細工を楽しんでいきたいですね。

最後に

UEC Advent Calendar 2025 の明日の記事はちゅまよさんの「 DIY望遠鏡 Hadley telescopeを作った話」です。 お楽しみに!

おわり

おわり

*1:Hono のようなフルスタック志向のフレームワークがあることは理解していますが、2025 年 12 月現在ではどちらかに主軸をおいたものが多数であると認識しています。

Claude Code の Hooks をTypeScript で軽快に書く

Claude Code の Hooks をかなり使っている。

Hooks は Context File や Slash Command に頼らず、AI に対して機械的・自動的に介入できるしくみだ。 静的解析の自動実行など、特定の状況で素早くフィードバックを返したいケースに向いており、世間でも活用プラクティスが紹介されている。

azukiazusa.dev

zenn.dev

ただ、公式ドキュメント(https://code.claude.com/docs/en/hooks)にもあるように、Hooks を真面目に書こうとすると次の処理が必須になる。

  • stdin に渡される JSON をパース
  • Hook でやりたい任意の処理を走らせる
  • AI へのフィードバック内容に応じて適切な終了コードと出力でプロセスを終了させる

このあたりを素朴に書くと、どうしてもボイラープレートが多くなる。
「便利だが毎回書きたくはない」という状態だったため、仕様に対する軽量な wrapper ライブラリを作って数カ月使っている。

github.com

とにかく公式が求める挙動を手早く書ければよいので、シュッと作れて楽しかった。

PreToolUse / PostToolUse イベントに関してはツール固有の型定義が欲しくなりそうだったのでユーザー側で型を自由に拡張できるようにしてある。 個人的にかなり入れてよかったしくみで、実際この機能を使っていただいたブログも上がっているので読みは悪くなさそうだと思う。

suntory-n-water.com

Claude Code 本体との型の差分チェックも自動化してあるので、メンテナンスも既存の CI さえ通せれば安心してバージョンを上げられることになっていてかなり効率よく作れたと感じる。型プログラミング / 型テストのいい勉強になった。

実は @berlysia さんがこのライブラリを結構使っている気配を感じているので、今週あたりで使い方を見ながら export してあると嬉しい型を export するなど改善していこうと思っている。

おわり

おわり

2025.11 読書ログ

11 月もある程度本を読むことに成功したのでメモを残す。

読んだ

楽園追放

2026 年公開に向け新作映画を制作しています、という告知を見て知った。

せっかくなのでノベライズから読んでみるかということで読んでみた。 自分は SF は一旦文字で読んでから映像で観るという順で楽しむことが多く、今回もその流れだ。

SF の王道を行く展開で、戦闘描写にもかなり気合が入っていた。 先に文字で戦闘シーンを読むと映像が 2 倍くらい楽しめるので、12 月中に原作映画の方も視聴したい。

刊行から 10 年以上経っているのもあって東京の書店を相当探したのもあり、在庫がある店舗が見つかったときはたいへん嬉しかった。

booklog.jp

なお、直接の続編となる楽園追放 2.0 および、原作の前日譚である楽園追放 Mission.0 もまだ読めていないのでこっちもなんとか...読みたい...

死なない少女の屍体は、ここに。 1

ファンタジーとミステリが混ざっている世界観が好みなので読んだ。

ミステリとしてはかなり人間にフォーカスが寄っており、犯人自体は推測できるが動機の部分を読み切るのがやはり難しかった。 異能力が絡むミステリで完全に読みを通せたことがまだないのでそのうち読みを通して最高の読書体 すでに 2 巻の刊行が決まっており、状況が一変したストーリーが楽しめそうなので期待している。

booklog.jp

東の魔女のあとしまつ 上

「何を言っても儚げになってしまう」人を初めて見た。 今までにあまり読んだことがないキャラクター性で、独特のテンポで物語が進むので引き込まれた。

終始お互いを勘違いしている師弟がとても良く、弟子同士のやり取り含む日常生活を垣間見ながら 少しずつストーリーが噛み合っていくのが心地よかった。

次巻で展開が一区切りするとのことなので早く... 続きを...

https://booklog.jp/item/1/4803021996

スパイ教室 14

ついに新章開幕ということで、革命編を乗り越えて大きな成長を遂げた灯のメンバーが描かれた。 今回は三人称視点で話が進行することもあり、 13 巻時点と比べると不気味であり真意が読めなすぎて畏れを感じた。

詳しく言うとネタバレになるので控えるが、灯の新たな決意とともに物語は大きく動き出した。 1 巻発売からずっと見守ってきていていよいよクライマックスなので期待がどんどん高まっている。次巻も頼みます!!!!

booklog.jp

サイレント・ウィッチ 外伝

9 月に原作の Web 版を読んでいたが、外伝があることに気づいたので一気読みした。

原作より後の次巻軸を舞台に、裏主人公の〇〇が人生を少しずつ進めていく様子が、単行本 1 冊 / 章くらいのペースで描かれている。 なお、実際には原作の 2 倍くらい量がある。え?????どういうことなんだ........

平穏な生活を手にした後もドタバタに巻き込まれながら、七賢人としての頼りがいがあるモニカをたくさん読めて最高の外伝です。 他にも成長したセレンディア学園自体の面々もたくさん描かれていて世界観を大きく広げてくれる作品なので、原作しか読んでいないよ、という方はぜひ!

https://ncode.syosetu.com/n5194gp/

12 月に読みたい

このブログを書いている今日、わたなれのアニメと映画を一気見してそのままわたなれの原作を全巻買ってきたのでひとまずわたなれを読みます。

個人的に最近面白い YouTube

最近謎の動画にハマっているのでメモる

漢 Kitchen

日本を代表するクラスの HIP HOP MC である漢さんが、毎回様々な MC / ラッパーの方々をゲストに迎えながら料理をしている番組... なのだが、 あまりにも絵面が面白すぎる

料理をしているはずなのに話題がアングラすぎるし、普段の音楽シーンではなさそうな表情や喋り方が垣間見えて一生笑いながら見れる。 あと会話の各所にアドリブと鳴き声が挟まってくるのがじわじわくる

初回の 20 秒くらいでだいたい雰囲気がわかるので一回見てみることをオススメする。

youtu.be

BD Bus Vlogger

バングラデシュのバスの車載動画をひたすら上げているチャンネル。 といっても平和な車載動画ではなくて、路線バス同士が激しいバトルを繰り広げる様子がアップされている。

永遠にクラクションが鳴っているし車間は無だし、乗客もノリノリでバトルを楽しんでいるのが本当に良い。

最近は研究中とか仕事中にたまに流しているが、宅配などを受け取る際にうっかり動画を止め忘れると家の中から無限にクラクションが聞こえる異常住人になってしまうので注意が必要。

youtu.be

こたけ正義感のジャッジアイズ実況

現役弁護士で芸人を兼業しているこたけ正義感さんが、キムタク演じる弁護士が主人公のアクション RPG 「ジャッジアイズ」を実況するシリーズ。

明らかに本職しかできないツッコミを織り交ぜつつ軽快にゲームが進行していくので笑顔で見られる。

他にも逆転裁判シリーズの実況もされていて、こちらも当然面白いので必見。

youtu.be

おわり

おわり

2025.10 ふりかえり

10 月のふりかえりを書こうと思っていたが普通に 11 月半ばになってしまった

身体

8 月頃から自覚症状があるレベルで精神に不調をきたしていて一時は家から出られない状態になっていた。 が、10 月はまともに家から出られるようになってきたのでかなり回復している。

sushichan044.hateblo.jp

一方で、今もまだ本調子が戻っているわけではなく、頭がぼんやりとしか回らない・熱がうまく入らず集中できないなどが発生している。 原因としては、大学に上がってから自己を顧みない生活を続けたせいで心身に負担がかかりすぎたことが大きいと思っている。セルフネグレクトと呼ばれているあれだろう。

最近は運動・睡眠・食事など少しずつ気を使うようにしているが、効果が出てくるのは中長期的なスパンだと思うので、良くなることを祈って続けるしかない。

id:Windymelt 氏のセルフケアのくだりについては共感できる部分しかなく、自分を大事にしないとな、と再認識した。

blog.3qe.us

学業

なんとか中間発表を乗り切ったものの、依然として卒論の進捗は良くない。 糸口は見えているものの、理論系の分野かつパズル的な発想が必要な部分があるので、なかなか思うように進んでいない現実がある。

とはいえ卒業しないといけないのでやっていくしかない

技術系

OSS など

調子が良くなかったこともあって、あまりなにか言えるような成果物やコントリビューションは発生していない。

最近はあまり時間を取れる状態ではないので、大学と引っ越しが終わるまでは控えめにバグを治すくらいしかできなそう。

イベント

Hono Conference 2025

さまざまなご縁があり、Hono Conference 2025 にコアスタッフとして参加した。

主に CfP を見る・片方のトラックのセッション進行をするなど、プログラム周りの部分を担当していた。

当日は大盛況で、セッションも熱のあるものばかりで総じてよいカンファレンスだった。 あとから自分が進行していなかった側のトラックのセッションも見たが、パワフルな事例が多く Hono に関わる人々の輪が広がっているのが良いな、と思った。

honoconf.dev

findy-code.io

Vue Fes Japan 2025

こちらはスタッフではなく純粋に興味があったので参加した。

個人的にとても嬉しかったこととして Daniel Roe 氏と対面で話せたことがある。

自分が初めて単なるバグ修正でない PR を送るようになった OSS が unjs で、Daniel 氏にレビューいただいたこともあるので感謝を伝えられて良かった。

Had the chance to speak with @danielroe.dev in person at Vue Fes — that really made my day! `unjs` has been incredibly helpful across several of my projects, and I’ve started contributing small PRs too. Looking forward to continuing to be involved with you and the team on GitHub and beyond!

sushichan044 (@sushichan044.dev) 2025-10-26T04:38:55.316Z
bsky.app vuefes.jp

文化

書籍

別に記事を書いたのでこちらで。

sushichan044.hateblo.jp

音楽

暴力的にカワイイ 2025

2023 / 2024 と、行きたいと思っていながら予定が被ったりしていて逃していたのでついに参加に成功した。やったね。 デカい音、酒、肉、久々に会う先輩など、最高尽くしの 1 日だった。

KMNZ に目星をつけていたので、夕方頃までは談笑しながら散策したり飲酒しつつ、途中から KMNZ が来る側のステージに近づいて... という感じの行動をしていた。

KMNZ の持ち時間はしっかりブチ上がって、数日前に公開されていた新曲も予習していたのでバッチリノレて大満足の 30 分だった。やっぱ音楽いいな。

https://cultureofasia.zaiko.io/e/violentcute25

M3 2025 秋

前日が Vue Fes で体に来ており、同人音楽への気持ちもすこし落ち着いていたので今年は通販なり委託で少量を購入するのみにした。

相変わらず Room97 さんと Isle & Notes さんはよく聴いている。

room97.booth.pm

isleandnotes0002.netlify.app

おわり

おわり

2025.10 読書ログ

10 月もある程度本を読むことに成功したのでメモを残す。

なお、先月にこう言ったものの実際には割と違う本を読んでいそうだった。

9 月は百合小説とラブコメの発売ラッシュだったので、手元に 20 冊ほど積んでしまっている。 来月はこのあたりをガツガツ読むぞ。

2025.09 読書ログ - お雑煮研究会

読んだ

あそびのかんけい

別記事を書いてるので省略。周囲に勧めたら割と好評だった。

3 巻待ってます。

sushichan044.hateblo.jp

魔法使いの引っ越し屋シリーズ

生活感のある魔法ファンタジーが好きなので、偶然見かけたこちらも購入し一気読みした。

オムニバス形式だが少しずつ話が繋がっており、最後まで読むとそうだったのか!となる腹落ちがあった。 2 巻通して読んだときに本当によく構成が練られていて、かなりよくできたファンタジーだと思う。おすすめです。

kadokawabooks.jp

kadokawabooks.jp

作者の坂石遊作先生繋がりだと、直近で『才女のお世話』シリーズのアニメ化が決まっているので早めに原作を読みたいな、と思っている。

異世界食堂 5 / 6 巻

もともと中学生の頃に 4 巻まで読んでいたのだが、ふと思い出して調べると 2 冊続刊が出ていたので購入。

こちらもオムニバス形式で、数十年のスパンで物語が繋がっていって各所で暖かい出会いが芽吹いている。 あと本当に料理の描写がきめ細かいのが好みのポイントだ。普通に文字を読んでいるのにお腹が空いてくる良い小説です。

books.shufunotomo.co.jp

books.shufunotomo.co.jp

恋に至る病

ふらっと入った書店で見かけ、そういえば読んでいないな、と思ったので読んだ。 タイムリーに作者からの補足本である「病に至る恋」が出ていて、ちょうどいいタイミングだったかもしれない。( こっちはまだ読めてないが )

判断材料は最初から最後まであったものの、結局寄河景の真意はなかなか読み切れないな、と思ってまだ自分の中では答えを保留にしている。 一定自分の中で答えが出たらスピンオフと向き合おうと思う。

mwbunko.com

アフタヌーンティーはいかがですか? 私と先輩の、不純で一途なふたり暮らし

詳しく感想を書くと生々しくなってしまうのだが、今まで読んだことがある百合作品の中でかなり生活感に焦点が当たっているように感じた。 ひとつひとつの描写解像度が非常に高く、筆者の桃田ロウ先生が「三度の飯より百合が好き」というのはおそらく伊達ではないのだろう、と思う。

カクヨムで完結まで読めるので、ぜひ読んでいただきたい。

www.kadokawa.co.jp

【書籍発売中&コミカライズ決定】アフタヌーンティーは如何ですか?(桃田ロウ) - カクヨム

11 月に読みたい

読みたいというかもう現在進行系で読んでいるが、ミステリと SF が結構積まれているのでそろそろ読んでいきたい。

最近は出先でふらっと本屋に入って本を買う、という行動が増えてきているので積読は増えていく一方である。

「あそびのかんけい」1・2 巻を読んだ

9 月は百合小説とラブコメの発売ラッシュだったので、手元に 20 冊ほど積んでしまっている。 来月はこのあたりをガツガツ読むぞ。

2025.09 読書ログ - お雑煮研究会

ということで今月はラブコメと百合の強化月間に指定されている。

早速気になっていた「あそびのかんけい」を読んだのだが、今すぐ誰かに読ませたくなったので感想を書くなどしていく。

※記事執筆で発売されている 2 巻までの内容です。また、公開されているあらすじ相当のネタバレを含みます。

booklog.jp

booklog.jp

感想

実は寝る前に 2 巻続けて読んだのだが、プロットが面白すぎて引き込まれてしまい眠れなくなったので深夜に書いている。

本作は荻窪のとあるボードゲームカフェを舞台に、店長代理である主人公と同僚・客など様々な立場で主人公にかかわるヒロインたちのラブコメだ。 ボードゲーム自体も単なる演出上のモチーフではなく、ストーリー展開や恋模様そのものを示唆する形で随所に登場する。

何度もボードゲームを囲むうちに、登場人物がそれぞれの「あそびのかんけい」を変えるべく動き出していくのだが、ここからが本作の見せ場。 関係性の盤面を巡って駆け引きを繰り広げるなかで、各々の思惑と秘密の伏せ札が絡み合っていくというボードゲームそのものの面白さがあった。 特に 2 巻からは、少し違った立ち位置の人物も現れてかき乱されていく展開の中でそれぞれの一手がハマっていく気持ち良さを感じた。 このプロット作るの絶対楽しいだろうし、思いつける気がまったくしない。

ブコメを読んでいるはずなのに気づいたら作者と恋模様の盤面を囲んで探り合いをしていた、そんな刺激的な読書体験がしたい方にはもちろん、 すべてのラブコメ好きにおすすめできる本当に良い作品なので今後が楽しみだ。

おわり

作者と展開の探り合いをしたうえで、あとがきを読みながら気持ちをまとめるこの時間も「感想戦」というやつなので、 つくづくおもしろいボードゲームブコメだと思う。

おわり