[{"data":1,"prerenderedAt":220},["ShallowReactive",2],{"content-/journal-mcp-miller-column-course":3,"all-pages-for-dir":218,"og-image-/journal-mcp-miller-column-course":219},{"id":4,"title":5,"body":6,"category":199,"concepts":200,"description":201,"extension":202,"meta":203,"navigation":204,"ogImage":200,"path":205,"project_name":206,"published":207,"publishedAt":208,"seo":209,"stem":210,"tags":211,"todo":200,"unpublished":207,"updatedAt":200,"__hash__":217},"pages/2026-07/2026-07-15/journal-mcp-miller-column-course.md","自作APIのMCP化講座をMiller Column形式に変換して公開した — レビュー指摘の全ページ横展開とCOPYボタン復活",{"type":7,"value":8,"toc":188},"minimark",[9,13,17,20,41,46,49,52,56,59,62,66,69,83,86,90,93,99,109,112,116,119,122,125,129,136,139,142,162,165,168,171],[10,11,5],"h1",{"id":12},"自作apiのmcp化講座をmiller-column形式に変換して公開した-レビュー指摘の全ページ横展開とcopyボタン復活",[14,15,16],"p",{},"「昨日の積み残しって何かありましたっけ」と2つのリポジトリで聞くところから一日を始めた。mdx-playground 側にはチュートリアル用リポジトリの GitHub push が、eurekapu-nuxt4 側には Miller 講座のカラムずれ修正の未コミットが残っていた。そこから journal-mcp チュートリアル（自作の仕訳APIをMCP化する講座）を Miller Column 形式の講座に変換し、レビュー対応を経て公開するところまで進んだ。",[14,18,19],{},"先に結論を書く。",[21,22,23,27,30,38],"ul",{},[24,25,26],"li",{},"mdx-playground の長文記事を eurekapu-nuxt4 の Miller Column 講座に変換する仕組みは、既存スキルの転用ではなく計画書を書かせて新規に実装した。データ6ファイル・ページ7本・配布zipまで1セッションで形になった",[24,28,29],{},"レビューで「全部のページを同じようにしてほしい」と指摘し、コード抜粋を4ページ・12セクション・15箇所に横展開させた。1箇所直して終わりにしない",[24,31,32,33,37],{},"ブラウザレビュー時のサイズ変更は実ウィンドウのリサイズ禁止・viewportエミュレーションで行う、というルールを ",[34,35,36],"code",{},"~/.claude/rules/browser-review-emulation.md"," に固定した",[24,39,40],{},"本日3コミット（講座追加 → 公開 → 一覧カテゴリ再編）。すべて学習ゲート（/learn）経由",[42,43,45],"h2",{"id":44},"朝-積み残しの回収から","朝: 積み残しの回収から",[14,47,48],{},"eurekapu-nuxt4 側の積み残しは、Miller 講座の本文カラムが目次の有無で100pxずれる問題の修正（前日実施・未コミット）だった。検証スクリプトを回してもらい、design-system 全ページのズレ0件を確かめてから /learn を通してコミット、そのままデプロイまで進めた。本番URLでも症状の解消を実測してもらって完了。",[14,50,51],{},"mdx-playground 側は journal-mcp チュートリアルのリポジトリ作成が残っていた。GitHub 側にまだ存在しないことを確かめて、プライベートリポジトリとして作成・push。保留になっていたキャラクターモーション化は「もうやらない」と決めて締めた。積み残しリストを眺めて、やるものとやらないものを朝のうちに切り分けられたのがよかった。",[42,53,55],{"id":54},"記事講座の変換-スキルの転用か新規か","記事→講座の変換: スキルの転用か新規か",[14,57,58],{},"eurekapu-nuxt4 には「スキルをコンテンツに変換する」既存スキル（skill-to-content）がある。ただ今回やりたいのは逆方向に近くて、mdx-playground で書いたリポジトリ付きの長文記事を、eurekapu-nuxt4 の「0から作る実務スキル」セクションに Miller Column Layout で載せることだった。これに対応するスキルはない。新規で作るか、既存スキルに追加するかは任せる形で「ミラーカラムレイアウトでこっち側に作ってほしい」と依頼した。",[14,60,61],{},"計画書を書かせたところ変更対象が10ファイルを超えたので、ルールどおり Codex レビューにかけた。2周回して指摘5件を全部反映してから計画書を確定。実装は eurekapu-nuxt4 側の新セッションで始めたかったので、フルパス前提の引き継ぎプロンプトを出させてセッションを切り替えた。",[42,63,65],{"id":64},"実装-データ6ファイルページ7本qaまで","実装: データ6ファイル・ページ7本・QAまで",[14,67,68],{},"実装セッションでは計画書の Step 1〜8 を順に走らせた。",[21,70,71,74,77,80],{},[24,72,73],{},"講座データ6ファイル（millerJmcpSetup.ts 〜 millerJmcpScale.ts）を原典記事から執筆",[24,75,76],{},"ページ .vue 7本（slot型の入口 contents.vue + Loader型6ページ）",[24,78,79],{},"配布ファイル（コード6ファイル＋zip）",[24,81,82],{},"全7ページ 200 OK を確認後、Chrome DevTools で描画QA",[14,84,85],{},"途中で章扉SVGを11箇所追加させ、原典との突き合わせ（parity検証）が PASS を維持していることも確かめた。機械照合と目視QAの両方を通してから、計画書に実装時の補正を記録させて実装フェーズを閉じた。",[42,87,89],{"id":88},"ブラウザレビューはエミュレーションで-ルールとして固定","ブラウザレビューはエミュレーションで — ルールとして固定",[14,91,92],{},"QAが終わってレビューしようとブラウザに向かったら、表示幅がQA用に調整されたままだった。「戻しておいてくれませんか」と頼んで解除してもらったところで、これは逆にチャンスだと気づいた。",[14,94,95,96,98],{},"以前から、レビューのたびにブラウザの実ウィンドウをリサイズしてスクリーンショットを撮られると、自分が見ている全タブのサイズまで変わってしまうのが困っていた。今回はエミュレーション（viewport の上書き）で調整していたので、自分のウィンドウは元のまま。「レビュー時のサイズ変更は必ずエミュレーションでやってほしい。これどこに記録すればいいんですかね」と聞いたら、全プロジェクト共通ルールとして ",[34,97,36],{}," に新設し、グローバル CLAUDE.md にポインタを足す形で記録してくれた。",[100,101,107],"pre",{"className":102,"code":104,"language":105,"meta":106},[103],"language-text","# モバイル確認はウィンドウを触らずエミュレーションで\nemulate viewport: \"390x844x3,mobile,touch\"\n# 終わったら空文字で解除（解除までがワンセット）\nemulate viewport: \"\"\n","text","",[34,108,104],{"__ignoreMap":106},[14,110,111],{},"「どこに書けばいいか分からないが、この運用は残したい」というときに、記録先の選定ごと任せられるのは楽だった。",[42,113,115],{"id":114},"レビュー対応-全部のページを同じようにしてほしい","レビュー対応: 「全部のページを同じようにしてほしい」",[14,117,118],{},"計画書にレビュー対応フェーズを追記させ、次のセッションでレビュー指摘を投げていった。",[14,120,121],{},"最初の指摘は api ページの「勘定科目ホワイトリスト」セクション。本文はホワイトリスト制の設計を語っているのに、Python でどう定義しているか（ACCOUNTS の dict）が画面に出ていない。該当コードの抜粋を導入文付きで表示させた。",[14,123,124],{},"直ったのを見て、次はこう指摘した。「全部のページを同じようにしてほしいわけなんですよ。このエンドポイントも3つだけっていうところも、結局Pythonでどう定義してるか表示できるわけじゃないですか。全ページですよ」。本文がコードの設計を語っている箇所すべてが対象になり、4ページ・12セクション・15箇所の抜粋が追加された。あわせてコードブロック左上にタブ型のファイル名ラベルも付けさせた。1ページ直して満足せず、同種の全箇所に広げる指摘を最初から言えたのは、過去に「1箇所だけ直して終わり」で何度も往復した経験があるからだと思う。",[42,126,128],{"id":127},"copyボタンの復活","COPYボタンの復活",[14,130,131,132,135],{},"もうひとつ気づいたのが、コードをコピーするUIが講座変換で消えていたこと。コマンドはコピペしたいので復活を頼んだ。実装はシンタックスハイライトを当てている ",[34,133,134],{},"v-highlight-code"," ディレクティブにボタンを注入する方式に落ち着いた。クリックで api.py 全文4,486文字がクリップボードに入るのを readText で実測させ、モバイル幅390px（これもエミュレーション）でボタンの重なりを見つけて直すところまで確認して完了。",[42,137,138],{"id":138},"コミット3本と学習ゲート",[14,140,141],{},"この日の eurekapu-nuxt4 側のコミットは3本になった。",[21,143,144,150,156],{},[24,145,146,149],{},[34,147,148],{},"43a982a7",": 講座一式の追加（48ファイル・+5,657行。レビュー対応分も含む）",[24,151,152,155],{},[34,153,154],{},"8395321f",": draft 解除で公開",[24,157,158,161],{},[34,159,160],{},"11084de7",": 講座一覧のカテゴリ再編",[14,163,164],{},"コミットはいずれも学習ゲート（/learn）経由。講座一式のコミットでは、クイズ4問中「draft: true の本番挙動」を問う設問で自分が1問落とした。再出題で合格して受領証発行、コミット。draft の挙動を分かっていなかったのは、直後に「あ、これはオープンでいいです」と公開指示を出す自分にとってちょうどいい復習だった。公開は topics.ts の2行削除だけで済んだ。",[14,166,167],{},"夕方には講座一覧のカテゴリ再編も実施。途中、別セッションで走らせていた英単語アプリの作業が動いていない気配だったので、ファイルの最終更新時刻で様子を確かめてもらってからカテゴリを変えた。学習ゲートのクイズを30分放置してタイムアウトさせる場面や、モデルの利用上限に当たる場面もあったが、「続きやってくださいね」で再開して3コミット目まで到達した。",[42,169,170],{"id":170},"学び",[21,172,173,176,179,182,185],{},[24,174,175],{},"記事→講座の変換のような「既存スキルがありそうでない」作業は、転用か新規かの判断ごと任せて計画書から始めると速い。10ファイル超なら Codex レビューを挟む運用も機能した",[24,177,178],{},"計画 → 実装 → レビュー対応をセッション3本に分け、切り替えのたびにフルパス前提の引き継ぎプロンプトを出させる流れが安定していた。計画書に「レビュー対応フェーズ」のセクションを追記させてから切り替えたので、次セッションが迷わず走り出せた",[24,180,181],{},"レビュー指摘は「この1箇所」ではなく「同種の全箇所」で出す。全ページ横展開（12セクション・15抜粋）を1往復で終えられた",[24,183,184],{},"ブラウザレビューのサイズ調整はエミュレーション一択。実ウィンドウを触られると自分の見ている全タブが巻き込まれる。ルールファイルに固定したので次回からは指示不要",[24,186,187],{},"変換で消えた既存UI（コードコピー）に気づけたのは実画面レビューのおかげ。機械照合（parity検証）はコンテンツの脱落は拾えても、UIの脱落は拾えない",{"title":106,"searchDepth":189,"depth":189,"links":190},2,[191,192,193,194,195,196,197,198],{"id":44,"depth":189,"text":45},{"id":54,"depth":189,"text":55},{"id":64,"depth":189,"text":65},{"id":88,"depth":189,"text":89},{"id":114,"depth":189,"text":115},{"id":127,"depth":189,"text":128},{"id":138,"depth":189,"text":138},{"id":170,"depth":189,"text":170},"dev",null,"mdx-playgroundで書いた長文記事をeurekapu-nuxt4のMiller Column講座に変換する計画から実装・レビュー対応・公開までの記録。ブラウザレビューはviewportエミュレーションで行うルールもこの日に確立した。","md",{},true,"/journal-mcp-miller-column-course","eurekapu-nuxt4",false,"2026-07-15T00:00:00.000Z",{"title":5,"description":201},"2026-07/2026-07-15/journal-mcp-miller-column-course",[212,213,214,215,216],"Miller Column","MCP","Chrome DevTools","レビュー対応","学習ゲート","wH47IOZPP5zvFGNAWVYxvlk9-y6_vcFAFoZ-ajM0cAE",[],"https://log.eurekapu.com/og/blog/journal-mcp-miller-column-course.png?v=2026-07-15T00%3A00%3A00.000Z&title=%E8%87%AA%E4%BD%9CAPI%E3%81%AEMCP%E5%8C%96%E8%AC%9B%E5%BA%A7%E3%82%92Miller%20Column%E5%BD%A2%E5%BC%8F%E3%81%AB%E5%A4%89%E6%8F%9B%E3%81%97%E3%81%A6%E5%85%AC%E9%96%8B%E3%81%97%E3%81%9F%20%E2%80%94%20%E3%83%AC%E3%83%93%E3%83%A5%E3%83%BC%E6%8C%87%E6%91%98%E3%81%AE%E5%85%A8%E3%83%9A%E3%83%BC%E3%82%B8%E6%A8%AA%E5%B1%95%E9%96%8B%E3%81%A8COPY%E3%83%9C%E3%82%BF%E3%83%B3%E5%BE%A9%E6%B4%BB&author=Kei%20Komatsu&sig=dc3e1aa0a44276c3",1784186910112]