blog

DeNAのエンジニアが考えていることや、担当しているサービスについて情報発信しています

2026.07.15 技術記事

Claude Codeのハーネスを育てるアプリを作ってみた 〜~/.claudeには宝が眠っている〜

by Ryuji Matsushima

#claude-code #generative-ai #electron #agent-sdk #knowledge-management #productivity

こんにちは、松島です。元々はバックエンドエンジニアで、今はDeSCヘルスケアでデータアナリスト兼アナリティクスエンジニアをしています。「LLM×データ×分析×エンジニアリング」の交差点あたりが好きで、気づけばいつもそのあたりで手を動かしています。

普段は業務でClaude Codeを触りまくっています。使っていると、~/.claude の下にはいろいろなものが溜まっていきます。CLAUDE.mdに書き足したルール、Claudeが勝手に覚えてくれたメモリ、日々のセッションログ、いつか作ったスキル。ここまでは、使っている人ならみんな知っている話だと思います。

では、それを定期的に見返して、CLAUDE.mdやルールに反映して……という「手入れ」を、続けられているでしょうか?

私はできていませんでした。CLAUDE.mdは導入したときに気合いを入れて書いたきり、メンテが止まっている。セッションログは作業を再開するとき以外に開かない。メモリはセッションをまたいで文脈を覚えていてくれて、作業再開のたびに助けられているのに、それ以外の形で活用したことはない。勝手に溜まっていくものは見られず、育てるべきものは放置される——でも冷静に考えると、溜まっているログの中には数ヶ月分の仕事の記録と暗黙知が積もっているわけで、かなりもったいない状態です。今日はそこから作った、Claude Codeのハーネスを可視化・育成するデスクトップアプリ「geniハーネスくん」について書いてみます。geniはgenius(天才)から取っていて、「Claude Codeのハーネス最適化が天才的に得意なアプリ」になってほしい、という願いを込めた命名です。

~/.claude に溜まるもの、育てるもの

~/.claude に入っているものの性格を整理すると、こうなります。

CLAUDE.mdやrulesは、Claudeへの指示や規約です。効き目は大きいのに勝手には増えず、最初はがんばって書いたきり、継続的なメンテは正直さぼりがちで、気づくと実態とずれてきます。skillは定型作業の手順やナレッジをパッケージ化した部品で、うまく作れば強力ですが、これも勝手には生まれません。作るのに一手間かかるので、「いつかスキル化しよう」と思ったまま放置されがちです。

一方でセッションログは、日々のやり取りの全記録です。何もしなくても勝手に溜まっていきますが、開くのは中断した作業を継続するときくらいで、あとから見返されることはあまりありません。メモリはセッションをまたいでコンテキストを引き継ぐための仕組みで、作業再開のときには大いに助けられていますが、Claudeが裏で読み書きするものなので、そこに溜まった知見を人が別の形で活用する機会は多くありません。

実際のディレクトリでいうと、こういう配置です。セッションログも自動メモリも、~/.claude/projects/ の下にプロジェクト単位で溜まっていきます。

`~/.claude` ディレクトリと `projects/<project>/memory/` に蓄積される Claude Code の資産

ユーザー単位のハーネスと、プロジェクト単位で溜まるセッションログ・メモリ

並べてみると、性格が2つに分かれていることに気づきます。セッションログとメモリは、勝手に溜まるのに、見返されない。CLAUDE.mdやrules、それに自作のskillやプラグインの構成は、効くのに、勝手には育たない。この2つが別々のまま放置されているのが、多くの人の ~/.claude の現状じゃないでしょうか。

「ハーネス」というメタファーと、育てるループ

そこで思ったのが、Claude Codeというのは強力な「エンジン」であって、CLAUDE.mdやrules、skill、プラグインといった仕組みは、そのエンジンを安全に、狙った方向に走らせるための「ハーネス(制御装具)」なんじゃないか、ということです。

エンジンだけあっても暴走したり、力を発揮しきれなかったりします。ハーネスがちゃんと育っていれば、同じClaude Codeでも出せるアウトプットの質がまるで違う。ただ、さっき整理したとおり、ハーネスは勝手には育ちません。一方で、育てるための材料——繰り返し説明している前提、何度も直させている書き方の癖、毎週やっている定型作業——は、セッションログとメモリの中に勝手に溜まり続けています。

つまり、本来はこういうループが回せるはずなんです。

Claude Codeを使う→セッションログ・メモリが素材として溜まる→素材からハーネスを育てる→振り返りで質が上がる→もっと使いたくなる、という5段階の循環図

このループを、道具の力で回す

問題は、2段目から3段目——素材からハーネスを育てるところ——が完全に手作業だということです。セッションログを読み返して、繰り返しのパターンを見つけて、CLAUDE.mdやskillに反映する。やればいいのは分かっていても、これを毎週続けられる人はなかなかいないと思います。だったら、ここを道具で埋めてしまおう。そう思って作ったのが「geniハーネスくん」です。

geniハーネスくんがやっていること

ループの各フェーズに、実際の画面を対応させると、こんな感じになります。

フェーズ やること
① 素材が溜まる アプリの外で自然に起きる。Claude Codeを使うだけで、セッションログとメモリが勝手に溜まっていく
② 可視化する 素材を集計して、自分が何をしてきたかをKPIや日次アクティビティ、プロジェクトごとの分布で一目でわかるようにする
③ ハーネスを育てる・共有する セッションやメモリを材料に、AIがCLAUDE.mdの改善案やセルフナレッジスキルを提案し、ボタン1つで反映する。育てたハーネスは組織で共有する(次の章で詳しく)
④ 振り返りが、次に繋がる 前営業日にやったことを自動で振り返って日次レポートとTODOに整理し、次のアクションとハーネスの手直しに繋げる

このうち、とくに力を入れているのが③以降です。世の中には「使った履歴を可視化して提示する」ツールはもう珍しくありません。でも「提示して終わり」だと、結局また ~/.claude の中に素材が溜まるだけで、ハーネスは育ちません。geniハーネスくんは、素材の入力から適用までを1つのアプリの中で完結させることにこだわりました。

入口になるのが②の可視化です。アプリを開くと最初に出る概要ビューで、期間ごとのKPI、日次のアクティビティ、プロジェクトごとの分布が一望できます。

geniハーネスくんの概要ビュー。KPIカード、利用モデル、日次アクティビティ、プロジェクト分布、メモリ種別をサニタイズ済みデータで表示している

まず、自分が何をしてきたかが一目でわかる

③でやっているのは、利用状況からのハーネス最適化です。対象は2つあります。

1つはCLAUDE.md。期間中の利用状況をAIが読んで、繰り返し説明している前提や直させている癖を、いまのCLAUDE.mdとの差分の形で提案してくれます。良ければ「反映」、いらなければ「破棄」——判断は必ず人間側に残します。

CLAUDE.mdの改善提案画面。AIが利用状況から生成した差分案(追加行が緑・削除行が赤)と、それを本文に反映するボタンを表示している

「提示して終わり」ではなく、反映ボタンまでがアプリの中にある

もう1つが「セルフナレッジ生成」です。左の画面で材料にするメモリと期間を選んで生成ボタンを押すと、右のようなスキル一式の提案になって返ってきます。プレビューで中身を確かめて、適用ボタンで自分の ~/.claude/skills/ に入ります。

セルフナレッジ生成のBefore/After。左は材料にするメモリを選ぶ画面、右はAIが生成したスキル案(スキル名・発火トリガー・SKILL.md・知識ファイル)のプレビューと適用ボタン

個人のノウハウが、ワンクリックで再利用可能な資産になる

④の担い手は「ルーティン」です。指定した曜日・時刻に、前営業日のセッションを自動で振り返って、日次レポートとTODOを抽出します。機密チェックを通れば、Slackへの起票まで自動です。振り返りで「この作業、繰り返してるな」「また同じ説明をしてるな」と見えたものは、そのまま③の材料に戻ります。日々の振り返りとハーネスの手直しが、ひとつの修正ループとして回り始めるわけです。

ルーティンビュー。日次振り返りのスケジュール設定(時刻・曜日・Slack連携)と、実行履歴に並ぶ抽出済みTODO・日次レポート

振り返りとTODOが毎朝手元に揃い、ハーネスの手直しに戻ってくる

育てたハーネスは、組織で共有する

ここまでは「個人のループ」の話でした。でも実は、一番作りたかったのはこの先です。

個人で育てたハーネスは、まだ個人のPCの中にあります。せっかく実戦で磨かれたCLAUDE.mdやskillができても、隣の席の人は同じ苦労をゼロからやり直すことになるし、本人が異動や退職をすれば普通に消えます。個人のループが回り始めたからこそ、この「もったいなさ」が余計に目につくようになりました。

そこでgeniハーネスくんには、共有ハーネスという機能を持たせています。やることは2方向です。

1つは共有する側。自分のCLAUDE.mdやrules、そしてセルフナレッジスキルを、アプリから社内の共有リポジトリに登録できます。セルフナレッジスキルというのは、前の章で触れた「セッションやメモリを材料にAIが生成するスキル」のことで、いわば個人の暗黙知をスキルの形に固めたものです。メンバーが登録するほど、そこには「組織のハーネスカタログ」が育っていきます。誰がどんなルールで、どんなナレッジでClaude Codeを走らせているのかが、はじめて横から見えるようになるわけです。

もう1つは取り込む側。カタログを眺めて、自分に効きそうなruleやskillを自分の ~/.claude に取り込めます。ここでも例の素材が効いていて、AIが自分の活動実態と照らして「あなたの使い方だと、この人のこのruleが効きそうですよ」というレコメンドまでしてくれます。全部読んで回らなくても、必要なものが向こうからやって来る形です。

コミュニティハーネスからの取り込みレコメンド画面。他メンバーのrule・セルフナレッジ・CLAUDE.md改善が、種別・優先度・提案元・理由つきで一覧表示され、内容を見る/取り込みボタンが並んでいる

どのruleやskillが自分に効きそうか、理由と優先度つきで提案される

一点だけ、共有には気をつかうポイントがあります。自分のハーネスには、個人に紐づく情報がうっかり紛れ込んでいることがある。なので登録の前には、機械的なスキャンとAIによるスキャンの二段構えで個人情報を検出・除去するステップを必ず通します。ここは外に出る操作なので、人が急いでいても迂回できない設計にしました。

共有ハーネスの登録フロー。スキャン完了→修正内容の確認→PR作成のステッパーと、検出した個人情報(重要度・検出元・ファイル位置・置換後の修正案)の一覧

検出と修正案まで出たうえで、除去してから登録される

こうなってくると、ループは個人のものではなくなります。自分が育てたハーネスが誰かの初速になり、誰かが育てたハーネスが自分の次の一歩になる。個人のループが人数分つながって、組織のループになる——ここが、このアプリで一番見たかった景色です。

なぜターミナルではなくデスクトップアプリにしたのか

ここから少し技術寄りの話をさせてください。

「別にターミナルで claude -p を叩けばいいのでは」という発想もあり得ます。実際、裏側の仕組みはまさにそれです。geniハーネスくんは、ボタンを押すたびに Claude Agent SDK を使って、あらかじめ用意しておいた小さなスキル(要約・提案・生成など、それぞれ役割が1つに絞られた補助スキル群)をheadlessに実行しています。イメージとしてはこんな感じです。

geniハーネスくん(デスクトップアプリ)と補助スキルがJSON入出力ファイルでやり取りする構成図。上段がアプリの画面・裏側処理、下段が補助スキルのAgent SDK実行とin/outの流れ

アプリと補助スキルは、ファイルの受け渡しだけで繋がっている

つまり、アプリと補助スキルの間は「ファイルを渡して、ファイルを受け取る」というシンプルな約束事だけで繋がっています。たとえば、CLAUDE.mdの改善提案スキルへの入力はこんな形です(実際のキー名は簡略化しています)。

{
  "digest": "直近1ヶ月の活動ダイジェスト(要約済みテキスト)",
  "currentClaudeMd": "現在のCLAUDE.md全文",
  "instruction": "任意の追加指示(空でもよい)"
}

これを受け取ったスキル側は、改善後のCLAUDE.md全文だけを出力ファイルに書き出す。それをアプリが読んでプレビュー画面に表示する。それだけです。

技術的には別にこれ、ターミナルでもできることです。でも実際にやってみると、「ターミナルを開いて、コマンドを打って、結果をまた別のエディターで見て」という一往復のコストは、思っている以上にループの継続を邪魔します。習慣化のハードルって、機能の有無より「面倒くささ」で決まる部分が大きいんですよね。ボタン1つで完結する体験にすることで、このループを止めずに回し続けられるようにしたい、というのが一番の狙いです。

それに、エンジニアなら「一往復が面倒」で済みますが、ターミナルに馴染みのない人にとっては、面倒どころか入口で詰みます。Claude Codeを使うのは、もうエンジニアだけではありません。データアナリストやビジネス寄りの職種にもどんどん広がっていて、そういう人たちこそ、CLAUDE.mdの整備やskill化、MCP(外部のツールやサービスとClaude Codeを繋ぐ仕組み)の接続設定といったハーネスの手入れから脱落しやすい。だから黒い画面を一切見せず、ボタンだけでループを回せるようにしたかった。前の章で書いた「組織のループ」は、エンジニアもビジネスユーザーも全員が乗れてはじめて成立するものだと思っています。

そのために、アプリには「拡張」ビューを用意しています。MCP・plugin・skillの導入状況を一覧できて、SlackやGoogle WorkspaceへのMCP接続も、認証手順のガイド付きでボタンから設定できます。

拡張ビューのサニタイズ済み画面。MCP・plugin・skillの導入状況のKPIカードと、Google Workspace / Slack / AtlassianのMCP接続カード。稼働状態のバッジと停止・登録解除・認証手順を表示などのボタンが並ぶ

つまずきがちなMCP接続も、ボタンとガイドで完結する

これを支えているのが Electron + React という構成です。ダッシュボードの可視化、提案のdiffプレビュー、生成中の進捗表示といったリッチなUI/UXを、Webフロントエンドの技術資産そのままで作れます。そしてElectronなので、ビルドすれば配布イメージ(macならdmg)になります。受け取った人はダウンロードしてApplicationsフォルダーにドラッグするだけ。Node環境の構築もgit cloneも要りません。「開発環境を持たない人にも配れる」ことは、地味ですが組織にループを広げるうえでの前提条件です。

もう1つ大事にしたのが安全性で、ここは実際に手を動かしていて何度か肝を冷やした経験から、最初にルール化しました。

  • ~/.claude の中身(セッション・CLAUDE.md・skills・rulesなど)はまず「読み取り専用」が原則
  • 生成物は別ディレクトリに隔離して、元のデータとは混ぜない
  • 設定ファイルを書き換えるときは、必ずバックアップを取ってから、一時ファイル経由で書き込む(書き込みの途中で落ちてファイルが壊れる、という事故を防ぐため)
  • AIが作った提案は自動保存せず、必ず一度プレビューを見てから適用するかどうかを人間が決める

「ハーネス」を自称するアプリが、肝心のハーネスを事故らせては話にならないので、ここは地味ですが一番こだわっているところです。

架空の業務シナリオで、ループを一巡してみる

イメージしやすいように、架空の業務シナリオでループを一巡させてみます(実際のプロジェクトとは無関係です)。

ある日、ECサイトの分析チームにいる自分は、Claude Codeを使って毎日のようにSQLを書いたり、売上ダッシュボードの調査をしたりしていたとします。数ヶ月経つと、セッションログとメモリの中には「注文データのテーブルはこう結合する」「返品理由の分類はこのルールで」といった暗黙知がどんどん沈殿します。一方でCLAUDE.mdは、チームに参加した初日に書いたきり。中身が実態とずれ始めていることにも、気づいていません。

ここで何もしなければ、素材はただ溜まっているだけです。geniハーネスくんを開くと、まず概要画面で、どのプロジェクトにどれだけセッションを費やしたか、日々の活動量がどう推移しているかが一目でわかります。さらにルーティンを仕込んでおけば、毎朝決まった時刻に、前営業日の振り返りレポートとTODOが自動で手元に届きます。振り返りのために時間を取らなくても、「昨日はこれをやった、今日はこれをやろう」が勝手に整理されている。そのレポートを何日か眺めているうちに、「返品データの集計方法、先月から何度も調べ直してるな」と気づいたりするわけです。

そこでセルフナレッジの出番です。材料にするメモリと期間を選んで生成ボタンを押すと、AIがメモリとセッションに沈殿していた知見をテーマごとにまとめて、スキル一式として提案してくれます。返品理由の分類基準、注文テーブルの結合の注意点——散らばっていた暗黙知が、「ECデータ分析ナレッジ」のような参照できる形に整理される。プレビューを見て、良さそうなら適用。次にClaudeへ似た相談をしたときは、このスキルが自動で参照されるので、毎回同じ説明を繰り返す必要がなくなります。

さらに、そのCLAUDE.mdやスキルを共有ハーネスに登録すれば、隣の席の同僚がゼロから同じ苦労をする必要がなくなります。逆もあります。数日後にアプリを開くと、「隣のチームの人が育てた在庫データ検証のrule、あなたの使い方に合いそうです」というレコメンドが出ていて、ワンクリックで自分のハーネスに取り込む——そんな体験です。

Before(資産が溜まっているだけ)と After(可視化されて、資産になって、次のアクションまで見える)を比べると、同じClaude Codeの使い方でも、得られるものの量がだいぶ変わってくる感覚があります。

Before/Afterの対比図。左は~/.claudeにCLAUDE.md・rules・memory・セッションログ・skillsが眠ったまま溜まっている様子、右は可視化→提案→適用が回り続け、質が上がってまた使いたくなるループ

同じ使い方でも、回収できる資産の量が変わる

得られたことと、これから

ここまで作ってみて、実感として得られたものは3つくらいあります。

  • 個人のノウハウを「組織の資産」に変える一歩ができたこと
  • 振り返りにかけていた時間が、ほぼ自動化されたこと
  • 属人化のリスクに、具体的な打ち手ができたこと

社内で使ってもらっているメンバーからは、こんな声をもらっています。

「非エンジニアにとって、環境を整えてハーネスを育てるのは高いハードルでした。それがワンクリックでMCP接続できるようになり、誰も迷わずAI活用のループに乗れるようになったのは大きいです。指定期間の業務サマリも、部署の定例報告にそのまま使えて助かっています。」 —— ビジネス職

「個人の中に閉じがちだった知見を、ボタンひとつでチームに共有できる仕組みが一番の強みだと思います。誰かの試行錯誤がそのままチームの資産になり、レコメンドされたルールを取り込むのはちょっとしたゲーム感覚。組織全体のAI活用力が底上げされていく感じがあります。」 —— データアナリスト

もちろん課題もあります。Claude Code本体の進化はとにかく速いので、そこに追従し続けるのはそれなりに大変です。新しい仕組みが本体に入るたびに、「これはアプリでどう活かすか」を考え続けることになります。

それでも、この仕組みを使うメンバーが少しずつ増えて、ループがチーム全体、組織全体で回るようになったらおもしろいだろうな、と思っています。

まとめ

セッションログとメモリは、放っておけばただのログです。でもそこには業務ノウハウが沈殿していて、材料にすればCLAUDE.mdも、skillも、プラグインの構成も育てられます。素材を可視化して、ハーネスを育てて、組織で共有して、また使いたくなる——このループを個人で回し、さらに人数分つなげて組織のループにすることが、今回一番やりたかったことです。

「Claude Codeの利用量を増やすこと」自体が目的なのではなく、資産化のループさえ作ってしまえば、活用は自然に広がっていくんじゃないか。geniハーネスくんは、そのための小さな仕掛けとして作りました。

もし「溜まっているのは分かってるんだけど、手入れは後回しになってるな」と心当たりのある方がいたら、たまには ~/.claude を振り返る時間を取ってみてください。思っているより、宝が眠っていると思います。

最後まで読んでいただき、ありがとうございます!
この記事をシェアしていただける方はこちらからお願いします。

recruit

DeNAでは、失敗を恐れず常に挑戦し続けるエンジニアを募集しています。