<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[ryohei oyamaさんのフィード]]></title><description><![CDATA[Zennのryohei oyamaさん（@mountain1009）のRSSフィードです]]></description><link>https://zenn.dev/mountain1009</link><image><url>https://static.zenn.studio/user-upload/avatar/4c885bc40b.jpeg</url><title>ryohei oyamaさんのフィード</title><link>https://zenn.dev/mountain1009</link></image><generator>zenn.dev</generator><lastBuildDate>Sat, 20 Jun 2026 02:38:01 GMT</lastBuildDate><atom:link href="https://zenn.dev/mountain1009/feed" rel="self" type="application/rss+xml"/><language><![CDATA[ja]]></language><item><title><![CDATA[もうポート番号を覚えなくていい。Portless × git worktree で複数ブランチを同時に動作確認する]]></title><description><![CDATA[
 はじめに
ローカル開発をしていて、こんな経験はありませんか？

「フロントは :3000 で、APIは :8080 で、管理画面は……何番だったっけ？」
別のプロジェクトを立ち上げたら EADDRINUSE でポートが被った
ブラウザのタブを開きっぱなしにしていたら、別のプロジェクトに繋がっていた

ポート番号に依存した開発は、地味にストレスです。
今回紹介する Portless は、Vercel Labs が公開しているツールで、ポート番号の代わりに 名前付きの .localhost URL を使えるようにしてくれます。
https://github.com/vercel-labs...]]></description><link>https://zenn.dev/mountain1009/articles/c9a7ae351252ac</link><guid isPermaLink="true">https://zenn.dev/mountain1009/articles/c9a7ae351252ac</guid><pubDate>Wed, 25 Feb 2026 01:00:01 GMT</pubDate><enclosure url="https://res.cloudinary.com/zenn/image/upload/s--ug9Z4Vuc--/c_fit%2Cg_north_west%2Cl_text:notosansjp-medium.otf_55:%25E3%2582%2582%25E3%2581%2586%25E3%2583%259D%25E3%2583%25BC%25E3%2583%2588%25E7%2595%25AA%25E5%258F%25B7%25E3%2582%2592%25E8%25A6%259A%25E3%2581%2588%25E3%2581%25AA%25E3%2581%258F%25E3%2581%25A6%25E3%2581%2584%25E3%2581%2584%25E3%2580%2582Portless%2520%25C3%2597%2520git%2520worktree%2520%25E3%2581%25A7%25E8%25A4%2587%25E6%2595%25B0%25E3%2583%2596%25E3%2583%25A9%25E3%2583%25B3%25E3%2583%2581%25E3%2582%2592%25E5%2590%258C%25E6%2599%2582%25E3%2581%25AB%25E5%258B%2595%25E4%25BD%259C%25E7%25A2%25BA%25E8%25AA%258D%25E3%2581%2599%25E3%2582%258B%2Cw_1010%2Cx_90%2Cy_100/g_south_west%2Cl_text:notosansjp-medium.otf_37:ryohei%2520oyama%2Cx_203%2Cy_121/g_south_west%2Ch_90%2Cl_fetch:aHR0cHM6Ly9zdGF0aWMuemVubi5zdHVkaW8vdXNlci11cGxvYWQvYXZhdGFyLzRjODg1YmM0MGIuanBlZw==%2Cr_max%2Cw_90%2Cx_87%2Cy_95/v1627283836/default/og-base-w1200-v2.png?_a=BACMTiAE" length="0" type="false"/><dc:creator>ryohei oyama</dc:creator></item><item><title><![CDATA[TanStack QueryのkeepPreviousDataでテーブルのページ切り替えが快適になった話]]></title><description><![CDATA[
 テーブルのページ切り替えで起きるUXの問題
テーブルにページネーションを実装していると、こんな挙動に当たることがあります。
「次のページ」ボタンを押した瞬間に、テーブルのデータが一度消える。
そのタイミングで画面が上に飛び、ページャーを探してまた下にスクロールすることになる。
これは地味にストレスです。

 なぜこの問題が起きるのか
TanStack Query（React Query）は、queryKey が変わると別クエリとして扱います。
そのため、ページ番号を queryKey に入れていると、ページ切り替えの瞬間に data が undefined になってローディングに戻り...]]></description><link>https://zenn.dev/mountain1009/articles/e988303631163a</link><guid isPermaLink="true">https://zenn.dev/mountain1009/articles/e988303631163a</guid><pubDate>Tue, 10 Feb 2026 01:00:01 GMT</pubDate><enclosure url="https://res.cloudinary.com/zenn/image/upload/s--1wbUuLPs--/c_fit%2Cg_north_west%2Cl_text:notosansjp-medium.otf_55:TanStack%2520Query%25E3%2581%25AEkeepPreviousData%25E3%2581%25A7%25E3%2583%2586%25E3%2583%25BC%25E3%2583%2596%25E3%2583%25AB%25E3%2581%25AE%25E3%2583%259A%25E3%2583%25BC%25E3%2582%25B8%25E5%2588%2587%25E3%2582%258A%25E6%259B%25BF%25E3%2581%2588%25E3%2581%258C%25E5%25BF%25AB%25E9%2581%25A9%25E3%2581%25AB%25E3%2581%25AA%25E3%2581%25A3%25E3%2581%259F%25E8%25A9%25B1%2Cw_1010%2Cx_90%2Cy_100/g_south_west%2Cl_text:notosansjp-medium.otf_37:ryohei%2520oyama%2Cx_203%2Cy_121/g_south_west%2Ch_90%2Cl_fetch:aHR0cHM6Ly9zdGF0aWMuemVubi5zdHVkaW8vdXNlci11cGxvYWQvYXZhdGFyLzRjODg1YmM0MGIuanBlZw==%2Cr_max%2Cw_90%2Cx_87%2Cy_95/v1627283836/default/og-base-w1200-v2.png?_a=BACMTiAE" length="0" type="false"/><dc:creator>ryohei oyama</dc:creator></item><item><title><![CDATA[miseのタスクランナーで開発URLを賢く開く]]></title><description><![CDATA[
 課題：開発時のURL管理が面倒
開発サーバーを立ち上げるたびに、いくつかのURLをブラウザで開く作業が発生します。


http://localhost:3001 - メインのWebアプリ

http://localhost:3002 - 管理画面

http://localhost:8025 - Mailpit（メール確認用）

https://local.drizzle.studio - Drizzle Studio（DB管理）

毎回手で開くのは面倒です。とはいえ open で一気に開くと、すでに開いているタブまで重複して開いてしまうのが困りもの。
サーバー再起動のたびにタブが...]]></description><link>https://zenn.dev/mountain1009/articles/afc49ddfc0214d</link><guid isPermaLink="true">https://zenn.dev/mountain1009/articles/afc49ddfc0214d</guid><pubDate>Tue, 27 Jan 2026 00:00:01 GMT</pubDate><enclosure url="https://res.cloudinary.com/zenn/image/upload/s--AvAyAm5M--/c_fit%2Cg_north_west%2Cl_text:notosansjp-medium.otf_55:mise%25E3%2581%25AE%25E3%2582%25BF%25E3%2582%25B9%25E3%2582%25AF%25E3%2583%25A9%25E3%2583%25B3%25E3%2583%258A%25E3%2583%25BC%25E3%2581%25A7%25E9%2596%258B%25E7%2599%25BAURL%25E3%2582%2592%25E8%25B3%25A2%25E3%2581%258F%25E9%2596%258B%25E3%2581%258F%2Cw_1010%2Cx_90%2Cy_100/g_south_west%2Cl_text:notosansjp-medium.otf_37:ryohei%2520oyama%2Cx_203%2Cy_121/g_south_west%2Ch_90%2Cl_fetch:aHR0cHM6Ly9zdGF0aWMuemVubi5zdHVkaW8vdXNlci11cGxvYWQvYXZhdGFyLzRjODg1YmM0MGIuanBlZw==%2Cr_max%2Cw_90%2Cx_87%2Cy_95/v1627283836/default/og-base-w1200-v2.png?_a=BACMTiAE" length="0" type="false"/><dc:creator>ryohei oyama</dc:creator></item><item><title><![CDATA[「自分のPCでは動くのに…」を防ぐnpmの落とし穴と対策]]></title><description><![CDATA[
 はじめに
ローカルでは通るのに、GitHub Actionsだけ落ちる。これ、あるあるです。
Rollup failed to resolve import "lucide-react"
原因の定番は ホイスティング と Phantom Dependencies（幽霊依存）。npmの「便利さ」の裏にある罠ってやつです。

 ホイスティングとは
npmやYarnは node_modules をできるだけフラットにして、重複を減らします。これがホイスティング（hoisting）です。

 ホイスティングのメリット



メリット
説明




ディスク容量の節約
重複パッケージを1つにま...]]></description><link>https://zenn.dev/mountain1009/articles/f5b73198393cca</link><guid isPermaLink="true">https://zenn.dev/mountain1009/articles/f5b73198393cca</guid><pubDate>Mon, 26 Jan 2026 00:00:05 GMT</pubDate><enclosure url="https://res.cloudinary.com/zenn/image/upload/s--MQTWeHX2--/c_fit%2Cg_north_west%2Cl_text:notosansjp-medium.otf_55:%25E3%2580%258C%25E8%2587%25AA%25E5%2588%2586%25E3%2581%25AEPC%25E3%2581%25A7%25E3%2581%25AF%25E5%258B%2595%25E3%2581%258F%25E3%2581%25AE%25E3%2581%25AB%25E2%2580%25A6%25E3%2580%258D%25E3%2582%2592%25E9%2598%25B2%25E3%2581%2590npm%25E3%2581%25AE%25E8%2590%25BD%25E3%2581%25A8%25E3%2581%2597%25E7%25A9%25B4%25E3%2581%25A8%25E5%25AF%25BE%25E7%25AD%2596%2Cw_1010%2Cx_90%2Cy_100/g_south_west%2Cl_text:notosansjp-medium.otf_37:ryohei%2520oyama%2Cx_203%2Cy_121/g_south_west%2Ch_90%2Cl_fetch:aHR0cHM6Ly9zdGF0aWMuemVubi5zdHVkaW8vdXNlci11cGxvYWQvYXZhdGFyLzRjODg1YmM0MGIuanBlZw==%2Cr_max%2Cw_90%2Cx_87%2Cy_95/v1627283836/default/og-base-w1200-v2.png?_a=BACMTiAE" length="0" type="false"/><dc:creator>ryohei oyama</dc:creator></item><item><title><![CDATA[コーディングスタイルにこだわりがない僕が @antfu/eslint-config に乗っかる理由]]></title><description><![CDATA[
 はじめに
正直に言います。僕はコーディングスタイルにこだわりがありません。
セミコロンあり？なし？インデントは2スペース？4スペース？シングルクォート？ダブルクォート？
...どっちでもいいです。
でも、だからこそ思うんです。
「強いエンジニアが作ったルールに乗っかった方がよくない？」

 @antfu/eslint-config とは
Anthony Fu が作った ESLint の設定プリセットです。
Anthony Fu は Vue や Vite のコアチームメンバーで、VueUse、Slidev、UnoCSS など数々の人気 OSS を生み出しているエンジニアです。彼のプロジ...]]></description><link>https://zenn.dev/mountain1009/articles/e942797f49a86b</link><guid isPermaLink="true">https://zenn.dev/mountain1009/articles/e942797f49a86b</guid><pubDate>Wed, 24 Dec 2025 00:00:01 GMT</pubDate><enclosure url="https://res.cloudinary.com/zenn/image/upload/s--EbWD53QW--/c_fit%2Cg_north_west%2Cl_text:notosansjp-medium.otf_55:%25E3%2582%25B3%25E3%2583%25BC%25E3%2583%2587%25E3%2582%25A3%25E3%2583%25B3%25E3%2582%25B0%25E3%2582%25B9%25E3%2582%25BF%25E3%2582%25A4%25E3%2583%25AB%25E3%2581%25AB%25E3%2581%2593%25E3%2581%25A0%25E3%2582%258F%25E3%2582%258A%25E3%2581%258C%25E3%2581%25AA%25E3%2581%2584%25E5%2583%2595%25E3%2581%258C%2520%2540antfu%252Feslint-config%2520%25E3%2581%25AB%25E4%25B9%2597%25E3%2581%25A3%25E3%2581%258B%25E3%2582%258B%25E7%2590%2586%25E7%2594%25B1%2Cw_1010%2Cx_90%2Cy_100/g_south_west%2Cl_text:notosansjp-medium.otf_37:ryohei%2520oyama%2Cx_203%2Cy_121/g_south_west%2Ch_90%2Cl_fetch:aHR0cHM6Ly9zdGF0aWMuemVubi5zdHVkaW8vdXNlci11cGxvYWQvYXZhdGFyLzRjODg1YmM0MGIuanBlZw==%2Cr_max%2Cw_90%2Cx_87%2Cy_95/v1627283836/default/og-base-w1200-v2.png?_a=BACMTiAE" length="0" type="false"/><dc:creator>ryohei oyama</dc:creator></item><item><title><![CDATA[パッケージマネージャーでもう迷わない。ni で開発体験を爆上げする]]></title><description><![CDATA[複数のプロジェクトを行き来していると、「この案件は npm だったっけ？ pnpm だっけ？ いや、最近 bun に変えたんだっけ……？」と迷うことはありませんか？
僕は日々いろんな案件に入っていますが、プロジェクトメンバーに「これ便利だよ！」っていつもおすすめしているツールがあります。それが ni です。

 ni とは？
ni は、僕が昔から愛用させてもらっている Anthony Fu（@antfu）さんの OSS の一つで、パッケージマネージャーのラッパーツールです。
最大の特徴は、プロジェクト内のロックファイルを自動で判別し、適切なパッケージマネージャーのコマンドを実行してくれる...]]></description><link>https://zenn.dev/mountain1009/articles/21ea94fa1e7e08</link><guid isPermaLink="true">https://zenn.dev/mountain1009/articles/21ea94fa1e7e08</guid><pubDate>Tue, 23 Dec 2025 13:19:23 GMT</pubDate><enclosure url="https://res.cloudinary.com/zenn/image/upload/s--J4iAKLjL--/c_fit%2Cg_north_west%2Cl_text:notosansjp-medium.otf_55:%25E3%2583%2591%25E3%2583%2583%25E3%2582%25B1%25E3%2583%25BC%25E3%2582%25B8%25E3%2583%259E%25E3%2583%258D%25E3%2583%25BC%25E3%2582%25B8%25E3%2583%25A3%25E3%2583%25BC%25E3%2581%25A7%25E3%2582%2582%25E3%2581%2586%25E8%25BF%25B7%25E3%2582%258F%25E3%2581%25AA%25E3%2581%2584%25E3%2580%2582ni%2520%25E3%2581%25A7%25E9%2596%258B%25E7%2599%25BA%25E4%25BD%2593%25E9%25A8%2593%25E3%2582%2592%25E7%2588%2586%25E4%25B8%258A%25E3%2581%2592%25E3%2581%2599%25E3%2582%258B%2Cw_1010%2Cx_90%2Cy_100/g_south_west%2Cl_text:notosansjp-medium.otf_37:ryohei%2520oyama%2Cx_203%2Cy_121/g_south_west%2Ch_90%2Cl_fetch:aHR0cHM6Ly9zdGF0aWMuemVubi5zdHVkaW8vdXNlci11cGxvYWQvYXZhdGFyLzRjODg1YmM0MGIuanBlZw==%2Cr_max%2Cw_90%2Cx_87%2Cy_95/v1627283836/default/og-base-w1200-v2.png?_a=BACMTiAE" length="0" type="false"/><dc:creator>ryohei oyama</dc:creator></item><item><title><![CDATA[海外エンジニアのデスク環境やツールを覗き見！「Awesome Uses」が楽しすぎる]]></title><description><![CDATA[エンジニアのみなさん、他人の開発環境って気になりませんか？

どんなキーボードを使っているんだろう？
エディタのフォントは何？
生産性を上げるために入れているアプリは？

そんな好奇心を満たしてくれる、面白い GitHub リポジトリを見つけたので紹介します。

 Awesome Uses
今回紹介するのは、Wes Bos 氏が管理している Awesome Uses というリポジトリです。
https://github.com/wesbos/awesome-uses

 どんなリポジトリ？
これは、世界中の開発者が公開している /uses ページへのリンク集です。
「/uses」ページと...]]></description><link>https://zenn.dev/mountain1009/articles/5a00d82a50ddb0</link><guid isPermaLink="true">https://zenn.dev/mountain1009/articles/5a00d82a50ddb0</guid><pubDate>Mon, 22 Dec 2025 11:00:06 GMT</pubDate><enclosure url="https://res.cloudinary.com/zenn/image/upload/s--6of1-BsT--/c_fit%2Cg_north_west%2Cl_text:notosansjp-medium.otf_55:%25E6%25B5%25B7%25E5%25A4%2596%25E3%2582%25A8%25E3%2583%25B3%25E3%2582%25B8%25E3%2583%258B%25E3%2582%25A2%25E3%2581%25AE%25E3%2583%2587%25E3%2582%25B9%25E3%2582%25AF%25E7%2592%25B0%25E5%25A2%2583%25E3%2582%2584%25E3%2583%2584%25E3%2583%25BC%25E3%2583%25AB%25E3%2582%2592%25E8%25A6%2597%25E3%2581%258D%25E8%25A6%258B%25EF%25BC%2581%25E3%2580%258CAwesome%2520Uses%25E3%2580%258D%25E3%2581%258C%25E6%25A5%25BD%25E3%2581%2597%25E3%2581%2599%25E3%2581%258E%25E3%2582%258B%2Cw_1010%2Cx_90%2Cy_100/g_south_west%2Cl_text:notosansjp-medium.otf_37:ryohei%2520oyama%2Cx_203%2Cy_121/g_south_west%2Ch_90%2Cl_fetch:aHR0cHM6Ly9zdGF0aWMuemVubi5zdHVkaW8vdXNlci11cGxvYWQvYXZhdGFyLzRjODg1YmM0MGIuanBlZw==%2Cr_max%2Cw_90%2Cx_87%2Cy_95/v1627283836/default/og-base-w1200-v2.png?_a=BACMTiAE" length="0" type="false"/><dc:creator>ryohei oyama</dc:creator></item><item><title><![CDATA[2025年版 最安値クラウドアーキテクチャまとめ：個人開発〜スタートアップ向け]]></title><description><![CDATA[
 はじめに
個人開発やスタートアップの MVP を構築するとき、できるだけコストを抑えたいというのは誰もが考えることです。
2025 年現在、クラウドサービスの無料枠や従量課金の選択肢が充実しており、うまく組み合わせれば月額 0〜数ドルで本番環境を運用できます。
この記事では、代表的な「最安値アーキテクチャ」のパターンを紹介し、それぞれのメリット・デメリットを比較します。
!
料金情報は 2025 年 12 月時点のものです。最新の情報は各サービスの公式サイトをご確認ください。


 TL;DR：パターン早見表



パターン
月額目安
向いているケース




Cloudflare ...]]></description><link>https://zenn.dev/mountain1009/articles/9f842ed3cd003d</link><guid isPermaLink="true">https://zenn.dev/mountain1009/articles/9f842ed3cd003d</guid><pubDate>Tue, 16 Dec 2025 00:16:04 GMT</pubDate><enclosure url="https://res.cloudinary.com/zenn/image/upload/s--awquazWV--/c_fit%2Cg_north_west%2Cl_text:notosansjp-medium.otf_55:2025%25E5%25B9%25B4%25E7%2589%2588%2520%25E6%259C%2580%25E5%25AE%2589%25E5%2580%25A4%25E3%2582%25AF%25E3%2583%25A9%25E3%2582%25A6%25E3%2583%2589%25E3%2582%25A2%25E3%2583%25BC%25E3%2582%25AD%25E3%2583%2586%25E3%2582%25AF%25E3%2583%2581%25E3%2583%25A3%25E3%2581%25BE%25E3%2581%25A8%25E3%2582%2581%25EF%25BC%259A%25E5%2580%258B%25E4%25BA%25BA%25E9%2596%258B%25E7%2599%25BA%25E3%2580%259C%25E3%2582%25B9%25E3%2582%25BF%25E3%2583%25BC%25E3%2583%2588%25E3%2582%25A2%25E3%2583%2583%25E3%2583%2597%25E5%2590%2591%25E3%2581%2591%2Cw_1010%2Cx_90%2Cy_100/g_south_west%2Cl_text:notosansjp-medium.otf_37:ryohei%2520oyama%2Cx_203%2Cy_121/g_south_west%2Ch_90%2Cl_fetch:aHR0cHM6Ly9zdGF0aWMuemVubi5zdHVkaW8vdXNlci11cGxvYWQvYXZhdGFyLzRjODg1YmM0MGIuanBlZw==%2Cr_max%2Cw_90%2Cx_87%2Cy_95/v1627283836/default/og-base-w1200-v2.png?_a=BACMTiAE" length="0" type="false"/><dc:creator>ryohei oyama</dc:creator></item><item><title><![CDATA[もうif/else地獄には戻れない。ts-patternで書く美しい条件分岐]]></title><description><![CDATA[
 はじめに
こんなコード、書いたことありませんか？
const handleResponse = (response: ApiResponse): string =&gt; {
  if (response.status === "success") {
    if (response.data.user.role === "admin") {
      if (response.data.user.permissions.includes("write")) {
        return "管理者（書き込み権限あり）";
      } else {
        retu...]]></description><link>https://zenn.dev/mountain1009/articles/bf2af987e36cc8</link><guid isPermaLink="true">https://zenn.dev/mountain1009/articles/bf2af987e36cc8</guid><pubDate>Fri, 12 Dec 2025 00:00:03 GMT</pubDate><enclosure url="https://res.cloudinary.com/zenn/image/upload/s--hML1H9vd--/c_fit%2Cg_north_west%2Cl_text:notosansjp-medium.otf_55:%25E3%2582%2582%25E3%2581%2586if%252Felse%25E5%259C%25B0%25E7%258D%2584%25E3%2581%25AB%25E3%2581%25AF%25E6%2588%25BB%25E3%2582%258C%25E3%2581%25AA%25E3%2581%2584%25E3%2580%2582ts-pattern%25E3%2581%25A7%25E6%259B%25B8%25E3%2581%258F%25E7%25BE%258E%25E3%2581%2597%25E3%2581%2584%25E6%259D%25A1%25E4%25BB%25B6%25E5%2588%2586%25E5%25B2%2590%2Cw_1010%2Cx_90%2Cy_100/g_south_west%2Cl_text:notosansjp-medium.otf_37:ryohei%2520oyama%2Cx_203%2Cy_121/g_south_west%2Ch_90%2Cl_fetch:aHR0cHM6Ly9zdGF0aWMuemVubi5zdHVkaW8vdXNlci11cGxvYWQvYXZhdGFyLzRjODg1YmM0MGIuanBlZw==%2Cr_max%2Cw_90%2Cx_87%2Cy_95/v1627283836/default/og-base-w1200-v2.png?_a=BACMTiAE" length="0" type="false"/><dc:creator>ryohei oyama</dc:creator></item><item><title><![CDATA[TanStack AI vs Vercel AI SDK - 2つのAI SDKを比較してみた]]></title><description><![CDATA[
 はじめに
2025 年 12 月、TanStack から新しい AI SDK がアルファ版としてリリースされました。TanStack Query や TanStack Router で知られる TanStack チームが、AI 開発の分野にも参入してきたのです。
すでに Vercel AI SDK が広く使われている中、なぜ新しい AI SDK が必要なのでしょうか？
本記事では、TanStack AI と Vercel AI SDK の違いを比較し、それぞれの特徴や使い分けについて解説します。

 TL;DR（まとめ）



観点
TanStack AI
Vercel AI SDK...]]></description><link>https://zenn.dev/mountain1009/articles/2ec4db152e8ae3</link><guid isPermaLink="true">https://zenn.dev/mountain1009/articles/2ec4db152e8ae3</guid><pubDate>Thu, 11 Dec 2025 14:27:52 GMT</pubDate><enclosure url="https://res.cloudinary.com/zenn/image/upload/s--XEhAUO4N--/c_fit%2Cg_north_west%2Cl_text:notosansjp-medium.otf_55:TanStack%2520AI%2520vs%2520Vercel%2520AI%2520SDK%2520-%25202%25E3%2581%25A4%25E3%2581%25AEAI%2520SDK%25E3%2582%2592%25E6%25AF%2594%25E8%25BC%2583%25E3%2581%2597%25E3%2581%25A6%25E3%2581%25BF%25E3%2581%259F%2Cw_1010%2Cx_90%2Cy_100/g_south_west%2Cl_text:notosansjp-medium.otf_37:ryohei%2520oyama%2Cx_203%2Cy_121/g_south_west%2Ch_90%2Cl_fetch:aHR0cHM6Ly9zdGF0aWMuemVubi5zdHVkaW8vdXNlci11cGxvYWQvYXZhdGFyLzRjODg1YmM0MGIuanBlZw==%2Cr_max%2Cw_90%2Cx_87%2Cy_95/v1627283836/default/og-base-w1200-v2.png?_a=BACMTiAE" length="0" type="false"/><dc:creator>ryohei oyama</dc:creator></item><item><title><![CDATA[VercelでもWebSocketが使える！partyserver + Cloudflare Workersで無料リアルタイム通信]]></title><description><![CDATA[
 TL;DR

Vercel の Serverless Functions は WebSocket 非対応だが、partyserver + Cloudflare Workersで無料のリアルタイム通信を実現できる。
5 分で「自分の Cloudflare アカウントにデプロイ」＋「Next.js クライアント」まで動く最短手順を紹介。
Cloudflare 公式が 2024 年 4 月に PartyKit を買収。partyserverは Cloudflare Workers 向けのライブラリとして提供されている。


 はじめに
Vercel を使っていて、リアルタイム機能を実装しよ...]]></description><link>https://zenn.dev/mountain1009/articles/0c7e914e7e026a</link><guid isPermaLink="true">https://zenn.dev/mountain1009/articles/0c7e914e7e026a</guid><pubDate>Fri, 28 Nov 2025 01:04:53 GMT</pubDate><enclosure url="https://res.cloudinary.com/zenn/image/upload/s--pj8LYgzg--/c_fit%2Cg_north_west%2Cl_text:notosansjp-medium.otf_55:Vercel%25E3%2581%25A7%25E3%2582%2582WebSocket%25E3%2581%258C%25E4%25BD%25BF%25E3%2581%2588%25E3%2582%258B%25EF%25BC%2581partyserver%2520%252B%2520Cloudflare%2520Workers%25E3%2581%25A7%25E7%2584%25A1%25E6%2596%2599...%2Cw_1010%2Cx_90%2Cy_100/g_south_west%2Cl_text:notosansjp-medium.otf_37:ryohei%2520oyama%2Cx_203%2Cy_121/g_south_west%2Ch_90%2Cl_fetch:aHR0cHM6Ly9zdGF0aWMuemVubi5zdHVkaW8vdXNlci11cGxvYWQvYXZhdGFyLzRjODg1YmM0MGIuanBlZw==%2Cr_max%2Cw_90%2Cx_87%2Cy_95/v1627283836/default/og-base-w1200-v2.png?_a=BACMTiAE" length="0" type="false"/><dc:creator>ryohei oyama</dc:creator></item><item><title><![CDATA[npmのパッケージのバージョンアップってどのタイミングでやればいいの？]]></title><description><![CDATA[
 はじめに
プロジェクトを進めていると、必ず直面するのが npm パッケージのバージョンアップ問題です。
「依存パッケージに脆弱性が見つかりました」という通知が来たり、npm outdatedを実行すると大量の古いパッケージが表示されたり...。でも、いつアップデートすべきか、判断に迷うことも多いですよね。
特に、個人開発とチーム開発では考慮すべきポイントが大きく異なります。本記事では、それぞれの状況に応じたバージョンアップのタイミングと戦略について解説します。

 パッケージバージョンアップの重要性
まず、なぜバージョンアップが重要なのか、主な理由を整理しておきましょう。

 セキュ...]]></description><link>https://zenn.dev/mountain1009/articles/54d15c8da8f0e1</link><guid isPermaLink="true">https://zenn.dev/mountain1009/articles/54d15c8da8f0e1</guid><pubDate>Tue, 25 Nov 2025 01:00:02 GMT</pubDate><enclosure url="https://res.cloudinary.com/zenn/image/upload/s--LGB-cY45--/c_fit%2Cg_north_west%2Cl_text:notosansjp-medium.otf_55:npm%25E3%2581%25AE%25E3%2583%2591%25E3%2583%2583%25E3%2582%25B1%25E3%2583%25BC%25E3%2582%25B8%25E3%2581%25AE%25E3%2583%2590%25E3%2583%25BC%25E3%2582%25B8%25E3%2583%25A7%25E3%2583%25B3%25E3%2582%25A2%25E3%2583%2583%25E3%2583%2597%25E3%2581%25A3%25E3%2581%25A6%25E3%2581%25A9%25E3%2581%25AE%25E3%2582%25BF%25E3%2582%25A4%25E3%2583%259F%25E3%2583%25B3%25E3%2582%25B0%25E3%2581%25A7%25E3%2582%2584%25E3%2582%258C%25E3%2581%25B0%25E3%2581%2584%25E3%2581%2584%25E3%2581%25AE%25EF%25BC%259F%2Cw_1010%2Cx_90%2Cy_100/g_south_west%2Cl_text:notosansjp-medium.otf_37:ryohei%2520oyama%2Cx_203%2Cy_121/g_south_west%2Ch_90%2Cl_fetch:aHR0cHM6Ly9zdGF0aWMuemVubi5zdHVkaW8vdXNlci11cGxvYWQvYXZhdGFyLzRjODg1YmM0MGIuanBlZw==%2Cr_max%2Cw_90%2Cx_87%2Cy_95/v1627283836/default/og-base-w1200-v2.png?_a=BACMTiAE" length="0" type="false"/><dc:creator>ryohei oyama</dc:creator></item><item><title><![CDATA[俺のVercelは遅かった - Function Regionの罠]]></title><description><![CDATA[
 はじめに
Next.js アプリを Vercel にデプロイしたら、なぜか異常に遅い...。そんな経験ありませんか？
普段は Cloudflare Workers や Cloud Run を使っていた私が、初めて Vercel を本番運用することになりました。
完全初見です。
「Vercel って評判いいし、Next.js との相性も最高って聞くし、余裕でしょ」
そう思っていた矢先、意外なところに落とし穴がありました。

 何が遅かったのか
最初は「あれ？意外と速いじゃん」と思っていました。
トップ画面（SSG）はサクサク表示されていたんです。
しかし、動的なページ（SSR）に遷移し...]]></description><link>https://zenn.dev/mountain1009/articles/00c8a4542e6194</link><guid isPermaLink="true">https://zenn.dev/mountain1009/articles/00c8a4542e6194</guid><pubDate>Sat, 22 Nov 2025 13:06:11 GMT</pubDate><enclosure url="https://res.cloudinary.com/zenn/image/upload/s--i_6qbzKq--/c_fit%2Cg_north_west%2Cl_text:notosansjp-medium.otf_55:%25E4%25BF%25BA%25E3%2581%25AEVercel%25E3%2581%25AF%25E9%2581%2585%25E3%2581%258B%25E3%2581%25A3%25E3%2581%259F%2520-%2520Function%2520Region%25E3%2581%25AE%25E7%25BD%25A0%2Cw_1010%2Cx_90%2Cy_100/g_south_west%2Cl_text:notosansjp-medium.otf_37:ryohei%2520oyama%2Cx_203%2Cy_121/g_south_west%2Ch_90%2Cl_fetch:aHR0cHM6Ly9zdGF0aWMuemVubi5zdHVkaW8vdXNlci11cGxvYWQvYXZhdGFyLzRjODg1YmM0MGIuanBlZw==%2Cr_max%2Cw_90%2Cx_87%2Cy_95/v1627283836/default/og-base-w1200-v2.png?_a=BACMTiAE" length="0" type="false"/><dc:creator>ryohei oyama</dc:creator></item></channel></rss>