NobodyNamed について
NobodyNamedは、1880年以降の米国社会保障局(SSA)の記録に基づく赤ちゃんの名前の人気データを扱います。名前の推移を調べたい人向けで、データの取得、集計、分析、書き出しを行うNode.jsスクリプトも含みます。
主な機能
- 01名前ごとの年間人数と割合の表示
- 02年や頻度による名前の絞り込み
- 03ピーク値と正規化値の算出
- 04JSON、CSVなどへの書き出し
- 05音素別の年間割合の分析
活用シーン
- 01名前の人気の変化を追跡
- 02年や出現頻度でデータを絞り込み
- 03追加分析向けに名前データを書き出し
設定
リモートサーバーはインストール不要です。クライアントを選んで設定をコピーするか、ワンクリックで導入できます。
https://nobodynamed.com/mcpclaude mcp add --transport http michaelcolenso-nobodynamed https://nobodynamed.com/mcp{"mcpServers":{"michaelcolenso-nobodynamed":{"type":"http","url":"https://nobodynamed.com/mcp"}}}Cursor で開く{"servers":{"michaelcolenso-nobodynamed":{"type":"http","url":"https://nobodynamed.com/mcp"}}}VS Code で開く{"mcpServers":{"michaelcolenso-nobodynamed":{"type":"http","url":"https://nobodynamed.com/mcp"}}}{"mcpServers":{"michaelcolenso-nobodynamed":{"serverUrl":"https://nobodynamed.com/mcp"}}}コマンドはターミナルで実行し、JSON は各クライアントの MCP 設定に貼り付けて再起動します。認可が必要なサーバーは初回接続時にログインを求めます。
ツール
12| パラメーター | 型 | 必須 | 説明 |
|---|---|---|---|
| q | string | はい | 検索する名前のプレフィックス(例:"Jen"、"The") |
詳細
nobodynamed
あなたの名前は絶滅しかけていますか? nobodynamed は、Social Security Administration のデータに基づき、1880 年以降のアメリカのあらゆる名前の人気度、推移、存続状況を表示します。
技術スタック
| レイヤー | サービス |
|---|---|
| フロントエンド + API | Cloudflare Pages + Pages Functions |
| データベース | Cloudflare D1(SQLite) |
| 年次データ更新 | Cloudflare Worker(Cron Trigger + Queues) |
| アーカイブストレージ | Cloudflare R2 |
リポジトリの構成
apps/
web/ Cloudflare Pages: static HTML/CSS/JS + Functions
public/ Served as static assets
functions/ Pages Functions (API routes + SSR /name/:name)
ingest-worker/ Cron-triggered Worker: SSA download → D1
packages/
shared/ Types, classification logic, HTML renderer — shared by all packages
migrations/ D1 SQL migrations (applied via wrangler d1 migrations apply)
scripts/
seed-from-shards.ts One-shot initial D1 seeding from legacy JSON shards
verify-parity.ts Pre-cutover parity checks vs legacy data
viz/ Legacy static site (GitHub Pages) — kept until DNS cutover
初回セットアップ
1. Cloudflare リソースをプロビジョニングする
# D1 database
wrangler d1 create name-vitals
# Copy the database_id into both wrangler.toml files:
# apps/web/wrangler.toml
# apps/ingest-worker/wrangler.toml
# Queue (fan-out ingest)
wrangler queues create name-ingest
wrangler queues create name-ingest-dlq
# R2 bucket (SSA zip cache)
wrangler r2 bucket create name-vitals-ingest
2. スキーマを適用する
wrangler d1 migrations apply name-vitals --remote
3. 初期データを投入する
既存の viz/name-vitals/data/ JSON シャードを読み込み、SSA からデータを取得せずに D1 にデータを投入します。
npm run seed
# Apply each generated SQL file:
ls migrations/seed/*.sql | sort | xargs -I{} wrangler d1 execute name-vitals --file={} --remote
4. デプロイする
npm run deploy:web # deploy Cloudflare Pages
npm run deploy:ingest # deploy the cron Worker
5. 整合性を確認する
tsx scripts/verify-parity.ts --base=https://<preview>.pages.dev
ローカル開発
# Pages + Functions with local D1
npm run dev:web
# Trigger the ingest cron locally
npm run dev:ingest # starts wrangler dev
# then: curl http://localhost:8787/run
データ更新
取り込み Worker は毎週実行されます(ETag による判定が行われ、SSA の zip ファイルに変更がなければ直ちに終了します)。SSA は年に一度、新しいデータを公開します。通常は 5 月です。手動で実行する場合:
wrangler dev --test-scheduled # local
# or POST to the /run endpoint of the deployed Worker
GitHub Actions のシークレット
.github/workflows/ 内の CI/CD ワークフローに必要です。
| シークレット | 値 |
|---|---|
CLOUDFLARE_API_TOKEN | Workers、Pages、D1 の書き込み権限を持つトークン |
CLOUDFLARE_ACCOUNT_ID | Cloudflare アカウント ID |
GitHub Pages からの DNS 切り替え
Pages のプレビュー URL で整合性を確認した後:
- Cloudflare ダッシュボードで Pages プロジェクトにカスタムドメインを追加します。
- DNS の CNAME を GitHub Pages のアドレスから Cloudflare Pages の CNAME に切り替えます。
- 古い GitHub Pages の
index.htmlに、/babynames/viz/name-vitals/*から新しいホストへの 301 リダイレクトを追加します。 - 1 週間以上監視した後、
viz/、dicts/、extra/、および残っている古いファイルを削除します。
ライセンス
ソースデータは CC0(Social Security Administration)です。コードは MIT です。
##セットアップ
これは Node.js スクリプトなので、実行する前に Node をダウンロードすることをおすすめします。
リポジトリをダウンロードするには、次のようにクローンします。
git clone https://github.com/TimeMagazine/babynames.git
cd babynames
次に、依存関係をインストールします。
npm install
##データ
まず、Social Security Administration から生データを取得する必要があります。次のコマンドを実行すると、このスクリプトがデータをダウンロードして解凍します。
./index.js download
###毎年生まれた赤ちゃんの合計数
毎年生まれた赤ちゃん(少なくとも、SSN を発行された赤ちゃん)の合計数のデータを含む extra/totals.json というファイルもあります。このデータは SSA によるものです。名前別ファイルには 5 回未満しか使われていない名前が含まれないため、合計数は名前別データの合計よりも多くなります。このファイルはその確認に役立ちます。
データを再ダウンロードする場合(新しい年のデータが公開された場合や、データが改訂されたと思われる場合など)は、./scripts/total_births.js を実行してください。SSA のウェブサイトのページからデータを取得し、リポジトリ内のファイルを上書きします。
###赤ちゃんの名前
Social Security Administration は、赤ちゃんの名前のデータを、少々扱いにくいことに、yob[year].txt という名前の年ごとのテキストファイルとして整理しています。上記のコマンドは、これらのファイルを data/ という名前のローカルディレクトリに展開し、ダウンロードした zip ファイルを削除します。何らかの理由で zip ファイルを残しておきたい場合は、コマンドに --cache を指定してください。
完了したら、データを名前ごとに集計し、さまざまな形式で保存できます。
./index.js store --format=json
まず、スクリプトはすべてのファイルを読み込み、名前ごとにデータをメモリ上に保存します。名前ごとに、指定した年にその名前を付けられた赤ちゃんの実数と、同じ性別の赤ちゃん全体に占める割合の両方を記録します。この計算の分母には、性別ごとの赤ちゃんの総数(SSA.gov の報告値)を使います。名前の頻度を合計して算出した値ではありません(データに含まれるのは5回以上登場した名前のみであるため、後者は実際に米国で生まれた子どもの数より少なくなります)。年は、すばやく取得できるようオブジェクトのキーとして保存されます:
{
"_id": "Lothar-M",
"name": "Lothar",
"gender": "M",
"values": {
"1927": 7,
"1928": 6,
"1929": 10,
"1931": 6,
"1932": 8,
"1935": 8,
"1956": 7,
"1959": 5,
"1964": 6,
"1968": 5
},
"percents": {
"1927": 0.0000062135232896167586,
"1928": 0.000005418551494752584,
"1929": 0.000009301278646775573,
"1931": 0.000005775539435383265,
"1932": 0.000007664935030094451,
"1935": 0.00000768623999707923,
"1956": 0.0000033120134297413128,
"1959": 0.0000023436460007087187,
"1964": 0.000003010349581862443,
"1968": 0.0000028754074452349896
}
}
###形式
選択肢は次のとおりです:
json:各名前を個別の JSON ファイルとして/flat/individual/ディレクトリに保存します。jsonp:各名前を個別の JSON-P ファイルとして/flat/individual/ディレクトリに保存します。デフォルトではticallbackという名前のコールバック関数でラップされますが、opts.callbackで変更できます。csvs:各名前を個別の CSV ファイルとして/flat/individual/ディレクトリに保存します。csv:すべての名前を1つの CSV ファイルにまとめ、/flat/names.csv/に保存します。制限指定(以下を参照)を含めない場合、このファイルのサイズは30MBになります。この前処理済みファイルは、このリポジトリに含まれています。mongodb:すべての名前を MongoDB インスタンスに挿入します。localhost:27017で Mongo サーバーを実行するか、インスタンスを指すようにソースを更新してください。*注:*これは任意の機能のため、mongodb Node モジュールは依存関係として記載されていません。自身でインストールする必要があります。
##サイズの削減 2013年時点で、少なくとも1年に5回以上登場する名前は102,691個あります。この量のデータに関心のないユーザーも多いでしょう。コマンドラインオプションを使って範囲を絞り込む方法はいくつかあります。
###年の制限
start:この年より前の年は取得しません。例:--start=1950。デフォルトはデータの最初の年である1880です。end:この年より後の年は取得しません。例:--end=2000。デフォルトは現在の年です。
###一般的でない名前を除外
min:少なくとも1年にこの回数以上登場しない名前は含めません。例:--min=25。デフォルトは0です。cutoff:この数以上の年に登場しない名前は含めません。例:--cutoff=50。デフォルトは0です。
##分析
このスクリプトには、基本的な分析を行うためのオプションがいくつか用意されています:
normalize:各名前に3つ目のプロパティを追加します。割合の値を正規化し、割合が最も高い年の値を1にします。peaks:実数と割合の両方について、ピーク値とその年を特定します。maxima:すべての局所最大値(前後5年間のすべての値より高い点)を特定します。ピーク値の少なくとも25パーセントに達する最大値のみをカウントします。pronunications:名前が CMU Pronouncing Dictionary に掲載されているかを確認します。手動でnpm install cmudictを実行する必要があります。dense:startとendの間に指定された範囲で、ある年に登場しない名前がある場合、その年のデータに0を記載します。それ以外の場合は一切含めません(「スパース」形式)。
##タイプ
CSV 出力では、各年の名前ごとの新生児数を実数で取得する(デフォルトの --type=values)か、割合で取得できます(--type=values)。JSON 形式では、割合と実数の両方が返されます。
##音素
特別なタイプ --type=phonemes を指定すると、すべての名前について、各年の音素の割合をまとめた JSON ドキュメントを取得できます。デフォルトでは、スクリプトは各名前の最初の音素を調べます。--N==TK を使うと、名前の TK 番目の音素を基準に集計できます。負の値を指定すると、末尾から数えます。
##追加情報 英国の赤ちゃんの名前のデータを1996年までさかのぼって取得できるようになりました。このデータは、2016年10月5日に英国の Office for National Statistics から取得しました。出生数の合計は、同じ出典のこちらからダウンロードしました。
##ライセンス
このスクリプトは、Time によって MIT ライセンスのもと、無料のオープンソースとして提供されています。使用する場合は、Time のクレジットを表示し、このページへのリンクを掲載していただけると幸いです。
辞書ファイル dict/2of12.txt は、パブリックドメインの 12 Dicts project のものです。
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。