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()で強制的に再認証させます。
ADVERTISEMENT
まとめ
この記事では、Apps ScriptからGoogle Docs REST APIを直接呼び出す方法を解説しました。標準のDocumentAppでは不可能な操作も、APIを使えば柔軟に実現できます。具体的には、Cloud ConsoleでのAPI有効化、OAuth2ライブラリを用いた認証、そしてUrlFetchAppによるHTTPリクエストの送信という流れです。最初は手間がかかりますが、一度仕組みを整えれば、ドキュメントの自動編集やデータ変換など、高度な自動化が可能になります。
ADVERTISEMENT
超解決 第一編集部
疑問解決ポータル「超解決」の編集チーム。正確な検証と、現場視点での伝わりやすい解説を心がけています。
Googleドキュメントの人気記事ランキング
- 【Googleドキュメント】上付き・下付き文字の入力方法!ショートカットと手動切替
- 【Googleドキュメント】ルビ(ふりがな)を振る方法!代替ツールとアドオンの活用
- 【Googleドキュメント】文字間隔(字間)を調整する方法!カーニングの代替手段
- 【Googleドキュメント】図表番号の自動採番!Figure 1, Table 2 の連番
- 【Googleドキュメント】Docs→Wordへエクスポート!docx出力での書式維持
- 【Googleドキュメント】縦書き表示を実現する方法!代替ツールと回避策
- 【Googleドキュメント】インデントを正確に調整する方法!ルーラーとタブストップの使い方
- 【Googleドキュメント】罫線を縦・横に挿入する方法!Wordの罫線機能との比較
- 【Googleドキュメント】共有後に閲覧履歴を確認!誰がいつ開いたかの追跡
- 【Googleドキュメント】共有先の名前が表示されない時の対処!匿名動物アイコンの正体
