概要
IPinfoは、IPアドレスの地理的位置やASN、VPNやプロキシなどの匿名化サービスの使用有無など、IPアドレスに関連するさまざまな情報を提供するIPインテリジェンスツールです。
IPinfo のデータベースは、MMDB・CSV・JSON・Parquet の4形式で提供されており、アカウントのダッシュボードから手動でダウンロードすることも可能です。ただし、データベースは基本的に毎日更新されるため、常に最新の状態を保つには自動更新を設定しておくと便利です。
本記事では、IPinfo が提供するチェックサムエンドポイントを活用して、更新があった場合のみダウンロードする効率的な自動更新の設定手順を、Linux(Ubuntu)およびWindows環境向けに紹介します。
はじめに
データベースについて
データベースは、MMDB・CSV・JSON・Parquetの4形式で提供されており、データベースは基本的に毎日更新されます。
なお、CSVおよびJSONは、gzip形式(.gz)で圧縮して提供されます。
各形式のダウンロードURIは、利用するデータベースおよびその形式によって異なります。各データベースのURIについては、公式ドキュメントをご参照ください。
【サンプルデータセットについて】
公式ドキュメントにはサンプルデータセットのURIも掲載されています。トークン不要でダウンロードでき、100行のデータが含まれているため、データの内容の確認や、システム連携の開発・テストの際に便利です。
ダウンロード制限とチェックサムについて
データベースのダウンロードには、1IPアドレスあたり1日10回までという回数制限があります。
毎日同じURIからダウンロードするだけでも自動更新は実現できますが、チェックサムを活用することでより効率的な運用が可能です。
チェックサムとは、ファイルの内容から生成される固定長の値で、データの整合性確認に使用されます。
前回取得したチェックサムと比較することで、更新があった場合のみダウンロードする仕組みを実現することができます。
詳細については、公式ドキュメントをご参照ください。
データベース自動更新設定手順
※本記事では、IPinfo LiteのMMDB形式データベースをダウンロードする手順を紹介します。
※本手順に含まれるフォルダ名やファイル名などは、任意のものを設定してください。
(Linux・Windows共通)事前準備:APIトークンの確認
- IPinfoにログインします。
- ログイン後に表示されるダッシュボードの「API Access」セクションから「API Token」を確認します。

- このAPIトークンは、後の手順でスクリプトに設定するため、メモしておいてください。
Linux(Ubuntu)環境での設定手順
手順1:作業フォルダの作成
ターミナルを開き、以下のコマンドを実行してデータベースを保存するフォルダを作成します。
$ mkdir -p ~/IPinfo
手順2:スクリプトの作成
-
- 以下のコマンドを実行してスクリプトファイルを作成します。
$ nano ~/IPinfo/update_mmdb.sh
- エディタが開いたら、以下のスクリプトをコピーして入力してください。「設定」の項目については、下部の説明を参考にご自身の環境に合わせて設定してください。
クリックしてスクリプトを表示する
#!/usr/bin/env bash set -euo pipefail # ========== 設定 ========== TOKEN="xxxxxx" FILE="ipinfo_lite.mmdb" BASE="https://ipinfo.io/data" SAVE_DIR="$HOME/IPinfo" # ========================== mkdir -p "$SAVE_DIR" DL_URL="${BASE}/${FILE}?token=${TOKEN}" CS_URL="${BASE}/${FILE}/checksums?token=${TOKEN}" LAST_SHA_FILE="${SAVE_DIR}/${FILE}.sha256" TMP_FILE="${SAVE_DIR}/${FILE}.tmp" FINAL_FILE="${SAVE_DIR}/${FILE}" # チェックサムエンドポイントでSHA256の値を取得 REMOTE_SHA=$(curl -fsSL "$CS_URL" | python3 -c \ 'import sys,json; print(json.load(sys.stdin)["checksums"]["sha256"])') # ローカルに保存済みのSHA256の値を読み込む(初回は空) LOCAL_SHA="" [[ -f "$LAST_SHA_FILE" ]] && LOCAL_SHA=$(cat "$LAST_SHA_FILE") # 一致していれば更新不要 → 終了 if [[ "$REMOTE_SHA" == "$LOCAL_SHA" && -f "$FINAL_FILE" ]]; then echo "No update. $(date '+%Y-%m-%d %H:%M:%S')" exit 0 fi # 更新あり → ダウンロード開始 echo "Update detected. Downloading..." START_EPOCH=$(date +%s) START_HUMAN=$(date '+%Y-%m-%d %H:%M:%S') echo "Download start: $START_HUMAN" curl -fL "$DL_URL" -o "$TMP_FILE" END_EPOCH=$(date +%s) END_HUMAN=$(date '+%Y-%m-%d %H:%M:%S') ELAPSED=$((END_EPOCH - START_EPOCH)) echo "Download end: $END_HUMAN (elapsed ${ELAPSED}s)" # ダウンロードしたファイルのSHA256の値を検証 DOWNLOADED_SHA=$(sha256sum "$TMP_FILE" | awk '{print $1}') if [[ "$DOWNLOADED_SHA" != "$REMOTE_SHA" ]]; then echo "Checksum mismatch! Aborting." rm -f "$TMP_FILE" exit 1 fi # 検証OKなら本番ファイルに置換し、SHA256の値をSAVE_DIRで指定したフォルダに保存 mv -f "$TMP_FILE" "$FINAL_FILE" echo "$REMOTE_SHA" > "$LAST_SHA_FILE" echo "Update complete. $(date '+%Y-%m-%d %H:%M:%S')"【参考】設定項目について
-
- TOKEN:事前準備で取得したAPIトークンを入力してください。
- FILE:ダウンロードするデータベースのファイル名を入力してください。ファイル名は、公式ドキュメントの「Database Download URI」列からご確認ください。
- SAVE_DIR:手順1で作成したフォルダのパスを入力してください。
-
- 入力後、保存(
Ctrl+O→Enter)して閉じます(Ctrl+X)。
- 以下のコマンドを実行してスクリプトファイルを作成します。
手順3:実行権限の付与
作成したスクリプトに実行権限を付与します。以下のコマンドを実行してください。
$ chmod +x ~/IPinfo/update_mmdb.sh
手順4:動作確認
以下のコマンドを実行して、スクリプトが正常に動作するかを確認します。
$ ~/IPinfo/update_mmdb.sh
正常に動作した場合、以下のように表示されます。
初回実行時(ダウンロードが発生する場合):
Update detected. Downloading... Download start: 2026-04-06 15:19:51 (ダウンロード進捗が表示されます) Download end: 2026-04-06 15:19:52 (elapsed 1s) Update complete. 2026-04-06 15:19:52
2回目以降(更新がない場合):
No update. 2026-04-06 15:20:00
手順5:定期実行の設定
- cronを使用して自動更新を設定します。
crontab -e
- ファイルの末尾に以下を追加します。ユーザー名、スクリプトのパス、ログファイルのパスはご自身の環境に合わせて変更してください。なお、
>>以降でログファイルへの出力先を指定しています。0 * * * * /home/ユーザー名/IPinfo/update_mmdb.sh >> /home/ユーザー名/IPinfo/update_mmdb.log 2>&1
※上記の設定では、1時間ごとに自動実行されます。実行頻度はご自身の環境に合わせて変更してください。
Windows環境での設定手順
手順1:作業フォルダの作成
エクスプローラーで任意の場所に作業フォルダを作成します。本手順では、C:\Users\ユーザー名\IPinfoを例として使用します。
手順2:スクリプトの作成
- PowerShellを開き、以下のコマンドを実行してスクリプトファイルを作成します。
notepad $HOME\IPinfo\Update-IPinfo-mmdb.ps1
※「ファイルが見つかりません。新しく作成しますか?」と表示されたら、「はい」をクリックしてください。
- エディタが開いたら、以下のスクリプトをコピーして入力してください。「設定」の項目については、下部の説明を参考にご自身の環境に合わせて設定してください。
クリックしてスクリプトを表示する
# ========== 設定 ========== $TOKEN = "xxxxxx" $FILE = "ipinfo_lite.mmdb" $BASE = "https://ipinfo.io/data" $SAVE_DIR = "$HOME\IPinfo" $LOG_FILE = "$HOME\IPinfo\Update-IPinfo-mmdb.log" # ========================== if (-not (Test-Path $SAVE_DIR)) { New-Item -ItemType Directory -Path $SAVE_DIR | Out-Null } $DL_URL = "${BASE}/${FILE}?token=${TOKEN}" $CS_URL = "${BASE}/${FILE}/checksums?token=${TOKEN}" $LAST_SHA_FILE = Join-Path $SAVE_DIR "${FILE}.sha256" $TMP_FILE = Join-Path $SAVE_DIR "${FILE}.tmp" $FINAL_FILE = Join-Path $SAVE_DIR $FILE # チェックサムエンドポイントでリモートのSHA256の値を取得 $csResponse = Invoke-RestMethod -Uri $CS_URL -UseBasicParsing $REMOTE_SHA = $csResponse.checksums.sha256 # ローカルに保存済みのSHA256の値を読み込む(初回は空) $LOCAL_SHA = "" if (Test-Path $LAST_SHA_FILE) { $LOCAL_SHA = (Get-Content $LAST_SHA_FILE -Raw).Trim() } # 一致していれば更新不要 → 終了 if ($REMOTE_SHA -eq $LOCAL_SHA -and (Test-Path $FINAL_FILE)) { "No update. $(Get-Date -Format 'yyyy-MM-dd HH:mm:ss')" | Add-Content -Path $LOG_FILE exit 0 } # 更新あり → ダウンロード開始 "Update detected. Downloading..." | Add-Content -Path $LOG_FILE $startTime = Get-Date "Download start: $($startTime.ToString('yyyy-MM-dd HH:mm:ss'))" | Add-Content -Path $LOG_FILE Invoke-WebRequest -Uri $DL_URL -OutFile $TMP_FILE -UseBasicParsing $endTime = Get-Date $elapsed = [int]($endTime - $startTime).TotalSeconds "Download end: $($endTime.ToString('yyyy-MM-dd HH:mm:ss')) (elapsed ${elapsed}s)" | Add-Content -Path $LOG_FILE # ダウンロードしたファイルのSHA256の値を検証 $hashObj = Get-FileHash -Path $TMP_FILE -Algorithm SHA256 $DOWNLOADED_SHA = $hashObj.Hash.ToLower() if ($DOWNLOADED_SHA -ne $REMOTE_SHA) { "Checksum mismatch! Aborting." | Add-Content -Path $LOG_FILE Remove-Item $TMP_FILE -Force exit 1 } # 検証OKなら本番ファイルに置換し、SHA256の値をSAVE_DIRで指定したフォルダに保存 Move-Item -Path $TMP_FILE -Destination $FINAL_FILE -Force Set-Content -Path $LAST_SHA_FILE -Value $REMOTE_SHA -NoNewline "Update complete. $(Get-Date -Format 'yyyy-MM-dd HH:mm:ss')" | Add-Content -Path $LOG_FILE【参考】設定項目について
-
- TOKEN:事前準備で取得したAPIトークンを入力してください。
- FILE:ダウンロードするデータベースのファイル名を入力してください。ファイル名は、公式ドキュメントの「Database Download URI」列からご確認ください。
- SAVE_DIR:手順1で作成したフォルダのパスを入力してください。
- LOG_FILE:ログファイルの出力先パスを入力してください(※ログが不要な場合は、該当部分を削除してください)。
-
- 保存してメモ帳を閉じます。
手順3:動作確認
PowerShellを開き、以下のコマンドを実行してスクリプトが正常に動作するか確認します。
& "$HOME\IPinfo\Update-IPinfo-mmdb.ps1"
手順4:定期実行の設定
タスクスケジューラーを使用して自動更新を設定します。
お使いの環境に合わせてスクリプトを定期実行するタスクを作成してください。
【参考】操作タブの設定
※パスはご自身の環境に合わせて変更してください。
-
- プログラム/スクリプト:
powershell.exe - 引数の追加:
-ExecutionPolicy Bypass -File "C:\Users\ユーザー名\IPinfo\Update-IPinfo-mmdb.ps1"
- プログラム/スクリプト: