GTFS リアルタイムの変更点

はじめに

GTFS リアルタイムは確定した仕様ではありません。その代わり、交通機関、デベロッパー、その他 GTFS リアルタイムを利用する関係者で構成されるコミュニティによって開発、管理されるオープンな仕様となっています。GTFS リアルタイムの制作者と利用者が参加するこのコミュニティが、新たな可能性を生み出せる仕様に拡張するための提案をしていくことが期待されています。このプロセスを管理していくために、次の手順と基本方針が確立されています。

本仕様を変更するための概略として、次に示すようにいくつかの段階があります:

  1. GTFS リアルタイムの変更に関するディスカッション リストで変更を提案します。
  2. GTFS リアルタイム コミュニティからのコメントやフィードバックを受けながら、提案した変更について意見交換を繰り返します。
  3. 提案した変更を実装しテストするために、GTFS リアルタイムの制作者と利用者をそれぞれ少なくとも 1 名ずつ探します。
  4. 提案した変更に対する最終意見募集をディスカッション リストに投稿します。1 週間後、特に目立った問題が見当たらなければその提案は正式に採用されます。

ヘルプ グループは GTFS リアルタイム仕様に関する変更を提案するための主要な場であり、そのユーザーはそこで提案された変更について情報を得たりそれに対する意見を述べたりすることができます。提案が有意義であり以下に示す基本方針に従うものであるとコミュニティが大筋で合意すれば、その提案は正式に仕様に追加されます。さらに、提案された変更は、実際に採用された場合の有効性を検証するために、GTFS リアルタイムの制作者と利用者各 1 名以上によって実装されることも条件となっています。

基本方針

GTFS リアルタイムの当初のビジョンを失わないように、この仕様を拡張する際に考慮すべきいくつかの基本方針が確立されてきました:

フィードをリアルタイムで効率的に生成、利用できること。

リアルタイム情報は動的で絶え間のないデータの流れであり、効率的に処理することが必要不可欠です。そこで Google では、この仕様のベースとしてプロトコル バッファを選びました。それは、デベロッパーにとっての使いやすさとデータ転送の効率のよさという点でうまくバランスがとれるためです。GTFS と異なり、GTFS リアルタイム フィードを手作業で編集する交通機関はそれほど多くはないと考えられます。ほとんどの GTFS リアルタイム フィードがプログラムで生成、利用されるであろうという結論から、プロトコル バッファを選択しました。

乗客に関係する情報を扱うこと。

GTFS リアルタイムは、先に策定された GTFS と同じく、一義的には乗客に必要な情報に関する仕様です。つまり、何よりもまず、乗客にとって役立つ情報が含まれていなければなりません。潜在的には、交通機関同士で内部的に伝送できる業務用の情報が多数存在しています。GTFS リアルタイムはそうした目的を意図したものではありません。他の業務用データの規格があれば、業務用の情報にはその方が適している可能性があります。

仕様の変更に後方互換性を持たせること。

仕様に機能を追加する際、既存のフィードが無効になるような変更は避ける必要があります。既存のフィード提供者がフィードに機能を追加するときに余計な作業が増えることは好ましくありません。また可能な限り、更新後のフィードの以前の部分を既存のパーサーで引き続き読み込めるようにする必要があります。既存のプロトコル バッファの慣例では、ある程度は後方互換性が強制的に適用されます。ただし、既存のフィールドに意味的な変更を加えると後方互換性がなくなる可能性があるため、そのような変更も避けることが求められます。

未確認の機能の追加は控えること。

新機能が追加されれば必ず、フィードの作成や読み込みが以前より複雑になります。したがって、効果があると確認できている機能のみを追加するように気をつけなければなりません。どの提案も、その新機能を利用する実際の交通機関用のデータを生成し、その読み取りと表示ができるソフトウェアを作成してテストしてみることが理想的です。

この仕様では、新機能をサポートするために、次のセクションで説明する拡張機能を利用できます。GTFS リアルタイムの制作者と利用者は、拡張名前空間で先に新機能をテストすることができます。採用されることが決まると、正式な GTFS リアルタイム プロトコル定義にこの機能が追加されます。

拡張機能

新機能を簡単にテストできるようにするため、またデベロッパーが GTFS リアルタイム フィードに情報を追加できるようにするため、この仕様ではプロトコル バッファの拡張機能を利用しています。この拡張機能では、プロトコル バッファのメッセージに名前空間を定義して、元のプロトコル定義を変更することなくサードパーティ デベロッパーが追加のフィールドを定義できるようになっています。

デベロッパーが GTFS リアルタイム仕様を拡張しようとする場合、GTFS リアルタイムのヘルプ グループに問い合わせる必要があります。デベロッパーには次に利用可能な拡張 ID が割り当てられます。この ID は、1000 から始まり 1 ずつ増える数のリスト(この後の拡張の登録のセクションに掲載)から選択されます。

こうして割り当てられる拡張 ID は、GTFS リアルタイムの個々のメッセージ定義で使用する "extension" 名前空間で利用できるタグ ID と対応します。拡張 ID が割り当てられたデベロッパーは、GTFS リアルタイムのどのメッセージを拡張するときもその ID を使用します。1 つのメッセージだけ拡張しようとする場合でも、割り当てられた拡張 ID はすべてのメッセージに対して使用できます。

デベロッパーが仕様を拡張する場合、拡張 ID を使って "string" や "int32" のようなフィールドを 1 つ追加する代わりにおすすめする方法があります。それは、新しいメッセージ(たとえば "MyTripDescriptorExtension")を定義し、基になる GTFS リアルタイム メッセージをその新しいメッセージで拡張して、新しいフィールドをすべてそこに加えることです。この方法は、拡張 ID のリストから新しい ID を確保する必要がなく、必要に応じて拡張したメッセージの中で複数のフィールドを管理することができるという便利な特性を持っています。

message MyTripDescriptorExtension {
  optional string some_string = 1;
  optional bool some_bool = 2;
  ...
}
extend transit_realtime.TripDescriptor {
  optional MyTripDescriptorExtension my_trip_descriptor = YOUR_EXTENSION_ID;
}
  

拡張の登録

拡張 ID デベロッパー 連絡先 詳細
1000 OneBusAway onebusaway-developers https://github.com/OneBusAway/onebusaway/wiki/GTFS-Realtime-Resources
1001 ニューヨーク市 MTA mtadeveloperresources http://mta.info/developers/
1002 Google transit-realtime-partner-support@google.com Google Maps Live Transit Updates
...

改訂履歴

2012 年 5 月 30 日

  • 仕様への拡張機能の追加について詳しい説明を追加しました。

2011 年 11 月 30 日

  • 仕様を拡張しやすくするため、主要な GTFS リアルタイム メッセージにプロトコル バッファの拡張名前空間を追加しました。

2011 年 10 月 25 日

  • 運行情報の header_text と description_text はどちらもプレーンテキスト値であることがわかるように説明を更新しました。

2011 年 8 月 20 日

  • TimeRange メッセージの意味がわかりやすくなるように説明を更新しました。

2011 年 8 月 22 日

  • 最初のバージョンです。