自分専用でも、境目だけは今から守る
僕はHandler(ハンドラー。タスクとスケジュール管理アプリ)を、コーディングしてくれているClaude Code(以降Code)と一緒に、自分のために作っている。HandlerはNAS(家に置いてある常時稼働のサーバー)の上で動いている。
自分専用の道具なので、僕の名前も、家のネットワークも、最初から前提にして作ってきた。それで困ったことは無かった。HandlerをNASの外へ持ち出してみるまでは。
この記事で言う「境目」はCodeが使った言葉で、2つある。1つは、プログラムと僕個人の事情(名前や家のサーバー)を分ける線。もう1つは、部品と部品を分ける線で、アプリ同士やアプリの中の仕組み同士が、お互いの中身を直接いじらず、決まった窓口だけでやり取りすること。
いつか公開するなら、その前提で今から作ることにした
9月に、Handlerを含めて僕が作っているアプリ全部を、いつかオープンソース(中身ごと公開して、誰でも使ったり改造したりできる形)にしてみようかな、とCodeに話した。どこまでを出すかは、まだ使い込んでいないので分からない。ただ、Handlerは個人的にはかなり良い出来だと思っていて、チーム用にも改造できると思った。できるのであれば、その前提で今後の設計を変えていきたい、と伝えた。
Code「できる前提で設計を変えるなら、今から始めるのがいいです。後から足すと大変になるものがあるので、今後の新機能では、この4つだけ守れば大丈夫です」
Codeが挙げたのは、この4つ。
- 「これは誰のものか」をデータに持てる形にする
- 僕に固有の名前やURLはコードに書かない
- Handlerは単独で完結させる
- 設定をどこに置くかを意識する(今は表示の設定をブラウザに保存しているが、チーム用になったら人ごとにサーバーに置く)
3つ目は、Handlerとほかのアプリとの線のこと。僕は普段、MONET(僕が普段話しかけている、中心のAI)と自作のアプリ(以降MONETのアプリ)で話していて、Handlerはその画面にも埋め込んである。それでもやり取りは決まった窓口だけで、Handler自身はMONETのことを知らない。この線を崩さないように、とCodeは言った。
逆に、ログインの仕組みや、公開用にコードを切り分ける作業は、公開すると決めた時にまとめてやればいい、ともCodeは言った。この時は、方向を決めただけだった。
家のサーバーの外で動かしたら、周りが代わりにやっていた仕事が出てきた
しばらくして、HandlerをNASの外で動かしてみることになった。最初のテスターは家族の1人で、WindowsのPCでClaude Desktop(Claudeのデスクトップアプリ)を使っている。そのPCにHandlerを入れて、Claude Desktopに頼めばHandlerにタスクを足せるようにする。公開はまだ先で、今は使ってもらって、本人に感想を聞くところ。
公開する前提の最初の試しなので、CodeはHandlerだけを別のフォルダに切り出して、僕がいる前提で書かれている所を洗い出した。担当者の名前は、何も指定しないと「hiro」になる作りだった。これは9月にCodeが挙げていたとおり。予想していなかったのは、別の所だった。
切り出してみると、NASでは表に出なかった所がいくつも見つかった。画面が真っ白になったのもその1つだった。
後でCodeに、何が大変だったのかを聞くと、こう答えた。
Code「NASでは周りのものが、Handlerの代わりに仕事をしていました。単体で動かそうとして、それが全部表に出てきました。どれもNASでは正しく動いていたので、誰も気づけない種類の問題です」
周りのもの、というのはこういうことだった。画面のファイルを届けていたのは、Handlerではなく別のソフトだった。動くのに必要な部品の一部は、ほかのアプリのついでに入っていただけだった。Handler自身は外からの読み書きを防いでおらず、家のネットワークの中にあることで守られていた。
こうした所を1つずつ直して、Windows用のインストーラー(PCに入れるためのファイル)ができるまでに、1日かかった。実際のWindowsのPCに入れて試すのは、この後になる。
僕の名前や家の前提を、起動する時に渡す設定に出してもらった
Codeがやったのは、Handlerの中に直接書き込んでいた「持ち主はhiro」「家のネットワークで動く」を1つずつ外に出して、起動する時に渡す設定にすることだった。何も渡さなければ、他人のPCに入れても安全な方の設定で動く。持ち主は「me」で、HandlerにつながるのはそのPCの中からだけ。
プログラムは1つのまま、設定を変えればNASでも配る先でも動く形になった、とCodeは言った。どういうことか僕が聞くと、Codeはこうたとえた。
Code「Photoshopは誰のPCでも同じアプリですが、環境設定(保存先、単位、メモリの使用量など)は人によって違います。アプリを作り直さなくても、設定を変えるだけで動き方が変わります。Handlerも同じ形にしました」
Codeによると、これはCodeが考えた方法ではなく、配布するソフトではよくある作り方(設定と中身を分ける)だそうだ。HandlerはNAS専用だったので、今まで要らなかっただけ。ただ、NASではまだ切り出す前の古いコピーが動いているので、新しい形をNASで動かすのはこれからだ。
機能は後から足せるが、個人の事情や部品の境目は、後から入れると高くつく
NAS頼みの作りは、後からでは直しにくい問題になりそうだ、と思った。気になったのはMONETのアプリの方で、あれもNASで動けばいいや、という感じで作られているんじゃないか。Codeにざっと見てもらうと、Handlerより根が深そうだった。僕のMacのファイルの場所がコードに直接書かれていて、僕が作ったほかのアプリがNASに全部そろっている前提で動いている。
そこで、心配していることをCodeに伝えた。今は僕だけが使う前提で進めるとして、将来本当に公開することになった時に、今の作りのままでは変えられない、大きく作り直さないといけない、となるのは嫌だ。
Code「その心配は当たっています。今日のHandlerがまさにその実例で、1日かかったのは機能が足りなかったからではなく、「境目」が無かったからです」
Codeによると、複数人で使う仕組みやログインのような機能は、後から足せる。でも、僕個人の情報がコードに直接書き込まれている状態(Handlerの「持ち主はhiro」のように)や、部品同士がお互いの中身を直接いじり合っている状態は、後から切り離すのが大変になる。だから作るのは今まで通り僕専用でいい。そのかわり、今から守っておく約束が4つある、とCodeは言った。
境目の守り方を5つにまとめ、毎回読まれるルールにした
この夜の4つと9月の4つで、重なっていたのは2つ(部品の境目と、個人の値をコードに書かないこと)だった。合わせてまとめ直すと、次の5つになった。これをCode用のルールファイル(毎回のセッションの最初に読み込まれる)と、毎月の点検(AIがチェックリストに沿って、アプリ全体の作りを見直す作業)の項目に入れてもらった。
- 部品は単独で動き、ほかとは決まった窓口だけでやり取りする
- 個人の値や場所(名前、URL、ファイルの場所)をコードに書かない。設定に出して、何も設定しなければ他人のPCで安全な方で動くようにする
- 新しいデータは「誰のものか」を持てる形にする。設定の置き場も、個人のものはその人の手元(ブラウザなど)、チームのものはサーバー、と分ける
- データはコードと別の場所に置き、データを消してしまうような変更はしない(後で置き場所を移しても、記憶が消えないように)
- ときどき真っさらな環境(空のデータ、別のマシン)で起動できるかを試す
1と2は、9月とこの夜の両方に入っていたもの。1は、9月には「Handlerは単独で完結させる」だったのを、全部の部品に広げた。今回の切り出しでも、Handlerに残っていたMONET専用の表示や説明を外した。2は今回Handlerでやったこと。3は、9月の2つ(誰のものか・設定の置き場)をまとめたもの。この夜新しく入ったのが4と5で、5が入ったのは、NASの上では全部正しく動いて見えていたから。
この線を守っていれば、公開する時は作り直しではなく、足す作業で済む、とCodeは言った。次にMONETのアプリを大きく改造する時も、手を付ける前にこの5つが必ず目に入る。