B-Teck!

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

【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

【雑記】ブログ独自ドメイン化+AdSense再審査を行いました。

PV累計50万行ったので記念に独自ドメイン化しました。
その過程で色々やったので備忘がてら書いておきます

基本的には下記の記事の形で進めました。 https://blog.hatenablog.com/entry/2018/02/26/110000

1. お名前.comでドメイン取得

  • ドメイン取得
  • ブログ用のサブドメインを設定(うちでは blog )

2. はてなブログ側でドメイン設定

ドメイン設定からhttpsの証明書が発行されるまで数分程度のラグがあり、
その間はサイトにアクセスすると証明書エラーが出るので、ピークタイムを避けるのがベター。

3. 念の為Search Consoleのタグを配置して確認

はてな内で301リダイレクトがかかっているので、通常は順次インデックスされていきます。
でも念の為登録しました。
アドレス変更ツールのリンクがもう見つからなかったので、プロパティとして新URLを登録したのみです。

4. Google Adsenseにサイト定義を追加して再審査申請

はてなブログ+Google Adsenseは相性が悪いらしく、一ヶ月ほど試行錯誤しながらどうにか通過。
やったこととしては…

  • Adsenseのサイト一覧から旧サイトの定義を削除
  • URL転送でwwwつき、なし、サブドメインなしのURLでブログトップを表示できるように
  • Search Consoleでサイトマップ送信(効果不明)
    • /sitemap.xml
    • /sitemap_index.xml
    • /sitemap.xml?page=1 (最後まで認識されなかった…)
    • /sitemap.xml?page=2 (最後まで認識されなかった…)
  • サイトの停止または利用不可 がでなくなるまでひたすらリトライ…

5.備考

  • Google Analyticsはサイト移行時に特に対応いらなかったです
  • Adsenseの審査は何が悪くて落ちているのか結構分かりづらいです。。。
    • アフィブロガーが書いた焼き増しみたいなゴミ記事が多すぎて、正直何が正しいのか
    • Adsenseのコミュニティで質問しても、はてなブログは相性が悪いから…他で運営したら…みたいな回答がつきます