ミニツールを量産しやすくするため、star-moti-tools に寄せた話
公開
更新
ミニツールを量産しやすくするため、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) |
| 公開 URL | star-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ステップです。
- star-moti-tools …
app/新しいslug/にページを追加 → push - star-moti …
lib/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 ですが、インフラの土台だけ先に整えておく、という感じでした。次は収入シミュレーション系か、歩数まわりか…また増えたら追記します(^^)