こんにちは!
アソビューでバックエンド アプリケーションエンジニアをしている山野です。
アソビューは7月にGoogleとの連携機能「Google Things to do」のリリースをしました。
今回はこの機能開発について紹介したいと思います。
Google Things to doとは
Googleがアクティビティやアトラクション分野で導入した予約検索表示機能です。
これにより世界中のゲストが世界中のアクティビティやアトラクションを見つけ、
Google上で価格を比較することができます。
またゲストは体験したいアクティビティ・プランを見つけた場合は、
Google上からサービス事業者のWEBサイトへのダイレクトにアクセスでき、予約に進むことが出来ます。
開発体制
プロダクトオーナー・プロダクトマネージャーとエンジニア(私)の3人体制で開発を行いました。
開発要件・仕様の整理・設計の部分は私が担当し、
プロダクトオーナー・マネージャーにスケジュール調整や設計レビュー、
仕様・設計で検討が必要な部分について意思決定いただく形で進めました。
開発要件・仕様の整理と設計
今回開発した機能は弊社の商品データを指定のフォーマットでGoogleに連携する、
所謂「データフィード」機能の開発です。
この機能の開発にあたり、まず「Google Things to do」の
開発ガイドライン、ポリシー、並びにデータ連携フォーマットの資料を確認し、仕様を整理・理解するところから始めました。
(..余談ですがGoogleの資料が全て英語であったことが仕様を整理・理解する上で地味に大変な部分でした。)
これを踏まえて、Googleの連携フォーマットと弊社側の商品データとのマッピング設計を開始。
Googleの仕様や制約によりデータによっては連携フォーマットに当てはめる部分が難しい部分があり、データの抽出方法やデータ加工仕様の検討・設計を繰り返し行いました。
その中の一例としてチケット料金 x 在庫を考慮した商品データの連携可否判定があります。
弊社の商品には販売枚数限定の商品(超特割)が存在します。
この商品の場合小人料金のチケットは購入可能・大人料金のチケットは売切といったケースが考えられます。
Google things to do の仕様により商品の料金データは 大人料金のデータのみ連携が許可されているため、単純に「販売中の商品」を連携してしまうと上記のケースの場合、ゲストに購入できないチケット料金を提示しまうことになります。
よって、その商品の大人料金のチケットが購入可能かという点もチェックし、
商品データの連携可否を決定する設計しています。
設計にあたってはGoogleの方からも弊社専任の開発サポートエンジニアをアサインしてくださり、 連携方法について適宜サポートいただきながら一つ一つ解決していき作業を進めました。
この設計から最終的にデータは以下のようなI/Fで連携する形となります。
Googleの仕様によりフォーマットはJSONとなっており、
また以下の通りテキスト項目(タイトル・説明文等)は全て多言語を考慮したI/Fになっています。
(※フィールド数が多いため一部のみ掲載させていただいています。)
{ "products": [{ "id": "12345", "title": { "localized_texts": [{ "text": "新宿御苑", "language_code": "ja" }] }, "description": { "localized_texts": [{ "text": "<h1>四季折々の自然が楽しめる都会のオアシス。日本における近代西洋庭園の名園</h1><p>約1万本の木々が茂る新宿御苑は、広さ58.3ヘクタール、周囲3.5kmに及ぶ広大な国民庭園です。風景式庭園、整形式庭園、日本庭園が巧みに組み合わせられており、日本における近代西洋庭園の名園と言われています。旧洋館御休所や旧御凉亭など歴史的建造物も多く、自然散策とともに歴史遺産をたずねることができます。</p>", "language_code": "ja" }] }, "product_features": [{ "feature_type": "TEXT_FEATURE_MUST_KNOW", "value": { "localized_texts": [{ "text": "[営業時間] 9:00~18:30※時期により変動あり", "language_code": "ja" // :省略 ] } }], "rating": { "average_value": 4.0, "rating_count": "8840" }, // :省略 "options": [{ "id": "ticket0000003430", "title": { "localized_texts": [{ "text": "新宿御苑 前売り電子チケット ※中学生以下無料", "language_code": "ja" }] }, "description": { "localized_texts": [{ "text": "<h1>四季折々の自然が楽しめる 新宿御苑 前売り電子入園チケット</h1><p>明治39年に誕生した新宿御苑は、様々な様式を巧みに組み合わせた、日本における近代西洋庭園の名園です。広さ58.3ヘクタール、周囲3.5kmの広大な敷地には、約1万本の木々が植えられており、季節によって移り替わる美しい自然を楽しむことができます。当ページでは、新宿御苑の「前売り電子入園チケット」を販売中。当日チケット売り場に並んで購入する必要がなく、スムーズにご入園いただけます。特に混雑が予想されるお花見の時期は、前売り電子チケットの購入がオススメです。<br>※小人(中学生以下)無料。高校生以上の学生、65歳以上の方は250円にてご入場いただけます(窓口で学生証または年齢の確認できる証明書の提示が必要です。)<br>※月曜日が休日の場合は、翌平日が休園日となります。<br></p>", "language_code": "ja" }] }, "landing_page": { "url": "https://www.asoview.com/item/ticket/ticket0000003430/", "mobile_url": "" }, // : 省略 "price_options": [{ "id": "12345", "title": "一般(大人)", "price": { "currency_code": "JPY", "units": "500", "nanos": 0 }, // : 省略 }] }
アプリケーション開発について
今回開発したアプリケーションは以下の処理を日次で実行するシンプルなバッチアプリケーションとなっています。
1. 商品データを抽出 2. 抽出したデータを指定のフォーマットでファイルに出力 3. 2のファイルをGoogleに送信
このシンプルな仕組みのバッチアプリケーションであるため、
当初は既存のバッチアプリケーション実行環境に相乗りする形を考えていました。
しかし既存の環境は古いインフラ構成で構築されている点から、
SREチームと相談の結果、 Google Things to do専用のバッチアプリケーション環境を新規に構築する方向としました。
構成は現在アソビューで主流となっている以下の構成で構築を行いました。
- アプリケーション : EKS - CD : Argo CD - バッチ実行管理 : Argo Workflows
この構成については過去のテックブログでSREチームのメンバーが
詳細な構成やメリットについて書いていますので、ぜひご一読ください。
アプリケーションの環境構築についてはSREチームメンバーにサポートをいただきながら挑戦させてもらいました。
実際構築を行なってみてアプリケーションの構築のしやすさを実感し、
またArgo Workflowsを利用することでダッシュボード上でバッチの操作ができるため、
テストや運用がしやすいメリットを感じました。
まとめ
冒頭で書いた通り私はアプリケーションを主としているエンジニアですが、
この開発では要件・設計からアプリケーション開発・インフラレイヤー構築と一通りを担当をしました。
これは自ら担当を希望したもので、
アソビューではこのようなエンジニア自身のキャリアプランや希望を汲み取り、
このようなエンジニアとして成長する機会を与えてくれる会社です。
エンジニアとしてより成長したい、もっと開発について聞いてみたいと言う方は、
カジュアル面談もあるのでぜひこちらもご覧ください。