外部サービスと連携するための開発の流れ

はじめに

オプティムのOptimal Bizチームの于(う)です。入社してから新人研修の時期を除いてずっとOptimal Bizチームに所属しており、今は六年目です。

Optimal Bizに関しては以下を参照 www.optimalbiz.jp

最近ではOptimal Bizにはテレワークを支援するための関連サービス、Optimal Biz Telework もリリースしました、以下を参照 www.optimalbiz.jp

普段の業務では主にRuby on Railsによってのサーバー側の開発を行っており、現在はOptimal BizのAndroid EMM(Enterprise Mobility Management )を担当しています。

今回ではとあるクラウドサービスとの連携を行ったのでその経験と勉強になったことを紹介します。。

調査・検討

  • 公式ドキュメントの調査。
    • まずは正式のマニュアルを参照してプロトタイプを作ります。
    • プロトタイプによって最小限必要なAPIがわかります。
    • プロトタイプと並行に利用する予定はあるかどうかに関わらず全てのAPIの全部のパラメータ、実行結果などを整理しました。
    • チーム全体にプロトタイプを説明して全てのAPIも共有します、他に利用できるAPIがあるかどうかも検討。

運用設計

  • 今回は運用設計を行いました。
    • 特にボトルネックになりそうな実装・設計あるかどうか、潜在的に問題になりやすいところあるかどうかについてを調整・整理します。
    • エラー監視・サーバ監視・ドキュメント監視なども重視します。

開発の流れ

APIを叩くためのJWT認証実装

  • 今回の対応したサービスはJWT認証を利用してるのでまずはJWT認証を実装しました。
  • 認証用にはJSONとクライアントIDを取得。
  • 今回ではAPIアクセスするための正式なライブラリは存在しますが、Javaとnode.jsのバージョンだけです
    • Railsの環境での直接の利用はできないので対策は以下の二つ
      • Railsの環境でJavaかnode.jsを動かしてからコマンドなどによって正式なライブラリを利用します、実際に実装したら以下の問題があるため見送ります。
        • Rubyを通じて他の言語を動かすのはなかなかうまくいかない。
        • 環境のメンテも複雑になります。
        • これからの修正も難しくなります。
      • ライブラリーの内部の処理を参照してRuby版のライブラリを作ります。※こちら採用
        • 正式なライブラリ内部の実装を参照したら、利用されるJSON::JWT、OpenSSL::PKey::RSAなどのライブラリはRubyにも存在します。
        • 処理の流れを参照して実装してみたら認証に成功しました。
        • こちらの方の実装は全体的にはメンテしやすい。
        • ただ正式なライブラリがバージョンアップされてこちらでは検知できない場合は動作に差分でて問題出る可能性があります。
          • 対策としては正式ライブラリを自動で監視するスクリプトを実装しました。
ユースケースの洗い出しによりの開発
  • 今回の対応ではユーザーにはもっと使いやすい機能を提供するために、ユースケースの洗い出しを行いました。
  • やり方としては開発・検証など各チームのメンバーを集まって、どんな機能が欲しいか、どのように実現したいかを調査します。
  • その中では最低限必須な部分とあったらいい部分、なくてもいい部分を分類しました。
    • 一部あれば便利なAPIは画面の検討・実際の利用シーンに基づいて随時追加。

今回の対応で特別なところ

  • ユースケースの整理によって、開発の方向性はもっとはっきりしました、それに設計段階では既にユーザーの声が聞こえるので、改善などもやりやすいです。
  • 一部のAPI自体の処理が時間かかります、実際の運用上ではユーザーにそのまま待たせる場合は不便なので非同期処理を導入しました。
    • ここで採用したのはresque。
  • 今までの経験では外部APIを導入する時エラー調査はいつも大変なので今回ではAPIのログを詳細に設計して実現しました。
    • ログには各APIを呼ぶリクエストとレスポンスの時刻、パラメータ、かかる時間などできるだけ詳細に出力します。
    • ログの想定の数とか、データ量とかによって、ログ量が多すぎないように選択も行います。
    • 調査しやすくために、INFO、ERRORなどのキーワードも設定しておきます。
    • 取得したログを定期に集計し、統計します。状態としては正しいかどうかを定期にチーム全体に共有します。
    • ログから異常なパターンがある時迅速に報告します。

最後に

企業向けにAndroidを管理するための機能はまだまだあります。こういった開発に興味がある方は、ぜひ応募してください。

www.optim.co.jp