整理整頓ソフト開発日記――新しいパソコンへの移行から製品版完成まで
作業日: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が答える内容を、次のように分けた。
- 家財の場所を探す質問
- 特定の場所に何があるかという質問
- 家財の状態を確認する質問
- ソフトの使い方に関する質問
- あいさつや簡単な会話
さらに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桁へ修正した。
- 入力可能な最大桁数
- 桁数判定
- 入力パターン
- 説明文
- メール本文
- プレースホルダー
現在は、次の流れでログインできる。
- パソコンでメールアドレスを入力する
- 携帯に日本語メールが届く
- メールに表示された8桁コードを確認する
- パソコンへコードを入力する
- パソコンがログイン状態になる
スマートフォンでそのまま使いたい場合は、従来どおりメールのリンクを押すこともできる。
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の注文番号を入力すると、次の処理を行う。
- 注文番号を確認する
- その注文専用のシリアルを発行する
- データベースへハッシュを保存する
- 日本語の送信用文面を作る
- 文面をクリップボードへコピーする
- 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での販売である。
販売前に準備するものは多い。
- 商品名
- 販売価格
- 商品説明
- 商品画像
- 利用開始ガイド
- 利用規約
- プライバシーポリシー
- 対応環境
- 問い合わせ方法
- 返金条件
- シリアル送付手順
最初はシークレット公開にして、購入からシリアル登録までを一巡する予定だ。
確認する流れは次のとおり。
- BOOTHで注文する
- 注文番号を確認する
- 購入者専用シリアルを発行する
- 購入者へ日本語メッセージで送る
- 購入者が製品版へログインする
- シリアルを登録する
- 製品版機能が解放される
- 家族共有とAIが利用できることを確認する
この一連の流れに問題がなければ、一般公開へ進む。
今回の開発で学んだこと
今回、最も印象に残ったのは、小さな不便を放置しないことの重要性だった。
- ショートカットが複数あって分かりにくい
- スマートフォンで文字が小さい
- AIがあいさつを家財名として檢索する
- 携帯でリンクを押してもパソコンがログインしない
- メールが英語で届く
- コードが8桁なのに6桁しか入力できない
- 入力例と実際のシリアル形式が違う
- エラー表示から本当の原因が分からない
一つひとつは小さく見える。
しかし、こうした不便が積み重なると、利用者はソフトを使わなくなる。
特に家財管理のような日常用ソフトは、起動するのが面倒、入力するのが面倒、ログインするのが面倒と思われた時点で負けである。
機能の多さより、「今やりたいことが迷わずできる」ことのほうが大切だ。
もう一つ学んだのは、実機確認の重要性である。
コード上では正しそうでも、実際に届いた認証コードは想定と違った。管理者機能も、実際に押してみるまで暗号関数の問題が見つからなかった。
画面を作っただけでは完成ではない。
実際のアカウント、実際のメール、実際のデータ、実際のスマートフォンで試して初めて分かる問題がある。
おわりに
新しいパソコンで整理整頓ソフトを使えるようにする。
最初は、それだけの作業になるはずだった。
しかし、作業を続けるうちに、古い個人用ツールは、複数ユーザー、家族共有、AI、Googleログイン、シリアル認証を備えた製品版へ生まれ変わった。
家にある物を記録し、必要なときに見つける。
目的は単純だ。
けれど、その単純なことを誰でも無理なく続けられるようにするには、多くの工夫が必要だった。
次はいよいよBOOTHでの販売準備だ。
商品ページを作り、説明文と画像を整え、利用開始ガイドを用意する。そして実際の購入から製品版有効化までを試す。
開発はひとまず完成した。
次は、このソフトを必要としている人へ届ける段階に進む。
