Google Apps Scriptを使ってGoogleドキュメントを操作する際、DocumentAppクラスだけではできない処理があります。例えば、段落の背景色を変えたり、ヘッダーやフッターに画像を挿入する操作は標準メソッドでは対応していません。そこでGoogle Docs REST APIを直接呼び出す方法を解説します。この記事では、Apps ScriptからUrlFetchAppを使ってAPIリクエストを送り、ドキュメントの細かな操作を実現する手順を紹介します。
【要点】Apps ScriptでDocs APIを直接呼び出すための準備と実装手順
- Google Cloud ConsoleでDocs APIを有効化します: プロジェクトを作成し、APIライブラリからDocs APIを有効にします。
- OAuth同意画面とスコープを設定します: 認証情報としてOAuth2クライアントIDを作成し、スコープとして
https://www.googleapis.com/auth/documentsを追加します。 - UrlFetchAppでAPIエンドポイントにアクセスします: アクセストークンを取得し、GETリクエストでドキュメント内容を取得したり、POSTリクエストで段落を更新したりします。
ADVERTISEMENT
目次
なぜ直接REST APIが必要なのか?DocumentAppの限界
DocumentAppは便利なクラスですが、すべてのドキュメント要素を操作できるわけではありません。例えば、段落の背景色を変更するメソッドは存在しません。同様に、テーブルのセル結合を解除する操作や、カスタムスタイルを適用する処理もDocumentAppでは実現できません。一方、Google Docs REST APIはドキュメント内のすべての要素にアクセス可能です。APIを直接呼び出せば、DocumentAppでは不可能だった細かい調整が可能になります。ただし、認証情報の管理とHTTPリクエストの実装が必要です。
Google Docs APIを直接呼び出す実装手順
ステップ1:Google Cloud ConsoleでDocs APIを有効化する
- Google Cloud Consoleを開きます
ブラウザでGoogle Cloud Consoleにアクセスし、既存のプロジェクトを選択するか、新しいプロジェクトを作成します。 - APIとサービスを有効にします
「APIとサービス」から「ライブラリ」を選択し、「Google Docs API」を検索して有効にします。 - 認証情報を作成します
「認証情報」画面で「認証情報を作成」から「OAuth2クライアントID」を選択します。アプリケーションの種類は「ウェブアプリケーション」または「デスクトップアプリケーション」を選びます。
ステップ2:OAuth2認証を設定する
Apps Script内でOAuth2ライブラリを使用します。このライブラリはGoogle提供のものです。スクリプトエディタで「リソース」→「ライブラリ」から「1B7FSrk5Zi6L1rSxxTDgDEUsPzlukDsi4KGuTMorsTQHhGBzBkMun4iDF」を追加します。
// OAuth2ライブラリを初期化します
var CLIENT_ID = 'あなたのクライアントID';
var CLIENT_SECRET = 'あなたのクライアントシークレット';
var SCOPES = ['https://www.googleapis.com/auth/documents'];
function getDocsService() {
return OAuth2.createService('docs')
.setAuthorizationBaseUrl('https://accounts.google.com/o/oauth2/auth')
.setTokenUrl('https://oauth2.googleapis.com/token')
.setClientId(CLIENT_ID)
.setClientSecret(CLIENT_SECRET)
.setScope(SCOPES.join(' '))
.setCallbackFunction('authCallback')
.setPropertyStore(PropertiesService.getUserProperties());
}
function authCallback(request) {
var docsService = getDocsService();
var isAuthorized = docsService.handleCallback(request);
if (isAuthorized) {
return HtmlService.createHtmlOutput('認証に成功しました。このタブを閉じてください。');
} else {
return HtmlService.createHtmlOutput('認証に失敗しました。');
}
}
ステップ3:UrlFetchAppでAPIリクエストを実行する
認証が完了したら、アクセストークンを取得してAPIエンドポイントにアクセスします。以下はドキュメントの内容を取得する関数です。
function getDocumentContent(documentId) {
var docsService = getDocsService();
if (!docsService.hasAccess()) {
throw new Error('アクセストークンがありません。まず認証を実行してください。');
}
var accessToken = docsService.getAccessToken();
var url = 'https://docs.googleapis.com/v1/documents/' + documentId;
var options = {
headers: {
'Authorization': 'Bearer ' + accessToken
},
method: 'get',
muteHttpExceptions: true
};
var response = UrlFetchApp.fetch(url, options);
return JSON.parse(response.getContentText());
}
次に、特定の段落のテキストを置換する例です。APIのバッチ更新リクエストを使います。
function replaceTextInParagraph(documentId, paragraphIndex, newText) {
var docsService = getDocsService();
if (!docsService.hasAccess()) throw new Error('トークンがありません。');
var accessToken = docsService.getAccessToken();
var url = 'https://docs.googleapis.com/v1/documents/' + documentId + ':batchUpdate';
var requests = [{
replaceAllText: {
containsText: { text: '{{置換対象}}', matchCase: true },
replaceText: newText
}
}];
var options = {
headers: {
'Authorization': 'Bearer ' + accessToken,
'Content-Type': 'application/json'
},
method: 'post',
payload: JSON.stringify({ requests: requests }),
muteHttpExceptions: true
};
var response = UrlFetchApp.fetch(url, options);
return JSON.parse(response.getContentText());
}
注意点とよくあるエラー
スコープが不足している場合のエラー
APIリクエスト時に403エラーが返ってくる場合、スコープの設定が正しいか確認します。ドキュメントの読み取りだけならhttps://www.googleapis.com/auth/documents.readonly、書き込みが必要ならhttps://www.googleapis.com/auth/documentsを指定します。OAuth同意画面でスコープを追加し、再度認証を実行してください。
レート制限を超えた場合の対処
Google APIにはレート制限があります。短時間に多数のリクエストを送ると429エラーが発生します。その場合はUtilities.sleep()で待機するか、リクエスト数を分散させる必要があります。
アクセストークンの有効期限切れ
OAuth2トークンは通常1時間で期限切れになります。有効期限が切れると401エラーが返ります。その場合は自動的にリフレッシュされるよう、OAuth2ライブラリの設定でsetTokenRefreshTimeを調整するか、reset()で強制的に再認証させます。
まとめ
この記事では、Apps ScriptからGoogle Docs REST APIを直接呼び出す方法を解説しました。標準のDocumentAppでは不可能な操作も、APIを使えば柔軟に実現できます。具体的には、Cloud ConsoleでのAPI有効化、OAuth2ライブラリを用いた認証、そしてUrlFetchAppによるHTTPリクエストの送信という流れです。最初は手間がかかりますが、一度仕組みを整えれば、ドキュメントの自動編集やデータ変換など、高度な自動化が可能になります。
ADVERTISEMENT
超解決 第一編集部
疑問解決ポータル「超解決」の編集チーム。正確な検証と、現場視点での伝わりやすい解説を心がけています。
Googleスプレッドシートの人気記事ランキング
- 【Googleスプレッドシート】フィルタ表示で他の人の表示を変えずに絞り込み!共有時の使い分け
- 【Googleスプレッドシート】行を一括追加!複数行をまとめて挿入
- 【Googleスプレッドシート】行・列の入れ替え!ドラッグ&ドロップでの並べ替え
- 【Googleスプレッドシート】共有相手が編集できない時のチェック!権限と許可状態の確認
- 【Googleスプレッドシート】GOOGLEFINANCE関数で株価・為替を取得!リアルタイムデータの呼び出し
- 【Googleスプレッドシート】Apps Script V8ランタイムへの移行手順!古いコードの書き換え
- 【Googleスプレッドシート】セル内の画像サイズと位置を調整!アンカーと配置の指定
- 【Googleスプレッドシート】2段階プルダウンを実装!連動式リストの作り方
- 【Googleスプレッドシート】テキストを折り返し・はみ出し・切り捨てに切替!セル内の表示設定
- 【Googleスプレッドシート】テンプレートギャラリーを使い倒すコツ!業務別の活用例
