0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Google Apps ScriptでHTMLをパースする3つの方法

Last updated at Posted at 2025-05-29

Google Apps Script(GAS)でHTMLを扱う場面では、いくつかのパース方法があり、バイブコーディング中にどの手法を使うか迷うことがありました。
そこで今回は、備忘録も兼ねて、代表的な3つの方法を比較し、それぞれのメリット・デメリットや使いどころを整理してみます。

1. XmlServiceを使う方法

概要

GAS標準の XmlService.parse() を使って、HTMLをDOMライクに解析する方法です。

const xml = XmlService.parse('<root>' + cleanedHtml + '</root>');

特徴

  • ✅ XHTML準拠の構造ならDOMとして安全に解析可能
  • ⚠️ <meta> などの閉じタグがないHTMLには対応できない
  • ⚠️ <!DOCTYPE> を含むと例外発生の可能性あり

向いているケース

  • シンプルで構造が安定した(≒XMLに近い)HTML

2. 正規表現での解析

概要

タグ構造を正規表現で解析し、必要なテキストや属性を抽出する方法です。

const match = html.match(/<td[^>]*>\s*(\d{4}\/\d{2}\/\d{2})/);

特徴

  • ✅ HTMLの構文エラーに左右されず動作
  • ✅ DOM構造を無視して高速に抽出可能
  • ⚠️ タグの順序や構造変更に非常に弱い
  • ⚠️ 保守性・読みやすさがやや低い

向いているケース

  • 決まったレイアウト等でDOM構造が変わる頻度が低い
  • 軽量で特定箇所だけ取りたいとき

3. cheeriogsライブラリを使う方法

概要

GAS用のCheerioラッパーライブラリ「cheeriogs」 を使って、jQueryのようにHTMLを解析する方法です。

const $ = Cheeriogs.load(html);
const store = $('td').eq(1).text();

特徴

  • ✅ jQuery風のセレクタで直感的に操作できる
  • ✅ HTML構文の厳密性を気にせず扱える
  • ⚠️ ライブラリの追加が必要(導入がやや面倒)
  • ⚠️ セキュリティ・メンテナンスへの配慮が必要

向いているケース

  • 複雑でネストされたHTML
  • 複数要素を繰り返し処理したいとき

🔍 各手法の比較表

特徴 / 方法 XmlService 正規表現 cheeriogs
HTMLの構文厳密性 必須(XHTML準拠) 不要 不要
構造変更への強さ 強い(DOMベース) 弱い(壊れやすい) 中程度(セレクタ次第)
実装のシンプルさ △ 前処理が必要 ◎ すぐに使える ○ 導入が必要
保守性・読みやすさ △ XML風で冗長 △ 複雑になることも ◎ jQuery風で直感的
向いているHTML 整形されたXML風HTML DOM構造が固定のHTML ネストや繰り返し構造
外部ライブラリの依存 なし なし あり

🧭 選び方の目安

利用シーン おすすめの手法
XHTMLに近い構造、安定したHTML XmlService
決まったレイアウト等でDOM構造が変わらない場合 正規表現
複雑なHTML、繰り返し処理、柔軟な抽出が必要な場合 cheeriogs

✍️ まとめ

  • 🔸 XML形式に変換可能で正確さを重視するなら XmlService
  • 🔸 DOM構造が変わらなず、部分的な抽出だけなら 正規表現
  • 🔸 柔軟にセレクタ操作したいなら cheeriogs
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?