AIニュース最前線
最新ニュースAI日報Hacker日報週報動画AIツールトレンド企業

AIニュース最前線

世界中のAI最新情報を日本語で毎時更新

最新ニュース日報トレンド企業プレミアムRSS
© 2026 ainew.jp特定商取引法に基づく表記
ニュース一覧元記事を開く
Simon Willison Blog·2026年4月18日 12:15·約2分で読める

ブログからニュースレターへのツールに新しいコンテンツタイプを追加

#AI支援開発#プロンプトエンジニアリング#コード生成#Claude#Agentic Engineering#ワークフロー自動化
TL;DR

Simon Willison氏が、自身のブログからニュースレターを生成するツール「blog-to-newsletter」に、ブログの新コンテンツタイプ「beats」(外部投稿の記録)を含める機能を追加するために、Claude Codeを用いてプロンプトを実行した事例を紹介している。

AI深層分析2026年4月18日 13:41
2
参考/ 5段階
深度40%
2
関連度30%
2
実用性20%
4
革新性10%
1

キーポイント

1

ツールの目的と背景

Simon Willison氏は、自身のブログコンテンツを週1回の無料Substackニュースレターとして配信するために、HTML/JavaScriptアプリ「blog-to-newsletter」ツールを開発・使用している。

2

追加された新コンテンツタイプ「beats」

ブログに、オープンソースプロジェクトのリリースや構築したツール、訪問した博物館など、外部で投稿したコンテンツを記録する「beats」という新タイプを追加した。

3

ツールの機能拡張

生成されるニュースレターに「beats」を含めるため、GitHubリポジトリのコードを更新するプロンプトをClaude Codeで実行し、ツールの機能を拡張した。

4

プロンプトエンジニアリングの事例

記事は、一見短いプロンプトで多くの作業を完了させた「Agentic Engineering Patterns」の具体例として、この更新作業を位置づけている。

5

コード参照による効率的なプロンプト設計

エージェントにGitHubから関連コードをクローンさせて参照させることで、複雑な概念を最小限の説明で伝えることができる。

6

自動検証メカニズムの重要性

コーディングエージェントには、変更内容を実際にテストして検証する手段を提供することが効果的で、python -m http.serverやuvx rodneyなどのツールを使用する。

影響分析・編集コメントを表示

影響分析

この記事は、AI支援開発(AI-augmented development)の実践例として、個人開発者レベルでの具体的な適用方法を示している。業界全体に変革をもたらすような重大な技術発表ではなく、既存ツールの実用的な改良プロセスを共有する内容であり、同様の自動化ニーズを持つ開発者にとっての参考情報としての価値が主である。

編集コメント

大規模な技術発表ではなく、個人開発者の実践的な「作業ログ」に近い内容。AIツール(Claude Code)の日常的な活用事例として、その実用性と限界を具体的に垣間見せる点に価値がある。

<p><em><a href="https://simonwillison.net/guides/agentic-engineering-patterns/">Agentic Engineering Patterns</a> ></em></p>

<p>これは一見すると非常に短いプロンプト(prompt)ですが、<em>単発で多くの作業</em>を完了させる例です。</p>

<p>まず背景を説明します。私は週に1回程度、ブログからコピー&ペーストしたコンテンツを含む<a href="https://simonwillison.net/guides/agentic-engineering-patterns/">無料のSubstackニュースレター(Substack newsletter)</a>を送信しています。実質的に、Substackを軽量な手段として活用し、読者がメール経由で私のブログに登録できるようにしています。</p>

<p>このニュースレターは、私の<a href="https://tools.simonwillison.net/blog-to-newsletter">blog-to-newsletter</a>ツールで生成しています。これはHTMLおよびJavaScriptアプリ(HTML and JavaScript app)で、<a href="https://datasette.simonwillison.net/">このDatasetteインスタンス(Datasette instance)</a>から最新のコンテンツを取得し、リッチテキストHTML(rich text HTML)に整形します。その後、クリップボード(clipboard)にコピーしてSubstackエディタに貼り付けることができます。この仕組みの詳細な説明は<a href="https://simonwillison.net/2023/Apr/4/substack-observable/">こちら</a>をご覧ください。</p>

<p>私は最近、ブログに<a href="https://simonwillison.net/2026/Feb/20/beats/">新しいコンテンツタイプ</a>を追加しました。これは、他のプラットフォームに投稿するコンテンツをまとめるためのもので、「beats(beats)」と名付けました。これには、オープンソースプロジェクト(open source projects)のリリース、私が構築した新しいツール、訪問した博物館(<a href="https://www.niche-museums.com/">niche-museums.com</a>由来)などの外部コンテンツが含まれます。</p>

<p>これらのコンテンツを生成されたニュースレターに含めたいと考えました。以下は、<a href="https://code.claude.com/docs/en/claude-code-on-the-web">Claude Code on the web(Claude Code on the web)</a>を使用して、私の<code>blog-to-newsletter</code>ツールをホストしている<a href="https://github.com/simonw/tools">simonw/tools</a>リポジトリ(repository)に対して実行したプロンプトです。</p>

<p><div><markdown-copy><textarea>githubからsimonw/simonwillisonblogを/tmpにクローンして参照用として保存する

blog-to-newsletter.htmlを更新し、説明文付きのbeats(beats)を含めるようにする - ブログのAtom everythingフィード(Atom everything feed)と同様の動作をさせる</p>

原文を表示

*Agentic Engineering Patterns >*

Here's an example of a deceptively short prompt that got a *lot of work* done in a single shot.

First, some background. I send out a free Substack newsletter around once a week containing content copied-and-pasted from my blog. I'm effectively using Substack as a lightweight way to allow people to subscribe to my blog via email.

I generate the newsletter with my blog-to-newsletter tool - an HTML and JavaScript app that fetches my latest content from this Datasette instance and formats it as rich text HTML, which I can then copy to my clipboard and paste into the Substack editor. Here's a detailed explanation of how that works.

I recently added a new type of content to my blog to capture content that I post elsewhere, which I called "beats". These include things like releases of my open source projects, new tools that I've built, museums that I've visited (from niche-museums.com) and other external content.

I wanted to include these in the generated newsletter. Here's the prompt I ran against the simonw/tools repository that hosts my blog-to-newsletter tool, using Claude Code on the web.

Clone simonw/simonwillisonblog from github to /tmp for reference

Update blog-to-newsletter.html to include beats that have descriptions - similar to how the Atom everything feed on the blog works

Run it with python -m http.server and use uvx rodney --help to test it - compare what shows up in the newsletter with what's on the homepage of https://simonwillison.net

This got me the exact solution I needed. Let's break down the prompt.

Clone simonw/simonwillisonblog from github to /tmp for reference

I use this pattern a lot. Coding agents can clone code from GitHub, and the best way to explain a problem is often to have them look at relevant code. By telling them to clone to /tmp I ensure they don't accidentally end up including that reference code in their own commit later on.

The simonw/simonwillisonblog repository contains the source code for my Django-powered simonwillison.net blog. This includes the logic and database schema for my new "beats" feature.

Update blog-to-newsletter.html to include beats that have descriptions - similar to how the Atom everything feed on the blog works

Referencing blog-to-newsletter.html is all I need here to tell Claude which of the 200+ HTML apps in that simonw/tools repo it should be modifying.

Beats are automatically imported from multiple sources. Often they aren't very interesting - a dot-release bug fix for one of my smaller open source projects, for example.

My blog includes a way for me to add additional descriptions to any beat, which provides extra commentary but also marks that beat as being more interesting than those that I haven't annotated in some way.

I already use this as a distinction to decide which beats end up in my site's Atom feed. Telling Claude to imitate that saves me from having to describe the logic in any extra detail.

Run it with python -m http.server and use uvx rodney --help to test it - compare what shows up in the newsletter with what's on the homepage of https://simonwillison.net

Coding agents always work best if they have some kind of validation mechanism they can use to test their own work.

In this case I wanted Claude Code to actively check that the changes it made to my tool would correctly fetch and display the latest data.

I reminded it to use python -m http.server as a static server because I've had issues in the past with applications that fetch data and break when served as a file from disk instead of a localhost server. In this particular case that may not have been necessary, but my prompting muscle memory has python -m http.server baked in at this point!

I described the uvx rodney --help trick in the agentic manual testing chapter. Rodney is browser automation software that can be installed using uvx, and that has --help output designed to teach an agent everything it needs to know in order to use the tool.

I figured that telling Claude to compare the results in the newsletter to the content of my blog's homepage would be enough for it to confidently verify that the new changes were working correctly, since I had recently posted content that matched the new requirements.

You can see the full session here, or if that doesn't work I have an alternative transcript showing all of the individual tool calls.

The resulting PR made exactly the right change. It added an additional UNION clause to the SQL query that fetched the blog's content, filtering out draft beats and beats that have nothing in their note column:

code
...
union all
select
  id,
  'beat' as type,
  title,
  created,
  slug,
  'No HTML' as html,
  json_object(
    'created', date(created),
    'beat_type', beat_type,
    'title', title,
    'url', url,
    'commentary', commentary,
    'note', note
  ) as json,
  url as external_url
from blog_beat
where coalesce(note, '') != '' and is_draft = 0
union all
...

And it figured out a mapping of beat types to their formal names, presumably derived from the Django ORM definition that it read while it was exploring the reference codebase:

code
const beatTypeDisplay = {
  release: 'Release',
  til: 'TIL',
  til_update: 'TIL updated',
  research: 'Research',
  tool: 'Tool',
  museum: 'Museum'
};

Telling agents to use another codebase as reference is a powerful shortcut for communicating complex concepts with minimal additional information needed in the prompt.

Tags: ai, llms, prompt-engineering, coding-agents, ai-assisted-programming, generative-ai, agentic-engineering, github

この記事をシェア

関連記事

The Zvi★42026年6月2日 23:05

Claude Opus 4.8:機能と反応について

Zvi は、新モデル「Claude Opus 4.8」の理解には多数のデータポイントが必要であり、限られたベンチマークからの評価は誤解を招くと指摘し、多様なソースからの数十件のテスト結果やモデルカード情報を統合して初めて一貫したパターンが形成できると述べています。

TLDR AI★42026年5月25日 09:00

Anthropic、Claude Code および Claude Security のための「Mythos 1」を準備中(2 分読了)

Anthropic はモデル「Mythos 1」のより広範な利用に向けて動き出しており、同モデルはすでに Google Cloud や AWS の脆弱性発見プログラムを通じて組織保護に貢献している。また、Claude Opus 4.8 のリリースも噂されている。

Simon Willison Blog★32026年5月25日 02:14

Mad House — ユズバーン・クリーピー・コンピューターゲーム

Simon Willison は、UK の出版社ユズバーンが1980年代のコンピュータ関連書籍を無料PDFとして公開したことを紹介し、自身が子供の頃にコモドール64で遊んだ思い出を語っている。

ニュース一覧に戻る元記事を読む