愛用ツールが有料化した日
「なんでサブスク払わないといけないんだ」という怒りが原動力です。
愛用ツールが有料化した日
ある朝、いつものようにVSCodeを開くと、課金を促すダイアログが現れた。
毎日使っていたコード圧縮系の拡張機能が、いつの間にか有料プランに移行していた。
怒りと言うほどじゃない。でも、払いたくない。 それ以上に、「これ、仕組みを理解すれば自分でも作れるんじゃないか?」 という気持ちが勝った。
これは、その顛末の記録だ。
まず「どうやって圧縮しているのか」を調べた
コードをAIに渡すとき、何が問題なのか整理すると:
- ファイルをそのままコンテキストに突っ込む = トークンが爆発する
- 特にRustやTSの大きいファイルは目も当てられない
主流の圧縮手法は2つあった。
① ASTベース圧縮
コードを構文木として解析し、推論に不要な部分(コメント・空白・冗長な構造)を構造的に除去する。文字列置換とは次元が違う精度。
② シンボルグラフ + BM25検索
コード内の関数・クラス・変数をグラフとして管理し、AIへの質問に関係するシンボルだけをスコアリングして引っ張る。「全部渡す」から「必要な部分だけ渡す」への転換。
「……これ、実装できるな。」
TypeScript + Rustで作ることにした
構成はシンプルに:
| レイヤー | 技術 | 役割 |
|---|---|---|
| フロント | TypeScript | VSCode拡張のUI・ロジック |
| コア | Rust | ASTパース・圧縮エンジン |
| 通信 | JSON-RPC 2.0 | 両者のブリッジ |
なぜRustか?「速い」「メモリ安全」は本当だが、正直に言うと 「Rustで何かを完成させたかった」 という動機が半分ある。
実装の大部分はAI(Claude Code)と一緒に書いた。ここで面白い事実がある。
Claude Codeに、Claude Codeのトークン代を節約するツールを書かせた。
VSCode拡張開発で2日溶かした話
vscode モジュールはNode.js環境でそのままimportできない。テストを書こうとすると即死する。
// jest.config.ts に追加するまで2日かかったおまじない
moduleNameMapper: {
'^vscode$': '<rootDir>/__mocks__/vscode.ts'
}
調べても調べてもStackOverflowに答えがなく、結局VSCode公式リポジトリのissueを掘り続けた。AIに聞いても最初は的外れな回答しか返ってこなかった。
こういう「公式issueを掘る」スキルが、AI時代でも消えないと思っている。
W-8BENフォームという完全に想定外の障壁
「コーヒー一杯分だけ寄付ボタンをつけよう」と思った。Stripeで10分で終わる作業のはずだった。
甘かった。
Stripeの本人確認 → W-8BENフォームの提出を求められる → W-8BENとは米国の非居住外国人向け税務申告書 → IRSの公式PDFを読む羽目になる
VSCode拡張を公開するために米国の税務フォームを読む展開、誰も教えてくれなかった。
加えてMarketplace登録はAzure DevOps経由で、「なぜここでAzureが…」と何度も思った。
結果:圧縮率74%
実際に自分のリポジトリ(TypeScript + Rust混在)で計測した。
COMPRESSION RATIO: 74%
クエリあたり最大33.8Kトークンの削減。
体感ではなく、ツール上に表示される実測値だ。
有料ツールに払うはずだったお金を、道具を理解することに使った。それで74%削れたなら、悪くない結果だと思っている。
今後やること
Python・Goのサポート追加
シンボルグラフの精度向上
寄付ボタンの設置(W-8BEN、まだ格闘中)
GitHub: tsucky/comP
使ってみた感想・フィードバック・スターどれも励みになります。