雑記(50)プログラミング(29)ハードウェア(16)伺か(12)ツール等(10)漫画読み(43)漫画描き(19)アニメ感想・考察(24)鉄道(2)ネットの諸々(10)インフォメーション(8)未分類(0)現在は実質目黒東部のなにかプロフィールAuthor:奈良阪某プログラム書いたり絵を描いたり鉄道に乗ったりしています。こんなアイコン株式会社ドリコムに新卒で入って3年目、スマホゲームサーバーのRailsとか、新規サービスのTypeScriptとか、Elixirとか、少しPythonとか、なんかよくわかんない組み合わせですがどれも並行してざくざく書いてます。弊社最近JavaScript開発知見がなかったのでむしろしがらみがなく、趣味でやってた自分好みのTypeScript開発体制をスッと入れられてほくほくしています。最近github.com/Narazakaの上の方に上がってきたswagger云々とかのTypeScriptのプロジェクトは、仕事で環境整備しているのの切れ端だったりします。趣味では伺かというデスクトップマスコットのWeb移植版を作ってたけど時間が取れずに停滞してたり、RPGツクールで同人ゲーを細々ツクってたり、漫画を読んだり描いたり、鉄道に乗ったり、アニメやギャルゲのオープニングムービーを愛でたりしてます。マスターデータ管理を優しくExcelから解き放つこれは筆者が新卒でスマホゲームの運営に入って感じた「マスターデータのExcel運用」のしんどさを解消するために開発・導入した、ドリコムにおける新しいマスターデータ管理方法(2プロジェクトで運用中)を紹介する記事になります。(地味に社内向け紹介記事も兼ねていたり)以下スマホゲーム運営関係ない人向けの前振りが長いので、そんなことはいいからどんな手法か知りたいという方は「YAMLをExcelファイルに逆変換できるツール、作りました。」とか「seedtableでの運用方法サンプル」の章から読んでください。YAMLをExcelファイルに逆変換できるツール、作りました。(追記)マスターデータとはさて弊社、スマホゲームを主要事業の一つとしています。スマホゲーム業界において特徴的に見られて、かつ聞くところによると近隣他業種にはあまり見られないらしい問題として、「マスターデータ管理」というものが存在します。あるスマホゲームでは、ユーザーに関係なくあらかじめ運営者が設定しておくべきデータ(例えばキャラクターのパラメーターなど)があります。これをマスターデータと呼びます。多くのスマホゲームは出して終わりではなく継続的にイベントなどをリリースして行く運営スタイルであるため、そのマスターデータの更新操作や新たなデータ形式の追加が頻繁に発生します。その頻繁さたるや、最終的にユーザーに公開するタイミング以外にも、その前段に入るゲーム特有の「バランス調整」という作業により、開発環境では数分に一回ペースで更新が走ることもあります。(最近のコンシューマゲームなどではDLCなど継続更新運用っぽいことをしている場合もあるので、同じ悩みを抱えていたりするのでしょうかね......?)さて、そんな無茶苦茶な頻度で更新されるゲームデータをゲームプランナー(企画)さんが入力するツールはというと?みなさんおなじみ、Excelです。Excelは使いやすいExcel、特にプログラマ中心に人によっては複雑な感情を持っていたり、または忌み嫌っていたりするツールだと思います。そんな人が出るほどにあらゆるところで使われている所以、「誰でも使えてカスタマイズしやすい多機能な表計算ソフト」として確立された性能は優秀の一言に尽きます。プランナーさんがデータ入力する時、同じデータや連番IDをジャッと一発で入力したり、数式でいろんなパラメーターを体系的に弾き出したり、いい感じにメモしたり、セルに色つけて注意を促したり、VLOOKUPでまとめシート参照して定型値ブチ込んだり、まあ我々横から眺めているプログラマーたちからするとよくそんなに色々やるなというレベルでいろいろされます。それもこれも効率の良いデータ作成のため。Excel並に使いやすい(←これハードル高い)専用ツールがあれば一番良いのでしょうが、大抵はデータベースのテーブルにそのまま値を突っ込む作業になりますし、(慣れもあるでしょうけど)がっつりツールを作りたいっていう企画の人は今の所弊社にはいないようです。近い他社の人に聞いてみても今の所みなExcelで、専用のツールがあるという話はまだ聞いていません。(あったら教えてください)Excel(.xlsx)の管理はしんどいそんな使いやすいExcelにも適用範囲が存在します。Excel上で一人で表形式データの編集をする時のみがExcelが使いやすい利用ケースです。バージョン管理をするなどのマスターデータ運用においてよく出てくるユースケースについては軒並み激烈に相性が悪いです。gitリポジトリ容量がめちゃくちゃ膨れるなどの現象が起こります。基本的にExcelの保存形式(.xlsx)が妨げになっている感じはあります......。逆にこれらと相性が良いのはテキスト形式です。CSVやJSONやYAMLなら「複数人でいじるためにgit管理して差分を見たりマージしたりする」「プログラムで自動化する」なんてのは朝飯前でしょう。JSONやYAML形式をそのまま編集するのは苦痛の極みだと思います。CSVにしたって、Excelの式とか色とかメモとかマクロとかが軒並み使えないので編集しやすさには雲泥の差があります。この中で一番git差分が見やすいのはYAMLだと思います。カラム値が変わるのがちょうど1行差分になるのでCSVとかと比べてごっつ見やすいです。ExcelのUIでYAMLをいじれれば最高なのでは?思った。「使いやすい編集UIであるExcel」で「使いやすいデータ形式であるYAML」を編集できれば最強なのでは......と。現実的にはExcelファイルをYAMLに変換はできるけれど、YAMLをExcelファイルに逆変換することは不可能なので、この構想は実現できない......。YAMLをExcelファイルに逆変換できるツール、作りました。髪が長いというYAMLが相互変換できます。YAMLのデータをxlsxファイルにほぼ安全に書き戻せます。・書き戻しても数式もマクロもそのまま!・書式設定や入力規則も(列ごと限定ですが)大体残ります。・(条件付き書式は怪しいところがあるらしい......。あとマスターデータのシート自体にそんなに入れないのではないかと思いますが、グラフとかOLEオブジェクトは無理です。)Excelの便利な機能を大筋損なうことなく変換を可能にしました。(EPPlusライブラリ様様です)CUI版もGUI版(設定してからxlsxファイルをD&Dするだけ!)もありユーザビリティも十分。monoを使えばLinuxやMacでも動作するのでCIとかにも入れられます。(変換も高速なのでxlsx→yaml変換だけしかしない場合でも置き換えオススメ)というわけで、このツールによって、「使いやすい編集UIであるExcel」で「使いやすいデータ形式であるYAML」を編集することができ、新たなマスターデータ管理の可能性が拓けるはずです。seedtableでの運用方法サンプル説明用に下記のようなサンプルリポジトリを作りました。https://github.com/seed-ui/seedtable-masterdata-repository-exampleseedtableを利用し「使いやすい編集UIであるExcel」で「使いやすいデータ形式であるYAML」を編集する、弊社における新しいマスターデータ運用方式の例です。これは実際にseedtableを導入した新規スマホゲーム2プロジェクトでのマスターデータリポジトリを、雰囲気でサンプル用に再現したものです。master_dataがアプリケーションのDBに入れるマスターデータです。gitで差分がわかりやすいように、IDごとに分割されたYAMLファイルになっています。これをてきとうなスクリプトで不要カラムを消し、テーブルごとの1ファイルYAMLにまとめるなどして、最終的なDB投入コマンドにかけます。編集後データが入ったExcelファイルからmaster_dataへとデータを書き出し(同じくseedtable-guiにD&D)という手順で行います。単純なExcel編集の前後に操作が増えていますが、ごく簡単な作業なので、得られるメリットに対して許容できる範囲ではないかと思います。(弊社では実際これで回りました)Excelテンプレートは基本的にアプリケーションにテーブルを作るエンジニアなどが最初にExcelで作り、適宜カラム追加や式が必要な時などにメンテしていく感じです。・1行目にカラム名の説明(ID、名前、等)・2行目にカラム名(id、name、等)・3行目にID=1のデータを作って数式や書式を設定します。Excelテンプレートに数式や書式設定をいれておくと変換後のExcelにも反映されるので、便利に編集が行えます。seedtableが担う部分はExcelとYAMLの相互変換の部分のみなので説明としてはこれだけですが、こうすることによって、Excelファイルがほとんどプログラム側に出てこないようになります。gitリポジトリからして単にYAMLの差分を見る場所になりますし、実質Excelが登場するのはほぼプランナーPC上のみです。中央集権で変換することもなくなるのでデータ反映もはやくなります。これまで大元がxlsxファイルであったマスターデータが本質的に大元YAMLファイル形式になることによって、マスターデータはマージできて、差分が見られて、本来のバージョン管理ができるものになります。https://github.com/seed-ui/seedtable-masterdata-repository-example/pull/1/filesこれ以外の.xlsxな差分はナシ!seedtableと今後これによってプランナーPC上でExcelからYAMLファイルが生成できるようになったということは、Excelの機能性の恩恵を受けつつ、かつその上で十分簡単にほかのプログラムもマスターデータを扱えるようになるということです。いうデータチェックツールを作ってみました。プランナー手元でデータをExcelからYAMLに書き戻した後にバッチファイルを叩くことで、PC上ですぐにデータチェックが完結します。(導入したてなのでバッチファイルですが、需要があればファイルのwatchなんかもしたいです)データ不整合チェックはもちろん、全マスターデータを読み込む任意のチェックがかけるので、「運用上こうするべき」といったようなゲームに密着したチェックも書けるはずです。こんな感じのHTMLが出力されます(リポジトリにあるexample)特徴としては、TypeScript製でありながらActiveRecord/ActiveModelっぽいAPIなライブラリになっています。Railsなので学習コストを鑑みた結果)TypeScript、つまるところJavaScriptなのは、プランナーPCにnode.jsやelectronなzipをダウンロードさせるだけでほかのインストールなしに使えることを重視したからです(Rubyなどだとランタイムセットアップの手間と維持コストがある)。アプリサーバーと言語が違う(RubyとTypeScript)こと、アプリサーバーと別プログラムであるためテーブル定義は実質同じことを2回書くことになるなど、ややメンテナンス性に課題はあります。(テーブル定義についてはスキーマから自動生成とかしたいですね......)しかしともかくこういった手元チェックツールを同時に導入することで、Excelを使った快適なデータ編集とこれ以上なく素早いデータチェックが実現し、本質的なゲームの価値担保のみに注力するための土台が整うのではないかと思います。まとめ・弊社ではExcelをスマホゲームデータ入力に使っていたがつらみがありました。いうツールを作りました。・新規プロジェクト2つにseedtableを使った新しいマスターデータ管理方式を導入し、運用しています。・リポジトリ軽量化などが見込め、マスターデータ管理がプログラマーにもプランナーにも優しくなります。までお問い合わせください(Twitterとかissueとかなんでもどうぞ)。いうのも作ってみて試験運用しています。こちらも何かあればどうぞ。いつともしれない未来に理想のツールができるまで、Excelとの付き合いは続きます。付き合うならExcelユーザーとプログラマー、お互い幸せな付き合い方をしてゆきたいですね。明日10日目分はひさのんさんの「デザイナーへターミナルのすゝめ」です。Spreadsheetがよく挙げられると思います。Excelの多機能さやある程度の軽快さをGSが持っていないこと(というかGSが重い)、慣れ親しんだ操作感との違いなどの要因からか、比較した時の評判はあまり芳しくないようです。GSは同時編集も大きな特徴としていますが、実際途中まで使ってからこのExcel+YAML新方式に切り替えたチームに聞いたところ・同時編集できても、反映タイミングは人によって違うのでメリットになっていない・同時編集"できちゃう"ので予期せぬデータ変更起きそうな気がしたという意見が聞かれて、必ずしもマスターデータ運用に対して有利に働くものではないようです。Spreadsheetを使っているので普通に運用可能と思いますが、GSと上記方式それぞれ一長一短があるという印象です。(追記)はてブのコメントで「逆変換でマクロ含めて元に戻せるのは凄いが、まともなyamlエディタこそ欲しい。seed-ui/SeedsonTableフォーマットとか日付入力はもちろん、seedtableでは出来なかった表計算UI時点での複雑なデータチェックなども出来る表計算ソフトっぽいやつです。プログラマがスキーマ的なものをJavaScriptで定義することで自由に制約がかけられる感じにしてます。特徴的なのは、セル内数式を使わず、スキーマの時点で数式的な処理を記述すること。そのへんの自動化系管理がプログラマを経由するように働き、改善行動コミュニケーションが一元的にとりやすくなるのではないかと思っています。(数式の変更もgitで管理できるし)ただやはりExcel(←ものすごく使いやすい)慣れしているプランナーに使ってっていうにはまだ苦しい感じ(オートフィルからして微妙)なので、まだ積極的に宣伝できる水準には遠いと思っています。こんな位の機能で良いという需要があれば使ってみるのも良いかも知れません。あと改善プルリク下さい。04:08なんか忙しくて放置してたら11月になってた......。まとめないと棚にしまえないので投稿しておく次第です。大学漫研先輩漫画まとめ本。1巻だけもらってたのでのこりを入手。魔法陣グルグルの大団円から始まったら、みたいな感じ。百合しいうちのこ設定まとめ&イラスト本的なやつ。