Plastic Bubbles are Valued as Experience Points

このエントリは、異世界行ったら本気だすぴょこりんクラスタ Advent Calendar 2021のために書かれたものです。

昨今のゲーム(・プラットフォーム)には、かならず実績(achievements)というものがあります。昨今注目されているゲーミフィケーションの一つの要素としては欠かせないものでしょう。適当に検索しただけでも、実績はパフォーマンスを向上させるなんて論文も出てくる(本文は読んでいません)くらいですから、人のあらゆる活動において考慮すべき一要素であることは間違いありません。

そんなわけで(強引な展開)、今回は旅行に伴う実績の一つである「経県値」のお話です。

経県値とは何か

こちらのサイトがたぶん最初に提案したのだと思いますが、各都道府県における経験(居住・宿泊・・・)を数値化したものです。経験は居住が最も高い価値を有し5点となっています。これを各都道府県ごとに算出し、それを合計した得点が生涯経県値とされています。

これは大変良い実績であり、自分もこれを高めるべく日本各地に旅行を行っておりましたが、数年前に全都道府県宿泊となってしまい、これ以上得点を高めるには、いろんな都道府県に居住するということを行う必要があります。これはこれで、多少やろうと思っているところではありますが、いかんせん金銭的コストもそのほか必要な労力も、旅行に比して膨大なものとなるので、そうそう簡単に得点を上げるのは難しいものです。

グローバル経県値

ということで、この概念を拡張してそれを管理するWebサイトを作ってみようというのが今回のテーマです。拡張というのは、より細分化(経市町村値)するか、より広域化(経国値)するかの二つの方向が考えられますが、今回は後者で行きたいと思います。パンデミックを考慮すると前者のほうがまだやりやすいのかもしれませんが、近い将来に期待をこめてということで。

経験値の単位

では国ごとなのはいいとして、経験値をカウントする単位(広さ)は何にすべきなのでしょうか。一つの案は当然国単位なのですが、既存のサイトがあったりしますし、アメリカ宿泊で4点かーというのもちょっと大味すぎる気がします。ですので、その次の単位、すなわち日本だと都道府県、アメリカだと州くらいがいいのではないでしょうか。

県とは?

その国の次(下位)の単位とはどう定義すればよいでしょうか。名前をとってみても、都道府県(prefecture)・州(State)・地域圏(région)・省・道などなど国さまざまです。何か都合のいい定義がほしくなるところです。

ISO 3166

そんな都合の良い国際規格がちゃんとありました。ISO 3166です。ISO 3166-1は国のコード、ISO 3166-2はその下の地域のコードを定義したものです。

たとえば、ISO 3166-1 alpha-2(アルファベット2文字のコード)では、日本はJP、アメリカはUSと定義されています。そして、ISO 3166-2:JPは、日本のその下位の地域、すなわち都道府県が定義されており、茨城県はJP-08、香川県はJP-37のようなコードが与えられています(この数字は、全国地方公共団体コードが使われていますね)。アメリカのISO 3166-2:USも、カリフォルニア州はUS-CA、アーカンソー州はUS-ARとそのままで定義されています。

ちょうど良さそうですので、このコードを用いてグローバルな経県値を定義することにします。

ExpWorldの実装

ということで、作ってみました。国のテーブルの名前をクリックすると、各国の地域ごとに経験値を記録することができます。

このサイト(GitHub Pages)で運用するために、静的なコンテンツのみで構成する必要があります。ですので、バックエンドにはAPIサーバーなどを必要とせずに、ブラウザだけで動くようになっています(そのためデータの保存先は、ブラウザのLocal Storageか、ダウンロードによってローカルマシンということになります)

ソースコードはこちらです。ライセンスはApache-2.0 Licenseとしています。

使ったライブラリ

下記のライブラリを使用しています。

地図ライブラリについては、少し前に使ったのでその続きという感じです。あとは、このblogと同じですね。

使ったデータ

今回の問題は(というよりいつも?)表示するべきデータです。

必要なのは、

  • ISO 3166の情報 (特にISO 3166-2)
  • ISO 3166-2に定義されている地域それぞれの地図情報

の二つです。

ISO 3166-2は国ごとに定義されているので、かなり膨大な量になります。ISO 3166-1だけなら頑張れば手入力で作ることができると思いますが、ISO 3166-2のほうはかなりつらいです。

探したところ、それぞれ

が見つかったので、これらを用いることにしました。

後者はOpenStreetMapのデータ(planet.osm)から変換して作られたもののようです。確かにOpenStreetMapはISO 3166-2などの行政区画情報も入っているので、うまく引き出せば使えそうなのですが、結局巨大なDBからがんばって取ってくるしかないようなので、地図といて以外ではなかなか使うのが難しいデータですね・・・。

なお、これだけだとやはりデータが巨大になってしまうので、mapshaperを用いて単純化しています。

そのほか

Future Work

  • 境界の形がおかしい国・地域がある
    • とりあえず目立つのは、南アフリカと台湾でしょうか。南アフリカはレソトなどがあるせいで、内側と外側がうまく判定できなかったんですかね・・・(トポロジーとか変なことがおきそう)。
    • この二つは、単純化しない状態でも形はほとんど変わらなかったので、元々の変換がおかしい可能性があります。自前でOSMのデータからの変換処理を書かないといけないのかもしれません・・
    • 他方、例えばバチカン市国は単なる三角形になってますが、これは単純化処理のやりすぎな気がいたします。
    • そもそも境界が、陸地ではなく領海とかも入った図形になっているようです。これはこれで元データの性質なので、しょうがないところですが・・。
  • ローカライゼーション
    • とりあえず最低限英語作っておけばいいやというやる気の無い感じなのですが、まあ日本語は作っておきたいところですね。
  • 国単位の経県値と地域単位の経県値の関係
    • 実は、今のバージョンではこの二つは完全に独立してしまっています(なので、東京都は居住でも日本は宿泊扱いみたいな矛盾した入力もできてしまいます)。スコアもバラバラなので、地域単位の経験値の合計が国単位の経験値の合計になっているわけでもありません(というか前者のほうがはるかに大きくなるはず)
  • 一覧性が足りない
    • 各国のデータを入力できるようになっているのですが、その結果を一覧して眺めるというのが逆に難しくなっています。すべての国の第2レベルまで一つの地図で表示するのはわかりにくいのでどうしたものでしょうね。こういう情報を見やすくどのように表示するかというのは、十分ユーザーインタフェースの研究とかになりそうな感じです。
  • 経県値のカスタマイズ
    • いまは決められた6段階で固定になっていますが、人によってはカスタマイズしたくなるかもしれません。たとえば、その地域の主たる都市で経験した場合にはポイント2倍とか(つまり、日本だと都道府県庁所在地で宿泊した場合には2倍とか)、もう少し段階を細分化したいとかいろいろあるでしょう。そういったカスタマイズ機能が必要になるかもしれません。他方、人の値と比較するのが難しくなりますが(現状もしづらいのですけど)
  • データのサーバー保存
    • サーバー側でデータを保存できるようにするというのも、もしかしたら必要かもしれません。ランキングとか作れるようになりますしね。とりあえずは、逆に保存しない(できない)ことで安心してお使いいただけるということにしておきましょう。

余談

なお、iso3166-2-dbでは、dispute/UN ディレクトリのデータを使用しています。ええ。単純に国や地域の正確な網羅的なデータがほしいと言ってしまうのですが、「正しい」一つのデータというのは存在しえないのが世の中の難しいところですね。国内であっても、富士山山頂付近の静岡県と山梨県の県境みたいな問題はありますからね。

今回は、経験値の数値化と単なる可視化をしたかっただけですので、元にしたデータをそのまま利用しております。それ以外の意図はまったくありません。ですので、たとえば北海道や島根県の領域をじっくり見て何かの意図を感じるのは完全な間違いです。

もっと余談

タイトルは何も思いつかなかったので、「世界をわが手に」(The Trouble with Bubbles)によります。SFの原作ではなく、ぱにぽにだっしゅ!第3話の次回予告(「世界は我が手に」)からです。響きが良いからというだけで他意はありません。

まとめ

ということで、グローバルな経県値を管理するためのWebサイトを作ってみました。やっぱり、データに多少問題があっても可視化されるとうれしいものがありますし、作るのもやる気がでてきます。可視化できるシステムは、やっぱりいいなという気持ちになります。行ったことのない国でも、第2レベルの行政区画がどうなってるかを見るだけでもなかなかおもしろいと感じますしね。

まあその一方で可視化するためのデータを収集して整備するところが大変だったりするので、世の中楽なことはないというところですかね。

ちなみに、自分の国単位の経県値を入力したところ、たったの83点でした。世界は広いですね。