この仕組みの役割
| 項目 | 説明 |
|---|---|
| 何をするのか | 毎日9時に補助金と助成金の情報を自動収集 |
| どこから取得するのか | 政府公式サイト(経済産業省・厚生労働省) |
| どこに保存するのか | Googleスプレッドシート |
| 重複は排除するのか | はい。同じ情報は2回以上登録されない |
| カテゴリ | 項目 | 内容・詳細 |
| 基本仕様 | 役割 | 毎日9時に補助金・助成金の情報を自動収集し、重複を排除して保存 |
| 取得元 | 政府公式サイト(経済産業省 jGrants API / 厚生労働省 スクレイピング) | |
| 保存先 | Googleスプレッドシート(一括書き込みで高速記録) | |
| 補助金取得 (①) | 対象・条件 | 全国+福岡県の募集中案件(半年以内に開始、締切が近い順) |
| キーワード | 中小企業、スタートアップ、デジタル化、IT導入など計7種類 | |
| 助成金取得 (②) | 対象・条件 | 厚労省の雇用関係ページ(5ページ分)から助成金、支援金、給付金を抽出 |
| 具体例 | キャリアアップ、人材開発支援、両立支援、働き方改革推進など | |
| 重複チェック (③) | 動作 | スプレッドシートのG列(URL)を照合し、既存データはスキップ |
| メリット | データの重複を防ぎ、常に最新かつ一意の情報を維持 | |
| 記録内容 (④) | スプレッドシート構成 | 取得日時、名称、種類、開始/締切日、実施機関、URL、概要/上限額 |
| 注目列 | E列(締切日)でソートすることで、申請期限切れを防止 | |
| システム工夫 | パフォーマンス | キャッシュ機能(12時間保存)と待機処理でサーバー負荷を軽減 |
| 実行方法 | トリガー設定による毎朝自動実行、または手動でのテスト実行が可能 | |
| 運用ガイド | Q&A | 重複防止機能により肥大化を抑制。データは永続保存されるため適宜整理を推奨 |
| 活用のコツ | 毎朝チェックを行い、自社の事業計画と照らし合わせて申請判断に活用 |
仕組みの全体像
毎日9時に自動実行
↓
補助金API(jGrants)から検索
↓
助成金情報(厚労省)をスクレイピング
↓
重複チェック(既存データと照合)
↓
新規データだけをスプレッドシートに追加
4つの重要な処理
① 補助金データの取得(jGrants API)
| 項目 | 内容 |
|---|---|
| 対象地域 | 全国 + 福岡県 |
| 検索キーワード | 中小企業、スタートアップ、デジタル化、IT導入など7種類 |
| 募集状態 | 募集中のもののみ |
| データの鮮度 | 半年以内に募集開始したものだけ |
| 取得順序 | 締切が近い順(期限切れを防ぐ) |
取得するキーワード例:
- 持続化補助金
- 省力化投資補助金
- デジタル化・AI導入補助金
- IT導入補助金
② 助成金データの取得(厚生労働省スクレイピング)
| 項目 | 内容 |
|---|---|
| 取得元 | 厚生労働省の雇用関係ページ(5ページ分) |
| 対象キーワード | 助成金、支援金、給付金 |
| 方式 | HTMLから自動抽出 |
取得される助成金の例:
- キャリアアップ助成金(非正規⇒正社員化)
- 人材開発支援助成金(従業員教育)
- 両立支援等助成金(育児・介護休業)
- 働き方改革推進支援助成金(残業削減)
③ 重複チェック(必須機能)
| 確認内容 | 動作 |
|---|---|
| 既存URLを確認 | スプレッドシートのG列(URL)をチェック |
| 重複があれば | スキップ(同じ情報は記録しない) |
| 新規情報ならば | スプレッドシートに追加 |
メリット: スプレッドシートの無駄な重複行が増えず、いつも最新で統一された情報を保つ
④ スプレッドシートへの記録
| 列 | 内容 | 例 |
|---|---|---|
| A列 | 取得日時 | 2025/4/4 9:00:00 |
| B列 | 制度の名称 | 小規模事業者持続化補助金 |
| C列 | 種類 | 補助金 / 助成金 |
| D列 | 募集開始日 | 2025/1/15 |
| E列 | 締切日 | 2025/5/30 |
| F列 | 実施機関 | 日本商工会議所 |
| G列 | URL | https://… |
| H列 | 概要・上限額 | 対象地域:全国 / 上限:200万円 |
パフォーマンス工夫(快適な理由)
| 機能 | 効果 |
|---|---|
| キャッシュ機能 | 重い処理の結果を12時間保存。2回目以降は速い(0.5秒→瞬間) |
| APIリクエスト制御 | 各リクエスト間に500ms待機。サーバー負荷を軽減 |
| 一括書き込み | 新規データをまとめて1回で記録(1件ずつ書き込まない) |
実際の設定手順
トリガー設定(毎日9時に自動実行)
スクリプトエディタで以下を実行:
トリガーを作成する()
結果: 毎日9時に自動で情報取得が開始
テスト実行(今すぐ試したいとき)
テスト実行()
結果: キャッシュをクリアして強制的に最新データを再取得
よくある質問
| Q | A |
|---|---|
| データが増え続けないか? | 重複チェックがあるので大丈夫。毎日新規データだけ追加 |
| 古い情報は消えないか? | 消えません。手動で削除するか、定期的に整理が必要 |
| 福岡県外の情報は取れないか? | 現在は「全国」と「福岡県」のみ。拡張可能 |
| 失敗したらどうなるか? | Loggerに記録される。手動でテスト実行して確認 |
| いつまでスプレッドシートに保存か? | 永遠に保存。自分で整理・削除が必要 |
経営者として活用するコツ
毎朝チェック: スプレッドシートを開き、新規追加を確認
締切管理: E列(締切日)でソートして期限切れを防ぐ
候補保存: 該当しそうな案件をコピーして専用シートで整理
事業との照合: 「今年の重点は何か」と照合して申請判断
(参考)コード例
// ============================================================
// メイン関数:毎日実行される
// ============================================================
function 情報を取得する() {
const シート = SpreadsheetApp.getActiveSheet();
const 現在日時 = new Date();
const 補助金情報 = 補助金データを取得();
Logger.log(“補助金情報:” + 補助金情報.length + “件”);
const 助成金情報 = 助成金データを取得();
Logger.log(“助成金情報:” + 助成金情報.length + “件”);
const 全情報 = 補助金情報.concat(助成金情報);
if (全情報.length === 0) {
Logger.log(“情報が見つかりません”);
return;
}
// ── 重複チェック用:既存URLを一覧取得(G列) ───────────
const 最終行 = シート.getLastRow();
const 既存URL一覧 = 最終行 >= 2
? シート.getRange(2, 7, 最終行 – 1, 1).getValues().flat()
: [];
// ── 新規データのみ抽出 ─────────────────────────────────
const 追加データ = [];
for (const 行 of 全情報) {
if (既存URL一覧.includes(行.URL)) {
Logger.log(“重複スキップ:” + 行.名称);
continue;
}
// A:取得日時 B:名称 C:種類 D:募集開始日 E:締切日 F:実施機関 G:URL H:概要
追加データ.push([現在日時, 行.名称, 行.種類, 行.募集開始日, 行.締切日, 行.実施機関, 行.URL, 行.概要]);
}
// ── まとめて一括書き込み ───────────────────────────────
if (追加データ.length > 0) {
const 書込開始行 = シート.getLastRow() + 1;
シート.getRange(書込開始行, 1, 追加データ.length, 8).setValues(追加データ);
Logger.log(“新規追加:” + 追加データ.length + “件”);
} else {
Logger.log(“新規データなし(すべて重複)”);
}
}
// ============================================================
// 補助金データを取得(jGrants公式API・複数キーワード×エリア対応)
// ============================================================
function 補助金データを取得() {
const キャッシュ = CacheService.getScriptCache();
const キャッシュキー = “補助金データv7”;
const キャッシュ済み = キャッシュ.get(キャッシュキー);
if (キャッシュ済み) {
Logger.log(“補助金データはキャッシュから取得”);
return JSON.parse(キャッシュ済み);
}
const 補助金データ = [];
const 追加済みID = new Set();
// ✅ 半年前の日付を計算
const 半年前 = new Date();
半年前.setMonth(半年前.getMonth() – 6);
// ✅ 検索キーワード一覧
const キーワードリスト = [
“中小企業”,
“小規模事業者”,
“スタートアップ”,
“持続化補助金”, // 小規模事業者持続化補助金
“省力化投資補助金”, // 省力化投資補助金
“デジタル化AI導入”, // デジタル化・AI導入補助金(新名称)
“IT導入補助金” // 旧名称でも念のため拾う
];
// ✅ 対象エリア:全国と福岡県のみ
const エリアリスト = [
“全国”,
“福岡県”
];
for (const キーワード of キーワードリスト) {
for (const エリア of エリアリスト) {
try {
const params = {
keyword: キーワード,
sort: “acceptance_end_datetime”,
order: “ASC”, // 締切が近い順
acceptance: “1”, // 募集中のみ
target_area_search: エリア
};
const クエリ = Object.keys(params)
.map(k => encodeURIComponent(k) + “=” + encodeURIComponent(params[k]))
.join(“&”);
const url = “https://api.jgrants-portal.go.jp/exp/v1/public/subsidies?” + クエリ;
Logger.log(“APIリクエスト[” + キーワード + “/” + エリア + “]:” + url);
const response = UrlFetchApp.fetch(url, {
method: “get”,
muteHttpExceptions: true,
headers: { “Accept”: “application/json” }
});
const ステータス = response.getResponseCode();
if (ステータス === 200) {
const json = JSON.parse(response.getContentText());
const items = json.result || [];
Logger.log(“取得件数[” + キーワード + “/” + エリア + “]:” + items.length + “件”);
for (const item of items) {
if (追加済みID.has(item.id)) continue;
// ✅ 募集開始日が不明 or 半年以上前のものは除外
if (!item.acceptance_start_datetime) continue;
const 開始日 = new Date(item.acceptance_start_datetime);
if (開始日 < 半年前) {
Logger.log(“半年以上前のためスキップ:” + item.title);
continue;
}
追加済みID.add(item.id);
const 補助金ID = item.id || “”;
const 詳細URL = item.front_subsidy_detail_page_url
|| (“https://www.jgrants-portal.go.jp/subsidy/” + 補助金ID);
const 募集開始日 = 開始日.toLocaleDateString(“ja-JP”);
const 締切日 = item.acceptance_end_datetime
? new Date(item.acceptance_end_datetime).toLocaleDateString(“ja-JP”)
: “(不明)”;
補助金データ.push({
名称: item.title || “(名称不明)”,
種類: “補助金”,
募集開始日: 募集開始日,
締切日: 締切日,
実施機関: item.institution_name || “(機関不明)”,
URL: 詳細URL,
概要: [
item.target_area_search ? “対象地域:” + item.target_area_search : “”,
item.target_number_of_employees ? “対象規模:” + item.target_number_of_employees : “”,
item.subsidy_max_limit ? “上限額:” + item.subsidy_max_limit.toLocaleString() + “円” : “”
].filter(Boolean).join(” / “) || “(概要なし)”
});
}
} else {
Logger.log(“APIエラー[” + キーワード + “/” + エリア + “]:” + ステータス);
}
Utilities.sleep(500);
} catch (error) {
Logger.log(“補助金API取得失敗[” + キーワード + “/” + エリア + “]:” + error.message);
}
}
}
Logger.log(“補助金データ合計:” + 補助金データ.length + “件(半年フィルタ・重複除去済み)”);
if (補助金データ.length === 0) {
Logger.log(“デフォルト補助金データを使用”);
補助金データ.push(
{ 名称: “ものづくり補助金”, 種類: “補助金”, 募集開始日: “(不明)”, 締切日: “(不明)”,
実施機関: “経済産業省”, URL: “https://www.monodukuri-hojo.jp/”,
概要: “革新的な製品・サービス開発の設備投資を支援” },
{ 名称: “小規模事業者持続化補助金”, 種類: “補助金”, 募集開始日: “(不明)”, 締切日: “(不明)”,
実施機関: “日本商工会議所”, URL: “https://r3.jizokukahojokin.info/”,
概要: “小規模事業者の販路開拓・生産性向上を支援” },
{ 名称: “デジタル化・AI導入補助金”, 種類: “補助金”, 募集開始日: “(不明)”, 締切日: “(不明)”,
実施機関: “中小企業庁”, URL: “https://it-shien.smrj.go.jp/”,
概要: “ITツール導入によるデジタル化・AI活用を支援(旧IT導入補助金)” }
);
}
キャッシュ.put(キャッシュキー, JSON.stringify(補助金データ), 43200);
return 補助金データ;
}
// ============================================================
// 助成金データを取得(厚労省サイト・複数ページ対応)
// ============================================================
function 助成金データを取得() {
const キャッシュ = CacheService.getScriptCache();
const キャッシュキー = “助成金データv3”;
const キャッシュ済み = キャッシュ.get(キャッシュキー);
if (キャッシュ済み) {
Logger.log(“助成金データはキャッシュから取得”);
return JSON.parse(キャッシュ済み);
}
const 助成金データ = [];
try {
const 取得先リスト = [
{ url: “https://www.mhlw.go.jp/stf/seisakunitsuite/bunya/koyou_roudou/koyou/kyufukin/index.html”, 機関: “厚生労働省” },
{ url: “https://www.mhlw.go.jp/stf/seisakunitsuite/bunya/koyou_roudou/koyou/kyufukin/career.html”, 機関: “厚生労働省” },
{ url: “https://www.mhlw.go.jp/stf/seisakunitsuite/bunya/koyou_roudou/koyou/kyufukin/d01-1.html”, 機関: “厚生労働省” },
{ url: “https://www.mhlw.go.jp/stf/seisakunitsuite/bunya/kodomo/shokuba_kosodate/ryouritsu01/index.html”, 機関: “厚生労働省” },
{ url: “https://www.mhlw.go.jp/stf/seisakunitsuite/bunya/0000148322.html”, 機関: “厚生労働省” }
];
const 追加済みURL = new Set();
for (const 取得先 of 取得先リスト) {
try {
const response = UrlFetchApp.fetch(取得先.url, {
method: “get”,
muteHttpExceptions: true
});
if (response.getResponseCode() !== 200) continue;
const html = response.getContentText(“UTF-8”);
const リンクパターン = /<a\s+href=”([^”]+)”[^>]*>([^<]{4,60})<\/a>/gi;
let マッチ;
const ページタイトルパターン = /<title>([^<]+)<\/title>/i;
const タイトルマッチ = ページタイトルパターン.exec(html);
const ページタイトル = タイトルマッチ ? タイトルマッチ[1].trim() : “”;
if (
(ページタイトル.includes(“助成金”) || ページタイトル.includes(“支援金”)) &&
!追加済みURL.has(取得先.url)
) {
追加済みURL.add(取得先.url);
助成金データ.push({
名称: ページタイトル.replace(/|.*$/, “”).replace(/\|.*$/, “”).trim(),
種類: “助成金”,
募集開始日: “(不明)”,
締切日: “(不明)”,
実施機関: 取得先.機関,
URL: 取得先.url,
概要: “厚生労働省の雇用関係助成金”
});
}
while ((マッチ = リンクパターン.exec(html)) !== null) {
const リンク = マッチ[1];
const 名前 = マッチ[2].trim();
if (名前.includes(“助成金”) || 名前.includes(“支援金”) || 名前.includes(“給付金”)) {
const 完全URL = リンク.startsWith(“http”)
? リンク
: リンク.startsWith(“/”)
? “https://www.mhlw.go.jp” + リンク
: “https://www.mhlw.go.jp/stf/seisakunitsuite/bunya/koyou_roudou/koyou/kyufukin/” + リンク;
if (!追加済みURL.has(完全URL)) {
追加済みURL.add(完全URL);
助成金データ.push({
名称: 名前,
種類: “助成金”,
募集開始日: “(不明)”,
締切日: “(不明)”,
実施機関: 取得先.機関,
URL: 完全URL,
概要: “厚生労働省の雇用関係助成金”
});
}
}
}
Utilities.sleep(500);
} catch (e) {
Logger.log(“個別ページ取得失敗:” + 取得先.url + ” / ” + e.message);
}
}
Logger.log(“厚労省サイトから取得:” + 助成金データ.length + “件”);
} catch (error) {
Logger.log(“助成金HTML取得失敗:” + error.message);
}
if (助成金データ.length === 0) {
Logger.log(“デフォルト助成金データを使用”);
助成金データ.push(
{ 名称: “キャリアアップ助成金”, 種類: “助成金”, 募集開始日: “(不明)”, 締切日: “(不明)”,
実施機関: “厚生労働省”,
URL: “https://www.mhlw.go.jp/stf/seisakunitsuite/bunya/koyou_roudou/koyou/kyufukin/career.html”,
概要: “非正規労働者の正社員化・処遇改善を支援” },
{ 名称: “人材開発支援助成金”, 種類: “助成金”, 募集開始日: “(不明)”, 締切日: “(不明)”,
実施機関: “厚生労働省”,
URL: “https://www.mhlw.go.jp/stf/seisakunitsuite/bunya/koyou_roudou/koyou/kyufukin/d01-1.html”,
概要: “従業員の職業訓練・能力開発を支援” },
{ 名称: “両立支援等助成金”, 種類: “助成金”, 募集開始日: “(不明)”, 締切日: “(不明)”,
実施機関: “厚生労働省”,
URL: “https://www.mhlw.go.jp/stf/seisakunitsuite/bunya/kodomo/shokuba_kosodate/ryouritsu01/index.html”,
概要: “育児・介護休業取得者の職場復帰を支援” },
{ 名称: “働き方改革推進支援助成金”, 種類: “助成金”, 募集開始日: “(不明)”, 締切日: “(不明)”,
実施機関: “厚生労働省”,
URL: “https://www.mhlw.go.jp/stf/seisakunitsuite/bunya/0000148322.html”,
概要: “時間外労働削減・勤務制度整備などを支援” }
);
}
キャッシュ.put(キャッシュキー, JSON.stringify(助成金データ), 43200);
return 助成金データ;
}
// ============================================================
// トリガー設定(毎日9時)
// ============================================================
function トリガーを作成する() {
ScriptApp.getProjectTriggers()
.filter(t => t.getHandlerFunction() === “情報を取得する”)
.forEach(t => ScriptApp.deleteTrigger(t));
ScriptApp.newTrigger(“情報を取得する”)
.timeBased()
.atHour(9)
.everyDays(1)
.create();
Logger.log(“トリガー作成完了:毎日9時に実行”);
}
// ============================================================
// テスト実行(キャッシュクリアして強制再取得)
// ============================================================
function テスト実行() {
CacheService.getScriptCache().removeAll([“補助金データv7”, “助成金データv3”]);
Logger.log(“テスト開始(キャッシュクリア済み)…”);
情報を取得する();
Logger.log(“テスト完了”);
}

