世界を動かす技術を、日本語で。

「Claude Code」を使った私の生産性向上法

概要

  • Tano入社から6週間での業務改善体験のまとめ
  • 単純作業の自動化とインフラ整備による生産性向上
  • 並列作業や検証プロセスの効率化
  • エージェント活用による役割変化とマネジメント視点の強調
  • 改善ループの継続的な進化と楽しさ

Tano入社6週間での業務改善体験

  • Tano 入社から約6週間の コミット履歴 の変化
  • コミット数 自体は成果指標として不十分だが、 可視化しやすい アウトプット
  • 業務の進め方が根本的に変化したことを実感

単純作業の自動化

  • 入社当初は 全てのプルリクエスト を手作業で作成
    • 変更ステージング、コミットメッセージ記入、PR説明文作成、GitHubでPR作成
  • この作業が 単純作業(grunt work) であることに気づく
  • 自分は「実装者」から「実装するエージェントのマネージャー」へ役割転換
  • Claude Code 向けの /git-prスキル を開発
    • 変更内容を自動要約し、より詳細なPR説明文を生成
    • 単純作業から解放され、 メンタルの負荷軽減 を実感
    • コマンド一発でPR作成、次のタスクへ即移行可能

待ち時間の排除

  • 変更確認のたびに ローカルでプレビューサーバー再起動 の繰り返し
    • サーバービルドに1分ほどかかり、 集中力が途切れる 要因
  • SWC へのビルド切り替えで サーバー再起動が1秒未満 に短縮
    • 作業フローが中断されず、 没入感(flow) を維持

エージェントによるUI検証

  • 以前は全てのUI変更を自分でローカルプレビューし目視確認
    • 自分が 全てのボトルネック となっていた
  • Claude Codeのプレビュー機能 へ移行
    • エージェント自身がプレビューし、UI検証まで自動化
    • 検証の 委任 により、エージェントが自己完結型で稼働
    • 最終レビューのみ人間が担当、 長時間の自律稼働 が可能に

並列作業の最適化

  • ビルド高速化自動プレビュー の導入で新たな課題が顕在化
    • 同時に複数作業を進める際の 環境変数やポート競合
  • ワークツリーごとにポート割り当て を自動化
    • 10個以上のプレビューを同時稼働可能
    • 5つのワークツリーでエージェントが並列に機能開発
    • 計画段階で関与し、 コードレビュー時のみ介入
    • エージェントの 自己検証能力 が重要性を増す
    • レビュー作業も効率化、セットアップ不要で即確認・マージ

インフラ構築の価値

  • 以前は 複雑なUI設計問題解決 に喜びを感じていた
  • 現在は エージェントの生産性を最大化するインフラ構築 が楽しみ
  • マネージャー的役割 へのシフト
  • 地味だが重要な「配管」 (plumbing)作業が、開発体験の質を左右
  • 最も価値の高い仕事 は新機能実装ではなく、 インフラ改善

改善ループと理論

  • 各段階で 異なる摩擦 を排除
    • /git-pr: PR作成の手間 を削減
    • SWC: 待ち時間 を排除
    • プレビュー: 検証作業 の効率化
    • ワークツリー: 並列作業の摩擦 を解消
  • ボトルネック理論(Theory of Constraints) の実践
    • 一つ解決すると次の課題が現れる
  • 作業サイクルの高速化 が新たな楽しさに
    • タスク発行→エージェント実装→プレビュー確認→フィードバック→次タスク発行
    • 注意力の分散がなくなり、開発がエンターテインメント化

/git-prとGraphiteについて

  • コードベース のCLAUDE.mdでは Graphite 推奨
  • 著者は シンプルなgit運用 を好み、/git-prを活用

Hackerたちの意見

「私は“コードを書くツールを使っている”わけじゃない。タスクを始めて、エージェントがコードを書くのを見て、プレビューを確認して、差分を読んで、フィードバックを与えたりマージしたりして、次のタスクを始める。 このワークフローの前提は、クラウドコードがほとんど監視なしでタスクを完了できることなんだ。もし流れがレビュー→受け入れ、レビュー→受け入れって感じなら、管理しやすい。私の個人的な経験では、クラウドはマージ可能なソリューションにたどり着くまでに、かなりの指導と何度もフィードバックが必要なんだ(もしできるとしても)。長時間かかるタスクを多くのフィードバックと交互に進めるのは、残念ながらスケールしない。覚えていられることには限界があって、ある時点では、正確なフィードバックを与えるために今まで何が行われたのかを理解するのに時間を使うことが多くなってしまう。」

「ワークツリーシステムは、コンテキストスイッチの摩擦を取り除いてくれた。複数の作業を同時に進めても衝突しないようにね。これについてはすごく複雑な気持ち。生産的でいろんなスレッドに取り組んでる感じが好きだけど、脳が疲れちゃうんだ。これが大きな要因だと思う。」

「ワークツリーで並行エージェントを使ってるけど、フライクックが20個のバーガーを同時にひっくり返すみたいに、常に目を光らせてるわけじゃない。時々、エージェントを立ち上げて、明日戻ってきたら進捗があって、今の流れを壊さずに済むっていうのがいいんだ。」

「私がこれを扱う方法は、プルリクエストを作ることなんだ(エージェントに最後にやらせるように言う)。それから後でレビューするために戻ってくるから、常にレビューするためのものがキューに入ってる状態になる。」

「マルチエージェントフローとスピードや正確性への影響についての研究が欲しい。運転中にテキストを送る状況みたいに、スキルの自己認識と測定されたスキルの損失が乖離してる気がする。ただ、このアイデアを裏付けるものは何もないけど。」

複数のエージェントを常に使いこなすのって、生産的なのかな?魅力を感じたことはないけど(たまに2人のエージェントならあるかも)。やってるタスクの種類によると思うけど、大きくて長時間かかるタスクならうまくいくかもしれない。でも、その大きな変更をレビューしたりリファクタリングするのが難しくなるよね。複数のエージェントを使ってると、メンタルのコンテキストスイッチや管理のためのツールのオーバーヘッドもあるし。予測可能で繰り返しのタスクならうまくいくかも。私は基本的に1つのタスクに集中するのが好き(短時間なら2つ同時にやったり、他のエージェントに質問したりすることもあるけど)。タスクを小分けにして、レビューするものができるまであまり時間がかからないようにしてる。その後、レビューして、リファクタリングをお願いしたり、次のステップに進むようにしてる(コードに自信があれば、レビューを終える前に少し続けさせることもある)。小さくて自己完結した部分をレビューする方が楽だし、関連する行が少ないから、AIに何を変える必要があるか伝えるのも簡単だよね。

「これは90年代の“週あたりのコード行数”の指標を再パッケージしたものだ。“もっとPRをやってる”ってのはAIが機能してる証拠じゃなくて、ただマージが増えてるだけ。これが良いかどうかは、何をマージしてるかに完全に依存する。私も毎日AIを使ってる。でも、コードが生産に出る量を成功指標として扱うのは、品質やバグ、メンテナンス負担について何も言わないのは、開発者が管理から提案されたときに反発していた考え方そのもの。結局、私たちは悪い指標に反対していたわけじゃなくて、測られることに反対していたんだ!自分たちで選ぶチャンスがあれば、同じナンセンスに飛びついてしまった。」

「結局、私たちは悪い指標に反対していたわけじゃなくて、測られることに反対していたんだ!自分たちで選ぶチャンスがあれば、同じナンセンスに飛びついてしまった。」これは違いのない区別に思えるけど、実際に良い指標があるなら別だけど(それには客観的かつ信頼性のある定量化が必要)。ほとんどの開発者は自分を測りたくないと思ってるんじゃないかな。ただ、AI推進派の人たちは、何かを改善したって説得力のある主張をするために測定が必要だと思ってるだけだと思う。」

もしかしたら著者もそれを知ってるけど、やっぱり話したいんだろうね。記事の最初の行:「コミットは出力の悪い指標だけど、私が持っている最も目に見えるシグナルだ。」

コードの行数は、合計で見ると意味があるけど、個人の貢献を測る指標としては無意味だよね。COCOMOはコードの行数を考慮していて、少なくともアメリカの裁判所が関心を持つ限り、ソフトウェアシステムの価値を見積もるのに正確(十分)だと一般的に受け入れられてる。 https://en.wikipedia.org/wiki/COCOMO

俺もClaudeの使い方を学ぶために色々試してるんだけど、全部新しいことばかりだよ。どんどんアップグレードしていかないとね。

それと、著者が燃え尽き症候群や不安についてのブログ記事を書いてるみたい。もしかしたら、そういうことが全部関係してるのかも。自分を病気にするまで働くのは誇りに思うべきことじゃなくて、何かが壊れてるサインだよ。個人が問題なわけじゃなくて、その人がいるシステムかもしれないし。

複数のエージェントが「異なる機能に取り組んでいる」ってところで、俺はついていけなくなる。どれだけループから摩擦を取り除いても、結局そのコードを見なきゃいけないんだから。5つの異なる機能ブランチを切り替えて、コードをちゃんとレビューするのは、AIの助けがあっても、ちゃんとやるとほとんど生産性の向上を食いつぶしちゃうよ。これを回避する唯一の方法は、ペンシルでレビューをサクサクやることだね。

もちろん、コードの行数は意味のある指標だよ。著者がそれが唯一の意味のある指標だとは言ってないしね。

意味がないわけじゃないよ。ただ、唯一のものとして持ち上げるべきじゃないってこと。時には、いくつかのプロキシを持つのもいいと思う。他の方法でも価値を見ていればね。 /shrug

参考までに、AIを使ってるんだけど、「最大行数/コミット数」じゃなくて、「最小PRコメント数/イテレーション数/バグ数」を最適化してる。最終的には、少ない/シンプルなコードで、より大きなインパクトを目指してるんだ。実際の目標はビジネス価値、そして最終的には人間の価値だよ。それに向けて最適化して、AIをうまく活用していく感じ。具体的には、いくつかのテクニックを試してるんだ:1. 複数のエージェントに要件をゼロから実装させて、彼らのアイデアを自分の考えと組み合わせる。2. ドキュメント(要件、背景情報、用語集など)を集めて、それに向けてエージェントをターゲットにして、役立ちそうな質問を慎重に選んで聞く。3. エージェントに自分のコードをレビューさせて、同意できるレビューコメントを一般的なガイドラインの再利用可能なチェックリストに抽象化して、そのガイドラインを使って次回のコードレビューでエージェントに伝える。時間が経つにつれて、コードレビューがコードベースや取り組んでいる問題にますます適合していくことを期待してる。

俺にとって、コミット数や似たような指標はAIの導入を示すもので、それ以上のものじゃない。今のところ、多くの人にとってそれが目標なんだよね。どれだけ短期的か長期的かは別として。

「“もっと生産的になる”って部分が理解できない。確かに、LLMは私たちの反復を早くするけど、マネージャーたちは私たちがそれを使ってるのを知ってる!彼らは私たちが突然10倍のエンジニアになったなんて思ってない。会社はこれらのツールにお金を払ってるし、すべてのエンジニアがそれにアクセスできる。だから、みんなが同じように生産的なら、ベースラインが上がっただけ…いつもと同じじゃない?LLMの使用を区別として挙げるのは、アセンブリを書く代わりに現代のコンパイラを使ってることを自慢するようなもんだ。確かに速いけど、他の人のコードも速いし…それに、LLMを使ってもっと生産的だって自慢するのは、両刃の剣だからね。使うのは簡単だけど、誰もあなたがプロダクションにプッシュしてるコードのすべての行をレビューしてるわけじゃない(本当に、AIが生成した20以上のファイルを変更して何千行も追加・削除したPRを最後にレビューしたのはいつ?)、だからあなたの変更の長期的な影響がわからない。今はうまくいってるように見えるけど、後でどうなるかは誰にもわからない。」

時々、成果や達成、仕事の成果物は、単に同僚と自分を比べるためだけじゃなくて、もっと役立つことがあるよね。キャリアの初期段階じゃない限り、こういう考え方はちょっと変だと思う。

現代のコンパイラを使うことを自慢してるみたいだ。でも、GHCみたいな現代のコンパイラを使うと、俺が生産性が上がるって言うと、周りの人は俺が変わり者みたいに見るんだよね。

正直な質問なんだけど、複数のエージェントを使ってるなら、通常は数行のコードを作るためじゃないよね。複数のファイルやモジュール、エントリーポイントにまたがる大きな機能を作るためだし、テストも含めてね。ここまではいい感じだけど、その機能がエージェントによって書かれたら…レビューしないの?何が起こっているかを行ごとに読んで、変なところがないかチェックするでしょ?その手動レビューの部分って、エージェントが作るのにかかる時間に比べて、すごく時間がかかるんじゃない?(他人や機械のコードを読むのは、自分で書くより難しいからね)つまり、得られた生産性は無駄になっちゃう。もし生成されたすべての行を手動でレビューしないなら、UIのe2eテストとか、エージェントが書いたユニットテストに頼るってこと?どうなんだろう、もしかしたら「エージェントが書いたものをダブルチェックする」フェーズは過ぎて、「出荷しちゃえ。壊れたらエージェントに直させればいい、手動デバッグはいらない!」ってフェーズに入ったのかも。

これが私にとっての最大のボトルネックなんだ。さらに悪いことに、LLMは冗長になりがちで、触れる必要のないものまで書き直すから、変更の範囲がすごく広くなる。

コーディングエージェントを使って、出荷しない大量のコードを作ってる。でも、コードの出力は出荷してるよ。

私の提案はこれだ:真剣な計画を立てること。計画には制約、範囲、エスカレーション基準、完了基準、テストとドキュメントの計画を含めるべき。単一責任の原則、CQRS、ドメイン分離などを徹底すること。コードをできるだけ理解しやすくするようにする。ドメイン名や関数・変数の命名規則を守って、コードを話しやすくする。コードレビューのボット(Sourcery、CodeRabbit、Codesceneなど)を使う。小さなこと(契約違反、アンチパターンなど)から大きなこと(UXの懸念、アーキテクチャの欠陥など)までキャッチしてくれる。リンティングを徹底する。ルールをできるだけ厳しくして、レビューのボットにルール違反を指摘させる。レビューのボットが頻繁に文句を言うことについて、自分でリンティングを書く。BDDをユニットテストと併用して、ビルド前に.featureファイルを読んでフィードバックを与える。通常のテスト戦略の一部としてプロパティテストを使う。スナップショットテスト、MITMプロキシを使ったe2eテストなど。非自明な複雑さを持つ関数については、制約付きまたは無制約の証明、モデルチェック、未定義動作テストを考慮する。ミューテーションテストやファジングも調べてるけど、まだ学んでるところ。頻繁にコード監査を行うために一時停止する。エージェントにコードの重複、冗長性、誤った仮定、アーキテクチャやドメインの違反、TOCTOU違反を監査してもらう。新しい機能に戻る前に、負債を返済するメンテナンススプリントを自分に与える。エージェントによるコーディングの美しさは、突然これらすべてのための時間ができることだよ。

そうだね。今は生成されたテストケースをレビューしてるだけのことが多いよ。>「壊れたら、エージェントに直させればいい、手動のデバッグは不要!」って?今はすべてのSentryの問題にAIが最初のアプローチをするのは結構トリビアルだよね。

「他の人の/機械のコードを読むのは、自分で書くより難しい」って言うけど、全然そんなことないよ。練習すればするほど簡単になるスキルだから。たくさんのPRをレビューする立場にいると、すぐに上達するし、コードが何をしようとしているかの文脈を知ってると、さらに簡単になる。例えば、チームメイトのPRをレビューしたり、AIに書かせたコードを見たりする時はほぼいつもそうだよね。前にも言ったけど(例: https://news.ycombinator.com/item?id=47401494)、AI生成のコードをレビューするのはすごく軽い作業だと思う。タスクを分解して、コードがどうあるべきかを知ってるから、珍しい問題がすぐに目立つんだ。それに、包括的なテストに頼ってるし、コードよりもテストケースをじっくり見ることが多い。これでもかなりの時間を節約できるよ、特にタスクの範囲が関数からモジュール全体に広がったからね。ただ、同時に複数のエージェントを使ってるわけじゃないから、AIを使った時の生産性はAIなしよりもずっと高いけど、聞いたことがある信頼できる報告ほどではないかな。彼らが個人的にコードをレビューしてるかは分からないけど(例えば、エージェントにレビューさせてるのかな?)、正確性のための戦略は持ってるみたい。

それはブレンドだね。プロダクションシステムには、人間のレビューが必ずしも必要ない変更がたくさんある。ヘルプリンクを追加したり、タイプミスを直したり。強力なCI/CDやシンプルなUI改善、安全な実験を伴うアップグレードもある。フィーチャーフラグや段階的リリースの後ろで安全にスキップできる機能もある。適切なツールを使って進めていけば、かなりのことができるんだ。細かく分ければ、最小限の人間の介入で安全にデプロイできることが多い(もちろんドメインによるけど、多くのシステムではね)。全体のプロセスを見直すことを目指してるんだ。ここにちょっと書いたよ: https://jonathannen.com/building-towards-100-prs-a-day/

ちょっと脱線かもだけど、Claude Codeは当たり外れがあるなと思う。無駄なコードを削除したり、Claudeに「なんで別々にしてるの?」って聞いたりするのに結構時間を使ってる。Claude:「いい指摘だね、特に理由はないよ…」みたいな感じで。すごいと思うのは、新しいことを学ぶ時で、最近flutter/dartの開発を始めたんだけど、Claudeにその部分について教えてもらったり、説明してもらったりしてる。これは本当に革命的だと思う。1週間で本やマニュアルを読まずにflutterで何かを作れるようになった。まるで話す百科事典みたいで、専門家がいつでも使える感じ。みんなこうやって使ってるのかな?それとも俺だけ取り残されてるのかな?やってる時はいつもスタートレックを思い出す。Claudeに代替案を聞いて新しいシステムを設計したら、問題に対して考えたこともない選択肢を提案してくれた。これには驚いたよ。結局、Claudeは世界中の本やマニュアルを全部読んでるわけだから、正しい質問をするだけなんだ。

AIを使っていくつか探求的な学習をしてみたけど、学ぶのにすごく役立つね。俺の意見では、AIで経済をめちゃくちゃにしてるかもしれない。AIはより良い労働者を育てるべきで、一人に三人分の仕事をさせるために雇われるべきじゃない。AIの力を使って学習をスムーズにし、専門知識を高めることが適応の目標であるべきだよ。もちろん、AIを仕事のアシスタントとして使うのは強力だけど、AIを過剰に宣伝するCEOたちのせいで、経済全体に悪影響を及ぼしてるのが本当に問題だと思う。特に、今のマーケティングが次の世代にAIが完璧に置き換えられる役割を放棄させる原因になってるからね。まるで都市化の人口爆弾がステロイドを使ってるみたいだ。

これが俺がめっちゃ期待してる唯一のユースケースなんだ。これに関しては革命的だよね。賛成!

多くの人がこうやって使ってるよね。弱点を回避しようとするんじゃなくて、強みを活かしてる感じ。「YをするためのX言語のイディオム的な方法は?」って聞くと、数秒でしっかりした役立つ答えが返ってくる。でも、ただの優れたツールであって、終末的なものでも、みんなを解雇するためのものでもないから、ちょっと過剰に期待されがちなんだよね。

無能って呼んでもいいけど、よくわからない。 > SWCにビルドを切り替えたら、サーバーの再起動が1秒未満になった。SWCって何?ブログは俺がそれを知ってる前提なんだけど。これって https://swc.rs/ のこと?それともこれ https://docs.nestjs.com/recipes/swc のこと?

あなたが提供したリンクでは、swcは同じものだよ。

両方のリンクは同じで、この文脈でのSWCはおそらくSpeedy Web Compilerのことだね。すごく早くトランスパイルするけど、型チェックはしないんだ。

同じものだと思うよ。2つ目のリンクは、swcをnestjsで使う方法についてだね。

私はClaude AIを使ってるけど、Claude Codeじゃなくて、これのおかげで生産性がかなり上がったよ。ただ、コミット数はあまり信頼できる指標じゃないっていうのには同意する。コミットが多いからって、生産性が高いわけじゃないからね。

もっと多くの人が、LLMを使って認知負荷を軽減することに集中すべきだと思う。脳を並列処理やオーバーロードするのではなくてね。人間はマルチタスクが苦手だってことを受け入れる必要があるし、LLMがそれを改善してくれるわけじゃない。私はClaudeを使って実装計画を立て始めたけど、Claudeに実装させてから何をしたのか考えるのではなく、自分で手を動かして実装するように指示してる。このおかげで、開発プロセスの各ステップをちゃんと理解できるし、重要なところで選択肢を変えることができる。デフォルトのモードだと何百行ものコード変更が出てきて脳がオーバーロードしちゃうけど、このやり方だと実装計画を追う認知負荷が軽くなって、細かいところと全体像の両方に集中できる。機械的なサブタスクについては、Claudeにやってもらうことで時間を節約できるよ。

こんにちは!OPです。たくさんのコメントが、オーバーロードやコンテキストスイッチ、脳の混乱についての共通テーマを持っているのを見て、私にとって重要な違いを浮き彫りにしてくれたよ。これには3つのポイントがあると思う。1. 一度に一つのことだけに取り組んで、しっかりした塊を作るようにしてる。2. エージェントが長く動けるようにして、しっかりした塊にはそれに見合った時間を与えてる。並行してすべての変更を見守るのは本当に嫌だからね!(これをどうやってやってるかがこの投稿の焦点だよ)3. 新しい小さなアイテムやバグ修正が出てきたときには、流れの中でそれ専用のスレッドを作るから、放っておいても大丈夫で、時間ができたときに戻れる。これが私にはうまくいくんだ。保留中の他のX個のバグについて考えなくて済むから、今やってることに集中できる。私が考えなきゃいけなかったのは、このワークフローを自分の強みに合わせてどう適応させるかだった。私はコードレビューや一つのことに集中するのが好きだけど、すぐに気が散っちゃうからね。トレードオフとして、新しいことが出てきたときにはエージェントにコンテキストをオフロードするのが理想的だったから、メインタスクに集中し続けられる。PRの数は多く見えるかもしれないけど(実際多いけど)、私は毎日一つの大きなことに集中してて、他は小さなことだから、結果的に製品の進捗がかなり早くなるんだ。