今日(2026-05-19)、yukihamada 配下の公開リポジトリのうち約21本を private に落とした。
衣食住14個を並べたポートフォリオ整理の話で「渡す × セキュリティ」が一番手薄だと書いた、その続きだ。手薄だとわかった瞬間、もう1週間も放置できなかった。
結論
- 公開のままにするのは10本だけ(後述)。残り21本は private に移した。
- OSSはやめたが、ソースは閉じない。wearmu.com で Tシャツを買ってくれた人には、private に移したリポジトリのソースを読めるようにする。これを MU Source Access(MSA)と呼ぶことにした。一行で言うと「Tシャツ買うと中身全部見える」。
- 公開のままにするのは、お客様の接点として動いているサービスの本体だけにする。
「速く出すために全部公開で書いていた」フェーズから、「渡せる状態まで硬くしてから、選んで開ける」フェーズに移る、という宣言だ。
👉 今すぐTシャツを買って
/sourceに入る — ¥4,900〜 · 全21リポにアクセス · 最初の100名は将来追加リポも自動アクセス
なぜ — セキュリティの実情
今週の前半に、自分の全リポジトリで Dependabot を一斉に有効化した。出てきたアラート数を見て、椅子から半分立ち上がった。
| リポジトリ | 開いている脆弱性アラート |
|---|---|
| banto | 98 |
| soluna-web | 79 |
| stayflowapp | 55 |
| nanobot | 51 |
| その他 fleet 全体 | 300+ |
合計で約600件。これは「全部 critical」という意味ではない。多くは依存ライブラリの推移的な脆弱性で、自分のコードが直接呼んでいるわけでもない。だけど、**公開リポジトリで600件の未パッチアラートを抱えている状態は、攻撃側にとって「どこを叩けばいいか地図を渡しているのと同じ」**だ。
依存ライブラリ経由の supply-chain 攻撃は、もはや珍しくない。さらに公開リポジトリで怖いのは、コミット履歴に残った過去のシークレットだ。革命前夜の勢いで書いたコードには、消したつもりで履歴に残った API キーや、デバッグ用にハードコードした URL が混ざる可能性がある。git rotate ではなく git rewrite 級の作業を、21本同時にやるのは現実的じゃない。先に閉じるほうが正しい順序だ。
加えて、自分のコードそのものにも実バグが見つかっている。
- nanobot #43 —
/api/v1/chatでセッション ID を共有してしまうケースを発見した。別ユーザーの会話に prompt injection を差し込めることが確認されていた。 - nanobot #42 — CORS が任意の Origin を反射していた。クロスオリジンで認証付きリクエストを通せる構造になっていた。
両方とも自分でレポートを上げて、自分で直すつもりで放置していたものだ。公開 issue として置いておく時点で、攻撃側に「ここに穴があります」と看板を立てていた。triage 前に踏まれていたら、と考えると胃が痛い。
4月に書いたMythos のエントリで「初回試行 83% でエクスプロイトを書く時代」と言った。あれから1ヶ月、攻撃側のコストはさらに下がっている。防御は全部正しいが要件、攻撃は一箇所抜ければ勝ちの非対称性は、AIによってさらに開いた。公開で書き続けるコストが、明らかに重くなった。
しかしOSSは死んだのか? — いいえ
ここを誤解されたくないので明示する。僕はOSSを否定しない。OSSで育ったし、OSSに返したいと今でも思っている。
ただ「世界中の誰でも読めて、誰でもPRを送れる」という極まで開く方式は、僕一人でメンテしているプロジェクト群には重すぎるコストになった、というだけだ。
そこで切り替えるのが MU Source Access(MSA)だ。
- wearmu.com で Tシャツを買ってくれた人は、private にしたリポジトリ群のソースを読めるようにする。仕組みはシンプルで、Stripe の購入記録に紐付いたメールでログインしたら、
/sourceページから zip がダウンロードできる。NFT もウォレットも要らない。 - Tシャツを買ってくれている時点で 「読む人が誰か特定できる」状態で開ける。
- 改変・派生・自分用デプロイは MSA 対象者の自由にしてもらう。商用再配布だけはこちらと話す。
つまり「閉じた」のではなく、読む権利を Tシャツに紐付けた、というのが正確な表現だ。買ってくれた人にとってはコードを読む価値が上がる。ただ乗りはできなくなる。それでいい。
時期は約束しない。MSA が正式に開く日は、ちゃんと硬くなってからだ。
公開のままにするもの
これはお客様の接点として動いている、または公開そのものが価値になっているプロジェクトだけ残す。
- yukihamada — GitHubプロフィール
- koe-device — koe.live のハードウェア / ファームウェア。BOM $24 の音声デバイスは、回路図とファームを公開しているからこそ意味がある。
- farnsworth-ifc — IFC(核融合)系の実験コード
- nanobot — teai.io / chatweb.ai のバックボーン。公開 issue で直す#42/#43 はその場で直す。
- mu-brand — MU のブランドアセット
- enablerhq — 会社のサイト系
- mini-agent-c — ローカルLLMエージェントの最小実装
- takezo-abe — 公開作品
- yukihamada.jp — このブログそのもの
- soluna-web — SOLUNAの公開サイト
ここは依存パッチを優先で当てる。ユーザーが触れる接点は、開いているほうが信頼につながる。これは絶対に維持する。
これからのリリースモデル
過剰には約束しない。今わかっている範囲だけ書く。
- 新規プロダクトは private start がデフォルトにする。書き始めの粗いコードを世界に晒さない。
- 硬くなったものから、MU Source Access に追加する。MSA 対象者はコミット単位で読める状態にしたい。
- 「ユーザー接点として公開する意味があるもの」だけ public に出す。プロフィール、デバイスのファーム、ブログ、サイト本体、など。
- 依存パッチは public/private 問わず最優先で当てる。Dependabot は全リポジトリで常時オン。
「公開で速く書く」のは、もう自分一人では引き受けきれない規模になった。次のフェーズは「選んで開く」だ。
OSSへの恩は、別の形で返す。MU Source Access を硬く作って、読みに来てくれた人が「これは公開で配るより、ここで読むほうが面白い」と思える状態にする。それが今の僕にとっての一番誠実な OSS への返し方だと思う。
床下を強くする時間が、まだ続く。
👉 Tシャツ買って中身全部見る
¥4,900〜 · 21リポ + 将来追加 (First 100 限定) · NFT・ウォレット不要 · メールだけで照合