ほしもちレコード

ミニツールを量産しやすくするため、star-moti-tools に寄せた話

Design Ops / 設計・制作

公開
更新

ミニツールを量産しやすくするため、star-moti-tools に寄せた話

star-moti.com では、ブログと並行して Mini Services(ミニサービス) として小さなツールを置いていく方針です。Product Hunt に載せながら公開して、いずれ副収入にもつなげたい、という感じ(^^)

最初に出した 作業時間トラッカー は、別リポジトリ + 別 Vercel プロジェクト + star-moti 本体の rewrite で、https://www.star-moti.com/tools/work-time に載せていました。ここまではうまくいったんですが、2つ目、3つ目…と増やすたびに Vercel の画面でポチポチ するのがめんどくさいと気がつきました^^;(まだ2つ目は増やしていないので、今後を見据えて、という話です)

なので、1つのリポジトリに複数ツールを並べる形 に寄せ直しました。本文はそのログです。

以前の構成(1ツール = 1箱)

ざっくり、こういう分担でした。

役割場所
サイト本体(ブログ・About・/tools 一覧)star-moti リポジトリ
ツール本体star-moti-time-tracker リポジトリ(別 Vercel)
公開 URLstar-moti.com/tools/work-time(rewrite で同一ドメイン)

ドメインパワーを star-moti.com に集めたいので、URL は star-moti 配下のまま が前提。ツール側は basePath: /tools/work-time でビルドして、本体から rewrite する、というパターンでした。

ツールを1つ増やすたびに必要になりそうだったこと

  • GitHub に新リポジトリ
  • Vercel に新プロジェクト接続
  • 環境変数(GA4 など)の再設定
  • ツール側の basePath 設定
  • star-moti 側の rewrite 追加
  • /tools 一覧(mini-services.ts)にカード1件

コードを書くより インフラの複製 の方が重くなりそう、というのが本音です。

方針:1リポジトリに /tools/xxx を並べる

量産のボトルネックになりそうなのが Vercel の増殖だったので、方針はシンプルにこうしました。

  • ツール用リポジトリは1つ(いまは star-moti-tools
  • Vercel プロジェクトも最初の1回だけ(既存のデプロイをそのまま使う)
  • 公開 URL はこれまでどおり star-moti.com/tools/スラッグ
  • 新ツールは app/スラッグ/ を足して push

外から見れば Product Hunt 用に「別プロダクト」として出せるけど、裏の箱は1つ、というイメージです。

やったこと

1. tools 側:basePath/tools

もともと basePath/tools/work-time 専用だったので、2つ目のツールを同じ Next.js アプリに置けませんでした。

  • basePath/tools に変更
  • 既存の画面を app/work-time/ 配下へ移動(コンポーネントも一緒)
  • ルート / は当面 work-time へ誘導(ハブページは後からでも可)

これで URL star-moti.com/tools/work-time は維持したまま、次は app/income-sim/ のようなフォルダを足すだけ、という形に近づきました。

2. star-moti 側:rewrite を /tools/:slug 形式に

work-time 専用の rewrite から、スラッグ汎用に変更しました。実際の設定は next.config.ts で、だいたい次のようなイメージです。

// next.config.ts(抜粋)
async rewrites() {
  return [
    {
      source: "/tools/:slug",
      destination: `${TOOLS_ORIGIN}/tools/:slug`,
    },
    {
      source: "/tools/:slug/:path*",
      destination: `${TOOLS_ORIGIN}/tools/:slug/:path*`,
    },
  ];
}

注意: /tools だけのパス(ミニサービス一覧)は、star-moti 本体の app/tools/page.tsx が担当します。rewrite で /tools 全体を上書きしない、という点は意識しておきました。

3. Vercel は触らない

新規プロジェクトは作っていません。push → 自動デプロイ、で本番反映。GA4 の測定 ID も、既に入れてある環境変数のままです。

4. リポジトリ名

GitHub / ローカルフォルダを star-moti-tools にリネーム(見た目の整理)。Vercel の .vercel.app URL はそのままでも rewrite は問題なく動いています。

次のツールを足すとき(運用メモ)

だいたい次の2ステップです。

  1. star-moti-toolsapp/新しいslug/ にページを追加 → push
  2. star-motilib/mini-services.ts にカード1件 → push

Vercel の手動設定は、環境変数を変えるとき以外は基本不要、という状態になりました。

量産するときの注意(人間側のミス)

1箱にまとめると Vercel ポチポチは減る一方、中身が散らかると取り違えやすい のも事実です。

  • 1ツール1フォルダ を守る(他ツールのファイルを触らない)
  • 同時にいじるツールは1つに絞る
  • 大きく育ったら、そのツールだけ別リポジトリに切り出す、もあり

「100個全部別 Vercel」も、「無秩序に100個1リポジトリ」も、どちらもミスの種類が増えやすい、という理解です。いまの規模(数個〜十数個)なら、フォルダ分け + 1箱、がバランス良さそう、というところまでです。

まとめ

  • これから量産するとき、つらそうだったのはコードより Vercel プロジェクトの増殖
  • star-moti-tools/tools/* で並べ、star-moti から rewrite する形に変更
  • 次のツールは フォルダ追加 + 一覧1行 + push が基本
  • 公開 URL は star-moti.com 配下のまま(ドメインパワー・GA4 も本体と同じプロパティで見られる)

作業時間トラッカーは引き続き WIP ですが、インフラの土台だけ先に整えておく、という感じでした。次は収入シミュレーション系か、歩数まわりか…また増えたら追記します(^^)