Codexで補助金監視ツールを作ってみた。GAS・RSS・SlackでJ-Net21を自動監視する

はじめに

補助金や助成金の情報は、我々中小企業診断士、そして何よりも事業者にとっては非常に重要なのに、日々の業務の中で定点観測を続けるのは案外大変である。あまりにも多岐にわたる支援制度が、国、自治体、その他様々な団体から提供されているからだ。毎日サイトを見に行くのは手間がかかるし、見落としも起きやすい。そこで今回は、J-Net21のRSSをもとに、補助金・助成金・融資情報をSlackへ自動通知する小さな監視ツールを作ってみた。

実装にはGoogle Apps Scriptを使い、定期実行、Slack連携、Spreadsheetへのログ保存まで含めて一通り自動化した。さらに、コーディングの補助役としてAIコーディングエージェントのCodexを使っている。ただし、補助金情報そのものの生成や解釈はAIに任せていない。ここは今回かなり意識したポイントである。

著者プロフィール

経営コンサルタントの国家資格:中小企業診断士かつ現役技術者の小林隼人です。生成AIを活用して創業や中小企業経営の支援をしております。
詳しいプロフィールはこちら
お問い合わせはこちらから!

なぜ補助金監視ツールを作ろうと思ったのか

補助金情報は、中小企業支援や事業計画の検討において有益なことが多い。しかし、日々更新される情報を人手で追うのは、継続性の面でどうしても厳しい。業務として必要なのは「思い出したときに見る」ことではなく、「必要な情報が出たら自然に届く」状態を作ることだと思っている。これは事業者よりも我々のような支援者側にとってより重要なことかもしれない。

中小機構が提供する情報サイト「J-Net21」にはRSSが用意されているので、入口としては非常に扱いやすい。であれば、RSSを定期的にチェックして、対象地域に合う情報だけSlackに流す仕組みを作ればよい。発想自体はシンプルだが、実際に安定運用できる形にするには細かい調整が必要だった。

今回作った仕組み

今回作ったのは、J-Net21のRSSを平日19時に取得し、対象地域に一致する新着情報だけをSlackに通知する仕組みである。対象地域はデフォルトで関東一都六県とし、配信時間含めスプレッドシートから変更できるようにしている。

技術的には、Google Apps ScriptでRSSを取得し、XMLをパースし、地域判定を行い、通知内容を整形してSlack Incoming Webhookへ送信する。送信内容や実行結果はSpreadsheetにも保存しており、何が送られたか、そもそも実行されたかを後から確認できるようにした。情報が0件の日はSlackには流さず、ログだけ残す仕様にしている。

今回のような小さな業務ツールは、ゼロからすべて手で書いても作れなくはない。ただ、日常的にコーディングをしているわけでもない私が書くと、GAS、RSS、Slack、Spreadsheetという複数の要素が絡むので、結構時間がかかる。こういうとき、Codexのようなコーディング支援はかなり相性が良い。もはやAIなしでのコーディングは考えられない時代になった。

特に便利だったのは、要件を対話しながら少しずつ詰めて、そのままコードへ落としていけるところである。地域フィルタ、定期実行、重複通知防止、ログ保存といった要件を段階的に追加しながら、都度修正していく流れはかなりスムーズだった。単にコードを書かせるというより、実装パートナーとして使う感覚に近い。仕様を伝えればシステムが完成する感覚である。

なお最初はClaude codeで進めようとしたのだが、レートリミットにすぐ達してしまい使えなかった、という事情がある。CodexではなくClaude code, Antigravityなど何を使っても良い。

あえて生成AIにやらせなかったこと

今回、情報の生成や検索、要約の判断には生成AIを使っていない。ここは意図的である。補助金情報のように、制度名、対象地域、公開日、URLといった事実情報が重要になる場面では、ハルシネーションや微妙な解釈違いがあると困るからだ。また、AIに情報検索を任せた場合、どうしても不確実性が残る。今回のようにはっきり正解のデータが用意されている場合には生成AIでデータを収集したり加工する理由は薄い。

そのため、情報源はあくまでJ-Net21のRSSとし、通知内容も原文ベースで構成している。AIに任せたのは「仕組みを作ること」であって、「情報を作ること」ではない。生成AIの得意なことと苦手なことを切り分けると、この手の実務ツールはかなり安定する。

実装でハマったところ

実際にやってみると、RSSがあるからすぐ終わる、というほど単純でもなかった。たとえば、RSSで配信されているURLがそのままでは正しく表示できず、実ページ側のURL体系に補正が必要だった。

NG:https://j-net21.smrj.go.jp/snavi
OK:https://j-net21.smrj.go.jp/snavi2

また、公開日は単純な pubDate ではなく、名前空間付きの dc:date に入っていた。

<item>
<title>【檜原村】補助金・助成金:「農業用機械購入補助金について」</title>
<link>https://j-net21.smrj.go.jp/snavi/articles/180701</link>
<description>
<![CDATA[ 【檜原村】(東京都)農業用機械の購入をお考えの方へ 申込方法ほか詳細情報は、「詳細情報を見る」からご確認ください。 ]]>
</description>
<category>support</category>
<dc:creator>中小企業基盤整備機構</dc:creator>
<dc:subject>補助金・助成金・融資 - 補助金・助成金</dc:subject>
<dc:coverage>
<rdf:value>JP-13</rdf:value>
<rdf:label>東京都</rdf:label>
</dc:coverage>
<dc:date>2026-04-17T18:30:00+09:00</dc:date>
</item>

さらに、配信タイミングにも癖があった。RSSの生データを見ると、情報が一斉に夕方に更新されているようだったので、当初の朝実行ではなく、平日19時の配信に寄せ直した。こうした調整は、AIにふわっと任せるよりも、実際のデータを見ながら一つずつ確かめるほうが確実である。

実運用を意識して入れた工夫

この手の通知ツールは、動けばそれで良いというものでもない。通知が多すぎると見なくなるし、逆に静かすぎると本当に動いているのか不安になる。そこで今回は、情報があるときだけSlackへ通知し、情報がないときでもSpreadsheetには実行ログを残す形にした。

また、土日は実行対象から外している。公的機関由来の補助金情報は平日に更新されることが多く、週末に空振り通知を増やしてもあまり意味がないと判断したためだ。こうした細かい運用設計は地味だが、ツールを「作って終わり」にせず、使い続けられるものにするためには重要だと思う。

まとめ

Codexなどの生成AIエージェントを使うと、こうした業務補助ツールの立ち上がりはかなり速くなる。特に、要件を対話で詰めながら、小さく作って動かし、必要に応じて修正していく進め方とは相性が良い。一方で、信頼性、網羅性、確実性が必要な情報そのものは、確実な手段が別にあるのであれば、生成AIに任せすぎないほうが良い場面もある。

今回の補助金監視ツールでは、AIは実装支援、情報の正しさは一次情報ベース、という役割分担にした。結果として、実務で使いやすく、説明もしやすい形にまとまったと思う。生成AIを使うなら、どこに使うかだけでなく、どこに使わないかも同じくらい大事である。

コメント

タイトルとURLをコピーしました