みなさん、こんにちは。ワンダーソフトの開発部です。
今日は、Claude Code を利用してみて、Notion MCP Server と接続していい感じに、terraform で AWS ECS Service を構築できないのかしら、、、と思って試行してみた備忘録を共有します。
(登場ツールもちょっと多めなので、完全に再現できないこともあるかもしれませんがご容赦ください。また、途中で出てくる内容はサンプルで具体的なサービスとかを想起するような部分は変更しています。)
モチベーション
Claude Code が出てきて、早速利用してみましたが、「こりゃすごい!」といういつも通りのAI驚き屋さんになってしまいましたが、「あれ、、、これもしかして VS Code統合した場合も、インタラクティブにやり取りすることを想定してる。。。?」となり、タスクの指示置き場所をNotionにできないのかな、と思ったことがきっかけです。
それまでは、ローカルリポジトリに Markdown ファイルで指示書を書いてみたり、GitHub の issues においてみたり(これもNotionと変わらないですが。。)してました。
ただ、一方で、開発者だけでサービスを作るわけではなく、Notion, Confluence, Redmine, Backlog等等、チームでやり取りできる場所に実装の依頼内容があって、そことやり取りできる状態がいいのでは、、と考えてNotionでの方法を確認しました。
Notion MCP Server の設定方法
調べてみると、Claude Desktop を想定した Notion の MCP Server の記事がありましたが、Claude Code でどうするのかな、というところが今ひとつわからず(いまだにわかっておらずどなたか教えてください。。)
以下のセクションを参考に、Claude Desktop の設定を import する、という方法を取りました。
https://docs.anthropic.com/en/docs/claude-code/tutorials
claude mcp add-from-claude-desktop
上記を実行すると、desktop 用に設定した内容が無事に取り込まれました。
Claude Code にお願いしてみる
以下のようにお願いをしてみました。
Notion の Unique ID 9999 に記載した内容をもとに実装を進めて欲しいです。
Notion の、UniqueIDの機能を利用しているので、タイトルとかではなく、IDを指定して、page を特定してもらいます。(タイトルの揺らぎは起こり得ると思っていて、そのせいで指示の誤解釈が生まれるのを防ぎたかったため)
上記に対して、Notion の内容をきちんと読み取ってくれて、タスクの整理と実装プランを示してくれました。
以下は少し加工してますが、Notion に記載をした内容です。
# Issue
- terraformとespressoとGitHub Actionsの実装依頼です。
- 以下の内容を確認して実装を進めてください。
- terraform apply については開発者が実施するのでコマンドは実行しないでください。絶対です。
- terraform plan については、tfvars フォルダの下にある `tfvars/production/variables.tfvars` を利用してください。
## Background
- frontend-admin という Next.js のプロジェクトを新規で作成しました。管理者がアクセスして操作するための画面群を用意しています。
- 上記の画面で現場の作成・編集やユーザーの追加・更新を行ったりします。
- 上記の画面を terraform を利用してホスティングしたいです。
## Requirements
### Terraformの修正
- ecr のリポジトリを1つ追加してください。リポジトリの名前は、`frontend-admin` でお願いします。
- `terraform/ecr.tf`
- 作成した ecr のリポジトリを利用して、ecs のタスク定義と ecsサービスを実装してください。サービス名は、`frontend-admin` です。
- `terraform/ecs.tf`
- alb のリスナールールとターゲットグループ追加して欲しいです。
- `${[local.name](http://local.name/)}-frontend-admin"` という命名でお願いします。
- ホストが、`admin.${dns.domain_name}` というパスの場合に、このターゲットグループにリクエストを流すようにしてください。
- route53 で、`admin.${dns.domain_name}` を追加して、ALBを紐づけてください。
### Espressoの修正
- espresso フォルダの中に、`frontend-admin` を追加してください。すでに、`frontend-user` があるのでそれを参考にしてください。
### frontend-admin で、Dockerfileを用意
- frontend-admin に、Dockerfile を用意してください。
### GitHub Actions でデプロイジョブを用意
- `.github/workflows/deploy-frontend-user.yml` を参考にしてて、`.github/workflows/deploy-frontend-admin.yml` を作ってください。
上記を読み込ませたところ、以下のように解釈してくれました。
(一部割愛でキャプチャのみ貼ります)
どうやら理解はしていそうです。
yes, yesだし全部お任せ、no, の3択の選択肢を提示されて、2番目を選択し、あとはコーヒーを飲みながら、次のタスクの準備にしかかることができました。
terraform, espresso, dockerfile実装、github actionsの用意、と繋がりはあるのですが、異なるタスクを整合性を持って、やり切れるかどうか、が気になるところでしたが、無事に実装をしてもらえることができました。
唯一、人間の手で修正をした箇所は、AWS ALB の TargetGroup の命名の長さが32文字を超えてしまった、というところでしたが、ここについても CLAUDE.md などを定義することで次回以降はクリアしてくれそうです。
正直、ここまで出来るとは、、、と感動を覚える一方で、 構築がうまくいかないとしたらドキュメントでの記載方法がおかしいとか、要求・要件仕様をちゃんと整合性とれてお願いができない、みたいなヒューマン側の要素の方が足を引っ張りそうな気がしつつもあります。システム構築で手戻りのない情報をビジネスサイドやエンジニアの方々とやり取りができるようになるため、日々精進だな、とコーヒーを飲みながら背筋を伸ばしました。
参考にした記事
MCP Server については以下を参考にしました。
- https://github.com/makenotion/notion-mcp-server
- https://docs.anthropic.com/en/docs/claude-code/tutorials
NotionのユニークIDについてはこちらです。もっといい検索の指定方法があるかもしれません。
そして気づけば
Claude Code
がコーディングルールに沿ったファイルを自動生成しているあいだ、私たちはドリップコーヒーを淹れて一息つくようになりました。
コードとともに、いい香りの文化も自然と育ってきた気がしています。
今後も、ソフトウェア開発やデザインのあれこれについて、コーヒーとともにゆるく投稿していきますので、どうぞお楽しみに ☕✨
🔗 Wonder Soft Coffeeのオンラインストアはこちら:
👉 https://coffee.wonder-soft.com/collections/all