「WordPressに自動で記事を入れたいけど、Pythonを入れていない」
「会社PCなので環境構築ができない」
「GoogleスプレッドシートやGoogleドキュメントから、そのままWordPressに下書きを作りたい」
こういう場面、けっこうあります。
なべくんです。
結論から言うと、Pythonがなくても、Google Apps Script(GAS)だけでWordPressに記事を投稿できます。
GASには外部URLへリクエストを送る UrlFetchApp があり、WordPress側には記事を作成できるREST APIがあります。この2つを組み合わせると、ブラウザ上のApps ScriptエディタだけでWordPressの下書き記事を作れます。
ただし、最初から自動公開するのはおすすめしません。まずは draft、つまり下書きとして投稿し、管理画面で表示を確認してから公開する流れが安全です。
この記事で分かること
- PythonなしでGASからWordPressへ下書き投稿する方法
- Application PasswordをGASのスクリプトプロパティで安全に扱う方法
- 401、403、400エラーが出たときの切り分け方
先に注意点
GASでWordPress投稿を自動化する場合、便利さより先に安全面を押さえておきましょう。
| 注意点 | 理由 |
|---|---|
最初は draft で投稿する |
本文崩れやカテゴリ間違いのまま公開されるのを防ぐため |
| Application Passwordをコードに直書きしない | 共有やコピー時に認証情報が漏れる可能性があるため |
| GASの共有範囲に注意する | スクリプトを共有すると、編集者が設定やコードを触れるため |
| 大量投稿前に1件だけテストする | 同じ記事を連投する事故を防ぐため |
| 不要になったApplication Passwordは削除する | 使わない認証口を残さないため |
この記事では、GASのコード内にパスワードを書かず、スクリプトプロパティから読み込む形にします。
検証環境
この記事では、次の環境を前提にしています。
| 項目 | 内容 |
|---|---|
| WordPress | 6.9.4 |
| テーマ | SWELL 2.16.0 |
| PHP | 8.3.30 |
| 実行環境 | Google Apps Script |
| 使用サービス | UrlFetchApp / PropertiesService |
WordPress公式ドキュメントでは、記事作成は POST /wp/v2/posts で行う形になっています。また、Application PasswordはREST APIなどのプログラム連携用に使える、個別に取り消し可能な認証情報です。
Google Apps Script側では、UrlFetchApp.fetch(url, params) で外部URLにリクエストを送れます。認証情報の保存には、キーと値を保存できる PropertiesService を使います。
参考:
- Posts – REST API Handbook
- Application Passwords – WordPress Developer Resources
- UrlFetchApp – Google Apps Script
- PropertiesService – Google Apps Script
GASでWordPress投稿する全体像
今回やることは、次の流れです。

- WordPressでApplication Passwordを作る
- GASのスクリプトプロパティに認証情報を保存する
- GASからWordPress REST APIへPOSTする
- WordPressに下書き記事を作る
- 管理画面で確認してから公開する
ポイントは、GASは投稿ボタンを押す代わりに、WordPressのREST APIへ記事データを送るだけということです。
Python版とGAS版の違い
どちらもWordPress REST APIを使う点は同じです。
違いは、実行する場所です。
| 比較項目 | Python | GAS |
|---|---|---|
| 実行場所 | ローカルPC / Colab / サーバー | ブラウザ上のApps Script |
| 環境構築 | Pythonやライブラリが必要 | Googleアカウントがあれば始めやすい |
| 相性が良い作業 | ファイル処理、AI連携、スクレイピング | Googleスプレッドシート連携、軽い自動化 |
| 注意点 | ライブラリ管理、実行環境 | 実行時間、権限、共有範囲 |
「Pythonを入れるところで止まる」という方は、まずGAS版で下書き投稿まで試すのがおすすめです。
準備1: WordPressでApplication Passwordを作る
WordPress管理画面で、次の順に進みます。
- WordPress管理画面にログイン
- ユーザー → プロフィールを開く
- Application Passwordsの欄を探す
GAS投稿テストのような名前を付ける- 生成されたパスワードをコピーする
Application Passwordは、通常のログインパスワードとは別物です。
管理画面へのログインには使わず、GASや外部ツールからREST APIを呼び出すために使います。
WordPress公式ドキュメントにもある通り、Application Passwordは作成後に一度しか表示されません。コピーし忘れた場合は、削除して作り直しましょう。
準備2: Apps Scriptプロジェクトを作る
以下の手順でGASプロジェクトを作成します。
- Google Apps Script を開く
- 新しいプロジェクトを作成
- プロジェクト名を
WordPress投稿テストなどに変更 コード.gsに後ほど紹介するコードを貼り付ける
Googleスプレッドシートから使いたい場合は、スプレッドシートの「拡張機能 → Apps Script」から作成してもOKです。
準備3: スクリプトプロパティに認証情報を保存する
GASの画面で、次の順に設定します。
- Apps Scriptエディタ左側の歯車アイコン「プロジェクトの設定」を開く
- 「スクリプト プロパティ」を探す
- 「スクリプト プロパティを追加」をクリック
- 以下の3つを追加する
| プロパティ | 値の例 |
|---|---|
WP_SITE_URL |
https://example.com |
WP_USERNAME |
your_login_name |
WP_APP_PASSWORD |
xxxx xxxx xxxx xxxx xxxx xxxx |
WP_SITE_URL はWordPressサイトのURLです。末尾の / はあってもなくても動くようにコード側で処理します。
WP_USERNAME はWordPressのログインユーザー名です。表示名ではなく、REST API認証に使うユーザー名を入れます。
WP_APP_PASSWORD は先ほど作成したApplication Passwordです。スペース付きで貼っても、コード側でスペースを削除します。

〖コピペOK〗GASでWordPressに下書き投稿するコード
以下のコードを コード.gs に貼り付けます。
function createWordPressDraft() {
const props = PropertiesService.getScriptProperties();
const siteUrl = props.getProperty('WP_SITE_URL').replace(/\/$/, '');
const username = props.getProperty('WP_USERNAME');
const appPassword = props.getProperty('WP_APP_PASSWORD').replace(/\s/g, '');
if (!siteUrl || !username || !appPassword) {
throw new Error('WP_SITE_URL、WP_USERNAME、WP_APP_PASSWORDをスクリプトプロパティに設定してください。');
}
const endpoint = `${siteUrl}/wp-json/wp/v2/posts`;
const payload = {
title: 'GASから作成したテスト記事',
slug: 'gas-rest-api-test-post',
status: 'draft',
content: `
<h2>これはGASから作成した下書きです</h2>
<p>Google Apps ScriptのUrlFetchAppを使って、WordPress REST APIへ投稿しています。</p>
<p>最初は下書きで作成し、管理画面で確認してから公開しましょう。</p>
`,
categories: [12]
};
const token = Utilities.base64Encode(`${username}:${appPassword}`);
const options = {
method: 'post',
contentType: 'application/json',
headers: {
Authorization: `Basic ${token}`
},
payload: JSON.stringify(payload),
muteHttpExceptions: true
};
const response = UrlFetchApp.fetch(endpoint, options);
const statusCode = response.getResponseCode();
const responseBody = response.getContentText();
Logger.log(`status: ${statusCode}`);
Logger.log(responseBody);
if (statusCode < 200 || statusCode >= 300) {
throw new Error(`記事作成に失敗しました。status: ${statusCode} / body: ${responseBody}`);
}
const post = JSON.parse(responseBody);
Logger.log(`下書きを作成しました: ${post.link}`);
Logger.log(`記事ID: ${post.id}`);
}
ポイントは、status: 'draft' です。
ここを publish にすると即公開になりますが、最初は必ず下書きで試してください。
初回実行時の権限確認
GASで UrlFetchApp を使うと、初回実行時に外部サービスへ接続する権限確認が出ます。
手順は次の通りです。
- 関数選択で
createWordPressDraftを選ぶ - 「実行」をクリック
- 権限確認画面でGoogleアカウントを選ぶ
- 内容を確認して許可する
- 実行ログを確認する
成功すると、ログに次のような情報が出ます。
status: 201
下書きを作成しました: https://example.com/gas-rest-api-test-post/
記事ID: 123
下書き記事は、WordPress管理画面の投稿一覧から確認できます。
カテゴリIDを確認するコード
記事にカテゴリを付ける場合は、カテゴリ名ではなくIDを指定します。
カテゴリIDが分からない場合は、次のGASコードで確認できます。
function listWordPressCategories() {
const props = PropertiesService.getScriptProperties();
const siteUrl = props.getProperty('WP_SITE_URL').replace(/\/$/, '');
const endpoint = `${siteUrl}/wp-json/wp/v2/categories?per_page=100`;
const response = UrlFetchApp.fetch(endpoint, {
method: 'get',
muteHttpExceptions: true
});
const statusCode = response.getResponseCode();
const responseBody = response.getContentText();
if (statusCode < 200 || statusCode >= 300) {
throw new Error(`カテゴリ取得に失敗しました。status: ${statusCode} / body: ${responseBody}`);
}
const categories = JSON.parse(responseBody);
categories.forEach(category => {
Logger.log(`${category.id}: ${category.name} (${category.slug})`);
});
}
ログにカテゴリID、カテゴリ名、スラッグが表示されます。
投稿コード内の categories: [12] は、自分のサイトのカテゴリIDに合わせて変更してください。
カテゴリを指定しない場合は、categories の行ごと削除しても動きます。
タグを付けたい場合
タグもカテゴリと同じく、タグIDを指定します。
投稿時にタグを付ける場合は、payload に tags を追加します。
const payload = {
title: 'GASから作成したテスト記事',
status: 'draft',
content: '<p>本文です。</p>',
categories: [12],
tags: [24, 25]
};
タグIDを調べるエンドポイントは次の通りです。
https://example.com/wp-json/wp/v2/tags
まずはカテゴリだけで動作確認し、慣れてからタグを追加するのがおすすめです。
下書きを公開に切り替えるコード
下書き作成後、管理画面で本文やカテゴリを確認します。
問題なければ、管理画面から公開してもよいですし、GASから status を publish に変更することもできます。
function publishWordPressPost() {
const props = PropertiesService.getScriptProperties();
const siteUrl = props.getProperty('WP_SITE_URL').replace(/\/$/, '');
const username = props.getProperty('WP_USERNAME');
const appPassword = props.getProperty('WP_APP_PASSWORD').replace(/\s/g, '');
const postId = 123; // 公開したい記事IDに変更してください
const endpoint = `${siteUrl}/wp-json/wp/v2/posts/${postId}`;
const token = Utilities.base64Encode(`${username}:${appPassword}`);
const options = {
method: 'post',
contentType: 'application/json',
headers: {
Authorization: `Basic ${token}`
},
payload: JSON.stringify({
status: 'publish'
}),
muteHttpExceptions: true
};
const response = UrlFetchApp.fetch(endpoint, options);
const statusCode = response.getResponseCode();
const responseBody = response.getContentText();
if (statusCode < 200 || statusCode >= 300) {
throw new Error(`公開処理に失敗しました。status: ${statusCode} / body: ${responseBody}`);
}
const post = JSON.parse(responseBody);
Logger.log(`公開しました: ${post.link}`);
}
ただし、最初の運用では以下の流れが安全です。
- GASで下書き作成
- WordPress管理画面で表示確認
- アイキャッチ、カテゴリ、タグ、本文崩れを確認
- 問題がなければ管理画面から公開
GASからの自動公開は、下書き作成に慣れてからで十分です。
よくあるエラーと原因
GASからWordPressへ投稿するときに詰まりやすいエラーを整理します。

| エラー | よくある原因 | 次にやること |
|---|---|---|
401 rest_not_logged_in |
ユーザー名、Application Password、Authorizationヘッダーの問題 | WP_USERNAME と WP_APP_PASSWORD を確認する |
403 rest_cannot_create |
投稿権限がない、REST APIが制限されている | 投稿できるユーザーか、セキュリティ設定を確認する |
400 invalid_param |
status、カテゴリID、タグIDなどが不正 |
レスポンス本文を読み、該当パラメータを修正する |
404 rest_no_route |
REST APIのURLが間違っている | /wp-json/wp/v2/posts のURLを確認する |
| GASの権限エラー | 外部リクエスト権限を許可していない | 初回実行時の権限確認をやり直す |
GASでは muteHttpExceptions: true を入れておくと、エラー時にもレスポンス本文をログに出せます。
原因を切り分けるために、最初は必ず次の2行を確認しましょう。
Logger.log(`status: ${statusCode}`);
Logger.log(responseBody);
ステータスコードだけでなく、WordPress側のエラーメッセージを見るのが大事です。
401が出るときの確認ポイント
401 rest_not_logged_in が出る場合は、まず認証まわりを確認します。
WP_USERNAMEが表示名ではなくログインユーザー名になっているかWP_APP_PASSWORDに余計な文字が入っていないか- Application Passwordを削除済みにしていないか
- WordPressサイトがHTTPSで開けるか
- セキュリティプラグインやサーバー設定でREST APIが制限されていないか
特に、ユーザー名の間違いはよくあります。
WordPressの表示名が Watanabe でも、REST API認証に使うログイン名は別の場合があります。表示名ではなく、実際のユーザー名を使いましょう。
スプレッドシートから投稿したい場合の考え方
GASの強みは、Googleスプレッドシートとの相性です。
たとえば、シートに次の列を作っておくと、記事データを管理しやすくなります。
| 列 | 内容 |
|---|---|
| A列 | タイトル |
| B列 | スラッグ |
| C列 | 本文HTML |
| D列 | カテゴリID |
| E列 | 投稿ステータス |
最初は1行だけ読み込んで下書き投稿し、慣れてから複数行に広げるのがおすすめです。
大量投稿をいきなり実行すると、同じ内容の記事を何件も作ってしまうことがあります。
まずは「1行だけ」「下書きだけ」で試しましょう。
実務で使うときの線引き
GASでのWordPress投稿は、次のような用途に向いています。
- スプレッドシートで管理している記事案を下書き化する
- 定型フォーマットの記事をまとめて作る
- GoogleドキュメントやシートからWordPressへ原稿を移す
- Python環境なしで軽い投稿自動化を試す
一方で、次の使い方は慎重にしましょう。
- 内容確認なしで大量公開する
- AI生成文をそのまま公開する
- 1つのApplication Passwordを複数人で使い回す
- 編集権限のあるGASプロジェクトを不用意に共有する
自動化は便利ですが、公開前の確認まで省くと事故につながります。
最初は「公開」ではなく、「下書き作成をラクにする道具」として使うのがおすすめです。
まとめ
Pythonを使わなくても、GASだけでWordPressに記事を投稿できます。
ポイントは次の3つです。
- GASの
UrlFetchAppでWordPress REST APIへPOSTする - Application Passwordはコードに直書きせず、スクリプトプロパティに保存する
- 最初は
draftで下書き作成し、管理画面で確認してから公開する
Python環境構築で止まっていた方でも、GASならブラウザだけで試せます。
まずは1件だけ下書きを作り、ログと管理画面を見ながら動きを確認していきましょう。
同じように「Pythonはないけど、WordPress投稿を少し自動化したい」と感じている方の助けになれば幸いです。
