以下の内容はhttps://www.pandanoir.infoより取得しました。


claudeをこき使う、本当に

claude codeを使い始めて1ヶ月。こいつのポテンシャルの高さはまざまざと理解した。

  • コードベースで検索して的確に情報を集める
  • 一定水準のコーディング力 (人間にはまだ及ばない)
  • 適切な観点でのレビュー

つまり、1人のエンジニアを代替する程度のことは既にできてしまう。が、逆に言えば まだ1人のエンジニアを代替する程度の能力しかない のだ。単一のインスタンスだと。

claudeは既存のコーディングの延長で考えてはいけない。 つまり、我々が今すべきなのはclaudeのマルチ管理だ。

数人のclaudeをしばく

claudeは何人でも起動できる。なら遊ばせておくなんてもったいない。1タスクに2人claudeを投下したってよい のだ。1人には懸念点の洗い出しをやらせつつ実装も進めてレビューもしていくみたいなことだってできる。

こっちはひたすら次の指示を考え、それを打っている間に別のclaudeがタスクを完了し、指示を出したらその完了したclaudeに次の指示を出す。そういうゲームだ。

既存のコーディングの延長では戦えない

今までは自分でコーディングする必要があったので1つのタスクにかかりきりという感じだったが、claude codeによって完全に変わった。 我々は次々と指示を出し続けるのが仕事なのだ。 今までと同じ感覚で1つのタスクにclaudeをアサインしたから作業おしまい、なんてしてる暇はない。どんどんとclaudeを立ち上げ、次のインスタンスに指示を出し続ける必要がある。

最近だとgit worktreeも便利だ。「これをレビューしたいからworktreeを切ってそっちで作業して」みたいな指示を出せば作業用のディレクトリを汚さずに同時並行で作業ができてしまう。

ミーティング中に指示を出せないのがもどかしい

弊社の上長で「ミーティング中に指示を出せないとソワソワする」と言っていた人がいたが、完全に気持ちがわかる。 今の俺に課せられてるのは指示出しだから 。指示は一度出せば勝手に回ってくれる。なので遊ばせておく理由がないのだ。

完全自律駆動もさせられる

zenn.dev

今朝、こちらの記事を参考にしながらセットアップをした。この記事は 確認ダイアログなしでclaudeを自走させ続けるための設定方法 が書かれている。もちろん安全性には気をつけていて、サンドボックスを介してclaudeがアクセスできるファイルを制限している。

これを設定したことで、ますます俺の役割が指示出しへと傾いた。指示を出したらノンストップで成果物が上がってくる。確認フォームで止まることがなくなった。ますます加速していく一方だ。指示を出し、確認し、別のインスタンスに指示を出す。これをひたすら繰り返すだけの仕事。

終わり

今回話したことに近い機能として、エージェントチーム という機能もあるらしい。課長AIと作業員AIに分かれて、俺は課長AIに指示を出して課長AIが作業員に指示を出すという構成らしい。明日試してみる予定。

どんどんとAIは進化していくが、プログラマの仕事は当分なくならなさそうだ。

ブログに書くことなんもない

久しぶりに先月は全くのゼロ件だった。原因ははっきりしている。2月の頭からclaude codeを使い始めたから。

今までのブログネタは仕事中に見つけることが多かった

今まで、ブログのネタは仕事で手を動かしているときに見つけることが多かった。例えばこの辺。

こういうのは手を動かして調査してるときに「そう言えばどうなってるんだ?ちゃんと調べておくか…」と思って書くことが多い。が、claude codeなどを使うと基本的にそういう悩みにぶち当たることが少なくなった。さらっとわかりやすく解説してくれるし。

そもそも情報をまとめるモチベが消えた

今までは「情報源はあるけどわかりづらすぎるわ!!だったら俺がまとめ直してやる」というモチベが結構あった。でも今はAIが良い感じに整理してくれる。claude codeならコードベースを漁って情報を整理するみたいな芸当すらできる。 調査タスクはほぼ消えたと言っても過言でない。

自分用にチューニングしたまとめ記事が欲しい欲はブログの大きい動力源だったので、それがなくなったのは痛い。

アーキテクチャ論なども大幅な変更が迫られている

今までいくつかアーキテクチャ論とかそういう話を書いたりもしてきた。でも、それもモチベが薄れつつある。なぜなら AIによって今まで実質不可能だった開発手法が取れるようになってきたから。

例えばテストをしっかり拡充しておけば、現状の挙動を維持しつつ中身を丸ごとすり替えるってことだってできる。当然ながら人間がこれをやろうと思ったら工数が高くてとても現実的ではない。が、AIならできてしまう。つまり、リアーキテクチャをするコストが体感として以前の1/10程度にまで下がっている。

また、そもそも今までのアーキテクチャ論は人間のスペックを前提としたものだった。しかしAIの登場でその前提が崩れた。今はアーキテクチャ論自体が大きく変化を迫られており、新規のブログネタを悠長に探すようなフェーズでない。

AI関連の記事はそんなに書きたくない

AI関連の記事を書けば良くない?という話もあると思うが、単純につまらんのでしたくない。

まとめ

けっっっっっっっっっっっっこうやばい変化だなぁと思っている。今後もしばらくずっと同じ状況なんじゃなかろうか。ブログネタを仕事中に発見するのも難しい、情報をまとめるモチベも薄れた、アーキテクチャ論も書けない。でもどうしようもねえよなぁ…

which-key.nvimで覚えづらいキーバインドにアイコンを設定 & グルーピングする

アイコンを付け、操作内容でグルーピングするようにした。個人的にはこれ入れてから結構コマンドを打ちやすくなった。

実際の画面

<c-w>

z

g

設定

return {
  {
    'folke/which-key.nvim',
    opts = {
      sort = {
        -- descの先頭についている[xxx]を元にソート
        function(item)
          local group = item.desc:match('^%[(.*)%]')
          return group and '0:' .. group or '1:'
        end,
        'local', 'order', 'group', 'alphanum', 'mod',
      },
      spec = {
        -- ウィンドウ関連のキーマップ
        { '<c-w>h', desc = '[focus] Go to the left window', icon = '󰜱', },
        { '<c-w>j', desc = '[focus] Go to the down window', icon = '󰜮', },
        { '<c-w>k', desc = '[focus] Go to the up window', icon = '󰜷', },
        { '<c-w>l', desc = '[focus] Go to the right window', icon = '󰜴', },
        { '<c-w>w', desc = '[focus] Switch windows', icon = '', },
        { '<c-w>H', desc = '[move] Move window to far left', icon = { icon = '', color = 'green' }, },
        { '<c-w>J', desc = '[move] Move window to far bottom', icon = { icon = '', color = 'green' }, },
        { '<c-w>K', desc = '[move] Move window to far top', icon = { icon = '', color = 'green' }, },
        { '<c-w>L', desc = '[move] Move window to far right', icon = { icon = '', color = 'green' }, },
        { '<c-w>s', desc = '[split] Split window', icon = { icon = '󰤻', color = 'yellow' }, },
        { '<c-w>v', desc = '[split] Split window vertically', icon = { icon = '󰤼', color = 'yellow' }, },
        { '<c-w>q', desc = '[close] Quit a window', icon = { icon = '󰅖', color = 'red' }, },
        { '<c-w>o', desc = '[close] Close all other windows', icon = { icon = '󰅗', color = 'red' }, },
        { '<c-w>+', desc = '[size-h] Increase height', icon = { icon = '󰡏', color = 'purple' }, },
        { '<c-w>-', desc = '[size-h] Decrease height', icon = { icon = '󰡍', color = 'purple' }, },
        { '<c-w>_', desc = '[size-h] Max out the height', icon = { icon = '', color = 'purple' }, },
        { '<c-w>>', desc = '[size-w] Increase width', icon = { icon = '󰡎', color = 'purple' }, },
        { '<c-w><', desc = '[size-w] Decrease width', icon = { icon = '󰡌', color = 'purple' }, },
        { '<c-w>|', desc = '[size-w] Max out the width', icon = { icon = '', color = 'purple' }, },
        { '<c-w>T', desc = 'Break out into a new tab', icon = '󰓩', },
        { '<c-w>x', desc = 'Swap current with next', icon = '󰓡', },
        { '<c-w>d', desc = 'Show diagnostics under the cursor', icon = '', },
        { '<c-w>=', desc = 'Equally high and wide', icon = '', },

        -- z系
        { 'za', desc = '[fold] Toggle fold under cursor', icon = { icon = '', color = 'yellow' } },
        { 'zA', desc = '[fold] Toggle all folds under cursor', icon = { icon = '', color = 'yellow' } },
        { 'zi', desc = '[fold] Toggle folding', icon = { icon = '', color = 'yellow' } },
        { 'zc', desc = '[fold] Close fold under cursor', icon = { icon = '󰘕', color = 'red' } },
        { 'zo', desc = '[fold] Open fold under cursor', icon = { icon = '󰘖', color = 'cyan' } },
        { 'zd', desc = '[fold] Delete fold under cursor', icon = { icon = '󰁮', color = 'gray' } },
        { 'zf', desc = '[fold] Create fold', icon = { icon = '󰐕', color = 'gray' } },
        { 'zC', desc = '[fold] Close all folds under cursor', icon = { icon = '󰘕', color = 'red' } },
        { 'zO', desc = '[fold] Open all folds under cursor', icon = { icon = '󰘖', color = 'cyan' } },
        { 'zD', desc = '[fold] Delete all folds under cursor', icon = { icon = '󰁮', color = 'gray' } },
        { 'zE', desc = '[fold] Delete all folds in file', icon = { icon = '󰁮', color = 'gray' } },
        { 'zR', desc = '[foldlevel] Open all folds (set foldlevel=max)', icon = { icon = '󰘖', color = 'cyan' } },
        { 'zM', desc = '[foldlevel] Close all folds (set foldlevel=0)', icon = { icon = '󰘕', color = 'red' } },
        { 'zr', desc = '[foldlevel] Fold less (foldlevel +1)', icon = { icon = '󰝡', color = 'cyan' } },
        { 'zm', desc = '[foldlevel] Fold more (foldlevel -1)', icon = { icon = '󰝠', color = 'red' } },
        { 'zx', desc = '[foldlevel] Reapply folds (reset to foldlevel)', icon = { icon = '󰑐', color = 'yellow' } },
        { 'zb', desc = '[cursor] Bottom this line', icon = { icon = '󰝓', color = 'purple' } },
        { 'zt', desc = '[cursor] Top this line', icon = { icon = '󰝕', color = 'purple' } },
        { 'zz', desc = '[cursor] Center this line', icon = { icon = '󰝔', color = 'purple' } },

        -- g系
        { 'ga', icon = '󰊄', group = '[case] converting text case' },
        { 'gd', icon = '󰅬', desc = '[lsp] go to definition' },
        { 'gg', icon = '󰘀', desc = 'First line' },
        { 'gO', icon = '󰅬', desc = '[lsp] Lists all symbols in current buffer in location-list' },
        { 'gp', icon = '󰅬', desc = '[lsp] peek definition' },
        { 'gr', icon = '󰅬', group = '[lsp] LSP' },
        { 'gt', icon = '󰅬', desc = '[lsp] go to type definition' },
        { 'gu', icon = '󰊄', desc = '[case] Lowercase' },
        { 'gU', icon = '󰊄', desc = '[case] Uppercase' },
        { 'gv', icon = '󰒉', desc = 'Last visual selection' },
      },
    },
  },
}

forEachの使い方1選

forEachって要らなくない?と思ってたんだけど使い道あるなと気づいたので紹介

nullableなリストに対してループしたい時に使える

nullableList?.forEach(item => {})

これはfor-ofで書こうと思うとちょっとダルい

if(nullableList != null)
  for (const item of nullableList) {}

// あるいは
for (const item of nullableList ?? []) {}

どっちも微妙だ。こういう時はforEachを使うと綺麗に書ける

デスク環境2026

去年のもの→ デスク環境2025 - Panda Noir

デスク全景

デスク全景

横のとこ

ディスプレイ上の小物

デスク周辺機器

  • デスク: FLEXISPOT E8B
  • キーボード: Moonlander
  • マイク: blue Yeti X
  • ウェブカメラ: Elgato Facecam
  • ディスプレイ: ASUS 4Kモニター PA329CV

機器関連は全く変わってない。 大体満足してる。でも、重量的に結構厳しくなってきているので、デスクの新調とモニターアーム導入はやりたくなってきている。今年中に結婚して引っ越しするぞという決意なので、そのタイミングでやりたい。

new: 巻取式充電ケーブル

巻取式充電ケーブル

2025年は巻き取り式の充電ケーブルをデスク下に設置した。すこぶる便利。デスクの上に充電ケーブルが散らばらず、ストレスフリー。

使ってるのは TORRAS FlexLine 67W。固定にはホームセンターで適当に買ってきた金具とゴム材を使ってる。金具をネジ止めして、ゴム材でずれないようにしている感じ。

ただ、これ買った直後に知った Anker Nano Charging Stationほぼ同じ値段でより多機能だった。これはデスク下に括り付ける運用できないけど、デスク上に設置するスペースあるならこっちのほうが良いと思う。

new: ディスプレイボード

ディスプレイボードに載せた小物

サンワダイレクト ディスプレイボードを買って、モニター上収納を増やした。細々とした小物を全部ここにまとめた。当初は文房具を置くつもりだったんだけど、いざ置くと結構不安定な感じがする+視界に入ってやかましかったのでやめた。

new: 電源タップ

有孔ボード裏の電源タップ

(これ一昨年からやってたかもしれないけど書いてなかったので紹介)

有孔ボードの裏にWindows機と電源タップを置いてある。これも結構便利。電源タップがここにあると、ちょっとだけ使いたい機器をサクッと接続できる。 扇風機の電源とかここから引いてた。最近は暖房機器を繋いだりしてる。

まとめ

2025年もそこまで劇的な変化はなく、細かいところがアップデートされた感じ。

今年は 窓なし部屋でも「朝」は作れる。カメラマン×エンジニアが教える『光のデスク設計術』 を読んで自分でもやってみたくなったので、照明周りを整えていきたい。




以上の内容はhttps://www.pandanoir.infoより取得しました。
このページはhttp://font.textar.tv/のウェブフォントを使用してます

不具合報告/要望等はこちらへお願いします。
モバイルやる夫Viewer Ver0.14