GATT【Generic Attribute Profile】
GATTとは?

GATTでは、データを保持・提供する側を「サーバ」、データを要求・取得する側を「クライアント」と呼ぶ。通信は常にクライアントからの要求にサーバが応答する形で進む。センサーや周辺機器がサーバにあたり、スマートフォンやパソコンなどがクライアントとして機能することが多い。
サーバが持つデータは「サービス」(service)と「キャラクタリスティック」(characteristic)という階層構造で管理される。サービスは心拍数の測定や電池残量の通知といった機能単位に対応するデータのまとまりであり、その中に個々のデータ項目であるキャラクタリスティックが配置される。キャラクタリスティックには実際の測定値や設定値が格納されるほか、読み取り可能か、書き込み可能か、通知可能かといった属性情報も定義されている。
データへのアクセスはキャラクタリスティックを通じて行われる。クライアントは値を読み取ったり書き込んだりできるほか、値が変化した際にサーバから自動的に通知を受け取る仕組みも備わっている。センサー機器が測定値を定期的に送信する状況では、この通知機能がよく使われる。各サービスおよびキャラクタリスティックには「UUID」(Universally Unique Identifier)と呼ばれる固有の識別子が割り当てられており、クライアントはこれを指定して目的のデータにアクセスする。
Bluetoothの標準化団体であるBluetooth SIGは、心拍数、血圧、バッテリー残量など広く使われる用途向けに標準サービスとUUIDを定義・公開している。これに従った機器同士は、メーカーを問わず同じ手順でデータにアクセスできる。独自機能のために、メーカーが任意のサービスやキャラクタリスティックを定義して追加することも認められている。
GATTは下位層の「ATT」(Attribute Protocol)の上に構築されており、ATTが管理する属性データをサービスやキャラクタリスティックとして体系化することで、アプリケーションから扱いやすい形で提供している。スマートウォッチ、活動量計、室温センサーなど、様々なIoT機器やウェアラブル端末の通信基盤として広く普及している。