[{"data":1,"prerenderedAt":411},["ShallowReactive",2],{"/blog/cms-dev/":3,"related-技術系-/blog/cms-dev":385},{"id":4,"title":5,"body":6,"category":371,"coverImage":372,"date":373,"description":16,"draft":374,"extension":109,"meta":375,"navigation":376,"path":377,"rawbody":378,"seo":379,"stem":380,"tags":381,"__hash__":384},"blog/blog/cms-dev/index.md","ClaudePro契約してCMS作ったぞ！！！",{"type":7,"value":8,"toc":353},"minimark",[9,13,17,20,27,33,36,44,57,60,63,67,74,77,83,86,89,92,103,135,141,144,147,150,153,167,182,189,193,196,199,202,209,212,218,221,224,228,231,234,237,243,246,253,257,264,267,279,282,287,290,300,306,309,312,315,322,325,331,334,340,343,346,349],[10,11,12],"h2",{"id":12},"概要",[14,15,16],"p",{},"Claude Proを契約したのをいいことに、Claude Codeをフル活用して自ブログ用のCMSを作ってきました。ので、そのかんたーんな中身と、Claude Proの所感なんかについて書いていこうかなという感じです。",[14,18,19],{},"技術系カテゴリにしてますが、つらつらと書いていくだけなのでほぼ雑記みたいなものと思っていただいて大丈夫です。よければ最後までお付き合いください。",[14,21,22],{},[23,24],"img",{"alt":25,"src":26},"こういう感じで編集","https://images.bokukoha.dev/blog/cms-dev/__________2026-04-08_214152.png",[14,28,29],{},[23,30],{"alt":31,"src":32},"スマホもいい感じ","https://images.bokukoha.dev/blog/cms-dev/__________2026-04-08_213538.png",[10,34,35],{"id":35},"これまで",[14,37,38,39,43],{},"元々この",[40,41,42],"strong",{},"ぼくこは.dev","は",[45,46,47,51,54],"ol",{},[48,49,50],"li",{},"VScodeで記事作る",[48,52,53],{},"githubにcommit&pushする",[48,55,56],{},"それをトリガーにしてcloudflare pagesでビルド&デプロイ",[14,58,59],{},"という流れで動いていました。が、これだとgithubのリポジトリで色々見えちゃいますし、コミットログが記事作成で汚れますし、何より「ブログ書くのにVScode使うのなんかダサいし」みたいなモヤモヤがずっとありました。",[14,61,62],{},"じゃあmicroCMSなりなんなり、いい感じのサービスを使えばいいじゃないかという感じですが、既存のそういったサービスはどうにも見た目が好きじゃなかったり、自作するにしても面倒だったりで後回しにしてしまっておりました。",[10,64,66],{"id":65},"救世主claude-code","救世主Claude Code",[14,68,69,70,73],{},"そんなときに現れた（？）救世主が結構前から話題の",[40,71,72],{},"Claude Code","くんです。",[14,75,76],{},"最近、筋トレやあれこれの解決みたいなところで使うLLMは専らClaudeで、無料プランだとレートリミットがキツイのでそろそろお金いれるか…となりました。",[14,78,79],{},[23,80],{"alt":81,"src":82},"いい値段するねえ、君…","https://images.bokukoha.dev/blog/cms-dev/1684.png",[14,84,85],{},"で、22$/月のClaude Proを契約すると、Claude Codeも使えるようになるんですよね。せっかくだしなんか作るぞ！ってことで真っ先に思い付いたのが、自ブログ用のCMSだったわけです。",[10,87,88],{"id":88},"機能",[14,90,91],{},"よくあるmarkdownエディターです！というのは味気ないので、基本的な機能とは別で実装した、独自要素みたいなものを書いていこうと思います。",[14,93,94,95,102],{},"以前",[96,97,101],"a",{"href":98,"rel":99},"https://www.bokukoha.dev/blog/md_components/",[100],"nofollow","記事にした","のですが、nuxt contentは以下のように書いてあげることでmarkdownから直接vueコンポーネントを呼び出して描画することができます。",[104,105,111],"pre",{"className":106,"code":107,"filename":108,"language":109,"meta":110,"style":110},"language-md shiki shiki-themes github-dark","::ComponentName\nHello!\n::\n","markdown","md","",[112,113,114,123,129],"code",{"__ignoreMap":110},[115,116,119],"span",{"class":117,"line":118},"line",1,[115,120,122],{"class":121},"s95oV","::ComponentName\n",[115,124,126],{"class":117,"line":125},2,[115,127,128],{"class":121},"Hello!\n",[115,130,132],{"class":117,"line":131},3,[115,133,134],{"class":121},"::\n",[14,136,137],{},[23,138],{"alt":139,"src":140},"メニューに追加……","https://images.bokukoha.dev/blog/cms-dev/HFa7Hzoa8AQ3hja.png",[14,142,143],{},"せっかくだしエディター側でもこれを取り入れよう！ということで、カスタムコンポーネント各種を挿入できるメニューを追加してきました。",[14,145,146],{},"プレビューでレンダリングできないと意味ないので、CMSでもnuxt contentと同様にレンダラーはMDCを使っています。",[10,148,149],{"id":149},"技術的な中身",[14,151,152],{},"興味なかったら読み飛ばしてください。",[14,154,155,156,159,160,159,163,166],{},"フロントエンドはお馴染みの",[112,157,158],{},"Nuxt4"," + ",[112,161,162],{},"Shadcn-vue",[112,164,165],{},"tailwindCSS","です。たたき台はClaude Codeに作ってもらうにしても、自分でいじる部分も相当あるので、まあ多少なりともわかるものを使った方がいいよね……というチョイスです。",[14,168,169,170,173,174,177,178,181],{},"バックエンドは色々ありますが、記事保存用のDBは",[112,171,172],{},"drizzle-orm","、画像は",[112,175,176],{},"Cloudflare R2","のバケットにアップロードして～という感じ。Nuxtは",[112,179,180],{},"server/api","に色々入れてあげれば、簡単にAPIも実装できるのでわかりやすくて助かります。他を知らないので比較はできないのですが。",[14,183,184,185,188],{},"できたものは、自宅サーバーでVM建ててそこで",[112,186,187],{},"docker compose","で動かしています。cms本体のコンテナと、外部公開用のcloudflare tunnelのコンテナで合計2つですね。",[190,191,192],"h3",{"id":192},"設計",[14,194,195],{},"設計はClaude CodeのPlanモードをふんだんに使ってきました。ブログ側のfrontmatterを読んだりconfigを読んだ上で、CSM側で設計をする……みたいな、プロジェクトを横断する作業が必要だったので、ここはエージェントだからこそ簡単にできる部分かもですね。",[14,197,198],{},"一部技術スタック以外は全部Opus 4.6との壁打ちで決めました。",[190,200,201],{"id":201},"実装",[14,203,204,205,208],{},"実装はほんとシンプルというかなんというか、設計時に出力させた",[112,206,207],{},"PLAN.md","に沿ってとりあえず動きそうな見た目を作らせるだけです。",[14,210,211],{},"今回はロードマップに分けるように指示し、1フェーズずつテストを行わせる感じで実装をさせました。",[14,213,214],{},[23,215],{"alt":216,"src":217},"PLAN.mdに沿ってたたき台を作らせる様子","https://images.bokukoha.dev/blog/cms-dev/__________2026-04-09_092245.png",[14,219,220],{},"なんやかんや、1時間くらいClaude Codeが働いてる横でアニメを視聴し、全てのフェーズが完了しました。",[14,222,223],{},"まあ当然一発で理想通り動くはずもなく……ここからバグ修正地獄が始まります。",[10,225,227],{"id":226},"opus-46最強伝説","Opus 4.6最強伝説",[14,229,230],{},"バックエンドは特に複雑なものでもないので特に問題なく動きました。色々面倒だったのはフロントエンド側ですね。",[14,232,233],{},"見た目の修正とか、更新かけるとフィールドの文字が消えるみたいな現象は自力で治せる範囲なので自力で治しました。が、保存ボタンがなんか機能しなかったり、一覧ページが上手く描画されないことがあったりと自力で調査するには面倒な問題がいくつも発生し……。",[14,235,236],{},"そういった問題、自分で見てもよくわからなかったのでとりあえずClaude CodeでSonnet 4.6にぶん投げていたのですが、ものによっては1時間くらい自走させても一向に解決しなかったりで割と行き詰まってました。",[14,238,239],{},[23,240],{"alt":241,"src":242},"かわいいね","https://images.bokukoha.dev/blog/cms-dev/__________2026-04-09_093229.png",[14,244,245],{},"今思えば「自分で1時間くらい見てわからない時点でOpus 4.6に投げればよかったな」って感じなんですが、とにかくトークンを節約したい一心でひたすらSonnetを走らせていました。",[14,247,248,249,252],{},"ついにしびれを切らしてOpusにしたらなんと衝撃、",[40,250,251],{},"人力 + Sonnetで2時間かかって解決しなかった不具合が10分で解決しました","。大人しく賢いやつを使いましょうというまなび。",[10,254,256],{"id":255},"claude-pro契約してみて利点と欠点","Claude Pro契約してみて（利点と欠点）",[14,258,259,260,263],{},"一言でいうと、",[40,261,262],{},"めっちゃ良い","です。が、メリット同様デメリットもあるので、そこら辺を少し書けたらなと思います。",[190,265,266],{"id":266},"メリット",[268,269,270,273,276],"ul",{},[48,271,272],{},"Claudeがたくさん使える",[48,274,275],{},"Claude Codeが使える",[48,277,278],{},"Cowokerが使える（使ったことないので謎ですが）",[190,280,281],{"id":281},"デメリット",[268,283,284],{},[48,285,286],{},"レートリミットが割とキツイ（特に週間制限）",[14,288,289],{},"デメリットはマジでこれだけです。残念ながら、毎日開発させたら普通に週間制限叩いてしまいます。ただ、そこまでヘビーに開発しないよ！という人ならリミット気にすることもないと思うので、結局使い方かな～って感じです。",[14,291,292,295,296,299],{},[112,293,294],{},"/compact","とか",[112,297,298],{},"/clear","は積極的に使って、コンテキストを肥大化させないことがトークン節約において大事だなという学びを得ましたね。",[14,301,302],{},[23,303],{"alt":304,"src":305},"まあそれでも叩きましたが……","https://images.bokukoha.dev/blog/cms-dev/__________2026-04-09_100533.png",[14,307,308],{},"無料プランでも使えるSonnet 4.6の使い心地が好きで、なおかつ個人開発を多少なりともやるみたいな人は契約して損することは絶対にないと思います！オススメです。",[10,310,311],{"id":311},"蛇足",[14,313,314],{},"さっき週間制限叩いてる画像貼ったと思うんですが、実はこれちょっとバグの影響があるんですよね。",[14,316,317,318,321],{},"というのも、僕が契約した直後の先週あたり、",[40,319,320],{},"Claudeのトークンが使われすぎる","みたいな問題があり、それに巻き込まれたものこの100%という数字にはある程度含まれているのです。",[14,323,324],{},"その問題の対応として、Claudeを作っているAnthropicさんたちは契約プランごとにClaudeを使えるクレジットを配布してくれました。僕はProプランなので$20を受け取れるはずだったんですが……",[14,326,327],{},[23,328],{"alt":329,"src":330},"ラッキー","https://images.bokukoha.dev/blog/cms-dev/__________2026-04-04_172023.png",[14,332,333],{},"謎の力によって2倍である$40を受け取ることができました。バグの話出てた頃は「契約するタイミングミスったな～」とか考えていたのですが、結果的にラッキーな展開になりましたね。ありがたいです。",[14,335,336],{},[23,337],{"alt":338,"src":339},"Opusとか使ってたら割と消費した","https://images.bokukoha.dev/blog/cms-dev/__________2026-04-09_092154.png",[10,341,342],{"id":342},"おわり",[14,344,345],{},"ということで、Claude Pro契約して作ったCMSの紹介と、Claude Proの所感でした。今回の記事は最初から最後まで全部CMS側で作ってみたので、いい感じに動いてくれよ！と今祈りながら書いております。",[14,347,348],{},"最後まで読んでいただきありがとうございました。良ければいいねボタンも押してくれると僕が喜びます。では！",[350,351,352],"style",{},"html pre.shiki code .s95oV, html code.shiki .s95oV{--shiki-default:#E1E4E8}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}",{"title":110,"searchDepth":354,"depth":354,"links":355},4,[356,357,358,359,360,364,365,369,370],{"id":12,"depth":125,"text":12},{"id":35,"depth":125,"text":35},{"id":65,"depth":125,"text":66},{"id":88,"depth":125,"text":88},{"id":149,"depth":125,"text":149,"children":361},[362,363],{"id":192,"depth":131,"text":192},{"id":201,"depth":131,"text":201},{"id":226,"depth":125,"text":227},{"id":255,"depth":125,"text":256,"children":366},[367,368],{"id":266,"depth":131,"text":266},{"id":281,"depth":131,"text":281},{"id":311,"depth":125,"text":311},{"id":342,"depth":125,"text":342},"技術系","https://images.bokukoha.dev/blog/cms-dev/PXL_20260327_034729621.jpg","2026-04-09",false,{},true,"/blog/cms-dev","---\ntitle: \"ClaudePro契約してCMS作ったぞ！！！\"\ndate: \"2026-04-09\"\ncategory: \"技術系\"\ntags:\n  - \"nuxt4\"\n  - \"cloudflare\"\ncoverImage: \"https://images.bokukoha.dev/blog/cms-dev/PXL_20260327_034729621.jpg\"\ndraft: false\ndescription: \"Claude Proを契約したのをいいことに、Claude Codeをフル活用して自ブログ用のCMSを作ってきました。ので、そのかんたーんな中身と、Claude Proの所感なんかについて書いていこうかなという感じです。\"\n---\n\n## 概要\n\nClaude Proを契約したのをいいことに、Claude Codeをフル活用して自ブログ用のCMSを作ってきました。ので、そのかんたーんな中身と、Claude Proの所感なんかについて書いていこうかなという感じです。\n\n技術系カテゴリにしてますが、つらつらと書いていくだけなのでほぼ雑記みたいなものと思っていただいて大丈夫です。よければ最後までお付き合いください。\n\n![こういう感じで編集](https://images.bokukoha.dev/blog/cms-dev/__________2026-04-08_214152.png)\n\n![スマホもいい感じ](https://images.bokukoha.dev/blog/cms-dev/__________2026-04-08_213538.png)\n\n## これまで\n元々この**ぼくこは.dev**は\n\n1. VScodeで記事作る\n2. githubにcommit&pushする\n3. それをトリガーにしてcloudflare pagesでビルド&デプロイ\n\nという流れで動いていました。が、これだとgithubのリポジトリで色々見えちゃいますし、コミットログが記事作成で汚れますし、何より「ブログ書くのにVScode使うのなんかダサいし」みたいなモヤモヤがずっとありました。\n\nじゃあmicroCMSなりなんなり、いい感じのサービスを使えばいいじゃないかという感じですが、既存のそういったサービスはどうにも見た目が好きじゃなかったり、自作するにしても面倒だったりで後回しにしてしまっておりました。\n\n## 救世主Claude Code\n\nそんなときに現れた（？）救世主が結構前から話題の**Claude Code**くんです。\n\n最近、筋トレやあれこれの解決みたいなところで使うLLMは専らClaudeで、無料プランだとレートリミットがキツイのでそろそろお金いれるか…となりました。\n\n![いい値段するねえ、君…](https://images.bokukoha.dev/blog/cms-dev/1684.png)\n\nで、22$/月のClaude Proを契約すると、Claude Codeも使えるようになるんですよね。せっかくだしなんか作るぞ！ってことで真っ先に思い付いたのが、自ブログ用のCMSだったわけです。\n\n## 機能\n\nよくあるmarkdownエディターです！というのは味気ないので、基本的な機能とは別で実装した、独自要素みたいなものを書いていこうと思います。\n\n以前[記事にした](https://www.bokukoha.dev/blog/md_components/)のですが、nuxt contentは以下のように書いてあげることでmarkdownから直接vueコンポーネントを呼び出して描画することができます。\n\n```md [markdown]\n::ComponentName\nHello!\n::\n```\n\n![メニューに追加……](https://images.bokukoha.dev/blog/cms-dev/HFa7Hzoa8AQ3hja.png)\n\nせっかくだしエディター側でもこれを取り入れよう！ということで、カスタムコンポーネント各種を挿入できるメニューを追加してきました。\n\nプレビューでレンダリングできないと意味ないので、CMSでもnuxt contentと同様にレンダラーはMDCを使っています。\n\n## 技術的な中身\n\n興味なかったら読み飛ばしてください。\n\nフロントエンドはお馴染みの`Nuxt4` + `Shadcn-vue` + `tailwindCSS`です。たたき台はClaude Codeに作ってもらうにしても、自分でいじる部分も相当あるので、まあ多少なりともわかるものを使った方がいいよね……というチョイスです。\n\nバックエンドは色々ありますが、記事保存用のDBは`drizzle-orm`、画像は`Cloudflare R2`のバケットにアップロードして～という感じ。Nuxtは`server/api`に色々入れてあげれば、簡単にAPIも実装できるのでわかりやすくて助かります。他を知らないので比較はできないのですが。\n\nできたものは、自宅サーバーでVM建ててそこで`docker compose`で動かしています。cms本体のコンテナと、外部公開用のcloudflare tunnelのコンテナで合計2つですね。\n\n### 設計\n\n設計はClaude CodeのPlanモードをふんだんに使ってきました。ブログ側のfrontmatterを読んだりconfigを読んだ上で、CSM側で設計をする……みたいな、プロジェクトを横断する作業が必要だったので、ここはエージェントだからこそ簡単にできる部分かもですね。\n\n一部技術スタック以外は全部Opus 4.6との壁打ちで決めました。\n\n### 実装\n\n実装はほんとシンプルというかなんというか、設計時に出力させた`PLAN.md`に沿ってとりあえず動きそうな見た目を作らせるだけです。\n\n今回はロードマップに分けるように指示し、1フェーズずつテストを行わせる感じで実装をさせました。\n\n![PLAN.mdに沿ってたたき台を作らせる様子](https://images.bokukoha.dev/blog/cms-dev/__________2026-04-09_092245.png)\n\nなんやかんや、1時間くらいClaude Codeが働いてる横でアニメを視聴し、全てのフェーズが完了しました。\n\nまあ当然一発で理想通り動くはずもなく……ここからバグ修正地獄が始まります。\n\n## Opus 4.6最強伝説\n\nバックエンドは特に複雑なものでもないので特に問題なく動きました。色々面倒だったのはフロントエンド側ですね。\n\n見た目の修正とか、更新かけるとフィールドの文字が消えるみたいな現象は自力で治せる範囲なので自力で治しました。が、保存ボタンがなんか機能しなかったり、一覧ページが上手く描画されないことがあったりと自力で調査するには面倒な問題がいくつも発生し……。\n\nそういった問題、自分で見てもよくわからなかったのでとりあえずClaude CodeでSonnet 4.6にぶん投げていたのですが、ものによっては1時間くらい自走させても一向に解決しなかったりで割と行き詰まってました。\n\n![かわいいね](https://images.bokukoha.dev/blog/cms-dev/__________2026-04-09_093229.png)\n\n今思えば「自分で1時間くらい見てわからない時点でOpus 4.6に投げればよかったな」って感じなんですが、とにかくトークンを節約したい一心でひたすらSonnetを走らせていました。\n\nついにしびれを切らしてOpusにしたらなんと衝撃、**人力 + Sonnetで2時間かかって解決しなかった不具合が10分で解決しました**。大人しく賢いやつを使いましょうというまなび。\n\n## Claude Pro契約してみて（利点と欠点）\n\n一言でいうと、**めっちゃ良い**です。が、メリット同様デメリットもあるので、そこら辺を少し書けたらなと思います。\n\n### メリット\n- Claudeがたくさん使える\n- Claude Codeが使える\n- Cowokerが使える（使ったことないので謎ですが）\n\n### デメリット\n- レートリミットが割とキツイ（特に週間制限）\n\nデメリットはマジでこれだけです。残念ながら、毎日開発させたら普通に週間制限叩いてしまいます。ただ、そこまでヘビーに開発しないよ！という人ならリミット気にすることもないと思うので、結局使い方かな～って感じです。\n\n`/compact`とか`/clear`は積極的に使って、コンテキストを肥大化させないことがトークン節約において大事だなという学びを得ましたね。\n\n![まあそれでも叩きましたが……](https://images.bokukoha.dev/blog/cms-dev/__________2026-04-09_100533.png)\n\n無料プランでも使えるSonnet 4.6の使い心地が好きで、なおかつ個人開発を多少なりともやるみたいな人は契約して損することは絶対にないと思います！オススメです。\n\n## 蛇足\n\nさっき週間制限叩いてる画像貼ったと思うんですが、実はこれちょっとバグの影響があるんですよね。\n\nというのも、僕が契約した直後の先週あたり、**Claudeのトークンが使われすぎる**みたいな問題があり、それに巻き込まれたものこの100%という数字にはある程度含まれているのです。\n\nその問題の対応として、Claudeを作っているAnthropicさんたちは契約プランごとにClaudeを使えるクレジットを配布してくれました。僕はProプランなので$20を受け取れるはずだったんですが……\n\n![ラッキー](https://images.bokukoha.dev/blog/cms-dev/__________2026-04-04_172023.png)\n\n謎の力によって2倍である$40を受け取ることができました。バグの話出てた頃は「契約するタイミングミスったな～」とか考えていたのですが、結果的にラッキーな展開になりましたね。ありがたいです。\n\n![Opusとか使ってたら割と消費した](https://images.bokukoha.dev/blog/cms-dev/__________2026-04-09_092154.png)\n\n## おわり\n\nということで、Claude Pro契約して作ったCMSの紹介と、Claude Proの所感でした。今回の記事は最初から最後まで全部CMS側で作ってみたので、いい感じに動いてくれよ！と今祈りながら書いております。\n\n最後まで読んでいただきありがとうございました。良ければいいねボタンも押してくれると僕が喜びます。では！",{"title":5,"description":16},"blog/cms-dev/index",[382,383],"nuxt4","cloudflare","Wt2ddVk4t2o8gBJLJZ8iX1f3_UnpQSpRWg8qLre2FM8",[386,391,396,401,406],{"title":387,"path":388,"date":389,"category":371,"coverImage":390},"MisskeyのDBバックアップとオブジェクトストレージの設定方法","/blog/misskey-setting","2025-11-23","https://images.bokukoha.dev/blog/misskey-setting/main.jpg",{"title":392,"path":393,"date":394,"category":371,"coverImage":395},"Proxmoxでコンテナ on コンテナして自鯖落とした話","/blog/docker-on-lxc","2025-11-21","https://images.bokukoha.dev/blog/docker-on-lxc/main.png",{"title":397,"path":398,"date":399,"category":371,"coverImage":400},"Nuxt Content3のコンポーネント呼び出し機能で遊んでみよう","/blog/md_components","2025-11-17","https://images.bokukoha.dev/blog/md_components/6.jpg",{"title":402,"path":403,"date":404,"category":371,"coverImage":405},"自宅で動かすMinecraftサーバー","/blog/mc_server","2025-09-30","https://images.bokukoha.dev/blog/mc_server/main.jpg",{"title":407,"path":408,"date":409,"category":371,"coverImage":410},"Hugo + StackのブログにAWSでいいねボタン実装した","/blog/aws_like_button","2025-09-21","https://images.bokukoha.dev/blog/aws_like_button/main.jpg",1775700982932]