Bridge over troubled Techs.

オープンストリーム CTO 寺田英雄の個人的ブログ

個人的記録:訪日タイ人向け Edamameサービス停止&技術メモ

 昨日、2017/10/31を持ってオープンストリームのEdamameサービス・アプリを事業終了しました。技術開発&事業開発を推進してきた者として非常に残念かつ寂しいですが、当初の事業目標(KPI:アプリダウンロード数)を達成しなかったためであり、これは仕方のないことです。

f:id:terada-h:20171101062648p:plain:w200
図:Edamameアイコン

 ここでは、Edamame開発を通じて獲得できた技術ノウハウについて記録しておきます。Edamameの技術的基本コンセプトは、生産性に寄与すると思われる技術は、新しいものでもドンドン積極的に導入して実験場とすることでした。

Edamameで獲得できた技術

Edamameシステム開発で獲得できた新しい技術は主に以下のものです。短期間に最少人数で獲得できた技術としてはなかなかのもの、でしょうか?

  1. iOS Swift2.x, 3.x プログラミング
    1. クロージャ積極活用による非同期プログラミング
    2. Nullセーフプログラミング
    3. 例外処理を使わないエラー処理
  2. Apache Thrift による、WebAPIトランスポートの自動実装
    1. クライアント側はObjective-C、サーバーはJava側へと自動コード生成
    2. SwiftからObjective-Cのブリッジ実装およびエラー伝搬方法
    3. Servlet への組込み方法
  3. CocoaPods の利用方法
  4. MongoDBプログラミング
    1. RDBを一切使わない、フル NoSQL のDB構成
    2. テーブル型ではない、オブジェクトストア型のデータ構造設計ノウハウ
    3. 位置情報の格納方法
    4. 専用クエリ言語の利用方法
    5. GPS位置情報クエリなど
    6. 2フェーズコミット処理のスクラッチ実装
  5. Amazon AWS ベースの開発・設計ノウハウ
    1. VPCネットワーク配置設計
    2. Cognitoによる Facebook 連携ユーザ認証
    3. MongoDBクラスター構成
    4. Elastic Beanstalk 運用方法
    5. Route53運用方法
    6. Mobile Analytics によるログ分析
  6. Spring(Boot)による、Web管理コンソールの開発
    1. Thymeleafによるテンプレート実装、高度なネスティング記法の活用

技術・設計評価

 最もインパクトが大きかったのが、Apache Thrift の採用でした。最初の導入には少々苦労しましたが、作業が安定してからの威力はすごかったです。WebAPIの開発生産性を飛躍的に高めてくれました。なにしろ、APIを追加・修正してもサーバ側・クライント側双方のトランスポートコードが自動生成され、接続性が保証されていますから、疎通テストが不要で、本来のロジック開発に集中できました。

 また、Thriftはエンジニアチームの構成にも良い影響がありました。実装に参加したプログラマを、クライアント側・サーバ側といった風に分ける必要がなく、いわゆるフルスタックエンジニア的に、両方のコードを垣根なく行き来して開発ができるようになったのです。このため機能追加やデバッグの効率が非常に良くなりました。Swift とJavaの両方を書ける能力は必要ですがw。

 二番目にインパクトが大きかったのは、アプリ側のSwift採用です。チーム全員未経験でしたが、チュートリアルからスタートして一気に学習し、マスターできました。やはりObjective-Cに比べて、コーディングの効率・見通しの良さが格段に違います。

 三番目にインパクトが大きかったのは、フルMongoDBによるDB構成です。RDBがなくても問題なくサービス運用できることを実証できましたし、スキーマーレスなので、運用中にサービスを一切止めることなく項目追加をすることも可能でした。

 Edamameは 事業としては失敗でしたが、技術的には得るものが多く、その後の「ねこもに」にそのノウハウや人材を流用できていますので、当社として一定の投資効果があったと言えると思います。