playparkさんのフィード

https://zenn.dev/playpark

コードは書くより読まされる時代に。 今日もレビュー自動人形として活動中。

フィード

記事のアイキャッチ画像
stash popが事故った話、reset --hard封じのsandboxで非破壊復旧した
playparkさんのフィード
「stash -u」が空振りしたのに、popでコンフリクトが起きたClaude CodeのようなAIエージェントを非対話実行のsandboxで動かしていて、同じgit worktreeを何日も使い回していないだろうか。ある日、いつもの手癖で git stash -u && git checkout -B feature/x origin/dev && git stash pop を打ったら、stash -u は「保存する変更がありません」と返してきたのに、直後の pop が複数ファイルでコンフリクトを起こした。自分は何もstashしていないはずなのに...
1ヶ月前
記事のアイキャッチ画像
git worktree + npm installが毎回違う場所で失敗する、sandboxの罠
playparkさんのフィード
新しいworktreeを切るたびに、止まる場所が違う新しいworktreeを切ってnpm installを叩く。失敗したので手順を見直して再実行すると、今度は別のエラーで止まる。「さっきは通ったのに」と二度見して終わる——sandbox化されたAIコーディングエージェント環境で、freshなworktreeにnpm installを回したことがある人なら覚えがあるはずだ。唯一の救いは、犯人が毎回同じとは限らないので飽きないことくらいだ。 3つの症状は、実は3つの別レイヤーの問題最初にこれを1つのバグだと思って手当たり次第に対処すると、だいたい空振りする。表面上は「instal...
1ヶ月前
記事のアイキャッチ画像
クロスポストパイプラインで踏んだ設計判断——SEO事故を防ぐcanonical対策とスキル分割の理由
playparkさんのフィード
「ZennとQiitaに同じ記事をコピペしてはいけない」を実装で解く記事を書いたあと、Zennにコピペ、QiitaにもコピペしてSNS告知文を手書き——この作業、1記事あたり1時間以上溶ける。しかも「とりあえずコピペ」には落とし穴がある。ZennとQiitaに同一内容を投稿するとGoogleが重複コンテンツと判定、どちらかが検索結果から消えるZennユーザーとQiitaユーザーは求めているものが違う。同じ読み物を押しつけても喜ばれないcanonical URLの設定をサボるとSEO事故が起きる(Zennも Qiitaも frontmatter でcanonicalをサポート...
1ヶ月前
記事のアイキャッチ画像
Claude Codeのsubagentを並列でgit操作させたら、コミットが混ざった話
playparkさんのフィード
「並列にすれば速い」と思ってgit操作込みで投げたら、コミットが混ざった3本のTaskを並列で走らせて、それぞれに実装を任せたことがある。「3倍速いはず」と思っていたが、できあがったコミットはどれも中途半端に混ざっていた。片方のsubagentがcheckoutしたブランチに、もう片方が気づかずcommitしていた。読み取り専用の調査タスクなら、Claude CodeのAgent toolで複数subagentを並列起動するのは気持ちよく速い。ただしファイルを書き換えたりgit操作をしたりする場合は話が別で、同じworking directoryを共有させたまま走らせると、再現し...
1ヶ月前
記事のアイキャッチ画像
毎日決まった時刻に動くはずのスキルだけ動かない — 原因はcloud routineの参照先だった
playparkさんのフィード
ローカルでは一発で動くのに、スケジュール実行のときだけ「見つかりません」と言われる手元のターミナルで動かすと成功するのに、同じ指示をスケジュール実行に登録した瞬間だけ「該当のスキルが見つかりません」と言われる。ローカルではまったく再現しないし、設定ファイルも合っている(三度見した)。それでも朝になると同じエラーで止まっている——という経験がある人は少なくないはずだ。これはバグではなく仕様だった。Claude Codeには~/.claude/skills/にスキルを置いてカスタマイズする方法と、スケジュール実行(cloud routine)やCoworkのようなクラウドセッションで...
1ヶ月前
記事のアイキャッチ画像
Claude Codeのauto-compactで「別人」になる問題をhookで塞いだ
playparkさんのフィード
圧縮後のClaude Codeが、心なしか「他人」に見えることはないか長時間のリファクタリングをClaude Codeに任せていると、画面に「Compacting conversation」と出て、数秒後に会話が何事もなく再開することがある。ただ、再開後のAIは様子がどこかおかしい。さっき却下したはずの設計案を、また新しい提案として出してくる直したはずのファイルを開き直して「まずここから直しましょう」と言う直前に握った「このテストは触らない」という制約が、いつの間にか消えているこれがauto-compact(コンテキストウィンドウ圧縮)の副作用だ。会話履歴が上限に近づく...
1ヶ月前
記事のアイキャッチ画像
生きているコンテナを「dead」と誤判定した話 — 原因は2>&1だった
playparkさんのフィード
監視ダッシュボードが「dead」と言うのに、コンテナはピンピンしている深夜のアラートで叩き起こされてdocker inspectを打つと、コンテナは普通に動いている。プロセスも生きているし、ログも流れている。それなのに自作の監視スクリプトだけが「dead」と言い張る——こういう場面に覚えがある人は多いはずだ。CLIツールの出力をパースして状態判定する監視スクリプトやliveness probeを自作していると、この手の「exit 0で成功しているのに実は誤判定している」状況にわりと簡単に踏み込む。しかも厄介なのは、原因がコードの外側、つまり"何を捕まえているか"にあることだ。...
1ヶ月前
記事のアイキャッチ画像
Claude Codeのpermissions、allow/deny/askの境界線を毎回悩んでいたので決定木にした
playparkさんのフィード
空のpermissions.denyを前に、手が止まったことはありませんか新しいプロジェクトでsettings.jsonを開くと、permissions.denyはたいてい空っぽだ。「危なそうなコマンドを思いついた順に足していけばいいか」と手を動かし始めるのだが、そのうち「これはdenyで完全に止めるべきか、askで確認を挟むべきか」で毎回悩むようになる。レビューで「このルール何のため?」と聞かれて「たぶん昔なにかあったんだと思います」で押し切った経験、ありませんか。 可逆性・影響範囲・頻度の3軸で振り分ける思いついた順にdenyを積むのをやめて、判断基準を先に固定することに...
1ヶ月前
記事のアイキャッチ画像
git worktreeでnode_modulesに詰まった話 — symlinkよりpnpm storeを選んだ理由
playparkさんのフィード
worktreeを増やすたびにnpm installを待つ日々複数のIssueやブランチを並行して触りたくてgit worktreeを使い始めると、必ずこの壁にぶつかる。git worktree addした直後にcdして何か叩くとCannot find module。ああ、またnode_modulesが無いやつだ、とインストールを回す。worktreeが3本、5本と増えるほど、この「待ち」が1日に何度も発生するようになる。しかも厄介なのは、これが「時間の問題」だけで終わらないこと。片付け忘れたworktreeのnode_modulesはディスクに居座り続け、気づけば数GB単位で圧...
1ヶ月前
記事のアイキャッチ画像
git worktreeを溜め込んだらBashが死んだ話 — E2BIGの正体を追ってわかったこと
playparkさんのフィード
worktreeが増えるたびに、いつか来る空気を感じていませんか複数のIssueをAIエージェントに並行して振ると、git worktreeはブランチを切り替えずに何本も同時進行できて手放せない。でも「そろそろ整理しなきゃ」と思いながら後回しにしているworktree、何本ありますか。自分は放置した結果、ある日Bashツールにecho testを投げただけで失敗するようになった。ディスクもファイル数も関係ない。サンドボックスの起動そのものが、コマンドラインの長さで死んでいた。 原因を追うと、結論は「もう直せない」だったまず自分の環境で何が起きているか、次のコマンドで切り分けた...
2ヶ月前
記事のアイキャッチ画像
「テストがgreenになった」と「バグが直った」を混同していた話
playparkさんのフィード
CIが全部greenになった、それだけで安心していませんかバグ修正のPRを出す。CIが全部greenになる。それを見て「直った」と判断してマージする——ここまでは自分も含め、多くの現場で当たり前にやっている流れで、疑ったことがある人はあまりいないと思う。だが少し意地悪く考えてみると、そのgreenは修正前に同じテストが赤かったことを確認した上でのgreenなのか、それとも修正後に一度実行しただけの「たまたま出たgreen」なのか、見た目ではまったく区別がつかない。CIやAIエージェントの自動修正ループのように、実行が速く何度でも回せる環境ほど、この区別を省略しても表面上は困らない...
2ヶ月前
記事のアイキャッチ画像
GA4の送客計測でSPA遷移特有の『referrer消失』を踏んだ話
playparkさんのフィード
ブログの送客率、ちゃんと計測できてますか「ブログ記事から紹介ページへどれくらい人が流れて、そこから問い合わせに繋がっているか」——GA4を入れていれば分かるはず、そう思っていた時期が自分にもあった。cta_click(記事内CTAクリック)もsolution_view(紹介ページ閲覧)もイベントとしてはちゃんと飛んでいる。なのに、この2つを「同じ人の同じ旅」として繋げる方法がなかった。バラバラのカウントを2つ持っているだけで、送客率という割り算が成立しない状態だった。 送客元をreferrer_blogとして持ち回る設計にした解決策はシンプルで、CTAクリック時点で「今いる...
2ヶ月前
記事のアイキャッチ画像
「これだけの作業にそんな気合いいらないのに」— サブエージェントのeffort継承にハマった話
playparkさんのフィード
深夜、ただのtypo修正がOpusのxhighで走っていたレビュー待ちのPRがなかなか終わらない。ログを覗いたら、ただのtypo修正のために投げたはずのサブエージェントが、涼しい顔でOpusのxhighを使っていた。中身は数行のJSON整形や軽い文字列置換だけなのに実行時間もコストも、重い判断タスクと同じ水準しかも自分は「effortなんて指定してない」つもりだった原因は単純だった。effortを指定し忘れたサブエージェントは、勝手に軽くなってくれるわけではない。 「指定しない」は「軽くなる」ではなく「継承する」Claude Codeでサブエージェントを呼ぶとき、...
2ヶ月前
記事のアイキャッチ画像
法人番号があれば営業リストは自動で埋まる — gBizINFO APIを叩いて気づいたこと
playparkさんのフィード
「また会社名で検索して住所をコピペするのか」問い合わせが来るたびに、この独り言が漏れる。会社名で検索して、住所と資本金をコピペする。代表者名も拾う。設立年も。新規リードの数だけ同じ作業を繰り返す。会社名・住所・資本金・従業員数・設立年・代表者名を毎回手で埋める同じ情報源(企業サイトや検索結果)を何度も行き来する忙しい時期ほどこの作業が後回しになり、リストが埋まらないまま滞留するこの手入力、法人番号さえ分かれば大部分を自動化できる。 gBizINFOという公開APIで基本情報を埋める経済産業省が運営するgBizINFOは、法人番号や企業名から企業の基本情報を無料で返...
2ヶ月前
記事のアイキャッチ画像
「ログイン成功」の画面を信じて3回ログインし直した話 — OAuth CLIの認証情報が静かに消える
playparkさんのフィード
「また同じエラーか」を3回繰り返したブラウザでの認証は毎回ちゃんと成功する。緑のチェックマークも出る。なのに次のコマンドを叩くと、まるで一度もログインしていないかのように弾かれる。「ログインし直せば直るだろう」→再ログイン→成功次のコマンドを叩く→また落ちるもう一度ログイン…(この時点で3回目)このループに入ったことがあるなら、疑うべきは「ログインが失敗しているかどうか」ではなく、「ログインは成功しているのに、その結果の保存だけ失敗しているかどうか」 だ。 実装: keyringを経由させない自分がハマったのは、コンテナ内で動かしていたCLIツールが invali...
2ヶ月前
記事のアイキャッチ画像
Slackに一行書くだけで営業ログがDBに入るbotを作って2週間運用した現実
playparkさんのフィード
「入力が面倒」はCRMを変えても解決しない営業日報、ちゃんと書いてますか。CRMを開いて、案件を選んで、活動種別をプルダウンから選んで、内容を入力して、次アクションを設定して、保存ボタンを押す。電話1本につき3分のデータ入力作業。1日5件の電話で15分、月に5時間。SalesforceやHubSpotに月数万円払っても「入力が面倒」という本質は変わらない。UIが変わるだけ。そこで「Slackに一行書いたらDBに入る」仕組みを自作しました。A社と電話した。来週提案書送る と書くだけで、botが意図を分類してDBに書き込み、ダッシュボードに反映されるパイプラインです。 何を作っ...
3ヶ月前
記事のアイキャッチ画像
SEOをデータパイプラインで解いた話 — GA4・Trends・GSCを繋いで「次に書くべき記事」を出す
playparkさんのフィード
「何を書けば読まれるか、誰か教えてくれないか」問題技術ブログを続けているとぶつかる壁がある。ネタは思いついても、検索需要があるか分からないGA4を見れば「どの記事が人気か」は分かるが、「次に何を書くか」は分からないGoogle Trendsを見れば「何がトレンドか」は分かるが、自分のサイトと繋がらない3つの情報が頭の中にあるのに、バラバラのまま使っていた。「統合すれば自動で答えが出るはず」と気づいて、パイプラインを作った。 設計の核心: JSONで繋ぐ3段パイプラインga-analyzer ──→ trends-analyzer ──→ seo-content-p...
3ヶ月前
記事のアイキャッチ画像
Next.js App Routerで踏んだ3つの落とし穴と、実案件で85%高速化した判断プロセス
playparkさんのフィード
「Server Componentsは分かった。でも、うちのプロジェクトでどう使えばいいの?」Next.js App Router、公式ドキュメントを読むと概念は分かる。でも実際に業務システムに入れてみると、こんな疑問が次々と湧いてくる。どこに 'use client' を置けばいいのか分からないキャッシュの挙動が不思議で、なぜ古いデータが出るのか謎直列APIがボトルネックになっていると気づいたのは本番後この記事では、複数の業務システムを App Router で構築した経験から、「なぜこう書くのか」という判断理由まで含めて共有する。 Server Componen...
3ヶ月前
記事のアイキャッチ画像
SKILL.md の description を書き間違えると、スキルは永遠に呼ばれない
playparkさんのフィード
スキルを作ったのに、呼ばれないClaude Code の Skills を初めて作ったとき、こんな経験をした人は多いと思う。「ファクトチェックして」と頼んでも別のスキルが動く「SEO 改善」と言っても、なぜか関係ないスキルが発火する作ったはずのスキルが、まるで存在しないかのようにスルーされる原因のほとんどは SKILL.md そのものではなく、description フィールドの書き方にある。 description はスキルの「検索クエリ」Claude Code はセッション起動時、全 SKILL.md の description だけを読み込んで一覧をメモリに...
4ヶ月前
記事のアイキャッチ画像
Skill.mdのdescriptionを書き間違えると、スキルが一切起動しない話
playparkさんのフィード
「スキルを作ったのに使われない」という体験Codex や Claude Code でスキルを作り始めると、最初はこういう状況によくぶつかる。SKILL.md を書いてディレクトリに置いた「デプロイして」と指示したのに、なぜかスキルが起動しないdescription を書いたのに、エージェントがスキルを認識していないように見える原因を調べると、ほぼ毎回 description の書き方に行き着く。この記事では、description がなぜスキル起動を左右するのか、どう書けば確実に動くのかを、判断理由ごと解説する。 descriptionはLevel 1メタデー...
4ヶ月前