先に結論です。APIがない管理画面でも、人がブラウザでやっている操作をそのまま機械にやらせれば自動化できます。 株式会社TOEでは、noteの記事公開とレンタルサーバーのメールアドレス追加という2つの「ポチポチ作業」を、Playwright(人の代わりにブラウザを自動操作するツール)で無人化しています。鍵は「ログイン済みの状態を保存した専用ブラウザ」を使い回すことです。ただし、その仕組みゆえの制約もあります。この記事では、実際に動いているスクリプトと設定メモを開いて、確認できたことだけを書きます。

「APIがない」とはどういう状態か

システム同士を繋ぐ正式な窓口のことをAPIと呼びます。APIがあるサービスなら、プログラムから「この記事を公開して」と直接依頼できます。

問題は、中小企業が日常的に使うサービスの多くに、その窓口が用意されていないことです。あるのは人間用の管理画面だけ。ログインして、メニューを開いて、フォームに入力して、ボタンを押す。毎回まったく同じ手順なのに、人間が画面の前に座る必要があります。

弊社で実際にそうだったのが、次の2つでした。

  • noteの記事公開 — 下書きを開き、「公開に進む」を押し、ハッシュタグを入れて「投稿する」を押す
  • レンタルサーバー(Xサーバー)のメールアドレス追加 — サーバー管理画面にログインし、メール設定を開き、アカウント名・ドメイン・パスワードを入れて「追加する」を押す

どちらも判断は一切要りません。要るのは手だけです。そこで、ブラウザの操作そのものを機械にやらせることにしました。

事例1: noteの記事公開を、cronから無人で

noteに投稿する記事は、先に下書きとして作り溜めてあります。公開スクリプトはcron(決まった時刻にコマンドを自動実行するUNIXの標準機能)から呼ばれ、1回の実行につき下書きを1本だけ公開します。

スクリプト(約160行のJavaScript)がやっていることは、コメントにこう書いてあります。

  1. 公開待ちリストのテキストファイルから、状態が「下書き」の記事を番号順に1本選ぶ
  2. 記事ごとに用意したハッシュタグを注入する
  3. 公開処理を実行する
  4. 公開URLが実際に開けるようになったかを確認する
  5. リストの状態を「公開」に書き換える

人間がやっていた「開いて、タグを入れて、投稿ボタンを押して、公開されたか見る」を、そのままなぞっています。画面は表示されません(ヘッドレスと呼ばれる、画面なしでブラウザだけ動かすモードです)。

細部にも実務的な工夫が入っています。

  • 本番前の空撃ちモード。 --dry-run を付けると、公開はせずに「次はこの記事をこのタグで公開する」という確認だけができます
  • 公開の確認は思い込みで済ませない。 投稿ボタンを押して終わりではなく、公開後にnote側の記事の状態を取得し直して「published」になっているかを見ます
  • ログインが切れていたら、何もせず失敗として知らせる。 実行のたびに「いま誰でログインしているか」を確認し、想定のアカウントでなければエラーで止まり、ログに残します

3つ目が地味に重要です。無人の自動化は「黙って変なことをする」のが一番怖い。だから「おかしいときは何もせず騒ぐ」を先に作ってあります。

なお、note側には不正なアクセスを弾く防御の仕組み(WAF)があり、ブラウザ以外からの公開リクエストは通りません。このスクリプトは本物のブラウザをログイン済み状態で起動し、通常の操作と同じ経路・同じ見た目の通信で公開しています。「APIがないサービスをブラウザごと自動化する」というのは、具体的にはこういうことです。

事例2: メールアドレス追加は、AIに一言頼む方式

もう1つのXサーバーのメールアドレス追加は、方式が少し違います。こちらは決まった時刻に動くのではなく、必要になったときに社内のAIアシスタント(Claude)へ「○○@ドメイン 追加して」と一言頼むと、AIがブラウザを操作して追加してくれる形です。

AIとブラウザはMCPという接続の仕組み(AIアシスタントに外部ツールを操作させるための規格)で繋がっています。AIは管理画面を開き、メニューから「メール」→「メールアカウント設定」と進み、アカウント名を入力し、ドメインを選び、パスワードを入れて「追加する」を押し、「メールアカウントを追加しました。」の表示まで確認します。人間が新人に教える手順書と同じものが、AI用のメモとして残してあり、それを毎回なぞります。

2つの事例は、自動化のレベルが違います。整理するとこうなります。

noteの記事公開 メールアドレス追加
起動のしかた cronで無人実行 人がAIに一言頼む
操作するのは 固定のスクリプト AIアシスタント
発生頻度 定期的 不定期(必要なとき)
ログイン状態 専用プロファイルに保存 専用プロファイルに保存

使い分けの基準は発生のしかたです。定期的に必ず発生する作業は完全無人のスクリプトに。不定期にしか発生しない作業は、スクリプトを固く作り込むより「AIに口頭で頼める」状態にしておく方が割に合います。ただしどちらも、土台は同じ「ログイン済みの専用ブラウザ」です。

仕組みの核心: ログイン状態を保存した「専用ブラウザ」

ブラウザ自動化で最初につまずくのがログインです。パスワードをスクリプトに書くのは論外ですし、2段階認証があると機械だけでは突破できません。

弊社のやり方はこうです。ブラウザは、ログイン状態(cookie)をプロファイルというフォルダに保存しています。そこで、一度だけ人間がそのブラウザでログインし、そのプロファイルを自動化専用に取っておいて、以後ずっと使い回します。 自動化スクリプトにパスワードは一切書いてありません。設定メモにも「認証情報はメモに書かない。ログインはブラウザのセッションに依存」と明記してあります。

note用には、プロファイル複製の専用シェルスクリプトまで用意してあります。中身は10行程度で、対話用ブラウザのログイン済みプロファイルを自動化用にコピーし、コピーしたままだとブラウザが起動できなくなるロックファイルを削除する、というだけのものです。

さらに、対話用と自動化用でプロファイルを分けてあります。スクリプトのコメントにある通り、「MCP用プロファイルと分けてあるので、対話中のブラウザと競合しない」ためです。人間(やAI)が使っているブラウザと、無人スクリプトが使うブラウザが同じ財布を取り合うと、事故のもとになります。

正直な制約: この仕組みは「そのパソコン固有」です

ここは包み隠さず書きます。この仕組みには、はっきりした制約があります。

別のパソコンでは、そのままでは動きません。 ログイン状態はそのパソコンの中のプロファイルに保存されているからです。弊社の設定メモにも「MacBook Air側で使うには、あちらでも同じ設定を一度実行し、ブラウザで再ログインが必要」と明記してあります。クラウドのAPIと違って、この自動化は「この1台」に紐づいています。

ログインはいつか切れます。 cookieには有効期限があります。切れると自動公開は失敗します。弊社の場合、失敗したらエラーログで気づき、プロファイル複製スクリプトを再実行して復旧する、という運用です。つまり完全なメンテナンスフリーではなく、「たまに人間がログインし直す」が残ります。

ブラウザは時々ご機嫌を損ねます。 設定メモには実際の詰まりどころが残っています。「ブラウザが時々 "Target page closed"(操作対象の画面が閉じられた)や "Browser is already in use"(ブラウザが使用中)になる。そのときは自動化用ブラウザのプロセスを止めてからやり直す」。また、既存のメールアカウントが65件ある画面は情報量が多すぎてAIが読み切れないため、画面情報を一度ファイルに保存して必要な部分だけ検索で抜き出す、という工夫もしています。

APIによる連携が「正式な窓口での取引」だとすれば、ブラウザ自動化は「窓口が閉まっているので、人間と同じ入り口から入る」やり方です。正式な窓口より壊れやすいのは当然で、そのぶん「壊れたら気づける」「気づいたら数分で直せる」を用意しておくのが実務です。

あなたの会社ではどこに使えるか

読んでくださっているあなたの会社にも、ほぼ確実に同じ構造の作業があります。見つけ方は簡単で、次の3条件が揃う作業を探すことです。

  • 毎回、手順が完全に同じ(判断が入らない)
  • 相手はWebの管理画面で、APIや連携機能が見当たらない
  • 発生のたびに、誰かが5〜15分ポチポチしている

心当たりの例を挙げます。ネットバンキングの入出金明細のダウンロード、ECモールの商品情報更新、勤怠システムへの定型入力、予約サイトの空き枠登録、業界団体のポータルへの月次報告。どれも「APIがないから手作業」になりがちな領域です。

始める順番も、弊社の実例から言えることがあります。いきなり完全無人を目指さないことです。noteの公開スクリプトにも空撃ちモードがあり、まず「何をするつもりか」だけ確認できるようにしてあります。最初は人間が横で見ながら動かし、確認処理(本当に完了したかを画面で確かめる部分)を必ず入れて、それから無人に移す。逆に、パスワードをスクリプトに直接書く方法だけは、最初から選ばないでください。

関連する記録

まとめ

  • APIがない管理画面でも、人がブラウザでやる操作をそのまま機械にやらせれば自動化できます。弊社ではnoteの記事公開(cronで無人実行)とXサーバーのメールアドレス追加(AIに一言頼む方式)が実際に動いています
  • 鍵は「一度人間がログインした状態を専用ブラウザプロファイルに保存し、使い回す」ことです。スクリプトにパスワードは書きません
  • 定期作業は無人スクリプト、不定期作業はAIに口頭で頼める状態にしておく、という使い分けをしています
  • 制約も明確です。ログイン状態はそのパソコン固有で、別のPCでは再設定が必要。cookieが切れれば失敗するので、「失敗したら騒ぐ」「数分で復旧できる」仕組みとセットで運用しています

「うちのあの管理画面、これで自動化できるのか」という具体的なご相談は、株式会社TOEのAI活用コンサルティング(https://gtoe.info/)で承っています。この記事のような自社実践がそのまま提案の土台です。