[{"data":1,"prerenderedAt":544},["ShallowReactive",2],{"post-index":3,"post-lazygit-commit-message-auto-generate":453},{"posts":4,"categories":402,"tags":411},[5,17,35,43,60,74,87,105,122,144,156,167,179,193,208,223,239,250,264,275,285,296,308,319,331,343,356,367,377,387],{"slug":6,"title":7,"description":8,"publishedAt":9,"updatedAt":9,"category":10,"tags":13,"thumbnail":16},"ai-cognitive-debt-approval"," 認知負債は「承認」で生まれる ── コーディングエージェント時代の意図負債と、個人・チームの向き合い方","コーディングエージェントに実装を任せると、コードは速く書けるのに人の理解が追いつかない。認知負債・意図負債・理解負債の違いを「下り」と「上り」で整理し、負債が生まれる承認の瞬間と、個人とチームでできる対策、まだ答えのない問いを、自分の体験から考える。","2026-11-03T17:12:07.686Z",{"name":11,"slug":12},"AI","ai",[14],{"name":15,"slug":15},"organization",null,{"slug":18,"title":19,"description":20,"publishedAt":21,"updatedAt":21,"category":22,"tags":23,"thumbnail":16},"design-harness-personal-product","デザインハーネスを個人開発で組んだ — AI が作る画面のずれを止めるまで","デザイナーのいない個人開発で、AI が作る画面のずれを止めるまでの記録。Codex の Product Design で画像の案を出して画面を作り直し、デザインファイルとコードの食い違いを正本の分担で片付け、lint・見た目の比較・AI の評価役からなるデザインハーネスで外れたら止める仕組みを組んだ。","2026-11-03T15:39:02.665Z",{"name":11,"slug":12},[24,27,30,32],{"name":25,"slug":26},"claude code","claude-code",{"name":28,"slug":29},"design system","design-system",{"name":31,"slug":31},"codex",{"name":33,"slug":34},"design harnes","design-harnes",{"slug":36,"title":37,"description":38,"publishedAt":39,"updatedAt":39,"category":40,"tags":41,"thumbnail":16},"claude-code-mods-intro","Claude Codeの「Claude Mods」とは？ 入れてみた3つのmodと、安全に入れる手順","Claude Codeの新機能Claude Mods（v2.1.287〜）を紹介する。hooks・skills・MCPとの違い、入れてみたmod 3つ（prompt-rail・md-prompt・qa-guide）の使い方、claude plugin validateで中身を確かめて入れる手順をまとめた。","2026-11-03T15:30:44.678Z",{"name":11,"slug":12},[42],{"name":25,"slug":26},{"slug":44,"title":45,"description":46,"publishedAt":47,"updatedAt":47,"category":48,"tags":51,"thumbnail":16},"worktree-shared-reverse-proxy","AI 時代の並列開発の環境構築 — git worktree ごとにアプリを同時に動かす","git worktree の並列開発で、各 worktree のフロントとバックを同時に動かす Docker Compose 構成を紹介する。ポートはずらさず共有のリバースプロキシでホスト名に振り分け、DB は 1 つを共有ネットワークに置いて全 worktree から参照する。","2026-11-03T15:24:32.067Z",{"name":49,"slug":50},"Dev Env","dev-env",[52,54,57],{"name":53,"slug":53},"git",{"name":55,"slug":56},"Docker","docker",{"name":58,"slug":59},"開発環境","development-environment",{"slug":61,"title":62,"description":63,"publishedAt":64,"updatedAt":64,"category":65,"tags":66,"thumbnail":16},"ghostty-herdr-dev-env","Ghostty + herdr で組む開発環境（2026年9月版） — AI エージェントを並べてターミナルで開発する","WezTerm + tmux + 自作ツールから Ghostty + herdr に移した私の開発環境を紹介する。Claude Code・Codex・takt を並べて動かす 1 タスクの流れ、ターミナル内ブラウザで画面の要素を AI に渡す方法、Neovim・lazygit・hunk・Nix まで層ごとにまとめた。","2026-11-03T15:14:47.700Z",{"name":49,"slug":50},[67,68,70,72],{"name":58,"slug":59},{"name":69,"slug":69},"herdr",{"name":71,"slug":71},"ghostty",{"name":73,"slug":73},"terminal",{"slug":75,"title":76,"description":77,"publishedAt":78,"updatedAt":78,"category":79,"tags":80,"thumbnail":16},"dotfiles-operation-and-nix","設定ファイルを端末に置いたままにしない — dotfiles 運用のすすめと、その先の Nix","設定ファイルを Git リポジトリで管理する dotfiles 運用の始め方と、その先で効いてくる Nix の話。何を入れて何を入れないか、配線の 3 手法の比較、運用して見えてくる穴、3 端末を 1 つの設定で回すところまでを実例で書く。","2026-11-03T15:04:48.084Z",{"name":49,"slug":50},[81,82,85],{"name":58,"slug":59},{"name":83,"slug":84},"Nix","nix",{"name":86,"slug":86},"dotfiles",{"slug":88,"title":89,"description":90,"publishedAt":91,"updatedAt":91,"category":92,"tags":93,"thumbnail":102},"opencode-go-plan-evaluation","OpenCode Go プランを評価する — 月$10 で LLM オーケストレーションの中間層は作れるか","OpenCode が提供する月額固定の Go プラン（初月$5、翌月以降$10\u002F月）を、料金体系・想定ユースケース・3層 LLM 構成における中間モデル層としての適合性まで含めて評価する。","2026-05-07T12:12:31.936Z",{"name":11,"slug":12},[94,97,100],{"name":95,"slug":96},"Harness Engineering","harness-engineering",{"name":98,"slug":99},"LLM","llm",{"name":101,"slug":101},"opencode",{"url":103,"description":104},"https:\u002F\u002Fimages.ctfassets.net\u002Fd3b1looh8iwg\u002F6Nh8tVuSCuHunaVeqyegdU\u002F0fee3536b9ee406b986430ebc1b8ebfd\u002FOpenCode_Go_%C3%A3__%C3%A3__%C3%A3__%C3%A3__%C3%A3__%C3%A8__%C3%A4__%C3%A3__%C3%A3__.png","",{"slug":106,"title":107,"description":108,"publishedAt":109,"updatedAt":109,"category":110,"tags":111,"thumbnail":120},"prompt-context-harness-engineering","ハーネスエンジニアリングとは何か：プロンプト→コンテキスト→ハーネスへ至るAIエージェント設計の変遷","「ハーネスエンジニアリング」とは何か。プロンプトエンジニアリング、コンテキストエンジニアリングから続く3段階の変遷を、論文引用（Lost in the Middle \u002F SWE-bench）とClaude Codeの実装例（フック・ルール・Skill）で階層構造として整理する。","2026-04-07T13:04:49.564Z",{"name":11,"slug":12},[112,115,116,119],{"name":113,"slug":114},"Prompt Engineering","prompt-engineering",{"name":95,"slug":96},{"name":117,"slug":118},"Context Engineering","context-engineering",{"name":98,"slug":99},{"url":121,"description":104},"https:\u002F\u002Fimages.ctfassets.net\u002Fd3b1looh8iwg\u002F74HnVGS2R8wphJ1nGHgLfb\u002Fb87d3d6e35ccc518e04d9959c7637a88\u002Fã__ã__ã__ã__ã__ã__ã__ã__ã__ã__ã_ªã__ã__ã__ã__ã__ä__ã__ï__ã__ã__ã__ã__ã__ã__ã__â__ã__ã__ã__ã__ã__ã__â__ã__ã__ã__ã__ã__è__ã__A.png",{"slug":123,"title":124,"description":125,"publishedAt":126,"updatedAt":126,"category":127,"tags":130,"thumbnail":142},"authjs-v5-jwt-dual-timeout-bff-django","Auth.js v5 でJWT二重タイムアウトを実装する：BFF + Django連携の設計パターン","Auth.js v5のjwt callbackで8時間の絶対有効期限と30分のアイドルタイムアウトを両立する実装方法を解説。Next.js MiddlewareによるBFF API保護とDjango REST Frameworkとの Token Exchange パターンも紹介する。","2026-04-06T12:45:28.328Z",{"name":128,"slug":129},"Programming","programming",[131,134,136,139],{"name":132,"slug":133},"auth.js","auth-js",{"name":135,"slug":135},"jwt",{"name":137,"slug":138},"Django REST Framework","django-rest-framework",{"name":140,"slug":141},"Next.js","next-js",{"url":143,"description":104},"https:\u002F\u002Fimages.ctfassets.net\u002Fd3b1looh8iwg\u002FpqkFfHKpf2UqoNrB6KrKS\u002F672a78076f28d88b31509c230f9c3f64\u002FAuth.js_v5_ã__ã__JWTäº_é__ã__ã__ã__ã__ã__ã__ã__å__è__ã__ã__ï__BFF___Djangoé__æ_ºã__è__è__ã__ã__ã__ã__ã__.png",{"slug":145,"title":146,"description":147,"publishedAt":148,"updatedAt":148,"category":149,"tags":150,"thumbnail":154},"claude-code-spec-to-growing-claudemd","仕様書を「渡す」からCLAUDE.mdを「育てる」へ — Claude Codeの使い方が変わった話","Claude Codeに仕様書を丸ごと渡す運用から、CLAUDE.mdを継続的に育てる運用へ。「間違えたら追加」ルールの実践例と、20行→146行+31スキルに育てた記録。","2026-04-02T14:58:11.375Z",{"name":11,"slug":12},[151,152,153],{"name":25,"slug":26},{"name":113,"slug":114},{"name":117,"slug":118},{"url":155,"description":104},"https:\u002F\u002Fimages.ctfassets.net\u002Fd3b1looh8iwg\u002FqybhQ2TQSYQhIvDhWxqvs\u002F9f8b888e11a76223c8a1b1da42df5ce1\u002Fä__æ__æ__ã__ã__æ__ã__ã__ã__ã__CLAUDE.mdã__ã__è__ã__ã__ã__ã___â___Claude_Codeã__ä__ã__æ__ã__ã__å__ã__ã__ã__è__.png",{"slug":157,"title":158,"description":159,"publishedAt":160,"updatedAt":160,"category":161,"tags":162,"thumbnail":165},"claude-code-harness-engineering","Claude Codeを覚醒させる「ハーネスエンジニアリング」 CLAUDE.md・Hooks・Rules設定の徹底解説","プロンプトを書く時代から、AIが最高に働く環境を設計する時代へ。Claude CodeのCLAUDE.md、Hooks、Rules、Settings、Agent Routingを体系的に解説し、自作のオーケストレーションシステム「ai-orchestra」による統合管理の実践例を紹介する。","2026-03-22T08:59:48.575Z",{"name":11,"slug":12},[163,164],{"name":25,"slug":26},{"name":95,"slug":96},{"url":166,"description":104},"https:\u002F\u002Fimages.ctfassets.net\u002Fd3b1looh8iwg\u002F3liirUgzBlFBuAMoytyN5E\u002F66ba6b07385791bcaae4ddf404f06ce1\u002FClaude_Codeã__è__é__ã__ã__ã__ã__ã__ã__ã__ã__ã__ã__ã__ã__ã__ã__ã_ªã__ã__ã__ã___CLAUDE.mdã__Hooksã__Rulesè__å__ã__å__åº_è__èª_.png",{"slug":168,"title":169,"description":170,"publishedAt":171,"updatedAt":172,"category":173,"tags":174,"thumbnail":177},"claude-code-dev-toolchain","Claude Code開発を支える私のツールチェイン — ターミナルからAIデザインまで","Claude Code CLIを中心とした開発環境を紹介する。WezTerm + Tmuxのターミナル構成、GTRやBatonによる並列開発、ステータスライン・通知フックのカスタマイズ、MCP\u002Fプラグイン活用、Aqua VoiceやPencilとの連携まで、実際に使っているツールチェインの全体像をまとめた。","2026-03-21T19:30:43.616Z","2026-11-03T15:18:14.982Z",{"name":49,"slug":50},[175,176],{"name":25,"slug":26},{"name":58,"slug":59},{"url":178,"description":104},"https:\u002F\u002Fimages.ctfassets.net\u002Fd3b1looh8iwg\u002F4wFUBAqC9yuIgeo3xWVHJM\u002F8843248b854fee93872b5ac519d16bc2\u002FClaude_Codeé__ç_ºã__æ__ã__ã__ç__ã__ã__ã__ã__ã__ã__ã__ã___â___ã__ã__ã__ã__ã__ã__ã__AIã__ã__ã_µã__ã__ã__ã__ã__ã__.png",{"slug":180,"title":181,"description":182,"publishedAt":183,"updatedAt":184,"category":185,"tags":186,"thumbnail":191},"lazygit-commit-message-auto-generate","【コピペで導入】lazygit × Claude Code でコミットメッセージ自動生成","lazygit の customCommands と Claude Code の --print モードを組み合わせ、Ctrl+G 一発で Conventional Commits 形式のコミットメッセージを自動生成する方法を解説。コピペ可能な完成形設定と、4段階の試行錯誤で得たハマりポイントを共有します。","2026-03-15T04:36:20.532Z","2026-11-03T15:18:53.496Z",{"name":49,"slug":50},[187,188,189],{"name":53,"slug":53},{"name":25,"slug":26},{"name":190,"slug":190},"lazygit",{"url":192,"description":104},"https:\u002F\u002Fimages.ctfassets.net\u002Fd3b1looh8iwg\u002F62ov1mzeLUjRm6cbzQ7R92\u002F3bc21a7fe7ec517ad3258b6264d4097e\u002Fã__ã__ã__ã__ã__ã__ã__ã__å__å__ã__lazygit_Ã__Claude_Code_ã__ã__ã__ã__ã__ã__ã__ã__ã__ã__ã__ã__è_ªå__ç__æ__.png",{"slug":194,"title":195,"description":196,"publishedAt":197,"updatedAt":198,"category":199,"tags":200,"thumbnail":206},"git-worktree-runner-guide","git-worktree-runner で worktree 管理が劇的にラクになった話","git-worktree-runner（GTR）は git worktree の操作を 1 コマンドに集約する CLI ラッパーです。Taskfile.yaml での運用から GTR に移行した体験を元に、インストール・設定・AI 並列開発での活用法を解説します。","2026-03-09T15:32:31.316Z","2026-11-03T15:18:33.924Z",{"name":49,"slug":50},[201,202,204],{"name":53,"slug":53},{"name":203,"slug":203},"git-worktree",{"name":205,"slug":205},"git-worktree-runner",{"url":207,"description":104},"https:\u002F\u002Fimages.ctfassets.net\u002Fd3b1looh8iwg\u002F7BRBfHFocF2ABOeOQmtIic\u002Fa63ce99493098bc42123e4315f43d768\u002Fgit-worktree-runner_ã__ã___worktree_ç__ç__ã__ã__å__ç__ã__ã__ã__ã__ã_ªã__ã__è__.png",{"slug":209,"title":210,"description":211,"publishedAt":212,"updatedAt":212,"category":213,"tags":214,"thumbnail":221},"rag-basic-knowledge","RAG入門 — 検索拡張生成の基礎知識を実験結果とともに学ぶ","RAG（検索拡張生成）の仕組みをVectorDB・Embedding・チャンク分割の3要素に分解して解説。Embeddingモデル変更で正答率0\u002F5→4\u002F5に改善した検証データも公開。","2026-03-01T11:29:25.841Z",{"name":11,"slug":12},[215,218,219],{"name":216,"slug":217},"RAG","rag",{"name":98,"slug":99},{"name":220,"slug":220},"ollama",{"url":222,"description":104},"https:\u002F\u002Fimages.ctfassets.net\u002Fd3b1looh8iwg\u002F1enfpUixTuvis0oX9x5Cfa\u002F934aed76ac994412ceb37dfdf5dc6f6c\u002FRAGå__é___â___æ__ç__æ__å_µç__æ__ã__å_ºç__ç__è__ã__å__é__çµ_æ__ã__ã__ã__ã__å__ã_µã__.png",{"slug":224,"title":225,"description":226,"publishedAt":227,"updatedAt":228,"category":229,"tags":230,"thumbnail":237},"engineer-ai-daily-workflow","1人のエンジニアがAIを日常にどう組み込んでいるか — 契約サービスから活用フローまで全公開","Claude Code、ChatGPT、Gemini、Aqua Voice、Adobe Fireflyの5サービスを使い分けるエンジニアが、開発・情報収集・ブレスト・音声入力・振り返りまで、AIを日常に組み込んだリアルな活用フローを全公開します。","2026-02-18T14:13:58.531Z","2026-02-18T14:14:12.514Z",{"name":11,"slug":12},[231,232,234],{"name":98,"slug":99},{"name":233,"slug":233},"openclaw",{"name":235,"slug":236},"マルチエージェント","multi-agent",{"url":238,"description":104},"https:\u002F\u002Fimages.ctfassets.net\u002Fd3b1looh8iwg\u002F5gBC06O8WX2GX8wmoOXQfy\u002F27a11e0f280f642a781e462dead9d3ae\u002F1äººã__ã__ã__ã__ã__ã__ã__ã__ã__AIã__æ__å__ã__ã__ã__ã__çµ_ã__è__ã__ã__ã__ã__ã__ã___â___å__ç__ã_µã__ã__ã__ã__ã__ã__æ__ç__ã__ã_.png",{"slug":240,"title":241,"description":242,"publishedAt":243,"updatedAt":243,"category":244,"tags":245,"thumbnail":248},"ai-orchestra-design-and-practice","Claude Codeマルチエージェント実践｜AI Orchestraで超えた2つの壁","Claude Code単体運用で生じるコンテキスト溢れ・役割混乱の課題を、25種の専門エージェントとClaude×Codex×Geminiのマルチモデル連携で解決するオーケストレーションシステム「AI Orchestra」。その設計思想、Hookによる自動ルーティング、並列レビューなどの実装を具体的に紹介します。","2026-02-08T08:01:16.212Z",{"name":11,"slug":12},[246,247],{"name":235,"slug":236},{"name":98,"slug":99},{"url":249,"description":104},"https:\u002F\u002Fimages.ctfassets.net\u002Fd3b1looh8iwg\u002F6j2KWOOo7wJfUobTCg3o2w\u002F126c8d413cd9a56e64fba107544ec4e1\u002FClaude_Codeã__ã__ã__ã__ã__ã__ã__ã__ã__ã__å__è_µï__AI_Orchestraã__ã__è__ã__ã__2ã__ã__å__.png",{"slug":251,"title":252,"description":253,"publishedAt":254,"updatedAt":255,"category":256,"tags":257,"thumbnail":262},"ai-benchmark-guide","AIベンチマーク読み方ガイド｜SWE-bench・GPQA・ARC-AGIの意味と活用法","SWE-bench、GPQA Diamond、ARC-AGI、Terminal-Benchなど主要AIベンチマークの読み方を解説。2026年2月最新のモデルスコア比較と、コーディングエージェントへのタスク振り分けに活かす実践的な指針を紹介します。","2026-02-07T16:10:19.131Z","2026-02-07T16:11:56.095Z",{"name":11,"slug":12},[258,259],{"name":98,"slug":99},{"name":260,"slug":261},"Benchmark","benchmark",{"url":263,"description":104},"https:\u002F\u002Fimages.ctfassets.net\u002Fd3b1looh8iwg\u002F3QlfPsXmLogdj9o4mdgFYQ\u002F73a69ca272ac4e4fdcf977f322c0218a\u002FAIã__ã__ã__ã__ã__ã__ã__èª_ã__æ__ã__ã__ã__ã__ã__ï__SWE-benchã__GPQAã__ARC-AGIã__æ__å__ã__æ__ç__æ__.png",{"slug":265,"title":266,"description":267,"publishedAt":268,"updatedAt":268,"category":269,"tags":270,"thumbnail":273},"multi-agent-building-guide","マルチエージェント構築入門｜構成の全体像と3つの実装アプローチ","マルチエージェントの構築方法を解説。オーケストレーター・サブエージェント・ツール連携の3要素から、自作・フレームワーク・既存ツール活用の選択肢まで。Claude Codeでの実装例付き。","2026-02-05T12:52:58.095Z",{"name":11,"slug":12},[271,272],{"name":98,"slug":99},{"name":235,"slug":236},{"url":274,"description":104},"https:\u002F\u002Fimages.ctfassets.net\u002Fd3b1looh8iwg\u002F68XZFvLA17pegNy0lHCrYN\u002Ff90202a483bf087f4fa4cbb80dae934e\u002Fã__ã__ã__ã__ã__ã__ã__ã__ã__ã__æ__ç__å__é__ï__æ__æ__ã__å__ä__å__ã__3ã__ã__å__è__ã__ã__ã__ã__ã__ã__.png",{"slug":276,"title":277,"description":278,"publishedAt":279,"updatedAt":279,"category":280,"tags":281,"thumbnail":283},"openclaw-security-and-features","OpenClaw徹底解説 ── セルフホスト型AIアシスタントの可能性とセキュリティリスク","「AIが自分の代わりにメッセージを返信してくれたら…」そんな願いを叶えるツールが、いま爆発的な人気を集めています。その名も「OpenClaw」。わずか2ヶ月でGitHub Stars 10万を突破し、週間200万人が訪れるほどの注目を浴びています。  しかし、その急成長の裏には商標問題、詐欺騒動、そして深刻なセキュリティ脆弱性の発覚と、波乱万丈なドラマがありました。","2026-02-03T15:20:26.415Z",{"name":11,"slug":12},[282],{"name":233,"slug":233},{"url":284,"description":104},"https:\u002F\u002Fimages.ctfassets.net\u002Fd3b1looh8iwg\u002F7aKouVOZSGnzVUGgLQfa22\u002F5688eb515dc5f0b2c301b9b8c267ec20\u002F00036.png",{"slug":286,"title":287,"description":104,"publishedAt":288,"updatedAt":289,"category":290,"tags":291,"thumbnail":294},"custom-instructions","ChatGPTやClaudeがもっと賢くなる！カスタム指示の書き方と実例集","2026-01-30T17:42:57.415Z","2026-02-03T15:03:06.461Z",{"name":11,"slug":12},[292,293],{"name":98,"slug":99},{"name":113,"slug":114},{"url":295,"description":287},"https:\u002F\u002Fimages.ctfassets.net\u002Fd3b1looh8iwg\u002F4EojonTOebJGeiaXf98ol0\u002F9e391fc8bd6e548f8c96136c805b49d7\u002FChatGPTã__Claudeã__ã__ã__ã__ã__è__ã__ã_ªã__ï__ã__ã__ã__ã__æ__ç_ºã__æ__ã__æ__ã__å__ä__é__.png",{"slug":297,"title":298,"description":299,"publishedAt":300,"updatedAt":301,"category":302,"tags":303,"thumbnail":306},"ollama-local-llm-setup","ローカルLLMはまず小さめモデルから：Ollamaで始める導入〜疎通確認","acでOllamaを使い、ローカルLLMを最短で起動→1回応答まで確認する手順を解説。モデル選定の考え方、遅い\u002Fメモリ\u002Fディスクの切り分け、API疎通(curl)もまとめます。","2026-01-18T06:40:49.270Z","2026-01-21T13:05:14.924Z",{"name":11,"slug":12},[304,305],{"name":220,"slug":220},{"name":98,"slug":99},{"url":307,"description":104},"https:\u002F\u002Fimages.ctfassets.net\u002Fd3b1looh8iwg\u002F1NQmtspOD1S6LEb4SrCYIQ\u002F49c213de131a9a4ea139c32e805f3b01\u002Fã__ã__ã__ã__LLMã__ã__ã__ã__å__ã__ã__ã__ã__ã__ã__ã__ã__ï__Ollamaã__ã__å__ã__ã__å__å__ã__ç__é__ç_ºèª_.png",{"slug":309,"title":310,"description":104,"publishedAt":311,"updatedAt":312,"category":313,"tags":314,"thumbnail":317},"llm-leaderboard-score-guide","LLMリーダーボードの読み方：スコア指針とベンチマーク確認手順","2026-01-10T08:57:26.636Z","2026-01-18T06:55:58.990Z",{"name":11,"slug":12},[315,316],{"name":260,"slug":261},{"name":98,"slug":99},{"url":318,"description":104},"https:\u002F\u002Fimages.ctfassets.net\u002Fd3b1looh8iwg\u002F8u7GQ3mAlcvIHOc5bFJc6\u002Fa953bf74c33117efa393eaf8541f515a\u002FLLMã_ªã__ã__ã__ã__ã__ã__ã__ã__ã__ã__èª_ã__æ__.png",{"slug":320,"title":321,"description":104,"publishedAt":322,"updatedAt":322,"category":323,"tags":324,"thumbnail":329},"vite_docker_esbuild-error","Vite + Docker + ESBuild Errorの解決","2021-11-12T03:53:22.965Z",{"name":128,"slug":129},[325,326],{"name":55,"slug":56},{"name":327,"slug":328},"Vite","vite",{"url":330,"description":104},"https:\u002F\u002Fimages.ctfassets.net\u002Fd3b1looh8iwg\u002F5gqsl4ZChCI3uaSXQA86du\u002F3c94f9928ffaaab2d8911d32e742de1e\u002Fprogramming.jpg",{"slug":332,"title":333,"description":104,"publishedAt":334,"updatedAt":335,"category":336,"tags":337,"thumbnail":341},"nuxt-router-scroll-control","Nuxt.jsのページ遷移時のスクロール制御したい","2021-10-28T14:31:11.276Z","2021-10-28T14:35:33.155Z",{"name":128,"slug":129},[338],{"name":339,"slug":340},"Nuxt.js","nuxt-js",{"url":342,"description":104},"https:\u002F\u002Fimages.ctfassets.net\u002Fd3b1looh8iwg\u002F6dqpNPZsBJJ7x9XJj1Ld1z\u002Fcd1bb9323a8ffb0657ad79525403e1ff\u002Fnuxt.jpg",{"slug":344,"title":345,"description":104,"publishedAt":346,"updatedAt":347,"category":348,"tags":349,"thumbnail":354},"react-drf-img_uploader-backend","React × DRFで画像アップロード機能作成 (バックエンド実装編)","2021-10-26T02:56:58.215Z","2021-10-27T11:37:43.829Z",{"name":128,"slug":129},[350,353],{"name":351,"slug":352},"React","react",{"name":137,"slug":138},{"url":355,"description":104},"https:\u002F\u002Fimages.ctfassets.net\u002Fd3b1looh8iwg\u002F4jbVtK0nXsMKZplpBAwhri\u002Fb0ccef5153d92a7947eb0c682008255c\u002Fdjango-rest-framework.jpg",{"slug":357,"title":358,"description":104,"publishedAt":359,"updatedAt":360,"category":361,"tags":362,"thumbnail":365},"react-drf-img_uploader-frontend","React × DRFで画像アップロード機能作成 (フロント実装編)","2021-10-26T02:39:01.629Z","2021-10-27T11:37:24.670Z",{"name":128,"slug":129},[363,364],{"name":351,"slug":352},{"name":137,"slug":138},{"url":366,"description":104},"https:\u002F\u002Fimages.ctfassets.net\u002Fd3b1looh8iwg\u002F3uFOs5NyHOvRqYgE1lQ3p6\u002Fd79c8fabb7d4151c5773ffe1cdd2bce3\u002Freact.jpg",{"slug":368,"title":369,"description":104,"publishedAt":370,"updatedAt":371,"category":372,"tags":373,"thumbnail":376},"react-drf-img_uploader-environment","React × DRFで画像アップロード機能作成 (環境構築編)","2021-10-26T02:00:01.702Z","2021-10-27T11:47:28.398Z",{"name":128,"slug":129},[374,375],{"name":351,"slug":352},{"name":137,"slug":138},{"url":330,"description":104},{"slug":378,"title":379,"description":104,"publishedAt":380,"updatedAt":381,"category":382,"tags":383,"thumbnail":385},"docker-install-procedure","各OS毎のDockerインストール手順","2021-10-26T01:43:54.692Z","2022-02-07T14:32:07.791Z",{"name":128,"slug":129},[384],{"name":55,"slug":56},{"url":386,"description":104},"https:\u002F\u002Fimages.ctfassets.net\u002Fd3b1looh8iwg\u002F3aVlE8NIfX12QvTafaC8xE\u002Fd00bf480e212538e1816fc10d2e7b77d\u002Fdocker.jpg",{"slug":388,"title":389,"description":104,"publishedAt":390,"updatedAt":391,"category":392,"tags":395,"thumbnail":399},"notion-clear-trash","Notionのゴミ箱を一括削除する","2021-09-12T13:04:59.853Z","2021-10-21T14:29:03.528Z",{"name":393,"slug":394},"Lifestyle","lifestyle",[396],{"name":397,"slug":398},"Notion","notion",{"url":400,"description":401},"https:\u002F\u002Fimages.ctfassets.net\u002Fd3b1looh8iwg\u002F5binM4YxsZdSXX9SKkGyNP\u002Fcf39353211db8b3e0c4ac18e03b55527\u002Fnotion.jpg","Notion記事用のサムネイル",[403,405,407,409],{"name":49,"slug":50,"count":404},6,{"name":11,"slug":12,"count":406},16,{"name":128,"slug":129,"count":408},7,{"name":393,"slug":394,"count":410},1,[412,414,415,417,418,420,421,422,423,424,425,427,428,429,430,431,432,433,434,435,436,437,438,439,440,441,442,443,444,445,446,447,448,449,450],{"name":98,"slug":99,"count":413},10,{"name":25,"slug":26,"count":404},{"name":137,"slug":138,"count":416},4,{"name":58,"slug":59,"count":416},{"name":55,"slug":56,"count":419},3,{"name":53,"slug":53,"count":419},{"name":95,"slug":96,"count":419},{"name":113,"slug":114,"count":419},{"name":351,"slug":352,"count":419},{"name":235,"slug":236,"count":419},{"name":260,"slug":261,"count":426},2,{"name":117,"slug":118,"count":426},{"name":220,"slug":220,"count":426},{"name":233,"slug":233,"count":426},{"name":132,"slug":133,"count":410},{"name":31,"slug":31,"count":410},{"name":33,"slug":34,"count":410},{"name":28,"slug":29,"count":410},{"name":86,"slug":86,"count":410},{"name":71,"slug":71,"count":410},{"name":203,"slug":203,"count":410},{"name":205,"slug":205,"count":410},{"name":69,"slug":69,"count":410},{"name":135,"slug":135,"count":410},{"name":190,"slug":190,"count":410},{"name":140,"slug":141,"count":410},{"name":83,"slug":84,"count":410},{"name":397,"slug":398,"count":410},{"name":339,"slug":340,"count":410},{"name":101,"slug":101,"count":410},{"name":15,"slug":15,"count":410},{"name":216,"slug":217,"count":410},{"name":73,"slug":73,"count":410},{"name":327,"slug":328,"count":410},{"name":451,"slug":451,"count":452},"takt",0,{"slug":180,"title":181,"description":182,"publishedAt":183,"updatedAt":184,"category":454,"tags":455,"thumbnail":459,"html":460,"headings":461,"readingMinutes":408,"older":513,"newer":520,"related":526},{"name":49,"slug":50},[456,457,458],{"name":53,"slug":53},{"name":25,"slug":26},{"name":190,"slug":190},{"url":192,"description":104},"\u003Ch1 id=\"lazygit-+-claude-code-でコミットメッセージを自動生成する方法【conventional-commits対応】\" tabindex=\"-1\">lazygit + Claude Code でコミットメッセージを自動生成する方法【Conventional Commits対応】\u003C\u002Fh1>\n\u003Cp>AI エージェントにコードを書かせる場面が増え、コミットの回数も増える一方だ。毎回メッセージを考える手間を、lazygit の \u003Ccode>Ctrl+G\u003C\u002Fcode> 一発で解消する方法を紹介する。\u003C\u002Fp>\n\u003Ch2 id=\"完成形：コピペですぐ使える設定\" tabindex=\"-1\">\u003Cspan class=\"h-no\" aria-hidden=\"true\">01\u003C\u002Fspan>完成形：コピペですぐ使える設定\u003C\u002Fh2>\n\u003Cp>結論から。以下を lazygit の \u003Ccode>config.yml\u003C\u002Fcode> に追加すれば動く。\u003C\u002Fp>\n\u003Cblockquote>\n\u003Cp>\u003Cstrong>設定ファイルの場所\u003C\u002Fstrong>（OS・環境により異なる）\u003C\u002Fp>\n\u003Cul>\n\u003Cli>macOS（デフォルト）: \u003Ccode>~\u002FLibrary\u002FApplication Support\u002Flazygit\u002Fconfig.yml\u003C\u002Fcode>\u003C\u002Fli>\n\u003Cli>macOS（XDG_CONFIG_HOME 設定済み）: \u003Ccode>~\u002F.config\u002Flazygit\u002Fconfig.yml\u003C\u002Fcode>\u003C\u002Fli>\n\u003Cli>Linux: \u003Ccode>~\u002F.config\u002Flazygit\u002Fconfig.yml\u003C\u002Fcode>\u003C\u002Fli>\n\u003C\u002Ful>\n\u003C\u002Fblockquote>\n\u003Cfigure class=\"code\" data-lang=\"yaml\">\u003Cdiv class=\"code-bar\">\u003Cspan class=\"lang\">YAML\u003C\u002Fspan>\u003Cspan>41 LINES\u003C\u002Fspan>\u003Cbutton class=\"copy\" type=\"button\" data-cursor=\"COPY\">COPY\u003C\u002Fbutton>\u003C\u002Fdiv>\u003Cpre class=\"shiki site-code\" style=\"background-color:var(--shiki-background);color:var(--shiki-foreground)\" tabindex=\"0\">\u003Ccode class=\"language-yaml\">\u003Cspan class=\"line\">\u003Cspan style=\"color:var(--shiki-token-keyword)\">customCommands\u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-token-keyword)\">:\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:var(--shiki-foreground)\">  - \u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-token-keyword)\">key\u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-token-keyword)\">:\u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-token-string-expression)\"> \"&#x3C;c-g>\"\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:var(--shiki-token-keyword)\">    context\u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-token-keyword)\">:\u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-token-string-expression)\"> \"files\"\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:var(--shiki-token-keyword)\">    description\u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-token-keyword)\">:\u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-token-string-expression)\"> \"Claude で Conventional Commits のメッセージを生成してコミット\"\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:var(--shiki-token-keyword)\">    output\u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-token-keyword)\">:\u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-token-string-expression)\"> \"terminal\"\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:var(--shiki-token-keyword)\">    command\u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-token-keyword)\">:\u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-token-keyword)\"> |\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:var(--shiki-token-string)\">      if git diff --cached --quiet; then\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:var(--shiki-token-string)\">        echo \"No staged changes to commit.\"\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:var(--shiki-token-string)\">        exit 1\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:var(--shiki-token-string)\">      fi\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:var(--shiki-token-string)\">      CLAUDE_BIN=\"${CLAUDE_BIN:-$(command -v claude || true)}\"\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:var(--shiki-token-string)\">      if [ -z \"$CLAUDE_BIN\" ] &#x26;&#x26; [ -x \u002Fopt\u002Fhomebrew\u002Fbin\u002Fclaude ]; then\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:var(--shiki-token-string)\">        CLAUDE_BIN=\u002Fopt\u002Fhomebrew\u002Fbin\u002Fclaude\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:var(--shiki-token-string)\">      fi\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:var(--shiki-token-string)\">      if [ -z \"$CLAUDE_BIN\" ] || [ ! -x \"$CLAUDE_BIN\" ]; then\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:var(--shiki-token-string)\">        echo \"Claude CLI not found in PATH.\"\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:var(--shiki-token-string)\">        exit 1\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:var(--shiki-token-string)\">      fi\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:var(--shiki-token-string)\">      PROMPT_CONTENT=\"$(\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:var(--shiki-token-string)\">        cat &#x3C;&#x3C;'EOF'\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:var(--shiki-token-string)\">      以下の staged diff だけを根拠に、Conventional Commits 形式の1行コミットメッセージを日本語で生成してください。\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:var(--shiki-token-string)\">      形式: type(scope): 日本語の要約\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:var(--shiki-token-string)\">      type は feat, fix, docs, style, refactor, test, chore のいずれかを使ってください。\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:var(--shiki-token-string)\">      出力はコミットメッセージ本文のみ。コードフェンスや補足説明は禁止です。\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:var(--shiki-token-string)\">      Staged diff:\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:var(--shiki-token-string)\">      EOF\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:var(--shiki-token-string)\">        git diff --cached\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:var(--shiki-token-string)\">      )\"\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:var(--shiki-token-string)\">      MSG=\"$(CLAUDE_SKIP_NOTIFY_HOOKS=1 \"$CLAUDE_BIN\" --print --model haiku \"$PROMPT_CONTENT\")\"\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:var(--shiki-token-string)\">      if [ -z \"$MSG\" ]; then\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:var(--shiki-token-string)\">        echo \"Claude did not return a commit message.\"\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:var(--shiki-token-string)\">        exit 1\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:var(--shiki-token-string)\">      fi\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:var(--shiki-token-string)\">      git commit -e -m \"$MSG\"\u003C\u002Fspan>\u003C\u002Fspan>\u003C\u002Fcode>\u003C\u002Fpre>\n\u003C\u002Ffigure>\n\u003Cp>変更をステージングした後、lazygit の Files パネルで \u003Ccode>Ctrl+G\u003C\u002Fcode> を押す。Claude が diff を読み、Conventional Commits 形式のメッセージを生成し、エディタで確認してからコミットできる。\u003C\u002Fp>\n\u003Ch2 id=\"前提条件\" tabindex=\"-1\">\u003Cspan class=\"h-no\" aria-hidden=\"true\">02\u003C\u002Fspan>前提条件\u003C\u002Fh2>\n\u003Ch3 id=\"lazygit\" tabindex=\"-1\">lazygit\u003C\u002Fh3>\n\u003Cfigure class=\"code\" data-lang=\"bash\">\u003Cdiv class=\"code-bar\">\u003Cspan class=\"lang\">BASH\u003C\u002Fspan>\u003Cspan>1 LINE\u003C\u002Fspan>\u003Cbutton class=\"copy\" type=\"button\" data-cursor=\"COPY\">COPY\u003C\u002Fbutton>\u003C\u002Fdiv>\u003Cpre class=\"shiki site-code\" style=\"background-color:var(--shiki-background);color:var(--shiki-foreground)\" tabindex=\"0\">\u003Ccode class=\"language-bash\">\u003Cspan class=\"line\">\u003Cspan style=\"color:var(--shiki-token-function)\">brew\u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-token-string)\"> install\u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-token-string)\"> lazygit\u003C\u002Fspan>\u003C\u002Fspan>\u003C\u002Fcode>\u003C\u002Fpre>\n\u003C\u002Ffigure>\n\u003Cp>詳細は \u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fjesseduffield\u002Flazygit\" target=\"_blank\" rel=\"noopener noreferrer\">lazygit 公式リポジトリ\u003C\u002Fa> を参照。\u003C\u002Fp>\n\u003Ch3 id=\"claude-code-cli\" tabindex=\"-1\">Claude Code CLI\u003C\u002Fh3>\n\u003Cfigure class=\"code\" data-lang=\"bash\">\u003Cdiv class=\"code-bar\">\u003Cspan class=\"lang\">BASH\u003C\u002Fspan>\u003Cspan>2 LINES\u003C\u002Fspan>\u003Cbutton class=\"copy\" type=\"button\" data-cursor=\"COPY\">COPY\u003C\u002Fbutton>\u003C\u002Fdiv>\u003Cpre class=\"shiki site-code\" style=\"background-color:var(--shiki-background);color:var(--shiki-foreground)\" tabindex=\"0\">\u003Ccode class=\"language-bash\">\u003Cspan class=\"line\">\u003Cspan style=\"color:var(--shiki-token-function)\">npm\u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-token-string)\"> install\u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-token-string)\"> -g\u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-token-string)\"> @anthropic-ai\u002Fclaude-code\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:var(--shiki-token-function)\">claude\u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-token-comment)\">  # 初回起動で認証\u003C\u002Fspan>\u003C\u002Fspan>\u003C\u002Fcode>\u003C\u002Fpre>\n\u003C\u002Ffigure>\n\u003Cp>詳細は \u003Ca href=\"https:\u002F\u002Fdocs.anthropic.com\u002Fen\u002Fdocs\u002Fclaude-code\" target=\"_blank\" rel=\"noopener noreferrer\">Claude Code 公式ドキュメント\u003C\u002Fa> を参照。\u003C\u002Fp>\n\u003Ch2 id=\"設定の中身を理解する\" tabindex=\"-1\">\u003Cspan class=\"h-no\" aria-hidden=\"true\">03\u003C\u002Fspan>設定の中身を理解する\u003C\u002Fh2>\n\u003Cp>コピペで動かすだけでも十分だが、カスタマイズしたい場合は各パーツの役割を知っておくと便利だ。\u003C\u002Fp>\n\u003Ch3 id=\"customcommands-の基本構造\" tabindex=\"-1\">customCommands の基本構造\u003C\u002Fh3>\n\u003Cp>lazygit の \u003Ccode>customCommands\u003C\u002Fcode> は、任意のキーバインドにシェルコマンドを割り当てる機能だ。\u003C\u002Fp>\n\u003Cdiv class=\"tbl\" tabindex=\"0\" role=\"region\" aria-label=\"Table\">\u003Ctable>\n\u003Cthead>\n\u003Ctr>\n\u003Cth>フィールド\u003C\u002Fth>\n\u003Cth>値\u003C\u002Fth>\n\u003Cth>役割\u003C\u002Fth>\n\u003C\u002Ftr>\n\u003C\u002Fthead>\n\u003Ctbody>\n\u003Ctr>\n\u003Ctd>\u003Ccode>key\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd>\u003Ccode>&quot;&lt;c-g&gt;&quot;\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd>\u003Ccode>Ctrl+G\u003C\u002Fcode> にバインド\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>context\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd>\u003Ccode>&quot;files&quot;\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd>Files パネルで有効化\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>output\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd>\u003Ccode>&quot;terminal&quot;\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd>コマンド出力をターミナルに表示\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>command\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd>シェルスクリプト\u003C\u002Ftd>\n\u003Ctd>実行する処理\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003C\u002Ftbody>\n\u003C\u002Ftable>\u003C\u002Fdiv>\n\u003Ch3 id=\"staged-diff-の取得とバリデーション\" tabindex=\"-1\">staged diff の取得とバリデーション\u003C\u002Fh3>\n\u003Cp>コマンド冒頭で、ステージングされた変更の有無をチェックしている。\u003C\u002Fp>\n\u003Cfigure class=\"code\" data-lang=\"bash\">\u003Cdiv class=\"code-bar\">\u003Cspan class=\"lang\">BASH\u003C\u002Fspan>\u003Cspan>4 LINES\u003C\u002Fspan>\u003Cbutton class=\"copy\" type=\"button\" data-cursor=\"COPY\">COPY\u003C\u002Fbutton>\u003C\u002Fdiv>\u003Cpre class=\"shiki site-code\" style=\"background-color:var(--shiki-background);color:var(--shiki-foreground)\" tabindex=\"0\">\u003Ccode class=\"language-bash\">\u003Cspan class=\"line\">\u003Cspan style=\"color:var(--shiki-token-keyword)\">if\u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-token-function)\"> git\u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-token-string)\"> diff\u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-token-string)\"> --cached\u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-token-string)\"> --quiet\u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-foreground)\">; \u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-token-keyword)\">then\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:var(--shiki-token-function)\">  echo\u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-token-string-expression)\"> \"No staged changes to commit.\"\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:var(--shiki-token-function)\">  exit\u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-token-constant)\"> 1\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:var(--shiki-token-keyword)\">fi\u003C\u002Fspan>\u003C\u002Fspan>\u003C\u002Fcode>\u003C\u002Fpre>\n\u003C\u002Ffigure>\n\u003Cp>\u003Ccode>git diff --cached --quiet\u003C\u002Fcode> は staged diff が空のとき exit code 0 を返す。何もステージングしていない状態での誤実行を防ぐガードだ。\u003C\u002Fp>\n\u003Cp>続いて Claude CLI のパスを解決する。\u003Ccode>command -v claude\u003C\u002Fcode> で PATH を検索し、見つからなければ Homebrew のデフォルトパス \u003Ccode>\u002Fopt\u002Fhomebrew\u002Fbin\u002Fclaude\u003C\u002Fcode> をフォールバックとして試す。\u003C\u002Fp>\n\u003Ch3 id=\"プロンプト設計\" tabindex=\"-1\">プロンプト設計\u003C\u002Fh3>\n\u003Cp>Claude に渡すプロンプトは、ヒアドキュメントで staged diff と結合している。\u003C\u002Fp>\n\u003Cfigure class=\"code\" data-lang=\"bash\">\u003Cdiv class=\"code-bar\">\u003Cspan class=\"lang\">BASH\u003C\u002Fspan>\u003Cspan>11 LINES\u003C\u002Fspan>\u003Cbutton class=\"copy\" type=\"button\" data-cursor=\"COPY\">COPY\u003C\u002Fbutton>\u003C\u002Fdiv>\u003Cpre class=\"shiki site-code\" style=\"background-color:var(--shiki-background);color:var(--shiki-foreground)\" tabindex=\"0\">\u003Ccode class=\"language-bash\">\u003Cspan class=\"line\">\u003Cspan style=\"color:var(--shiki-foreground)\">PROMPT_CONTENT\u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-token-keyword)\">=\u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-token-string-expression)\">\"$(\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:var(--shiki-token-function)\">  cat\u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-token-keyword)\"> &#x3C;&#x3C;\u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-token-string-expression)\">'EOF'\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:var(--shiki-token-string-expression)\">以下の staged diff だけを根拠に、Conventional Commits 形式の1行コミットメッセージを日本語で生成してください。\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:var(--shiki-token-string-expression)\">形式: type(scope): 日本語の要約\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:var(--shiki-token-string-expression)\">type は feat, fix, docs, style, refactor, test, chore のいずれかを使ってください。\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:var(--shiki-token-string-expression)\">出力はコミットメッセージ本文のみ。コードフェンスや補足説明は禁止です。\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:var(--shiki-token-string-expression)\">Staged diff:\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:var(--shiki-token-string-expression)\">EOF\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:var(--shiki-token-function)\">  git\u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-token-string)\"> diff\u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-token-string)\"> --cached\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:var(--shiki-token-string-expression)\">)\"\u003C\u002Fspan>\u003C\u002Fspan>\u003C\u002Fcode>\u003C\u002Fpre>\n\u003C\u002Ffigure>\n\u003Cp>設計上のポイントは3つ。\u003C\u002Fp>\n\u003Col>\n\u003Cli>\u003Cstrong>フォーマットを明示\u003C\u002Fstrong>: \u003Ccode>type(scope): 要約\u003C\u002Fcode> という Conventional Commits の形式を指定\u003C\u002Fli>\n\u003Cli>\u003Cstrong>出力制約\u003C\u002Fstrong>: コードフェンスや補足説明を禁止し、コミットメッセージ本文だけを出力させる\u003C\u002Fli>\n\u003Cli>\u003Cstrong>staged diff のみ\u003C\u002Fstrong>: \u003Ccode>git diff --cached\u003C\u002Fcode> で staged された変更だけを渡し、作業中の変更が混入しない\u003C\u002Fli>\n\u003C\u002Fol>\n\u003Ch3 id=\"claude-code-の呼び出しと-git-commit\" tabindex=\"-1\">Claude Code の呼び出しと git commit\u003C\u002Fh3>\n\u003Cfigure class=\"code\" data-lang=\"bash\">\u003Cdiv class=\"code-bar\">\u003Cspan class=\"lang\">BASH\u003C\u002Fspan>\u003Cspan>1 LINE\u003C\u002Fspan>\u003Cbutton class=\"copy\" type=\"button\" data-cursor=\"COPY\">COPY\u003C\u002Fbutton>\u003C\u002Fdiv>\u003Cpre class=\"shiki site-code\" style=\"background-color:var(--shiki-background);color:var(--shiki-foreground)\" tabindex=\"0\">\u003Ccode class=\"language-bash\">\u003Cspan class=\"line\">\u003Cspan style=\"color:var(--shiki-foreground)\">MSG\u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-token-keyword)\">=\u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-token-string-expression)\">\"$(CLAUDE_SKIP_NOTIFY_HOOKS\u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-token-keyword)\">=\u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-token-string)\">1\u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-token-string-expression)\"> \"$CLAUDE_BIN\" \u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-token-function)\">--print\u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-token-string)\"> --model\u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-token-string)\"> haiku\u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-token-string-expression)\"> \"$PROMPT_CONTENT\")\"\u003C\u002Fspan>\u003C\u002Fspan>\u003C\u002Fcode>\u003C\u002Fpre>\n\u003C\u002Ffigure>\n\u003Cp>この1行に3つのフラグと1つの環境変数が詰まっている（詳細は後述の「フラグ・環境変数リファレンス」を参照）。\u003C\u002Fp>\n\u003Cp>生成されたメッセージは \u003Ccode>git commit -e -m\u003C\u002Fcode> に渡す。\u003Ccode>-e\u003C\u002Fcode> フラグにより、メッセージがエディタで開かれる。確認・修正してから保存すればコミット完了だ。\u003C\u002Fp>\n\u003Ch2 id=\"ここに至るまでの試行錯誤\" tabindex=\"-1\">\u003Cspan class=\"h-no\" aria-hidden=\"true\">04\u003C\u002Fspan>ここに至るまでの試行錯誤\u003C\u002Fh2>\n\u003Cp>完成形に至るまでに4段階の改善を経た。同じ構成を組む人が同じ罠にハマらないよう、各ステップの問題と解決策を共有する。\u003C\u002Fp>\n\u003Ch3 id=\"step-1:-外部スクリプト方式（初期版）\" tabindex=\"-1\">Step 1: 外部スクリプト方式（初期版）\u003C\u002Fh3>\n\u003Cp>最初は \u003Ccode>lazygit-claude-commit.sh\u003C\u002Fcode> という別スクリプトを用意し、lazygit から呼び出していた。\u003C\u002Fp>\n\u003Cfigure class=\"code\" data-lang=\"yaml\">\u003Cdiv class=\"code-bar\">\u003Cspan class=\"lang\">YAML\u003C\u002Fspan>\u003Cspan>3 LINES\u003C\u002Fspan>\u003Cbutton class=\"copy\" type=\"button\" data-cursor=\"COPY\">COPY\u003C\u002Fbutton>\u003C\u002Fdiv>\u003Cpre class=\"shiki site-code\" style=\"background-color:var(--shiki-background);color:var(--shiki-foreground)\" tabindex=\"0\">\u003Ccode class=\"language-yaml\">\u003Cspan class=\"line\">\u003Cspan style=\"color:var(--shiki-token-keyword)\">command\u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-token-keyword)\">:\u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-token-keyword)\"> |\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:var(--shiki-token-string)\">  DOTFILES_DIR=\"${DOTFILES_DIR:-$HOME\u002Fghq\u002Fgithub.com\u002Fyoshihiko555\u002Fdotfiles}\"\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:var(--shiki-token-string)\">  \"$DOTFILES_DIR\u002Fscripts\u002Flazygit-claude-commit.sh\"\u003C\u002Fspan>\u003C\u002Fspan>\u003C\u002Fcode>\u003C\u002Fpre>\n\u003C\u002Ffigure>\n\u003Cp>\u003Cstrong>問題\u003C\u002Fstrong>: dotfiles のディレクトリパスに依存し、環境が変わると動かない。\u003C\u002Fp>\n\u003Cp>\u003Cstrong>解決\u003C\u002Fstrong>: スクリプトの内容を \u003Ccode>config.yml\u003C\u002Fcode> にインライン化した。設定ファイル1つで完結するため、dotfiles ごと持ち運べばどの環境でも動く。\u003C\u002Fp>\n\u003Ch3 id=\"step-2:-インライン化-+-英語プロンプト\" tabindex=\"-1\">Step 2: インライン化 + 英語プロンプト\u003C\u002Fh3>\n\u003Cp>外部スクリプトを廃止し、コマンドを \u003Ccode>config.yml\u003C\u002Fcode> に直接記述した。ただし最初のプロンプトは英語だった。\u003C\u002Fp>\n\u003Cp>\u003Cstrong>問題\u003C\u002Fstrong>: プロジェクトのコミット履歴を日本語で統一していたため、英語メッセージが混在して \u003Ccode>git log\u003C\u002Fcode> の一貫性が崩れた。\u003C\u002Fp>\n\u003Cp>\u003Cstrong>解決\u003C\u002Fstrong>: プロンプトを日本語に変更し、「日本語で生成してください」と明示した。\u003C\u002Fp>\n\u003Ch3 id=\"step-3:-日本語化-+-周辺課題の解決\" tabindex=\"-1\">Step 3: 日本語化 + 周辺課題の解決\u003C\u002Fh3>\n\u003Cp>プロンプトを日本語に書き換えると同時に、運用で見つかった周辺課題も解決した。\u003C\u002Fp>\n\u003Cp>\u003Cstrong>通知フックの抑制\u003C\u002Fstrong>: Claude Code は完了時にフックを実行する仕組みを持つ。\u003Ccode>--print\u003C\u002Fcode> モードでも毎回通知が飛んでしまい煩わしかった。\u003Ccode>CLAUDE_SKIP_NOTIFY_HOOKS=1\u003C\u002Fcode> 環境変数で抑制できる。\u003C\u002Fp>\n\u003Cp>\u003Cstrong>lazygit の設定ディレクトリ問題\u003C\u002Fstrong>: GNU Stow で dotfiles を管理している環境では、\u003Ccode>~\u002F.config\u002Flazygit\u002F\u003C\u002Fcode> が正しく認識されないことがあった。\u003Ccode>.zshrc\u003C\u002Fcode> にラッパー関数を追加して解決した。\u003C\u002Fp>\n\u003Cfigure class=\"code\" data-lang=\"bash\">\u003Cdiv class=\"code-bar\">\u003Cspan class=\"lang\">BASH\u003C\u002Fspan>\u003Cspan>3 LINES\u003C\u002Fspan>\u003Cbutton class=\"copy\" type=\"button\" data-cursor=\"COPY\">COPY\u003C\u002Fbutton>\u003C\u002Fdiv>\u003Cpre class=\"shiki site-code\" style=\"background-color:var(--shiki-background);color:var(--shiki-foreground)\" tabindex=\"0\">\u003Ccode class=\"language-bash\">\u003Cspan class=\"line\">\u003Cspan style=\"color:var(--shiki-token-function)\">lazygit\u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-token-punctuation)\">()\u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-foreground)\"> {\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:var(--shiki-foreground)\">  XDG_CONFIG_HOME\u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-token-keyword)\">=\u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-token-string-expression)\">\"$HOME\u002F.config\"\u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-token-function)\"> command\u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-token-string)\"> lazygit\u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-token-string-expression)\"> \"$@\"\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:var(--shiki-foreground)\">}\u003C\u002Fspan>\u003C\u002Fspan>\u003C\u002Fcode>\u003C\u002Fpre>\n\u003C\u002Ffigure>\n\u003Cp>\u003Cstrong>エディタ確認の追加\u003C\u002Fstrong>: 当初は \u003Ccode>git commit -m &quot;$MSG&quot;\u003C\u002Fcode> で直接コミットしていたが、AI の生成結果を無条件に受け入れるのはリスクがある。\u003Ccode>-e\u003C\u002Fcode> フラグを追加し、コミット前に必ずエディタで確認するフローに変更した。\u003C\u002Fp>\n\u003Ch2 id=\"フラグ・環境変数リファレンス\" tabindex=\"-1\">\u003Cspan class=\"h-no\" aria-hidden=\"true\">05\u003C\u002Fspan>フラグ・環境変数リファレンス\u003C\u002Fh2>\n\u003Ch3 id=\"claude-code-cli-フラグ\" tabindex=\"-1\">Claude Code CLI フラグ\u003C\u002Fh3>\n\u003Cdiv class=\"tbl\" tabindex=\"0\" role=\"region\" aria-label=\"Table\">\u003Ctable>\n\u003Cthead>\n\u003Ctr>\n\u003Cth>フラグ\u003C\u002Fth>\n\u003Cth>役割\u003C\u002Fth>\n\u003C\u002Ftr>\n\u003C\u002Fthead>\n\u003Ctbody>\n\u003Ctr>\n\u003Ctd>\u003Ccode>--print\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd>非対話モード。結果を標準出力に出力し、ターミナル UI を起動しない\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>--model haiku\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd>Haiku モデルを指定。高速・低コストで、コミットメッセージ生成には十分\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003C\u002Ftbody>\n\u003C\u002Ftable>\u003C\u002Fdiv>\n\u003Ch3 id=\"環境変数\" tabindex=\"-1\">環境変数\u003C\u002Fh3>\n\u003Cdiv class=\"tbl\" tabindex=\"0\" role=\"region\" aria-label=\"Table\">\u003Ctable>\n\u003Cthead>\n\u003Ctr>\n\u003Cth>変数\u003C\u002Fth>\n\u003Cth>役割\u003C\u002Fth>\n\u003C\u002Ftr>\n\u003C\u002Fthead>\n\u003Ctbody>\n\u003Ctr>\n\u003Ctd>\u003Ccode>CLAUDE_SKIP_NOTIFY_HOOKS=1\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd>Claude Code のフック通知をスキップする\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003C\u002Ftbody>\n\u003C\u002Ftable>\u003C\u002Fdiv>\n\u003Ch2 id=\"運用してみてのポイント\" tabindex=\"-1\">\u003Cspan class=\"h-no\" aria-hidden=\"true\">06\u003C\u002Fspan>運用してみてのポイント\u003C\u002Fh2>\n\u003Ch3 id=\"エディタ確認は外さない\" tabindex=\"-1\">エディタ確認は外さない\u003C\u002Fh3>\n\u003Cp>AI が生成したメッセージは8割方そのまま使えるが、スコープ名の選択や要約の粒度が微妙なケースもある。\u003Ccode>git commit -e\u003C\u002Fcode> によるエディタ確認は外さないほうがいい。確認に要する時間は数秒で、ゼロからメッセージを考えるよりはるかに速い。\u003C\u002Fp>\n\u003Ch3 id=\"haiku-モデルで十分\" tabindex=\"-1\">Haiku モデルで十分\u003C\u002Fh3>\n\u003Cp>コミットメッセージ生成は「diff を読んで1行にまとめる」タスクだ。Sonnet や Opus のような大型モデルは不要で、Haiku の速度とコストが最適なバランスになる。レスポンスは体感1〜2秒で返ってくる。\u003C\u002Fp>\n\u003Ch3 id=\"staged-diff-だけを渡す理由\" tabindex=\"-1\">staged diff だけを渡す理由\u003C\u002Fh3>\n\u003Cp>\u003Ccode>git diff --cached\u003C\u002Fcode>（staged のみ）を使い、\u003Ccode>git diff\u003C\u002Fcode>（unstaged 含む）は使わない。理由は明確だ。\u003C\u002Fp>\n\u003Cul>\n\u003Cli>コミット対象の変更だけをメッセージに反映させたい\u003C\u002Fli>\n\u003Cli>作業中の未ステージング変更が含まれると、メッセージの焦点がブレる\u003C\u002Fli>\n\u003Cli>lazygit でファイル単位にステージングを調整した後に \u003Ccode>Ctrl+G\u003C\u002Fcode> を押すワークフローと整合する\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Ch2 id=\"まとめ\" tabindex=\"-1\">\u003Cspan class=\"h-no\" aria-hidden=\"true\">07\u003C\u002Fspan>まとめ\u003C\u002Fh2>\n\u003Cp>lazygit の \u003Ccode>customCommands\u003C\u002Fcode> と Claude Code の \u003Ccode>--print\u003C\u002Fcode> モードを組み合わせれば、\u003Ccode>Ctrl+G\u003C\u002Fcode> 一発で Conventional Commits 形式のコミットメッセージを自動生成できる。設定は \u003Ccode>config.yml\u003C\u002Fcode> に約30行で完結し、導入コストは低い。\u003C\u002Fp>\n\u003Cp>AI にコードを書かせる機会が増えるほど、コミット回数も増える。メッセージを毎回手で考える時間を、この仕組みで取り戻してほしい。\u003C\u002Fp>\n",[462,464,466,467,470,472,475,478,480,483,485,488,491,494,496,499,501,503,505,508,511],{"level":426,"id":463,"text":463},"完成形：コピペですぐ使える設定",{"level":426,"id":465,"text":465},"前提条件",{"level":419,"id":190,"text":190},{"level":419,"id":468,"text":469},"claude-code-cli","Claude Code CLI",{"level":426,"id":471,"text":471},"設定の中身を理解する",{"level":419,"id":473,"text":474},"customcommands-の基本構造","customCommands の基本構造",{"level":419,"id":476,"text":477},"staged-diff-の取得とバリデーション","staged diff の取得とバリデーション",{"level":419,"id":479,"text":479},"プロンプト設計",{"level":419,"id":481,"text":482},"claude-code-の呼び出しと-git-commit","Claude Code の呼び出しと git commit",{"level":426,"id":484,"text":484},"ここに至るまでの試行錯誤",{"level":419,"id":486,"text":487},"step-1:-外部スクリプト方式（初期版）","Step 1: 外部スクリプト方式（初期版）",{"level":419,"id":489,"text":490},"step-2:-インライン化-+-英語プロンプト","Step 2: インライン化 + 英語プロンプト",{"level":419,"id":492,"text":493},"step-3:-日本語化-+-周辺課題の解決","Step 3: 日本語化 + 周辺課題の解決",{"level":426,"id":495,"text":495},"フラグ・環境変数リファレンス",{"level":419,"id":497,"text":498},"claude-code-cli-フラグ","Claude Code CLI フラグ",{"level":419,"id":500,"text":500},"環境変数",{"level":426,"id":502,"text":502},"運用してみてのポイント",{"level":419,"id":504,"text":504},"エディタ確認は外さない",{"level":419,"id":506,"text":507},"haiku-モデルで十分","Haiku モデルで十分",{"level":419,"id":509,"text":510},"staged-diff-だけを渡す理由","staged diff だけを渡す理由",{"level":426,"id":512,"text":512},"まとめ",{"slug":194,"title":195,"description":196,"publishedAt":197,"updatedAt":198,"category":514,"tags":515,"thumbnail":519},{"name":49,"slug":50},[516,517,518],{"name":53,"slug":53},{"name":203,"slug":203},{"name":205,"slug":205},{"url":207,"description":104},{"slug":168,"title":169,"description":170,"publishedAt":171,"updatedAt":172,"category":521,"tags":522,"thumbnail":525},{"name":49,"slug":50},[523,524],{"name":25,"slug":26},{"name":58,"slug":59},{"url":178,"description":104},[527,534,538],{"slug":18,"title":19,"description":20,"publishedAt":21,"updatedAt":21,"category":528,"tags":529,"thumbnail":16},{"name":11,"slug":12},[530,531,532,533],{"name":25,"slug":26},{"name":28,"slug":29},{"name":31,"slug":31},{"name":33,"slug":34},{"slug":36,"title":37,"description":38,"publishedAt":39,"updatedAt":39,"category":535,"tags":536,"thumbnail":16},{"name":11,"slug":12},[537],{"name":25,"slug":26},{"slug":44,"title":45,"description":46,"publishedAt":47,"updatedAt":47,"category":539,"tags":540,"thumbnail":16},{"name":49,"slug":50},[541,542,543],{"name":53,"slug":53},{"name":55,"slug":56},{"name":58,"slug":59},1793725977479]