# [ENSIP5] ENSにプロフィール情報を登録できる仕組みを理解しよう！

> ENSIP5は、Ethereum Name Service（ENS）において「任意のキーと値の組み合わせ（key-value）」を保存・参照できるリゾルバの仕組みを定義しています。

- URL: https://cardene.dev/articles/5f38e117246ef4bb3711
- 公開日: 2025-08-22
- 更新日: 2025-08-22
- トピック: Blockchain
- タグ: ethereum, solidity, smartcontract, ブロックチェーン

## はじめに

『DApps開発入門』という本や色々記事を書いているかるでねです。

https://amzn.asia/d/gxvJ0Pw

今回は、ENSにメールやSNSアカウントなどの自由なテキスト情報を紐づけられる仕組みを提案している**ENSIP5**についてまとめていきます！

:::message
以下にまとめられているものを翻訳・要約・補足しながらまとめていきます。
:::

https://docs.ens.domains/ensip/5

他にも様々なEIP・BIP・SLIP・CAIP・ENSIPについてまとめています。

https://cardene.notion.site/ERC-EIP-2a03fa3ea33d43baa9ed82288f98d4a9?pvs=4

## 概要

**ENSIP5**は、Ethereum Name Service（ENS）において「**任意のキーと値の組み合わせ（key-value）**」を保存・参照できるリゾルバの仕組みを定義しています。
これにより、ENS名を持つユーザーは自分の名前にメールアドレスやウェブサイトのURLなど、追加の情報を紐づけられるようになります。
ENSは本来、アドレスやコントラクトといった機械的なデータを人間が扱いやすい名前に変換する役割を持っていますが、この仕組みを使えば単なる名前解決だけでなく、人が理解しやすい付加情報も提供できるようになります。

## 動機

ENSは技術的には便利な仕組みですが、利用する人にとっては「**人間が読んで理解できる情報**」が一緒に紐づいている方が価値があります。
例えば、名前にメールアドレスや連絡用のURLを登録しておけば、他の人がそのENS名を見たときにすぐに必要な情報を確認できます。
このようなメタデータは、デバッグやシステム管理、利用者への情報提供といった幅広い場面で役立ちます。
つまり、ENSを「**ただの名前解決システム**」から「**人と情報をつなげる仕組み**」へと拡張することを目的としています。

## 仕組み

**ENSIP5**では、ENS（Ethereum Name Service）の名前に対して「**任意の文字列データ（テキスト）**」を関連付けるための新しいリゾルバインターフェースを定義しています。
これにより、ENS名を通じてメールアドレスやプロフィール情報、外部サービスのアカウント名などを取得できるようになります。
テキストデータはUTF-8形式で保存され、存在しない場合は空文字を返します。

### リゾルバインターフェース

新しく定義されたインターフェースは以下です。

```javascript
interface IERC634 {
  /// @notice ENS名に紐づけられたキーのテキストデータを返す
  /// @param node ENS名のnodehash
  /// @param key 検索したいキー
  /// @return text テキストデータ
  function text(bytes32 node, string key) view returns (string text);
}
```

このインターフェースの**EIP165**での識別子（interface ID）は `0x59d1d43c` です。

:::message
**EIP165**については以下の記事を参考にしてください。
:::

[\[ERC165\] コントラクトが特定のインターフェースをサポートしているか確認する仕組みを理解しよう！](/articles/541184977a5cba51b759)

### キーの種類

テキストデータを保存する時には「**キー**」が必要になります。
キーは大きく分けて「**グローバルキー**」、「**サービスキー**」、「**レガシーキー**」の3種類があります。

#### グローバルキー

グローバルキーは、共通的に使える基本情報を登録するためのキーです。
小文字・数字・ハイフンのみを使用します。
例えば、アバター画像のURLや説明文、メールアドレスなどを登録できます。
具体的には以下のようなキーが定義されています。

* `avatar`
    アバターやロゴの画像URL。
* `description`
    ENS名に関する説明文。
* `display`
    表示用の標準名（大文字・小文字の違いは無視される）。
* `email`
    メールアドレス。
* `keywords`
    カンマ区切りのキーワード一覧。
* `mail`
    物理的な住所。
* `notice`
    注意書きや告知。
* `location`
    場所の情報（例：「Tokyo, Japan」）。
* `phone`
    電話番号（国際規格E.164形式）。
* `url`
    ウェブサイトのURL。

#### サービスキー

サービスキーは、特定のサービスやプラットフォームに紐づけるためのキーです。
形式は「**逆ドット表記**」で、最低1つのドットを含める必要があります。
これにより、サービスごとに一意なキーを定義でき、他と衝突する心配がありません。

例として、以下のサービス向けキーが推奨されています。

* `com.github`
    GitHubのユーザー名。
* `com.linkedin`
    LinkedInのユーザー名。
* `com.twitter`
    Twitterのユーザー名。
* `org.telegram`
    Telegramのユーザー名。

さらに階層を分けることも可能で、例えば「`com.example.groups.public`」のように細かく分類することができます。

#### レガシーキー

過去のバージョンで使われていた古いキーも存在します。
利用は広くありませんが、互換性を重視するアプリケーションはフォールバックとして利用することができます。

* `vnd.github`（現行は `com.github`）
* `vnd.peepeth`（現行は `com.peepeth`）
* `vnd.twitter`（現行は `com.twitter`）

## 補足

**ENSIP5**では、特定の用途ごとに細かくレコードの種類を定義するのではなく、汎用的に利用できる「**キーと値の組み合わせ**」を採用しています。
例えば「**メールアドレス専用のレコード**」、「**ウェブサイトURL専用のレコード**」といった形式を無数に追加するのではなく、DNSの「**TXTレコード**」の仕組みを参考にして、どんな情報でも格納できる柔軟な形式を導入しました。

この方法により、新しい用途やサービスが登場したとしても、リゾルバ（名前解決の仕組み）を修正する必要がなくなります。
開発者やサービス提供者は自分たちの目的に合ったキーを自由に定義でき、ENSの仕組みに依存せずに拡張していけます。
つまり、ENSは標準的な情報（メールやURLなど）に対応しつつ、将来的な発展やカスタム用途にも対応できる柔軟性を持たせているのです。

## 最後に

今回は「ENSにメールやSNSアカウントなどの自由なテキスト情報を紐づけられる仕組みを提案している**ENSIP5**」についてまとめてきました！
いかがだったでしょうか？

質問などがある方は以下のTwitterのDMなどからお気軽に質問してください！

[Twitter @cardene777](https://twitter.com/cardene777)

他の媒体でも情報発信しているのでぜひ他も見ていってください！

https://chaldene.net/

https://zenn.dev/heku

https://cardene.substack.com/

https://mirror.xyz/0xcE77b9fCd390847627c84359fC1Bc02fC78f0e58

https://cardene.notion.site/ERC-EIP-2a03fa3ea33d43baa9ed82288f98d4a9?pvs=4
