GASで日本IP制限を回避するスクレイピング方法|参考例の解説

プログラミング

「Google Apps Script(GAS)でスクレイピングしようとしたら、なぜか日本のサイトにアクセスできない…」そんな経験はありませんか?実はこれ、GASの実行環境が海外サーバーにあることが原因です。この記事では、その仕組みと現実的な回避策をわかりやすく解説します。


結論:GAS単体では日本IPブロックを突破できない

先に結論をお伝えします。

対象サイトが「日本IPのみ許可」するGeoブロックを設けている場合、Google Apps Script単体でのスクレイピングは基本的に不可能です。

理由はシンプルです。GASはあなたのPCではなく、Googleの海外データセンター(主に米国)からHTTPリクエストを送信するからです。


なぜGASは日本IPになれないのか?仕組みを理解しよう

GASの実行フロー

通常のブラウザアクセスと、GASによるアクセスの違いを図で見てみましょう。

アクセス方法 リクエスト元IP 日本IP制限サイトへのアクセス
あなたのPC(日本国内) 日本のIPアドレス ✅ アクセス可能
GAS(UrlFetchApp.fetch) GoogleのサーバーIP(海外) ❌ ブロックされる

GASの UrlFetchApp.fetch() を実行すると、HTTPリクエストはあなたのパソコンからではなく、Googleのクラウドサーバーから飛びます。このIPアドレスは:

  • 固定されていない(毎回変わる可能性がある)
  • IPレンジが非常に広い
  • 多くが米国など海外のIPとして判定される

そのため、日本IPのみ許可するサイトには「海外からの不正アクセス」として弾かれてしまいます。


回避策を徹底比較

では、どうすれば解決できるでしょうか?現実的な選択肢を4つ検討します。

① 【推奨】日本サーバーを中継する方法

最も安定していて、実用性が高い方法です。

GAS → (HTTPリクエスト) → 日本のサーバー → 対象サイト → GASに返す

具体的な構成例:

  • 日本国内のVPS(さくらVPS、ConoHa、Vultrの東京リージョンなど)を借りる
  • そのサーバー上でPHP or Node.jsのシンプルなAPIを立てる
  • GASはそのAPIにリクエストを投げ、スクレイピング結果を受け取る

メリット:

  • 安定してGeoブロックを回避できる
  • スクレイピングロジックをサーバー側に集中管理できる
  • GAS側はデータ受け取りに専念できるのでスクリプトがシンプルになる

デメリット:

  • サーバーの維持費がかかる(月数百円〜)
  • サーバー構築の初期設定が必要

② Cloudflare Workers → 基本NG

「Cloudflare Workersなら日本のエッジサーバーを使えるのでは?」と思うかもしれませんが、日本IPが保証されるわけではありません。

Cloudflareはユーザーに最も近いエッジノードにルーティングしますが、あなた(GAS)が海外サーバーから呼び出す場合、日本のエッジが選ばれる保証はありません。日本IP制限の回避目的では信頼性が低いため、推奨できません。

③ 有料プロキシ(日本IP)

日本IPを提供する有料プロキシサービスを経由する方法です。

メリット: サーバー構築不要

デメリット:

  • GASから直接プロキシを指定する設定が煩雑
  • 認証付きプロキシはGASでほぼ対応不可
  • 実質的に①の「中継サーバー方式」が必要になる場合が多い

コストと手間を考えると、①の日本サーバー方式に軍配が上がります。

④ 自宅回線・Raspberry Piを使う

自宅のPCやRaspberry Piに小さなAPIサーバーを立て、GASからアクセスする方法です。

メリット:

  • サーバー費用がほぼゼロ
  • 自宅の日本IPを使えるため確実

デメリット:

  • 常時稼働が必要(電気代、マシンの維持)
  • 自宅IPが変わる(動的IP)場合は追加設定が必要
  • ポート開放などネットワーク設定の知識が必要

趣味・個人利用には向いていますが、安定運用を求めるならVPSの方が無難です。


回避策まとめ比較表

方法 日本IP保証 安定性 コスト 難易度 おすすめ度
GAS単体 無料 簡単 ⭐(不可)
日本VPS中継 【推奨】 月数百円〜 ⭐⭐⭐⭐⭐
Cloudflare Workers 無料〜 ⭐(NG)
有料プロキシ 有料 ⭐⭐
自宅サーバー 電気代のみ 中〜難 ⭐⭐⭐

推奨構成:日本VPS中継の実装イメージ

最もバランスが良い「日本VPS + Node.js API + GAS」の構成をざっくり説明します。

サーバー側(Node.js例)

// server.js(日本VPS上で動かす)
const express = require('express');
const axios = require('axios');
const app = express();

app.get('/scrape', async (req, res) => {
  const targetUrl = req.query.url;
  const response = await axios.get(targetUrl);
  res.send(response.data);
});

app.listen(3000);

GAS側

// GAS(スプレッドシートなどから実行)
function scrapeViaJapanServer() {
  const targetUrl = encodeURIComponent('https://example.co.jp/data');
  const myServerUrl = 'https://あなたのVPS/scrape?url=' + targetUrl;

  const response = UrlFetchApp.fetch(myServerUrl);
  const html = response.getContentText();

  // あとは通常通りパース処理
  Logger.log(html);
}

GASはあなたのVPSのAPIを叩くだけ。スクレイピング本体は日本IPのサーバーが担当します。


注意事項・利用規約の確認を忘れずに

技術的な話とは別に、スクレイピングには法的・倫理的な注意が必要です。

  • 対象サイトの利用規約でスクレイピングが禁止されていないか確認する
  • 短時間に大量リクエストを送る過負荷アクセスは避ける
  • 著作権のあるコンテンツの無断転載・商用利用には注意
  • robots.txtの内容を尊重する

技術的に「できる」ことと「やってよい」ことは別物です。常に節度あるアクセスを心がけましょう。


まとめ

  • GAS単体では、日本IP制限(Geoブロック)を突破することはできない
  • GASの UrlFetchApp.fetch() はGoogleの海外サーバーからリクエストを送るため
  • 回避するには日本IPの中継サーバーを用意するのが最も確実
  • 最もおすすめの構成は「日本VPS + シンプルなAPI + GAS

GASはスプレッドシートとの連携など非常に便利なツールですが、実行環境の制約を理解した上で使うことが大切です。この記事が「なんでアクセスできないんだろう?」という疑問の解決に役立てば幸いです。

コメント

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