Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
13
Help us understand the problem. What is going on with this article?
@hashikei

ゲームのマスターデータのフォーマットはcsvよりtsvがオススメ

概要

モバイルゲームを開発する際は、ExcelやGoogleスプレッドシートなどでマスターデータを管理し、csvとしてエクスポートしてgit管理するといった運用をわりと見かけます。
最近、クライアント/サーバー間でやりとりするマスターデータのフォーマットをcsvからtsvに変えたところ、とても使い勝手が良かったため紹介します。

tsvとは

タブを区切り文字として使用したデータ形式。
csvはカンマを区切り文字とするが、そのカンマ(,)がタブ(\t)になったもの。
具体的には以下のようなテキストデータとなる。

csv
name,hp,atk
スライム,10,2
ゴブリン20,4
tsv
name\thp\tatk
スライム\t10\t2
ゴブリン\t20\t4

tsvのメリット

  • 言語やライブラリへの依存がとても少なく、シンプルにパースすることができる
  • わりと最近のシステムだとcsvファイルとして普通に読み込める

コードサンプル

C#でtsvを出力
var line = string.Join("\t", fields);
C#でtsvをパース
var fields = line.Split('\t');
PHPでtsvを出力
$line = implode('\t', $fields);
PHPでtsvをパース
$fields = explode('\t', $line);

tsvのデメリット

  • 文字列中にタブを使用したい時は別の文字列に置換する必要がある
    • マスターデータでタブを文字列として使用したいシチュエーションはあまりないが…
  • 古いシステムだと読み込めないものがある

csvのメリット

  • とても一般的に使用されている
  • 以下略

csvのデメリット

  • tsvのようにシンプルにパースすることができない
    • 後述のようにダブルクォーテーションを考慮する必要がある
  • 文字列としてカンマを使用したい時はダブルクォーテーションで囲う必要がある
  • ダブルクォーテーションを使用している箇所と使用していない箇所が混在しがち
  • tsvに比べてロジックが複雑なためパースコストが高い
    • シンプルにカンマ区切りでパースするだけならtsvとコストは変わらないが、マスターデータでキャラクターの説明文にカンマを使用するなど、カンマを文字列として使用したいシチュエーションがわりとあるため
  • ライブラリによっては細部の対応オプションが異なる

まとめ

tsvからcsvへの変換は容易なため、非エンジニアがマスターデータを参照する時はcsvとして扱いつつ、クライアント/サーバー間のやりとりはtsvとして扱うなど、柔軟に使い分けられると双方のメリットが最大限に活かせるのではないかと思います。

13
Help us understand the problem. What is going on with this article?
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
hashikei
調べた技術を書いてます。
techtrain
プロのエンジニアを目指すU30(30歳以下)の方に現役エンジニアにメンタリングもらえるコミュニティです。

Comments

No comments
Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account Login
13
Help us understand the problem. What is going on with this article?