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