【ITニュース解説】I let a domain expire once. Now I check them all with a script.
2026年08月25日に「Dev.to」が公開したITニュース「I let a domain expire once. Now I check them all with a script.」について初心者にもわかりやすく解説しています。
ITニュース概要
ドメイン更新忘れを防ぐため、複数のドメインの有効期限を一括で確認するスクリプトを紹介する。`whois`コマンドを使い、指定したドメインリストの期限を抽出し、週次でメール通知する仕組みを解説。手動確認の手間を省き、更新漏れによるトラブルを回避できる。ただし、whoisの出力形式が非標準な点には注意が必要だ。
ITニュース解説
システムエンジニアを目指す皆さんにとって、ウェブサイトの運営やサービス開発に欠かせない「ドメイン」の管理は非常に重要だ。ドメインとは、インターネット上の住所のようなもので、「example.com」のようにウェブサイトやメールアドレスに使われる固有の名前を指す。このドメインには有効期限があり、期限を過ぎてしまうとウェブサイトが表示されなくなったり、メールが使えなくなったりといった大きな問題が発生する。
ニュース記事では、実際に著者が経験したドメイン有効期限切れのトラブルが語られている。以前運営していたウェブサイトのドメインが、うっかり更新期限を忘れてしまい、失効寸前になってから気づいたという。そのドメインは稼働中で多くのアクセスがあったにもかかわらず、数ヶ月間ログインしていなかったドメイン登録業者(レジストラと呼ばれる、ドメインを管理・販売する事業者)のアカウントに更新日が埋もれており、気づいた時には多額の費用を支払って取り戻すことになったという。これは、多くのドメインを所有し、複数のレジストラに分散して管理している場合に特に起こりやすい問題だ。手動で一つ一つのドメインの更新日を確認するのは手間がかかり、ミスを誘発しやすい。
そこで著者は、この問題を解決するために「スクリプト」を作成した。スクリプトとは、コンピューターに特定の作業を自動で実行させるための命令を記述したプログラムのことだ。記事で紹介されているスクリプトは、所有している複数のドメインの有効期限を一括で確認する目的で作られた。
ドメインの情報を調べる基本的な方法は「whois」コマンドを使うことだ。例えば「whois example.com」とコマンドを入力すると、「example.com」というドメインに関する詳細な情報が表示される。この情報の中には、ドメインの登録者情報や、重要な有効期限(Expiry Date)も含まれている。しかし、このwhoisコマンドをドメインごとに手動で実行し、さらに表示される膨大な情報の中から有効期限の項目を探し出す作業は、ドメインが数個あるだけでも非常に面倒だ。ましてや数十個ものドメインを管理するとなると、現実的な方法ではない。
著者が作成したスクリプトは、このような手動での確認作業を自動化してくれる。まず、スクリプトを利用するには、確認したいドメイン名を1行に1つずつ記載したテキストファイルを用意する。例えば「example.com」「mysite.net」「sideproject.io」といった具合だ。
そして、そのドメインリストをスクリプトに渡して実行すると、スクリプトはリストに記載されたドメインごとに自動でwhois情報を取得し、その中から有効期限を抽出して表示してくれる。具体的なスクリプトの内容を見てみよう。
このスクリプトは、テキストファイルからドメイン名を1行ずつ読み込み、それぞれのドメインに対してwhoisコマンドを実行する。whois "$domain" 2>/dev/nullの部分は、ドメインのwhois情報を取得するコマンドだ。2>/dev/nullは、エラーメッセージが画面に表示されないようにするおまじないのようなもので、通常のエラー出力を破棄する。
次に、取得したwhois情報の中から有効期限を示すキーワード(Registry Expiry Date、Expiration Date、paid-till、renewal dateなど)を探し出すためにgrepコマンドを使う。whois情報のフォーマットはドメインの種類によって異なるため、複数のキーワードを指定することで、より多くのドメインに対応できるよう工夫されている。head -n 1は、複数の有効期限の表記が見つかった場合に最初の一つだけを選ぶように指定しており、sed -E 's/.*: *//'は、取得した文字列から不要な部分を削除し、日付だけをきれいに抽出するための整形処理だ。
抽出した有効期限はexpiryという変数に格納され、最後にprintfコマンドでドメイン名と有効期限が分かりやすく表示される。もし有効期限が見つからなかった場合は「not found」と表示される仕組みだ。
このスクリプトには重要な工夫が一つある。それはsleep 2という部分だ。これは、それぞれのwhois問い合わせの間に2秒間待機するという意味だ。多くのwhoisサーバーは、短時間に大量の問い合わせが集中すると、不正なアクセスと見なして情報を返さなくなったり、一時的にアクセスを制限したりする。この2秒間の待機を入れることで、サーバーに過度な負荷をかけず、スムーズに情報を取得し続けることができるのだ。これにより、数十個のドメインを一度にチェックしても、サーバーからのブロックを避けることが可能になる。
スクリプトが完成し、一度ドメインリストの有効期限をチェックできるようになったら、次はその作業を自動化することを考える。手動で毎週スクリプトを実行するのは、結局手間に感じるかもしれない。そこで利用するのが「cron」というツールだ。cronは、指定した時刻や間隔でコマンドやスクリプトを自動実行してくれる機能で、LinuxなどのOSに標準で備わっている。
記事では、cronを使って毎週月曜日の午前9時にこのスクリプトを実行し、その結果をメールで自分に送信する設定が紹介されている。0 9 * * 1という部分は、月曜日の午前9時を表すcronの設定だ。スクリプトの実行結果はmailコマンドを通してメールで届くため、毎週メールボックスを確認するだけで、所有する全てのドメインの有効期限リストを自動で受け取れるようになる。これにより、更新忘れのリスクを大幅に減らし、重要なドメインが失効するのを未然に防ぐことができる。期限が近づいているドメインがあれば、メールのリストを見てすぐに更新手続きを行えばよい。
ただし、このスクリプトにも限界がある。最も大きな問題は、whoisの出力形式が標準化されていないことだ。特に国別コードトップレベルドメイン(ccTLDと呼ばれる、例えば.jpや.usのようなドメイン)では、有効期限を示すフィールド名がバラバラで、スクリプトが対応しきれない場合がある。そのため、本来有効期限が存在するドメインでも「not found」と表示されてしまうことがあるのだ。また、このスクリプトはドメインの有効期限だけを確認するものであり、ウェブサイトが正常に稼働しているか、DNS設定に問題がないか、ドメインが乗っ取られていないかといった「DNSヘルス」の状態までは教えてくれない。
所有するドメインが20個や30個を超え、複数のレジストラにまたがるようになると、このスクリプト自体をメンテナンスする手間が増えてくる。whoisの出力形式が変わればスクリプトのgrepやsedの部分を修正する必要があるし、新しいドメインを追加するたびにドメインリストを更新しなければならない。このような状況になったら、より高度なドメイン管理ツールやサービスを検討する段階になるだろう。記事の著者は、こうした課題を解決するために「Domainium」というサービスを開発したと紹介している。これは、複数のレジストラにあるドメイン情報を一元的に管理し、有効期限の解析やアラート機能を備えたダッシュボードを提供するサービスだ。
しかし、もしあなたが数個のドメインを所有していて、単に更新忘れを防ぎたいだけであれば、今回紹介されたスクリプトは非常に有効な解決策となる。システムエンジニアの第一歩として、このように自分でスクリプトを書いて日常の作業を自動化する経験は、問題解決能力やプログラミングスキルを養う上で貴重な学びとなるだろう。このスクリプトをコピーし、自分のドメインリストに合わせて活用することで、ドメインの更新忘れによるトラブルから解放されるはずだ。