作業の記録・2026年8月15日
ブラウザ操作でサーバー管理画面を動かした記録|ドメイン追加からSSL発行まで
新しいドメインを2本、レンタルサーバーに載せる作業を、ログイン済みのブラウザを操作する形で進めました。管理画面にAPIが無い部分は、こうするしかありません。合わせて、自分で書いた確認コードが誤った答えを出した話も残します。
このサイトはAnthropicの公式サイトではありません。Claude Codeの機能・料金・提供範囲は変わる可能性があるため、重要な判断の前には公式のドキュメントと自分のアカウント設定を確認してください。
前提:パスワードは入力しない
まず線引きの話です。ブラウザ操作でできることのうち、認証情報の入力は含めません。パスワードやカード番号をフォームに打ち込むのは、自動化の対象外にしています。
今回できたのは、すでにログインされている画面の続きを操作する形だからです。人がログインまで済ませておけば、その先の設定作業は任せられます。この区切りにしておくと、認証情報を扱わずに済みます。
ドメインを追加すると何が起きるか
DNSを新しいサーバーのIPに向けただけでは、サイトは表示されません。サーバー側にも「このホスト名を受け付ける」という登録が要ります。この登録が無いと、こういう状態になります。
| アクセス | 結果 |
|---|---|
http://example.tokyo/ | 200。ただし中身はサーバーの初期画面(「webserver is functioning normally」など) |
https://example.tokyo/ | 証明書エラー。サーバー自身のホスト名の証明書が出てくる |
FTPで /domains/example.tokyo/ | ディレクトリが存在しない |
ここで大事なのは、httpが200を返すことです。200なので「動いている」と読んでしまいがちですが、実際にはまだ公開ディレクトリすら無い状態です。
管理画面でドメインを追加すると、公開ディレクトリが作られます。今回は追加直後に /domains/<ホスト名>/public_html/ ができ、中に index.html と cgi-bin が入っていました。
SSLは別の操作。SANにwwwを含める
ドメインを追加してもhttpsはまだ通りません。証明書の発行は別の画面です。今回は「無料SSL証明書を取得」を選び、Let's Encryptで発行しました。
ここで忘れてはいけないのが、証明書の対象に www 付きも含めることです。理由は、www有無を301で寄せるルールを入れるからです。
ブラウザが https://www.example.tokyo/ にアクセスすると、301を受け取る前にTLSの接続が成立している必要があります。証明書が www を含んでいないと、リダイレクトが返る前に証明書エラーで止まります。「301を書いたのに直らない」という症状の原因がこれでした。
発行後の確認は、管理画面の表示ではなく実際のTLS接続で行いました。画面が「有効」と出していても、配られている証明書が別物のことがあります。
const tls = require('tls');
const s = tls.connect({ host, port: 443, servername: host }, () => {
const c = s.getPeerCertificate();
console.log(c.subjectaltname); // DNS:example.tokyo, DNS:www.example.tokyo
console.log(c.valid_to);
s.end();
});
subjectaltname に対象のホスト名が入っているかを見ます。証明書の「一般名(CN)」だけを見ると足りません。判定に使うのはSANのほうです。
★空のレスポンスを「合格」と読んだ誤診
この作業中に、自分で書いた確認コードが間違った答えを出しました。書いていたのはこういう判定です。
// 「初期画面の文言が含まれていなければ登録済み」という判定
const ok = !/webserver is functioning normally/.test(res.body);
一見それらしく見えますが、応答が取得できずbodyが空文字だった場合にも ok が true になります。空文字には初期画面の文言が含まれていないからです。
実際、まだ登録していないドメインについて接続そのものが失敗し、bodyが空のまま「★パネル登録済み」と表示されました。危うくその前提で次の作業に進むところでした。
直し方は肯定形で判定することです。
// 取得できたことを確かめてから、期待するものが「有る」ことを見る
const ok = res.status === 200 &&
res.body.length > 0 &&
!/webserver is functioning normally/.test(res.body);
もっと確実なのは、HTTPの見た目に頼らずFTPのファイル一覧で判定することでした。公開ディレクトリが存在するかどうかは、一覧を取れば一意に決まります。今回もFTPの一覧が正しい答えを持っていました。
この失敗の一般形は「否定形の判定は、対象が取れなかったときも真になる」です。検査コードを書くときは、まず取得に成功したかを確かめ、それから中身を見る順にしています。
管理画面を操作するときの実務的な注意
- 画面の中に独立したスクロール領域があることが多い。マウスホイールがページ側に効いてしまい、目的のボタンにたどり着けないことがあります。その場合はスクロールバーをつまんで動かします
- クリック前に必ず現在の表示を確認する。ページが再描画されて座標がずれていると、意図しない項目を選ぶことがあります。実際に一度、証明書の種類を切り替えるラジオボタンを誤って選びました(保存していないので設定は変わっていません)
- 入力してから送信するまでの間に、入力欄の中身を確認する。ドメイン名のような後戻りしにくい値は特にです
- 結果は画面の表示ではなく外部から測る。ドメイン数の増減、FTPの一覧、TLSの証明書。この3つで確定させました
2つめは実際にやってしまった失敗です。画面が長いと、スクロール位置が変わったことに気づかないままクリックしてしまいます。1操作ごとに現在の表示を取り直すのが結局いちばん速いという結論になりました。
よくある質問
ログインも自動化できませんか?
パスワードの入力は対象外にしています。ログインまでは人が済ませ、その先の設定操作を任せる形にしています。
管理画面にAPIがあればそちらを使うべきですか?
使えるならAPIのほうが確実です。ただし提供されている操作が限られていたり、書き込み系だけ動かないことがあります。その場合はブラウザ操作になります。
SSLの発行にどれくらいかかりますか?
今回は一方が即時、もう一方は少し待ちました。発行の前提として対象のホスト名が外部からhttpでアクセスできる必要があるので、ドメイン追加が済んでいることを先に確認してください。