© Recochoku Co.,Ltd. Proprietary and Confidential
2017/02/07
レコチョクの サービス群を支えるAPIたち
〜レコチョクAPIの紹介とこれから〜
株式会社レコチョク 事業システム推進部 システムアーキテクトグループ
山本 耕琢
© Recochoku Co.,Ltd. Proprietary and Confidential 2017/02/07
自己紹介
2
山本 耕琢
年齢 • 1984年生まれ (32歳)
担当業務 • レコチョクの楽曲情報の検索や、会員/決済情報、
レコメンド情報などを扱うWebAPIの運用と改善を担当
趣味 • ライブ観戦 / スノーボード • 国内旅行(主に電車) / 読書 / コーヒー
好きなアーティスト • ASIAN KUNG-FU GENERATION • OVER ARM THROW • LiSA
© Recochoku Co.,Ltd. Proprietary and Confidential 2017/02/07
レコチョクAPIとは
3
レコチョクで管理されている様々なデータ及び手続きを提供するAPIになります。レコチョクで承認した企業に対して、アクセス情報を提供して、 セキュリティを担保して、レコチョクでの各種データや手続きを提供しています。
© Recochoku Co.,Ltd. Proprietary and Confidential 2017/02/07
レコチョクAPIの役割 (システム鳥瞰図)
4
© Recochoku Co.,Ltd. Proprietary and Confidential 2017/02/07
レコチョクAPIの役割 (システム鳥瞰図/簡略版)
5
�,��1�C
#01�C(View)
/��+�#01���
KDDI#01���
docomo#01���
� #01���
>4#01���
/��+�API
(Controller)�����API
��"�C(Model)
5:���'
���C(Model)
26���'
���).���'
=F���'
���
/�(1����'
CMA���'
?D<9%��DB
;E�1�1�CloudSearch�
@B���
43���
/��+��$-
MusicStore
�DS
/��+�Best
�&*���� �Hits ���TV WIZY
$/�!�
78������'
A
�%!�
フロント層とサービス層の仲介をすることで、新しいサービスの 展開スピードを高めたり仕様変更の影響を最小限に抑えることが出来ます
© Recochoku Co.,Ltd. Proprietary and Confidential 2017/02/07
レコチョクAPIの提供する機能
6
カテゴリ 説明楽曲検索API レコチョクにて管理された楽曲・アーティスト・アルバム・トラック・ランキングなどの情報を検索・閲覧
するための機能を提供します。
決済API レコチョクにて販売されているトラック・アルバムの購入又はウォレットチャージなどの事前購入手続きを行うため機能を提供します。
会員API レコチョクで管理している会員に関わる情報の、更新及び参照を行う機能を提供します。
ソーシャルAPI 楽曲やアルバムのレビュー情報やMyアーティスト情報の登録・取得を行うための機能を提供します。
ダウンロードAPI 購入したトラック・アルバムをダウンロードするための手続きを行う機能を提供します。
マルチデバイス ダウンロードAPI
レコチョクにて購入してお預かりしているトラック・アルバムの権利の参照及びダウンロードする為の機能を提供します。
購入者特典API 購入者特典の申込・ダウンロード手続きを行うための機能を提供します。
カテゴリ 説明認証機能 レコチョクで管理された情報や手続きを不正に利用されないように認証を行う機能を備えています。
楽曲メタ配信制御フロント層に返却する情報に楽曲メタ情報を付与します。その時に、公開状態やデバイス情報に基づいて返却する情報を制御する機能を備えています。
音源配布機能 音源情報が不正に配布されないように、適切に加工された音源を配布する機能を備えています。
© Recochoku Co.,Ltd. Proprietary and Confidential 2017/02/07
レコチョクAPIの提供する機能 (楽曲メタ配信機能)
7
��ID ���� ����
1111 ���� � 2222 ���� �� 3333 ��� � 4444 �� �� 5555 ��� �
サービス層から返却された各IDに、データ層から楽曲メタ情報を取得し、それを付与して返却します。それにより、サービス層は、自システムが提供する情報の管理に集中することが出来ます。また、フロント層に情報を返却する際に、公開状態のチェックやクライアントに適した情報の絞込を行い、返却をします。
������!���� �����API $'
����
/2*&���DB
1#50-+ 1#50*&%)(�� ID)�1#.,*&"4
1#50*&%)(�� ID)�.,ID"4
.,��*&%)(.,ID"4)�.,��*&
������!���� �����API (3�!�!
(CloudSearch)
/2*&���DB
.,"4-+�1111�3333�5555� .,��� ��(“��!”)
�.,*&"4.,*&%)(“��!”)
�.,ID"4
.,��*&%)(.,ID"4)�.,��*&.,"4-+
�1111�5555�
© Recochoku Co.,Ltd. Proprietary and Confidential 2017/02/07
レコチョクAPIが抱える問題
8
レコチョクAPIのサービスinから3年以上の月日が経過しており度重なる 機能の追加などで技術的負債が蓄積しています。 また、AWS環境に移行しましたがクラウド環境へ適応がまだ不十分な状態です。俗にいうレガシーなシステムからの脱却を目指して少しずつシステム改善を進めたいと考えています。
開発/管理 • インタフェース仕様書はWordで作成してSVNで管理している • 単体テストが作成されておらずバージョンアップの動作担保に工数がかかる
インフラ運用 • 各クライアントからの利用状況が把握できていない • サービス層を利用する処理の性能を明確にできていない • インフラ(AWS)コストが必要なのか過剰であるかが不明瞭である • サーバのセキュリティ対応の運用が確立していなく不十分だと感じる • リリース作業が自動化されていない
その他 • 外部向けの公開を推進したい
© Recochoku Co.,Ltd. Proprietary and Confidential 2017/02/07
今後の取り組み (インタフェース仕様書/Swaggerの導入)
9
Wordで作成しているインタフェース仕様書をSwaggerに置き換えて、 開発およびAPI利用者向け対応の工数削減を実現したいと考えています。
抱えている問題 • Wordのため変更箇所は履歴管理や差分チェックができない • バイナリファイルのためGitと相性があまり良くない(現在はSVNを利用) • API利用者が、テストツールやモックなどを準備する工数が発生する • 設計書を修正した時に周知また配布する運用が発生する
Swaggerの導入により解決されること • YAML(またはJSON形式)のテキストファイルのためGitで扱いやすくなり
変更箇所の履歴管理や差分チェックが容易となる • Swagger Specificationからクライアント側やサーバ側(モック)のソース
コードを生成できるため、利用者側の開発工数を削減することが出来る
© Recochoku Co.,Ltd. Proprietary and Confidential 2017/02/07
今後の取り組み (APIの可視化/AWS Athena,X-Rayの導入)
10
レコチョクAPIをAWS環境に移行しているのでAthenaとX-Rayを利用して、 利用状況/ボトルネックがあるAPIを可視化し、リファクタリングや利用者側への利用方法の改善要望などを実現することを考えています。
抱えている問題 • クライアント層からどのAPIをどれくらい利用されているか不明である • 平均レスポンスタイムのみしか取得ができていない • サービス層の改修による性能変化を検知することができない
AWS Athena,X-Rayの導入により解決されること • アクセスログの解析を実施することでクライアント層単位のアクセス状況
を把握し遅延しているAPIを発見できる • サービス層のシステムの通信状態を可視化して性能変化を検知したい