B-Teck!

お仕事からゲームまで幅広く

【雑記】学ぶ方向性の選択と集中

新卒の頃から意識している成長法に、死にながら成長するというのがある。
単に無茶ぶりの仕事を倒しながら死んで、結果成長するというのもあるし、
脳が働かなくなるまでとりあえず情報を脳に叩き込み続けて、
つながりを探しながら咀嚼するみたいなことをして勉強をしてきた。

今でもこの習慣は続いていて、毎日複数回はてブのテクノロジータブを開いて流し見するし、
Feedlyの技術系フォルダには山程そういったサイトの更新が表示されている。

この生活のメリットは、自分の技術スタックの範囲外のニュースでも大体目を通すことになること。
否が応でも関連性を意識させられるので、業界の大まかな流れや、流行りなんかがわかるようになる。
デメリットは単純で、情報に溺れて死にがちという点。
少しでも足を止めるとすぐ濁流に飲み込まれるし、追いつこうにも膨大な未読の山ができる。

そういう生活をして20代を過ごしてきたけど、結婚して、
30を目の前にして時間の使い方を考える必要が出てきた。
要は選択と集中で、考えれば当たり前のことなんだけど、
必要とするもの、興味のあるもの、伸ばしたいもの、
それらに絞って掘り下げることが必要なタイミングになってきたのかなぁと思う。

それでいて、今まで広く浅く領域を知っていることで立ち位置を築いて来たのもあって、
果たしてその方法で自らのレゾンデートルを見つけることができるのかという不安もある。

経験年数でいえば7年目で中途半端だし、年齢が区切りになるわけじゃないけど、
不思議とこの一年は色々な物を考えてしまいがち。

【API開発】稼働中のAPIサーバーリプレースの難しさ

TL;DR

  • I/Fや仕様が明確でないものを再現しながら移行するのは大変
  • まずは情報を集約し、目指すべき形を見つけること
  • 既存の実装やシステムへのリスペクトを忘れずに

はじめに

現職に転職して、昨年の4月からアプリのサーバーサイドの開発を行うようになりました。
昨年の4~9月は主に既存のものの追加改修を、10〜4月はアプリ側も含めたフルリニューアルを、
今年度に入ってからはサーバーサイドのみのリプレースという形で、開発を行ってきています。

昨年度はアプリも含めたフルリプレースだったので、すべてのAPIのI/Fをゼロから定義し、
わかりやすいアーキテクチャで作り直すことができました。
しかし今年度行っているのは、稼働中のものとは別に新しくAPIサーバーを再構築し、
既存のアプリに影響ないようダウンタイム無しで移行を行うという作業です。
これは、昨年度行ったリニューアルとは比でなく難しく、大変な作業だなと感じています。
何が辛いのか、どういう方針で立ち向かっているのかについて書いていきたいと思います。

何が辛いのか

IFが定義されてない

開発当初はただのバックエンドの土管として想定されていたようで、
アプリがバックエンドのAPIのパラメータを組み立て、
バックエンドから返却されたレスポンスをそのままアプリに返すような実装でした。
(サーバー側でパラメータの付与・置換を行ったり、レスポンスを加工しているものも存在しました。)

つまり、サービスで利用するAPIとして、どういったリクエストを受けるべきで、
どういったレスポンスを返すべきなのかという定義を行う層が曖昧となってしまっていました。

仕様があまり明確ではない

なぜ共通の処理をもっているのか、どういう意図でまとめなかったのかなど、
実装の理由が不明で、当時の関係者にヒアリングをして回って、調査する必要がありました。

独自フレームワークを使っている

過去に社内で作られたフレームワークを利用して開発が行われていました。
このフレームワークの利用経験がいくらかあればまだ違ったのですが、
入社以降あまり触ったことがなく、ググってトラブルシュートするなども難しかったです。

最終的に目指すべき形

アプリ向けサーバーの最も考えるべき要件は、アプリの開発しやすさだと考えています。
公開するI/Fは最低限とし、複雑な加工が必要な箇所はサーバーで加工して返却するなど、
利用する際に考えることなく利用でき、本当に必要な箇所に意識を向けてもらえる状態こそが、
あるべき形であると考えています。

整理されたI/F、仕様は追加開発や施策の検討のための思考の余力を残し、
より加速したサービス開発を行うことができるでしょう。

やりきるための進め方

  • 一般的なフレームワークに寄せる
    幸い、以前の担当者がJerseyで新サーバーを構築し、移植を始めてくれていました。
    この資産をベースに、よりシンプルな形で再構築を進めています。
  • 必要なIFだけを定義
    アプリと旧サーバーのロジックを追いかけ、定義されるべき値を洗い出します。
    また、同じような概念はきちんと共通化されたEntityを用いるようにしています。
  • 仕様の整理とドキュメント化
    現状の仕様があまり明確ではなかったため、まずは情報の整理を進めました。
    ヒアリングした仕様をドキュメントやコメントに残し、ロジックをシンプルにして、
    正しい状態が何であるかがわかるようにしています。

忘れてはならないこと

ここまで色々書いてきましたが、リプレースに於いて絶対に忘れてはならないことがあります。
それは、既存のものに対してリスペクトを持つことです。
稼働しているものは間違いなく価値を生み出しています。
そこに対しての敬意を忘れてはいけません。
現在の形になっているのはそうせざるを得なかった理由があるはずです。

行うべきはそれらを紐解いて、整理し、より大きな価値を生み出すことです。
どうすることが最も良い状態を生み出せるかを一番に考えて進めましょう。

【ゲーム】今更 Papers, Pleaseをクリアした

f:id:beatdjam:20190924231424p:plain
全編日本語化されているので、安心してプレイできる

Papers, Please、知ってますか?

タイトルに今更って書いた通り、2013年のゲームなんですけどね。
インディーゲー界隈では相当有名な作品で、Steamでも圧倒的に好評がついてます。
store.steampowered.com

端的にいってしまうと、戦後真っ只中で治安最悪の架空の共産主義国家で、
入国審査官としてひたすらパスポートの矛盾を指摘したり、テロを未然に防いだり、
時にはワイロをもらって見逃したり…といったお仕事シミュレータです。
これだけだと何が楽しいの?って感じですよね。

細かい世界観の描写が良い

ゲーム内では直接国内の情勢や動きが見れるわけではないんですけど、
その代わりに毎朝業務開始前に新聞を読むことができます。
f:id:beatdjam:20190924232236p:plain

新聞に載っている出来事は、直接業務に影響のあるものもあれば、
ただのフレーバーとしてのテキストもあり、作品世界の動向を想像するのにとてもいいんですね…
特定の国家と緊張状態になれば入国の締め付けも厳しくなったり、逆も然り。

また、一部の入国者にはその背景を想像させるような会話やイベントもあったりして、
パッと見はチープな絵なのに、世界観にのめり込む要素がいっぱいです。

お役所仕事を体験できる

これは人によってはうーん?って思うかもしれないんですけど、
そもそもお仕事系シミュレータやるひとって、ある種の「面倒くささ」を求めてると思うんですよね。
このゲームはそんな「面倒くささ」でいっぱいです。

頻繁に変わる入国規則、当たり前のように変わる必要書類とフォーマット、
印章や、些細な部分だけが間違っているパスポート…
それだけの業務をこなしても得られるのは薄給で、主人公には養わなければならない家族がいる…

一日の終りに支払われる給与は、家賃や暖房の燃料、家族の食費、時には病気の家族の為の薬代に消え、
裕福な暮らしなど夢のまた夢です。
プレイしたくなってきませんか? f:id:beatdjam:20190924232654p:plain

ぶっちゃけこのゲームの面白さなんて語り尽くされてるんですけどね

このゲーム、色んな所で話題になっているし、記事だって探せばいくらでも出てきます。
でも、自分でプレイして、選択をして、その結果を見る体験は、是非してほしいなと思います。
最初の数回は、なかなか大変かもしれないですけどね…
それでもプレイする価値はあるゲームです。

それでは、アルストツカに栄光あれ! f:id:beatdjam:20190924235406j:plain