<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Chouseisan on デジタルアーカイブシステムの技術ブログ</title><link>https://tech.ldas.jp/ja/tags/chouseisan/</link><description>Recent content in Chouseisan on デジタルアーカイブシステムの技術ブログ</description><generator>Hugo</generator><language>ja</language><lastBuildDate>Mon, 27 Apr 2026 20:00:00 +0900</lastBuildDate><atom:link href="https://tech.ldas.jp/ja/tags/chouseisan/index.xml" rel="self" type="application/rss+xml"/><item><title>調整さんの出欠回答を Playwright で自動入力し、Claude Code 経由の Google Calendar MCP で判定する構成</title><link>https://tech.ldas.jp/ja/posts/chouseisan-playwright-claude-mcp/</link><pubDate>Mon, 27 Apr 2026 20:00:00 +0900</pubDate><guid>https://tech.ldas.jp/ja/posts/chouseisan-playwright-claude-mcp/</guid><description>&lt;blockquote>
&lt;p>本記事は生成AIと共同で執筆しています。事実関係は可能な範囲で公式ドキュメント等と照合していますが、誤りが含まれている可能性があります。重要な判断を行う前にご自身でも一次情報をご確認ください。&lt;/p>&lt;/blockquote>
&lt;p>&lt;a href="https://chouseisan.com">調整さん&lt;/a> の出欠回答を毎回手で入れるのが面倒だったので、Playwright で自動入力する CLI を作りました。候補日それぞれの &lt;code>◯&lt;/code> / &lt;code>△&lt;/code> / &lt;code>×&lt;/code> の判定は Google カレンダーと照合する必要があるため、その部分は Claude Code（&lt;a href="https://www.anthropic.com/">claude.ai Google Calendar MCP&lt;/a> 経由）に任せる構成にしています。&lt;/p>
&lt;p>ソースコード: &lt;a href="https://github.com/nakamura196/choseisan">https://github.com/nakamura196/choseisan&lt;/a>&lt;/p>
&lt;h2 id="tldr">TL;DR&lt;/h2>
&lt;ul>
&lt;li>調整さんは公開 API を持たないので、Playwright で公開ページの DOM を直接操作している。&lt;/li>
&lt;li>入力は3段階のワークフローに分けた: &lt;code>fetch&lt;/code> で候補日を抽出、Claude にカレンダー照合と &lt;code>◯&lt;/code>/&lt;code>△&lt;/code>/&lt;code>×&lt;/code> 埋めを依頼、&lt;code>submit&lt;/code> で送信。&lt;/li>
&lt;li>判定ルール（&lt;code>参考：&lt;/code> プレフィックスのスキップ、透過設定の扱い、終日イベントのブロック等）は &lt;code>CLAUDE.md&lt;/code> に記述し、Claude Code がディレクトリで作業するときに自動的に読み込まれるようにした。&lt;/li>
&lt;li>既存エントリの編集（同じ名前で再度登録した場合）は、参加者名のリンクをクリックするモードで自動切替する。&lt;/li>
&lt;li>&lt;code>wait_for_load_state(&amp;quot;networkidle&amp;quot;)&lt;/code> は調整さんのページ（広告タグ多数）では永遠に終わらないので &lt;code>&amp;quot;load&amp;quot;&lt;/code> を使う。&lt;/li>
&lt;/ul>
&lt;h2 id="構成">構成&lt;/h2>
&lt;p>3段階を独立に再実行できる構成にしました。&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">fetch &amp;lt;url&amp;gt; events/&amp;lt;slug&amp;gt;.json テンプレ生成
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">(Claude に依頼) Google カレンダー照合で answer を埋める
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">submit &amp;lt;slug&amp;gt; Playwright で送信（新規/更新を自動判定）
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>利点は、候補が変わったら fetch だけ再実行、判定ロジックを試したいなら Claude に再依頼するだけ、確認後に submit、という形で各段階を切り離せることです。&lt;/p></description></item></channel></rss>