BLOG.HIRO UENO.ART
← INDEX

自分専用でも、境目だけは今から守る

僕はHandler(ハンドラー。タスクとスケジュール管理アプリ)を、コーディングしてくれているClaude Code(以降Code)と一緒に、自分のために作っている。HandlerはNAS(家に置いてある常時稼働のサーバー)の上で動いている。

自分専用の道具なので、僕の名前も、家のネットワークも、最初から前提にして作ってきた。それで困ったことは無かった。HandlerをNASの外へ持ち出してみるまでは。

この記事で言う「境目」はCodeが使った言葉で、2つある。1つは、プログラムと僕個人の事情(名前や家のサーバー)を分ける線。もう1つは、部品と部品を分ける線で、アプリ同士やアプリの中の仕組み同士が、お互いの中身を直接いじらず、決まった窓口だけでやり取りすること。

いつか公開するなら、その前提で今から作ることにした

9月に、Handlerを含めて僕が作っているアプリ全部を、いつかオープンソース(中身ごと公開して、誰でも使ったり改造したりできる形)にしてみようかな、とCodeに話した。どこまでを出すかは、まだ使い込んでいないので分からない。ただ、Handlerは個人的にはかなり良い出来だと思っていて、チーム用にも改造できると思った。できるのであれば、その前提で今後の設計を変えていきたい、と伝えた。

Code「できる前提で設計を変えるなら、今から始めるのがいいです。後から足すと大変になるものがあるので、今後の新機能では、この4つだけ守れば大丈夫です」

Codeが挙げたのは、この4つ。

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がチェックリストに沿って、アプリ全体の作りを見直す作業)の項目に入れてもらった。

  1. 部品は単独で動き、ほかとは決まった窓口だけでやり取りする
  2. 個人の値や場所(名前、URL、ファイルの場所)をコードに書かない。設定に出して、何も設定しなければ他人のPCで安全な方で動くようにする
  3. 新しいデータは「誰のものか」を持てる形にする。設定の置き場も、個人のものはその人の手元(ブラウザなど)、チームのものはサーバー、と分ける
  4. データはコードと別の場所に置き、データを消してしまうような変更はしない(後で置き場所を移しても、記憶が消えないように)
  5. ときどき真っさらな環境(空のデータ、別のマシン)で起動できるかを試す

1と2は、9月とこの夜の両方に入っていたもの。1は、9月には「Handlerは単独で完結させる」だったのを、全部の部品に広げた。今回の切り出しでも、Handlerに残っていたMONET専用の表示や説明を外した。2は今回Handlerでやったこと。3は、9月の2つ(誰のものか・設定の置き場)をまとめたもの。この夜新しく入ったのが4と5で、5が入ったのは、NASの上では全部正しく動いて見えていたから。

この線を守っていれば、公開する時は作り直しではなく、足す作業で済む、とCodeは言った。次にMONETのアプリを大きく改造する時も、手を付ける前にこの5つが必ず目に入る。