Akatsuki Hackers Lab | 株式会社アカツキ(Akatsuki Inc.)

Akatsuki Hackers Labは株式会社アカツキゲームスが運営しています。

Redashで見栄えを良くしよう

この記事は Akatsuki Games Advent Calendar 2025 16日目の記事です。

はじめに

サーバエンジニアの井出です。今年新卒で入社して、主に新規機能開発を行っています。また自分自身のサブタスクとして、チームのデータ分析も行っています。本日は自分がデータ分析のタスクの中で、「これ良いTipsだな」って思ったことを書かせていただきます!

注意書き

本記事では、実際にタスクを進める中で学んだ事を記事にしています。そのため、一部内容を変更している箇所があります。伝えたい内容に影響はないのでご了承ください...。

概要

データ分析のタスクは、年間の売上分析、使用キャラランキングから、お問い合わせ対応時の調査まで、多岐にわたります。これらの多様なデータ分析タスクに対応するため、エンジニアやプランナーなど職種を問わず誰でもデータにアクセスし、クエリを叩いて調査できるようにする環境を整えられるよう、BIツールとしてRedashを導入しています。

Redashとは

Redashとは、ブラウザ上でSQLなどのクエリを実行し、結果をグラフや表として可視化できるオープンソースのBI(ビジネスインテリジェンス)ツールです。

ある日...

分析タスクとして「あるプレイヤーの戦闘ログから、どのキャラクターがどのスキルを使用したかを調べてほしい」という依頼が来ました。

そのため、BigQueryで以下のようなクエリを作成して調査を始めました(内容は少し省略しています)。

SELECT
  player_id,
  skills,
  timestamp
FROM
  <戦闘ログのテーブル>
WHERE
  player_id = <player_id>
ORDER BY
  timestamp DESC

実際に上記クエリを実行すると、以下のような実行結果を得られました。

上記の結果から、「最近の戦闘で、キャラクターIDが2351のキャラクターは200331000のスキルを発動した/キャラクターIDが7128のキャラクターは200469000,200183000のスキルを発動した...」などのことがわかります。

Redash上でクエリ作成して実行した結果

上記のクエリをRedashで作成し、実行すると以下のようになってしまいます。

skillsカラムのフィールド情報が崩れてしまっています。 これでは「skillsカラムが何を表しているのか」がぱっと見で分からない状態です。

原因調査

なぜ崩れてしまったか調べていると、公式ドキュメントの[Table Visualization Options] → [Formatting Columns]で以下のように説明がありました。

Redash is sensitive to the data types that are common to most databases: text, numbers, dates and booleans. But it also has special support for non-standard column types like JSON documents, images, and links.

上記の文章から、Redashは、データベースから返ってくる型情報をそのまま表示させるが、型が不明確なRECORD型は「とりあえずテキスト」として扱われてしまいそうな事が分かりました。

そのため、skillsカラムのフィールド情報を綺麗に表示するには、RECORD型をそのまま出力するSQLを書くのではなく、SQL内でRECORD型の中身を展開する必要があります。

「なんかうまく表示できるような展開方法ないかなぁ〜」ってRedash設定を色々見ていたら、カラムの出力設定に以下のような記述があり、カラム毎にHTMLコンテキストを埋め込めそうな雰囲気があります。

HTML埋め込んでみる

この機能をskillsカラムに応用して、見やすい形式にしたクエリが以下です。

SELECT
  player_id,
  '<ul>' || (
    SELECT
      ARRAY_TO_STRING(
        ARRAY(
          SELECT 
            '<li>Character ID: ' || CAST(s.character_id AS STRING) || 
            ' / Skills: ' || 
            (SELECT ARRAY_TO_STRING(ARRAY(SELECT CAST(id AS STRING) FROM UNNEST(s.ability_ids) AS id), ', ')) || 
            '</li>'
          FROM UNNEST(skills) AS s
        ), 
        ''
      )
  ) || '</ul>' AS skills,
  timestamp
FROM
  <戦闘ログのテーブル>
WHERE
  player_id = <player_id>
ORDER BY
  timestamp DESC

Redashで上記を実行すると、以下のように出力されます。

無事HTMLを埋め込む事ができました! 最初の出力結果と見比べると、断然見やすく、分かりやすくなっていると思います!

最後に

今回はRedashで出力カラムを見やすくする方法を解説しました。
普段Redashでは「誰が見ても分かりやすい状態を作る/誰でも触れるような状態を作る」という事を心掛けてクエリを作成しています。

こういった、誰かを思いやるような「気づき」の精神は会社全体の様々な場所で見受けられます。
例えば、過去に作成された莫大な量の仕様書を、AI活用して誰でもすぐ見つけられるようにする、データ入稿を一部自動化して工数を削減する、データ入稿に間違いがないか差分を正確にチェックするツールを作るなど、様々な工夫がなされています。

このような精神をこれからも大事にして仕事をしていければと思っています!

免責事項

掲載している情報の正確性には細心の注意を払っておりますが、執筆時点(2025年)の情報であり、今後のツール(Redash/BigQuery等)のアップデートにより仕様が変更される可能性があります 。