デジタルガーデン
同城二璽:一台の机の上の二つの官印、深链受領の鉢合わせ事件、そして「同時」二字への唯一の狭き門
一つの城に二柱の活仏を祀る——一台の PC で ZCode を二つ動かし、それぞれ別のアカウントで、それぞれの枠を使う。この素朴な願いの実現可能性審査は、この日、ソースの立証から実走での転倒まで全工程を歩き切った。
一、機構の立証:資格情報は文書棚に従う
ローカルの Electron アプリの asar から掘り出した証拠連鎖は完全で、かつ体面を保っていた。ログイン資格情報はデータディレクトリ内の v2\credentials.json に眠り、一つのファイルは「現在有効なただ一つのアカウント」のみを記す。データのルートディレクトリは環境変数 ZCODE_DATA_BASE_DIR が決める。第二のインスタンスに別のディレクトリを指させれば、それは白紙一枚であり、別のアカウントを迎えられる。シングルインスタンスロックは Electron の userData ディレクトリと結びつくので、ZCODE_DESKTOP_USER_DATA_DIR を改めれば各々の錠が各々の門を守る。プログラム全域を捜しても書き込まれた listening port は一つもない——二インスタンスに争う港など存在しない。主プロセスは算出したデータディレクトリを働き者のサブプロセスへ能動的に渡す。この道は公式も使う正道であり、抜け道ではない。
二、鉢合わせの事件:受領状が違う家へ
唯一の落とし穴はログインの最後の一歩に隠れていた。OAuth の流れはシステムブラウザを借りる。認可の後、ブラウザは zcode://oauth/callback へ蹴られ、レジストリには ZCode.exe -- "%1" とある——環境変数なしで。よって受領が新たに起こすプロセスは既定データディレクトリ、すなわち A の家に帰属する。実測はこれを裏切らなかった。14:08 に B インスタンスは自らの資格情報を書き終え、14:10 に受領は A の「現行ログイン」を B で押しのけた——A の画面では plan 権限が「落ちた」と映る。だが実検の結果、資格情報の本体は一項も失っていなかった(二件の coding-plan と token は全て在位)。落ちたのは「どのカードを今使うか」のスイッチだけ。設定で切り戻すか再ログインすれば全て復する。ブラウザを替えても無駄である——配達員は替えられても、受取先住所は管理台帳に書かれている。二つの退路を用意済み。B に API キーを直接貼らせる(ブラウザを通らない)、または「書類引っ越し法」でログイン状態を先に写す。家訓はこう定まった。A は気安くログインせよ、B はみだりにログインするな。
三、全土普查:三経路のうち「同時」へ通じるのは一筋
公式文書とコミュニティの道具を捜し歩いた結果は明快だった。公式のネイティブ複数アカウントは設定内で切り替えるだけで、同時に働けるのは常に一号。コミュニティのアカウントスイッチャもまた、アプリを閉じ、ファイルを差し替え、再起動する要がある——輪番制の別名である。「同時」の二字に対し、公式にもコミュニティにも現成品はない。双インスタンスこそ唯一の狭き門であり、その最難関(B の初回ブラウザログイン)はすでに越えられた。データの物理分離は徹底している。二組のディレクトリ、二組のワークスペース、二組のタスク庫、互いに相手の存在を知らず。唯一の戒律は、同じプロジェクトフォルダを二インスタンスで同時に改めないこと。
四、狭き門の経済学
この工事の真価は一台の PC を節約したことではなく、一つの統治形態を確認したことにある。**分離はディレクトリによって、プロトコルによってではなく。独立は環境変数によって、再起動によってではなく。**資格情報がファイルに住み、身分がディレクトリに住むすべてのシステムは、同じ方略でこの「一城二仏」の格局を複製できる——そしてその機構は公式の正道そのものなので、更新によって失効しにくい。
コメント