はじめに
今週流れてきたトレンドの中から、実際に手を動かして確かめたものをまとめる。Git worktreesはずっと存在は知りつつ本腰入れて使ったことがなかった。Go 1.26のスタックアロケーション改善も気になっていたし、Copilotのトークン効率話は業務への影響が直接あるので読み込んでおきたかった。
Git worktrees、2015年から存在していたらしい
GitHub Blogの記事を読んで改めて気づいたのだが、git worktreeは2015年のGit 2.5から使えるコマンドだ。最近になって急に話題になっているが、自分もずっと素通りしていた。
試してみたら、「hotfixしたいけど今の作業が途中でstashするのも微妙」という状況がそのまま解決された。
# 別ディレクトリに新しいworktreeを切る
git worktree add ../my-project-hotfix hotfix/urgent-fix
# 確認
git worktree list
# /Users/user/my-project abc1234 [main]
# /Users/user/my-project-hotfix def5678 [hotfix/urgent-fix]
my-project-hotfixディレクトリに移動すれば、stashなしでhotfixブランチの作業ができる。.gitは共有されているのでコミット履歴も同じものが見えるし、IDEを2つ立ち上げて並行作業もできる。
ハマったのは、同じブランチを複数のworktreeでチェックアウトしようとするとエラーになる点。
git worktree add ../another main
# fatal: 'main' is already checked out at '/Users/user/my-project'
Claude Codeのworktree機能もこれを使っているんだなと改めて合点がいった。AI駆動開発では「レビュー用のworktree」「実験用のworktree」を並行して持つのが自然な運用になりそうで、むしろ今まで使っていなかったのが不思議なくらいだった。
GitHub Copilotのトークン最適化、体感が変わっていた
GitHub Blogに「Getting more from each token」という記事が出ていた。Copilotがコンテキストをより賢く扱えるようになり、トークン効率が上がったという話。
業務で使っていて最近「的外れなファイルの内容を参照している」パターンが減ったと感じていたのだが、この記事を読んで納得した。モデルルーティングの改善で、シンプルな補完は軽いモデルに流してクレジットを節約しつつ、複雑な質問には重いモデルを使う振り分けが入ったらしい。
実感として一番変わったのは@workspaceをつけたときの精度。以前は関係ないファイルを引っ張ってきて「そこじゃない」となることが多かったが、最近はかなりピンポイントになった。自分でコントロールできる部分は限られるが、@workspaceと#fileの使い分けを意識するだけでもコンテキストの無駄遣いが減ることに気づいた。
Go 1.26の//go:fixとスタックアロケーション改善
Go Blogに二本面白い記事が出ていた。
一つ目は//go:fix inlineディレクティブ。古い関数にこのディレクティブを付けると、go fixコマンドで呼び出し元のコードが自動的に新APIに置き換わる仕組みだ。
// 古いAPIに //go:fix inline を付けておく
//go:fix inline
func OldFunc(x int) int {
return NewFunc(x, defaultOption)
}
# 利用者側はこれだけで移行完了
go fix ./...
# OldFunc(x) → NewFunc(x, defaultOption) に自動置換
社内ライブラリで似たような手作業マイグレーションを何度もやってきたので、これは使えると思った。「古いAPIを使っているコードを全部直してください」という依頼が来るたびに地道にgrepして書き換えていたのが、ライブラリ側で移行パスを定義しておけばgo fix一発になる。
二つ目のスタックアロケーション改善。Goのエスケープ解析が強化されて、ヒープではなくスタックに積まれるオブジェクトが増えたという話。手元の既存コードでベンチマークを再実行したところ、allocs/opが減っていることを確認できた。GCプレッシャーが気になるコードパスで効いてくる改善で、チューニング目的で-gcflags='-m'を読んでいたコードがそのまま恩恵を受けられた。
まとめ
今週で一番すぐ業務に使えると感じたのはGit worktrees。「stashしてブランチ切り替え」が体に染み付いていたが、並行作業の場面ではworktreeの方が断然スッキリする。Go 1.26の//go:fixは社内ライブラリの運用改善に取り入れたい。Copilotのトークン最適化は自分でコントロールしきれる話ではないが、@workspaceと#fileの使い分けを見直す契機にはなった。