※ この記事にはアフィリエイトリンクが含まれています。リンク経由で購入しても読者の皆さんに追加費用は発生しません。収益は本サイトの運営費に充てています。
結論から言うと、アフィリエイトリンクの取得から記事への挿入、WordPress投稿まで全自動化できました。ただし正直ハマりまくりました。この記事では、僕がTypeScriptとPlaywrightで構築した全過程と、ぶっちゃけ大変だったポイントを全部書きます。
こんな方に読んでほしい記事です:
- コードは書けるけど、ブログ運営の手作業をどうにかしたい
- ASPの管理画面を毎回ポチポチするのが面倒
- PlaywrightやWordPress REST APIで何ができるか知りたい
- n8nやMakeなどの自動化ツールだけでは限界を感じている
なぜコードを書いてまでアフィリリンクを自動化したかったのか
ブログを書くたびにASPの管理画面にログインする。リンクを探してコピペする。この作業、1記事あたり15〜30分かかっていました。記事を量産するなら、ここがボトルネックです。
「n8nやMakeで自動化すればいいのでは?」と思うかもしれません。でもASPの管理画面操作はAPIが提供されていないものが多い。ノーコードツールだけでは完結しません。結局コードを書いてブラウザ操作を自動化するしかなかったんです。
ASP6社を自動化の観点で徹底比較した結果
自動化の前に、どのASPを使うか徹底的に調べました。「APIがあるか」「Playwrightで操作できるか」「高単価案件があるか」「SNS利用が許可されているか」の4軸です。
API vs Playwright:ASPごとの自動化方式
| ASP | 自動化方式 | 単価目安 | SNS利用 | 判定 |
|---|---|---|---|---|
| 楽天アフィリエイト | REST API | 2〜4% | ◎ | 採用 |
| A8.net | Playwright | 数千〜数万円/件 | ○ 案件次第 | 採用 |
| もしもアフィリエイト | Playwright | W報酬12%上乗せ | ◎ | 採用 |
| Amazonアソシエイト | PA-API | 2〜8% | ○ | 保留(売上実績が必要) |
| バリューコマース | Playwright | 案件次第 | ○ | 見送り(サイト規模不足) |
| Rentracks | 不可 | 高単価 | △ | 見送り(招待制) |
採用した3つにもデメリットはあります。
- 楽天:API完備で自動化は楽。ただし報酬率が低い
- A8.net:高単価案件が多い。ただしAPIがなくPlaywright必須で実装コストが高い
- もしも:W報酬が魅力。ただしブログ記事数の下限があり、始めたばかりのサイトでは提携申請すらできない
ASPは「とりあえず全部登録」とよく言われます。でも実際にはサイト規模や記事数で審査に落ちるケースもある。これからASPに登録する方は、自分のサイト規模で通るかを先に確認しておくと無駄がありません。
Playwrightとは何か——自動化ツールの選定理由
PlaywrightはMicrosoft製のブラウザ自動操作ツールです。Chrome、Firefox、Safariをプログラムから操作できます。
似たツールにSeleniumやPuppeteerがあります。Playwright(公式サイト)を選んだ理由は3つ。
- TypeScriptとの相性が最高:型補完が効くので開発効率が段違い
- 自動待機が賢い:要素の表示を自動で待つ(はずだった。後述)
- headless/headedの切替が簡単:デバッグ時はブラウザ表示、本番はバックグラウンド
Playwrightの入門書は『[入門]Webフロントエンド E2E テスト』(技術評論社・3,520円)が現状唯一の日本語書籍です。僕もこれで基礎を固めました。
⚠️ Playwrightでの自動操作に関する注意事項
先に大事なことを書きます。Playwrightを使ったWebサイトの自動操作は、対象サービスの利用規約に抵触する可能性があります。
今回は「自分のアカウントで自分のリンクを取得する」だけです。しかし多くのWebサービスの規約には「自動アクセスの禁止」条項があります。
- 自分のアカウントのデータ取得に限定する:他人のアカウントは絶対にNG
- リクエスト頻度を抑える:各操作の間に数秒のウェイトを入れる
- 取得データの利用範囲を守る:自分のブログで使う範囲にとどめる
- 対象サービスの利用規約を都度確認する:規約変更で禁止になる可能性もある
技術的に「できる」ことと「やっていい」ことは別です。最近はWebスクレイピングに関する法的判断も増えています。対象サービスの利用規約とrobots.txtの確認を習慣にしましょう。不安がある場合はAPI提供サービスを優先的に使うのが安全です。
構築した自動化パイプラインの全体像
TypeScriptで統一したパイプラインです。全コードをtsx(ビルド不要のTypeScript実行環境)で直接実行できるようにしています。tscでビルドしてnode dist/で実行するステップは、スクリプト系ツールには邪魔です。tsxならTypeScriptの型安全を保ちつつ、Pythonのような手軽さで実行できます。
Playwrightでのアフィリリンク自動取得(3ASP対応)
- 楽天アフィリエイト:楽天商品検索APIで商品検索→アフィリリンク付きURLを自動取得
- A8.net:Playwrightでログイン→提携中17件のリンクを自動収集。A8の管理画面にある「広告リンク作成ページURL」と「実際のアフィリリンク」は全く別物で、前者を記事に貼ると読者がA8の管理画面に飛ぶ事故になります。
px.a8.netから始まる正しいリンクの取得が必要です。ここら辺も地味にハマりますが詳しくは別の機会に - もしもアフィリエイト:同じくPlaywrightでログイン→リンクを取得
全スクリプトで共通のgotoWithRetry関数を使っています。SSLエラーは「たまに出る」のが厄介で、1回の失敗でスクリプトが止まると実用になりません。最大5回のリトライ、各試行2秒ウェイト。地味ですが、これがないと「動くときと動かないとき」が出ます。
記事へのアフィリリンク自動挿入
記事内に[affiliate:キーワード]と書くだけ。保存済みのアフィリエイトリンクに自動置換されます。リンクの一元管理はJSONファイルで行い、どのASPから取得しても同じ形式で扱えます。
WordPress REST APIでの自動投稿
WordPress REST APIで記事を下書きまたは公開として投稿します。Application Passwordで認証するのでプラグイン不要。ちなみにApplication Passwordは管理画面のログインパスワードとは別物で、ここも地味にハマるポイントですが詳しくは別の機会に。
DALL-E 3でのアイキャッチ画像自動生成
DALL-E 3 APIでアイキャッチ画像を自動生成し、WordPressにアップロード。記事タイトルからプロンプトを生成→画像生成→メディアライブラリにアップロードの流れです。プロンプトに「No text」と書いてもテキストが混入することがあるので、生成後の目視確認は必須です。
Playwrightの自動化で正直ハマったポイント3つ
1. A8.netの管理画面操作で5回やり方を変えた
A8.netのPlaywright操作は想像以上に大変でした。ログインだけで5パターンは試しています。
- SSLエラーが頻発:curlでは0.5秒で繋がるのに、Chromiumだと
ERR_SSL_PROTOCOL_ERROR。リトライロジック(最大5回)で安定化 - load完了が遅い:広告タグが大量にあり
waitUntil: "load"だと30秒超え。最終的にwaitForTimeout(10000)の固定秒数待ちに落ち着いた。Playwrightの自動待機を信用しすぎると痛い目にあう page.click()がナビゲーション完了を待つ:クリック成功なのに30秒タイムアウト。form.submit()をJSから直接呼ぶ方式で解決- 提携一覧のURLが変わっていた:古い情報の
/asSanListAction.doは404。ダッシュボードのリンクを全取得して正しいURLを特定した - プログラム名が取れない:dl/dt/dd構造で通常のセレクタが不安定。
page.evaluate()でブラウザ内JSとして直接DOM解析して解決。Playwrightの「お作法」から外れるが、動くことが正義
最終的に17件の提携プログラムを安定取得できましたが、ここだけで数時間です。
2. Node.jsのfetchが特定ドメインだけタイムアウトする
Node.jsのネイティブfetchが特定ドメインだけ接続不可。curlでは0.09秒で繋がるのにfetchは30秒待ってもダメ。
WordPress REST APIは問題なく動いたので環境依存と判断。AbortControllerで30秒タイムアウトを設定して解決しました。同じ環境でcurlだけ通るパターンは、プロキシやDNS解決の違いが原因のことが多いです。
3. WordPressのWAFがREST APIをブロックする
記事投稿は成功したのに、アイキャッチ画像設定のPOSTがWAFにブロックされました。ConoHa WINGのSiteGuard Lite(WebDefence)が原因です。
面白いのは、記事作成のPOSTは通るのに更新のPOSTはブロックされる点。JSONボディの内容でルールが反応していたようです。ConoHa WINGのWAF設定画面でブロックログから除外設定して解決。REST APIを使うならWAF設定を最初に確認すべきでした。
n8n Cloudではなく自前TypeScriptを選んだ理由
「n8nで自動化するならConoHa VPSの料金プランを確認するかエックスサーバーの料金プランを確認するでセルフホストすればいいのでは?」と思う方もいるでしょう。実は今回はn8nではなくTypeScriptで直接書いています。
- Playwrightの細かい制御がn8nノードだけでは無理:submit方式やリトライなど
- n8n Cloudは月額約3,000円〜:セルフホストならVPS月額数百円で無制限に実行可能
- n8nとの連携余地は残している:定期実行やWebhookトリガーでTypeScriptを呼ぶ構成も検討中
自動化パイプラインの動作確認済み機能
| 機能 | 状態 | 使った技術 |
|---|---|---|
| 楽天API(商品検索+アフィリリンク取得) | ✅ | REST API |
| A8.net(ログイン+17件取得) | ✅ | Playwright + リトライ |
| もしもアフィリエイト(ログイン確認済み) | ✅ | Playwright |
| WordPress REST API(記事投稿) | ✅ | Application Password認証 |
| DALL-E 3(アイキャッチ画像生成) | ✅ | OpenAI API |
| Threads API | ✅ | Meta Graph API |
| Instagram Graph API | ✅ | Meta Graph API |
| リンク一元管理・自動挿入 | ✅ | JSON + プレースホルダ置換 |
| E2Eパイプライン | ✅ | この記事自体がパイプラインで投稿された |
この記事自体が、構築したパイプラインで自動投稿されています。自動化の記事を自動化で投稿する。いわゆるドッグフーディングです。自分で作ったものを自分で使うのが、バグを見つける最短ルートでもあります。
技術スタック
- 言語:TypeScript(
tsxで直接実行。ビルド不要) - API連携:楽天API、WordPress REST API、Threads API、Instagram Graph API、DALL-E 3 API
- ブラウザ自動操作:Playwright(SSLリトライ・waitUntil制御付き)
- コンテンツ生成:Claude Code(この記事もClaude Codeで書いている)
- 画像生成:DALL-E 3 API
- リンク管理:JSON + プレースホルダ置換
- ホスティング:ConoHa WINGの料金プランを確認する
関連書籍
- 『入門 Webフロントエンド E2E テスト』を楽天で見る——Playwrightの基礎を体系的に学べます
- 『Web API設計実践入門』を楽天で見る——楽天APIやWordPress REST APIなど、この記事で使った複数のAPIの設計思想を理解できます
まとめ:自動化は「繋げる」ところが一番大変
ぶっちゃけ、個々のAPIやツールを動かすこと自体はそこまで難しくない。大変なのはそれらを繋げてパイプラインにする部分です。
- A8.netのPlaywright操作は5回やり直し
- Node.jsのfetchが環境依存でタイムアウト
- WordPressのWAFが特定リクエストだけブロック
こういった「接合部」の問題が全体の8割の時間を占めました。でも一度パイプラインが通れば、あとは記事を書くだけです。
SNS自動投稿やスケジュール配信なんかもできたら面白そうだなと思っています。進展があればまたこのブログで報告します。


コメント