0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

公開した翌日、最初にやったこと

2026年5月30日、VetCalc PROをGitHub Pagesで公開した。

その翌日、最初にやったことはアクセス解析の確認ではなかった。

院内のスタッフに「これ、スマホで使えるか見てみて」と渡した。

看護師さんがiPhoneで開いた。

「閉じられません」

公開翌日に最初の不具合報告が来た。


押せないボタンがあった

薬剤カードの詳細画面を閉じる❌ボタン。自分のPixel 9aでは、ギリギリ押せる。押せることは押せるが、明らかにおかしい。iPhoneでは完全に反応しなかった。

デバッグ用に中古のiPhoneを買うか、本気で迷った。

原因を調べると、Chrome自動アップデートによってアドレスバーの自動非表示の挙動が変わっていた。その結果、Safe Areaが広がり、ボタンが見えているのに触れない領域に入っていた。

env(safe-area-inset-top) という値をpadding-topに加算して、ヘッダーの高さ計算を修正した。

公開した翌日に実機デバッグをしていた。公開とは、そういうことだった。


チュートリアルが毎回出た

Safe Area問題を修正している途中で、別の問題が出た。

Android ChromeのホームスクリーンショートカットからVCPを起動すると、アプリの設定がリセットされていた。チュートリアルが毎回最初から出る。使うたびに同意画面が出る。

原因はlocalStorageだった。ショートカット起動ではlocalStorageがリセットされることがある。これはAndroid Chromeの仕様だった。

直そうとして、沼にはまった。

localStorageを使わない方法を考えるほど、依存箇所が増えていく。修正すると別の挙動が変わる。1時間やって、判断した。

チュートリアルを削除する。

代わりに、管理シート(⚙️)に静的な使い方テキストを置いた。いつでも見られる。消えない。localStorageに依存しない。

「直す」より「なくす」方が正しいことがある。


AIに読んでもらうことを考えた

6月7日。実機デバッグの翌日、別のことを考えていた。

「このアプリ、AIに聞いたときに出てくるだろうか。」

試してみた。Perplexity、Gemini、ChatGPT、Claude。全部に「獣医師向け薬用量計算アプリ」を聞いた。VetCalc PROは、どこにも出てこなかった。

2026年現在、検索の入口がAIに変わりつつある。キーワードで順位を競うより、AIに正しく引用される構造を作る方が先だと判断した。

llms.txt を作った。AIクローラー向けに「このアプリは何者か」を書いたテキストファイルだ。about.html も作った。JSON-LDをindex.htmlに埋め込んだ。

「AIに読まれないようにする」ではなく「AIに正しく読んでもらう」。その方向を選んだ。

ベースラインを測った。全AIでVCPは表示されなかった。これが起点になった。


薬剤DBの設計が間違っていた

6月8日。内服薬の計算がおかしいケースを発見した。

原因は設計だった。注射薬と内服薬を1つのエントリに混在させていた。conc(濃度)のフィールドが1つしかないため、内服タブで注射薬の濃度が使われていた。

「注射・内服の切り替えボタンを正しく実装する」方向で考えると、concを二重に持つ必要が出てくる。スキーマの大改修になる。

判断した。注射と内服を別IDに分割する。

混在していた34件を分割し、新規内服エントリをdrug_275〜drug_303として追加した。薬剤数は303件になった。フラットな構造になった。「1エントリ=1薬剤×1投与経路」というルールが明確になった。

作りながら要件が見えてくる。プロトタイプとはそういうものだと、今は思う。


v6.0を打った

6月10日。GitHub Pages版の正式初リリースとして v6.0 タグを打った。

単一HTML(v5.32)から移植して、SEO・GEO対策・ライセンス整理・薬剤DB改修・PWA化のすべてを含む版として定義した。

OGP画像を作った。実際のアプリ画面を4分割したコラージュ(1200×630px)をSNSシェア用に置いた。<noscript> タグにテキストを追加した。JSを実行しないクローラー向けの保険だ。

READMEに書いた。

このアプリは「巨人の肩の上に立つ」という考え方で作られています。

CRI計算のワークシートを最初に作ったのはDr. Tim Hackettで、それを日本語に翻訳した松葉洋宗先生がいて、小宮山典寛先生の解説があって、私はそれを使わせてもらいながら今の仕事をしてきた。

巨人の肩の上に立って作ったものを、次の誰かが使える形で残す。それだけのことだった。


コードを書かない時間も開発だった

6月19日、コードは触っていなかった。

公開後のアクセス状況を確認し、Qiita記事を書き、開発ログを整理していた。

公開前は「コードを書くこと」が開発だと思っていた。公開後は違った。ドキュメントを書くことも、告知することも、振り返ることも、全部プロジェクトの一部だった。


カードをドラッグで並び替えられるようにした

6月23日。計算タブの薬剤カードに↑↓ボタンがあった。

使いにくかった。カードが増えると特に。

ドラッグ&ドロップに変えた。マウスでも、タッチ長押し300msでも動く。

実装で一つ詰まった。タッチD&Dで「ゴースト」が出た。ドラッグ中の要素の残像がAndroidに残り続ける問題だ。

原因はtouchClone方式だった。DOM上に複製を作ってドラッグ像として使う方法で、Androidでは描画タイミングのズレで残像になる。

DOM直接移動方式に切り替えた。クローンを作らず、要素そのものを動かす。ゴーストが消えた。

↑↓ボタンを削除した。コードが減った。動作が速くなった。


公開してからが本番だった

5月30日に公開した。

翌日、❌ボタンが押せなかった。チュートリアルが毎回出た。AIにどこにも表示されなかった。薬剤DBの設計が間違っていた。ドラッグするとゴーストが出た。

3週間で、アプリは別物になった。

変わったのはアプリだけではなかった。

公開前は「完成」させることを考えていた。公開後は「動き続けること」を考えるようになった。

その過程で、mainブランチに直接pushする怖さも覚えた。ブランチを切るようになった。pull requestを使うようになった。Service Workerのキャッシュ更新で何度も沼った。

完成はなかった。公開した瞬間から、運用が始まっていた。



0
0
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
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?