0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

散らばったSupabaseプロジェクトの棚卸しボードをつくってみた

0
Last updated at Posted at 2026-10-28

対象: 前の記事を読んで「結局、自分のプロジェクトの全体像はどうなっているの?」となった方/担当者が変わって引き継ぎをする方
所要時間: 15分前後(動かすだけ) / 使うもの: ブラウザ、ターミナル(ローカルサーバーとSupabase CLI)
確認日: 2026-10-27
前の記事(手順編): https://qiita.com/tomozilla/items/ec4a1f58b91c6f68a3df
サンプルコード一式(GitHub): https://github.com/tomozilla/project-inventory-ja-demo

前の記事で、棚卸しのコマンド(supabase projects list --output json)を使いました。でも、JSONをそのまま眺めても、どの組織に何個あって、いくらかかっていて、どれが止まっているのかは、頭に入ってきません。

そこで、CLIの出力を貼ると、組織ごとに整理して見せてくれる小さなWebアプリをつくりました。使うのは、プロジェクトが散らばってしまった人や、引き継ぎを受けた人です。「年に数回の棚卸しの日」に、これを開いて眺める想定です。

最初の画面。貼り付け欄と「サンプルを読み込む」ボタン

0. 先に伝えておきたいこと

  • サーバーも、Supabaseのプロジェクトも、アクセストークンも使いません。 ブラウザだけで動く静的なページです。貼ったデータはブラウザの外に出ません。
  • 費用:$0(ローカルで動かすだけ)。画面に出る月額は目安で、請求書で確かめた金額ではありません。
  • リポジトリのサンプルデータは架空です。私の実際のプロジェクトの一覧では、読み込めること(件数・組織数)だけを確かめて、名前は載せていません。
  • 判定のルールは私の整理で、公式の基準ではありません。

1. つくったもの

全体の構成:CLIの出力を貼る → ブラウザ内で整理 → 表示。CLIの出力に無いものは、画面で補う

  • inventory.js … 貼られたJSONの読み取りと計算(画面に依存しない。テストできる)
  • index.html / app.js … 貼り付け欄と表示
  • sample/projects.sample.json … 架空のサンプル
  • test.js … 13項目のテスト

2. しくみ(ポイントだけ)

CLIの出力には、プランがありません。そこで、組織ごとに自分でプランを選ぶようにしました(選ばないと「見積りなし」と出ます)。

月額の目安は、前の記事の式のとおりです。

// 動いているプロジェクトだけ数える(停止中はComputeがかからない)
monthly = Math.max(0, active * 10 - 10);   // Micro $10 × 動いている数 − 含まれる$10
monthly += plan === "pro" ? 25 : 599;       // プラン代

「棚卸しの候補」は、停止中(INACTIVE)で、作ってから90日以上のものに、印を付けるだけです。

3. 動かしてみる

# リポジトリのルートで(「サンプルを読み込む」が ../sample/ を読むため)
python3 -m http.server 8000
# ブラウザで http://localhost:8000/app/ を開く
node app/test.js                 # 13項目

自分のデータで使うなら、こうです。

supabase projects list --output json | pbcopy    # macOS。結果をコピーして貼る

4. 使ってみる

サンプルを読み込んで、組織1を「free」、組織2を「pro」にしました。

組織ごとの一覧。組織1:無料なのに3つ動いている警告、組織2:停止して229日たった「棚卸し候補」、組織3:プラン未選択

  • 組織1(free):動いているプロジェクトが3つなのに、無料は2つまで、という警告が出ました。
  • 組織2(pro):「about $25 / month」。停止中のプロジェクトは数えていません(動いているのは1つで、含まれる$10で足りるため)。legacy-poc には「dormant candidate(棚卸し候補)」の印が付きました。
  • 組織3:プランを選んでいないので「見積りなし」。勝手に無料とみなしません。

5. つまずき

5-1. 壊れたJSONを貼ったとき

最初に決めていたのは、「何も言わずに空の画面を出さない」ことです。壊れたJSONを貼ると、赤い枠で理由を出します。

壊れたJSONを貼ったときのエラー表示

必要な項目(ref・name・organization_id・status・created_at)が欠けている行は、**黙って捨てずに「N行を飛ばしました」**と出します。

5-2. 自分で見つけた小さな不具合

  • 表示が「1 projects」になっていました。単数形に直しました。
  • 組織ごとの表の列の幅がバラバラで、見づらかったので、固定にしました。

5-3. 限界(ここは直せません)

  • CLIの出力にはプランも最終アクセス日もないので、「使われていない」とは断定できません。ボードの「棚卸し候補」は、確認のきっかけです。
  • 組織の名前も出ません(IDだけ)。どれが自社のどの組織か、画面で突き合わせる必要があります。
  • 試していないこと:数百件の一覧、スマホ幅の見た目、ファイルを直接開いたときのエラー表示、他人の組織を含む出力での挙動。

6. 実際の運用にするなら(未検証)

  • 組織IDと名前・担当者の対応表を、別のJSONで持つ。
  • 前回の棚卸し結果と比べて、増えた・止まったものだけを出す。
  • 「消してよい」を自動で判断しない(必ず人が確認する)。

まとめ

  • 貼るだけで、組織ごとの全体像が1画面で見られる。
  • 足りない情報(プラン・最終アクセス)は、補うか、推測しない。
  • 棚卸しは「消す日」ではなく、「確認する日」。

次は、費用の話:請求書の読み方と、スペンドキャップが守るもの・守らないものを整理します。

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?