整理整頓ソフト開発日記――新しいパソコンへの移行から製品版完成まで

作業日:2026年8月22日
開発期間:2026年8月3日〜2026年8月22日
開発環境:Windows 11、Google Apps Script、Next.js、Supabase、Vercel

はじめに

新しいパソコンを購入した。

パソコンが新しくなるのはうれしいことだが、当然ながら古いパソコンにあった設定やショートカットは、そのままでは引き継がれない。

特に困ったのが、自分で作って使っていた「整理整頓ソフト」だった。

このソフトは、家にある物を台帳へ登録し、「何が、どこにあるのか」を管理するためのものだ。家財の名前、保管場所、状態、数量、備考などを記録しておき、必要なときに檢索できる。



最初の目標は単純だった。

「新しいパソコンでも、今までどおり整理整頓ソフトを使えるようにする」

ところが作業を始めると、ショートカットの復旧だけでは終わらなかった。

スマートフォン向けUI、台帳管理、家財の編集、AI檢索、複数ユーザー対応、Googleログイン、シリアルコード認証、BOOTH販売準備まで進み、最終的には本格的な製品版が完成した。

今回は、その長い開発作業を振り返ってみる。


まずは新しいパソコンで起動できるようにする

最初に確認したのは、OneDriveへ保存していたプロジェクトだった。

整理整頓ソフトのコードや作業報告書はOneDriveに残っていたため、新しいパソコンでも開発を継続できた。

しかし、デスクトップには起動アイコンがない。

そこで、整理整頓ソフトを起動するショートカットをデスクトップへ作成した。

ところが途中で、同じような名前のショートカットが複数作られてしまった。

  • 整理整頓ソフト
  • 白いアイコンの整理整頓ソフト
  • 家財管理

これではどれを押せばよいのか分からない。

最終的には、デスクトップ上の起動用ショートカットを1個だけに整理した。現在のショートカットはMicrosoft Edgeで製品版を開く。

ソフトの入口は、迷わないことが大切だ。

機能がどれほど充実していても、起動する段階で迷ってしまうようでは、日常的に使う道具として失格である。


「ブルーレイドライブを使用中にできない」

次に問題になったのは、家財の状態変更だった。

台帳には「箪笥上・台まわり08」にブルーレイ再生ドライブが登録されている。実際には使用中なのに、画面から状態を「使用中」へ変更できなかった。

家財管理ソフトなのだから、置き場所を見るだけでは足りない。

  • 保管中
  • 使用中
  • 貸出中
  • 譲渡濟み
  • 処分濟み

といった現在の状態を記録できる必要がある。

そこで、家財の状態を変更できる編集機能を追加した。

その後、ブルーレイ再生ドライブが「箪笥上・台まわり08」「使用中」「数量1」として保存されていることを確認した。

小さな変更に見えるが、「記録されている情報」と「現実の状態」が一致するための重要な改善だった。


AIが質問に答えられない

整理整頓ソフトには、家財を自然な言葉で檢索できるAIページも用意していた。

ところが、試しに「やあ」と入力すると、AIは次のような回答を返した。

やあ は三台帳では見つかりませんでした。

どう見ても会話になっていない。

当時のAIは、入力された文章をほぼすべて「家財を檢索するための言葉」として処理していた。そのため、あいさつも操作方法の質問も、家財名として檢索してしまう。

「家財を追加するには?」と質問しても、「家財を追加するという家財は見つかりませんでした」と答えてしまう。

これは人工知能というより、文章を檢索欄へ入れているだけである。

そこでAIの役割を整理した。

AIが答える内容を、次のように分けた。

  1. 家財の場所を探す質問
  2. 特定の場所に何があるかという質問
  3. 家財の状態を確認する質問
  4. ソフトの使い方に関する質問
  5. あいさつや簡単な会話

さらにAIページの説明文も変更した。

探し物だけでなく、整理整頓ソフトの使い方も聞けます。普通の言葉で質問してください。

質問例にも、次のようなボタンを追加した。

  • USBハブどこ?
  • 共用充電器ある?
  • 家財を追加するには?
  • 檢索の使い方は?

これによって、AIが単なる家財檢索だけでなく、操作案内としても使えることが画面上で分かるようになった。


スマートフォン用なのに文字が小さい

このソフトは、家の中を移動しながらスマートフォンで使うことを想定している。

ところが、初期の画面はパソコン用の見た目に近く、スマートフォンで開くと文字や入力欄が小さかった。

家財管理は、机に座って使うとは限らない。

押し入れの前、台所、クローゼット、物置などでスマートフォンを持ちながら操作する。そこで細かい文字を読んだり、小さなボタンを正確に押したりするのは不便である。

スマートフォン向けに、次の点を変更した。

  • 基本文字サイズを大きくする
  • 入力欄とボタンの高さを大きくする
  • カードの横幅を画面に合わせる
  • スマートフォンでは余計な外側の余白をなくす
  • ボタンを指で押しやすい大きさにする
  • セーフエリアを考慮する
  • 横スクロールが発生しないようにする
  • 長い家財一覧は画面内で読みやすくする

「スマホ対応」と書くだけでは不十分だ。

実際にスマートフォンで読みやすく、押しやすく、迷わず使えることが必要である。


台帳を追加・削除・名前変更できるようにする

次に追加したのが台帳管理機能だった。

当初は、用意された台帳を使うだけで、利用者が自由に台帳を管理できなかった。

そこで、次の機能を追加した。

  • 台帳の追加
  • 台帳名の変更
  • 台帳の非表示
  • 台帳の完全削除

ただし、削除は危険な操作である。

家財が入った台帳を誤って消すと、登録してきたデータも失われる可能性がある。そのため、通常の操作と危険な操作を分け、削除機能は分かりやすい警告表示の中へ配置した。

この頃から、単なる個人用ツールではなく、他の人へ渡せるソフトを意識するようになった。


作業報告書を正本にする

開発中に何度も問題になったのが、AI同士の引継ぎだった。

別のチャットや別のAIへ作業を渡すと、以前に何を変更したのか、何が未解決なのか、次に何をすべきなのかが分からなくなる。

そこでプロジェクトに明確なルールを追加した。

作業を行ったAIは、完了前に必ず作業報告書を更新する。

記録する内容は次の3点である。

  • 作業履歴
  • 現在の課題
  • 次の計画

さらに、恒久的な運用情報は別の運用メモへ記録することにした。

  • 本番URL
  • 公開方法
  • 認証設定
  • シリアルコードの扱い
  • データ移行方法
  • デスクトップショートカット
  • 秘密情報を保存してはいけない場所

この仕組みによって、新しいAIが参加しても、報告書を読めば現在の状態を把握できるようになった。

開発ではコードだけでなく、記録も製品の一部である。


Google Apps Script版から製品版へ

ここまで使っていたソフトは、Google Apps Scriptを中心に作られていた。

個人で使うには便利だが、複数ユーザーがログインし、それぞれの台帳を持ち、家族と共有する製品版としては制約が多い。

そこで、新しい製品版を別に作ることにした。

製品版では、次の構成を採用した。

  • 画面とアプリ本体:Next.js
  • データベースと認証:Supabase
  • 公開先:Vercel

従来のApps Script版は、既存データの確認と移行元として残した。

いきなり古いシステムを消すのではなく、新製品が安定するまで保持する方針にした。


複数ユーザーと家族共有

製品版では、利用者ごとにアカウントを持つ。

そして、自分の台帳を作り、家族を招待して一緒に利用できる。

台帳に対する権限も分けた。

  • 所有者
  • 編集者
  • 閲覧者

所有者は台帳名の変更、削除、家族の招待などを行える。

編集者は家財の追加や変更ができる。

閲覧者は内容を見ることが中心になる。

家族が同じ台帳を利用すれば、「誰かのスマートフォンにしか情報がない」という問題を減らせる。


旧データ131件を製品版へ移行

従来の作業版には、長い時間をかけて登録してきた家財データがある。

製品版を作ったからといって、最初から入力し直すわけにはいかない。

Googleスプレッドシートの台帳を読み込み、製品版データベースへ移行した。

最初の移行では123件だったが、その後の差分同期で新規8件と既存変更4件を反映し、合計131件になった。

移行時には、次の情報も可能な限り保持した。

  • 旧家財ID
  • 旧場所ID
  • 登録日
  • 檢索語
  • 品名
  • 場所
  • 分類
  • 状態
  • 数量
  • 備考

また、同じデータを何度同期しても重複しないよう、旧システムの家財IDを利用した一意判定を入れた。

作業版にない製品版独自データは削除しない方式にした。


ログインメールが英語だった

製品版の最初の認証方法はメールログインだった。

しかし、届いたメールはほぼすべて英語だった。

  • Your sign-in link
  • Follow the link below to sign in
  • Sign in

家族へ渡すソフトなのに、ログインメールが英語では分かりにくい。

そこで独自SMTPを設定し、送信者名、件名、本文を日本語化した。

メールには「整理整頓ソフトへのログイン」と表示し、日本語の説明とログインリンクを載せた。

ところが、次の問題が起きた。


携帯でリンクを押してもパソコンがログインしない

パソコンのログイン画面へメールアドレスを入力すると、携帯へメールが届く。

携帯でリンクを押すと、携帯ではログインできる。

しかし、ログイン操作を始めたパソコンの画面は変わらない。

これは故障ではなく、メールリンク認証の仕組みによるものだった。

ログイン状態は、リンクを開いた端末のブラウザーに保存される。携帯でリンクを開けば、携帯がログインする。別のパソコンへ認証状態が自動転送されるわけではない。

とはいえ、利用者にとって不便であることに変わりはない。

そこで、メールへログインコードを表示し、そのコードをパソコンへ入力できる方式を追加した。

最初は「6桁コード」として実装した。

しかし実際に届いたコードは8桁だった。

画面が6桁までしか受け付けないため、コードを入力できない。

すぐに次の点を8桁へ修正した。

  • 入力可能な最大桁数
  • 桁数判定
  • 入力パターン
  • 説明文
  • メール本文
  • プレースホルダー

現在は、次の流れでログインできる。

  1. パソコンでメールアドレスを入力する
  2. 携帯に日本語メールが届く
  3. メールに表示された8桁コードを確認する
  4. パソコンへコードを入力する
  5. パソコンがログイン状態になる

スマートフォンでそのまま使いたい場合は、従来どおりメールのリンクを押すこともできる。


Googleログインを有効化

メールログインだけでも利用できるが、毎回コードを確認するのは面倒である。

そこで「Googleでログイン」ボタンを本当に使えるようにした。

アプリ側にはGoogleログインを開始する処理が既にあったが、Google CloudとSupabaseの設定が未完成だった。

Google Cloudで行った主な作業は次のとおり。

  • Google Auth Platformの設定
  • アプリ名の登録
  • 外部ユーザー向けに設定
  • OAuth Webクライアントの作成
  • SupabaseのコールバックURLを登録
  • Client IDとClient SecretをSupabaseへ設定
  • Googleログインをテスト状態から本番環境へ変更

最終的に、製品版の「Googleでログイン」を押すと、日本語のGoogleアカウント選択画面へ移動することを確認した。

Client Secretなどの秘密情報は、ソースコード、作業報告書、ブログへ記載しない。


無料版と製品版を分ける

製品の販売方法について、次の方針を決めた。

ソフト本体とアカウント登録は無料。

無料版では、次の範囲を利用できる。

  • 自分の台帳1冊
  • 家財30件まで

製品版では、次の機能が解放される。

  • 台帳数の上限解除
  • 家財数の上限解除
  • 家族共有
  • 台帳内AI

製品版は、BOOTHで販売するシリアルコードを登録して有効化する。

将来、値上げや期限付きライセンス、サブスクリプションへ変更できるよう、権利情報には次の項目を持たせた。

  • プラン
  • 状態
  • 開始日時
  • 有効期限
  • 自動更新の有無
  • 発行元

現時点では買い切り・無期限を中心に運用するが、将来の変更へ対応できる構造にした。


シリアルコードを安全に管理する

シリアルコードは、そのままデータベースへ保存しない。

保存するのは、正規化したコードのSHA-256ハッシュと、管理用の末尾数文字だけである。

購入者が入力したコードを同じ方法でハッシュ化し、データベース内の値と照合する。

そのため、データベースを見ても元のシリアルコードを簡単に復元できない。

シリアルには、次の制御も入れた。

  • 使用可能か
  • 停止されていないか
  • 失効していないか
  • 使用回数を超えていないか
  • 同じ利用者による再入力か
  • 有効期限があるか

実際の形式は次のようなものだ。

SS-XXXXXX-XXXXXX-XXXXXX

ブログには実在するシリアルコードを掲載しない。


BOOTH購入者向けの発行ツール

BOOTHの商品ページ自体は自分で作ることにした。

一方、購入者へ固有のシリアルコードを渡す仕組みは開発した。

Windows上で「BOOTHシリアル発行」ツールを起動し、BOOTHの注文番号を入力すると、次の処理を行う。

  1. 注文番号を確認する
  2. その注文専用のシリアルを発行する
  3. データベースへハッシュを保存する
  4. 日本語の送信用文面を作る
  5. 文面をクリップボードへコピーする
  6. BOOTHの購入者メッセージへ貼り付ける

同じ注文番号では二重発行できない。

発行画面へ表示されるシリアル平文は、画面を閉じると再表示できない。購入者へ渡すまで紛失しないようにする必要がある。


管理者だけが無料シリアルを発行できる

販売用とは別に、家族やテスト利用者へ無料で製品版を渡したい場合がある。

そこで、管理者だけが利用できる「無料提供用シリアル発行」機能を作った。

管理者でログインすると、台帳画面に専用カードが表示される。

「お母さん用」など、渡す相手や用途を入力すると、買い切り・無期限・1アカウント用のシリアルを発行できる。

一般利用者が画面や通信をまねしても発行できないよう、管理者判定はデータベース側でも行う。

しかし、最初の実機試験では発行に失敗した。

原因は、Supabaseの暗号生成関数がextensionsというスキーマにあるのに、発行関数がpublicだけを檢索していたことだった。

エラーは次の内容だった。

function genrandombytes(integer) does not exist

暗号関数の場所を明示するよう修正し、管理者権限で正常に発行できることを確認した。

診断用に発行したコードは、確認後すぐに失効させた。


Googleログインしたら、最初から製品版だった

Googleログインを有効化した直後、管理用のGoogleアカウントでログインすると、シリアルを入力していないのに製品版になっていた。

一見すると、Googleログインした全員へ製品版が自動付与される不具合に見える。

データベースを調べると、そのGoogleアカウントは以前から登録濟みだった。

ライセンス機能を導入した際、公開前から利用していた既存利用者には、データや機能を失わないよう無期限の製品版権利を付与していた。その対象になっていたのである。

Googleログインが勝手に製品版を付けたわけではない。

同じメールアドレスの既存アカウントへ戻り、以前からの権利が表示されただけだった。

ただし、このアカウントでもシリアル登録を試したかったため、既存の製品版権利を取り消して無料版へ戻した。

権利の記録は削除せず、「取消」として残した。必要なら後から復旧できる。


シリアルを入力してもエラーになる

無料版へ戻した後、実際にシリアルコードを入力した。

すると画面に、次のエラーが表示された。

登録処理で問題が発生しました。時間をおいて、もう一度お試しください。

URLにもlicense=errorが付いていた。

原因を調べると、無料シリアル発行時と同じ種類の問題だった。

シリアルをハッシュ化して照合するdigest関数も、拡張機能のスキーマを明示していなかった。

そこで参照先を修正した。

さらに、入力欄の例が実際のコード形式と違っていることにも気付いた。

修正前:

SS-XXXX-XXXX-XXXX

実際の形式:

SS-XXXXXX-XXXXXX-XXXXXX

こちらも正しい表示へ変更した。

診断用シリアルを作り、実際の利用者と同じ認証状態で登録処理を行ったところ、製品版への切替に成功した。

試験後は、診断用コードを失効させ、アカウントも無料版へ戻した。


製品版完成

ここまでの作業で、次の機能がそろった。

  • Googleログイン
  • 日本語メールログイン
  • 8桁コードによる別端末ログイン
  • 利用者プロフィール
  • 台帳の追加・名前変更・削除
  • 家財の追加・編集・削除
  • 家財檢索
  • 家財の状態管理
  • 家族共有
  • 台帳内AI
  • スマートフォン向けUI
  • 無料版の利用制限
  • シリアルコード登録
  • 製品版機能の解放
  • 管理者限定の無料シリアル発行
  • BOOTH注文番号別シリアル発行
  • 旧データ131件の移行
  • 製品版用デスクトップショートカット
  • 作業報告書と運用メモ

そして2026年8月22日、整理整頓ソフト製品版を完成扱いとした。

もちろん、ソフトウェアに「二度と変更しなくてよい」という意味での完成はない。

利用者が増えれば、分かりにくい場所や新しい要望が出てくるだろう。それでも、販売準備へ進める品質と機能がそろったという意味で、大きな区切りになった。


次はBOOTHで販売する

次の工程はBOOTHでの販売である。

販売前に準備するものは多い。

  • 商品名
  • 販売価格
  • 商品説明
  • 商品画像
  • 利用開始ガイド
  • 利用規約
  • プライバシーポリシー
  • 対応環境
  • 問い合わせ方法
  • 返金条件
  • シリアル送付手順

最初はシークレット公開にして、購入からシリアル登録までを一巡する予定だ。

確認する流れは次のとおり。

  1. BOOTHで注文する
  2. 注文番号を確認する
  3. 購入者専用シリアルを発行する
  4. 購入者へ日本語メッセージで送る
  5. 購入者が製品版へログインする
  6. シリアルを登録する
  7. 製品版機能が解放される
  8. 家族共有とAIが利用できることを確認する

この一連の流れに問題がなければ、一般公開へ進む。


今回の開発で学んだこと

今回、最も印象に残ったのは、小さな不便を放置しないことの重要性だった。

  • ショートカットが複数あって分かりにくい
  • スマートフォンで文字が小さい
  • AIがあいさつを家財名として檢索する
  • 携帯でリンクを押してもパソコンがログインしない
  • メールが英語で届く
  • コードが8桁なのに6桁しか入力できない
  • 入力例と実際のシリアル形式が違う
  • エラー表示から本当の原因が分からない

一つひとつは小さく見える。

しかし、こうした不便が積み重なると、利用者はソフトを使わなくなる。

特に家財管理のような日常用ソフトは、起動するのが面倒、入力するのが面倒、ログインするのが面倒と思われた時点で負けである。

機能の多さより、「今やりたいことが迷わずできる」ことのほうが大切だ。

もう一つ学んだのは、実機確認の重要性である。

コード上では正しそうでも、実際に届いた認証コードは想定と違った。管理者機能も、実際に押してみるまで暗号関数の問題が見つからなかった。

画面を作っただけでは完成ではない。

実際のアカウント、実際のメール、実際のデータ、実際のスマートフォンで試して初めて分かる問題がある。


おわりに

新しいパソコンで整理整頓ソフトを使えるようにする。

最初は、それだけの作業になるはずだった。

しかし、作業を続けるうちに、古い個人用ツールは、複数ユーザー、家族共有、AI、Googleログイン、シリアル認証を備えた製品版へ生まれ変わった。

家にある物を記録し、必要なときに見つける。

目的は単純だ。

けれど、その単純なことを誰でも無理なく続けられるようにするには、多くの工夫が必要だった。

次はいよいよBOOTHでの販売準備だ。

商品ページを作り、説明文と画像を整え、利用開始ガイドを用意する。そして実際の購入から製品版有効化までを試す。

開発はひとまず完成した。

次は、このソフトを必要としている人へ届ける段階に進む。