こんにちは。 🐶か😼かと聞かれると、間違いなく🐶派エンジニアの兼平です。
今回はアソビューがどんな技術で支えられているかを紹介したいと思います。
まず、技術を紹介する前に現在運用してるサービスを紹介しておいたほうがいいと思います。
- asoview!: 国内の様々な体験を紹介する、 遊びのマーケットプレイス
- asoview!TRIP / asoview!NEWS: 遊びの情報を届ける、メディアサービス
- asoview!GIFT: asoview!が提供する体験を贈ることのできるギフトサービス
また、コンシューマー向けサービス以外にもマーケティング・プロモーション支援事業、ERP事業なども展開しておりそのためのシステムもあります。
- asoview! ad platform: インターネット広告サービス
- asoview! Promotion: 販売促進サービス
- satsuki: レジャー施設向けオンライン 予約・チケット販売管理システム
- asoview! news platform: 商業施設向けイベント・ニュース情報配信サービス
- AREA GATE: 自治体・観光協会・DMO向け 観光商品販売管理システム
他にも、外部サービスと連携するためのAPIや、社内管理システムなど多数のシステムを運用しています。
このように、現在多数のシステムが開発、運用されているのが現在のアソビューを取り巻く状況です。
これらを支えるため、現在は以下に紹介するような技術を使用してサービスを展開しています。
アソビューのインフラを支える技術
アソビューでは今後グロースしていくサービスにも迅速に対応できるよう、全面的にAWSを使用したインフラを採用しています。
特にアプリケーションの実行環境としては、Dockerによるコンテナ化を進めており、Amazon Elastic Container Service (ECS)を利用したサービスが増えています。
ECSはAWSのフルマネージドコンテナ管理サービスであり、コンテナベースの実行環境を運用をサポートする多数の機能を含んでいます。
更に今後の展望として、同系統のコンテナ管理プラットフォームである、Kubernetesや先日発表されたAmazon EKSも検討しています。
KubernetesはOSSの為サービスプロバイダーに依存せず、標準的コードベースの管理システム、取り巻くエコシステムとその成長速度など、今後サービスグロースさせていく上で求められる要素が多く存在します。
その他にアプリケーション実行環境として用途に応じElastic Beanstalk、EC2も利用しています。
データベースとしてはMySQLをメインとして利用しています。 そのためAWSのサービスで言えば、Amazon Auroraが多く使われています。
また、キャッシュとしてAmazon ElastiCacheやNoSQLデータベースのAmazon DynamoDBも使用しています。
その他にも検索エンジンとして、Amazon Elasticsearch ServiceやAmazon CloudSearchを採用しています。
この他にも、Route 53、CloudFront、S3、VPCはもちろんAPI Gatewayを利用したAPI管理や、軽量な処理などはLambda、ユーザ管理のCognito、メッセージングにSQS、ログストリームのKinesis他、AWSのサービスで解決できる課題は積極的に採用しインフラを支えています。
また、AWSのリースの管理にはTerraformを利用しています。
アソビューのサーバサイドを支える技術
アソビューのサーバサイドは広くJavaを採用しており、一部のサービスでは実験的にGoも使用しています。
Javaの部分で言えば現在ではJava 8のシステムが大半ですが、Java 9以降のリリースサイクルの変更も気になるところです。
Javaのフレームワークとしては、Spring Bootを利用しています。
JavaにおいてSpring Bootは素早くプロダクションレディなアプリケーションを構築するために非常に強力な機能を多く含んでいます。
また、多数のサービス、システムを抱えるアソビューでは、それらを迅速かつ簡潔に管理するためSpring Cloudによるサポートも積極的にに採用しています。
Spring Cloudが提供する機能は非常に有効である一方で、ECSやKubernetesによって提供される機能と重複する部分も多いので、今後は各々を適切に選択してくのが鍵となります。
また、サーバサイドで特徴的な部分といえば、技術顧問としてドメイン駆動設計で有名な増田 亨(@masuda220)氏を迎え、組織的にDDDを行っています。
JavaやSpringはDDDとの相性もよく、アソビューのサーバサイドでは重要な技術の一つです。
特にDDDはエンジニアが積極的にビジネスに向き合い、成長後もシステムの変更を容易にする為に欠かせない技術の一つとです。
アソビューのフロントエンドを支える技術
現時点で使っているのは下記技術です。
- モジュール管理、タスクランナー: npm
- バンドラー: webpack
- トランスパイラー: babel(es2015〜、react)
- フレームワーク: React、flux(redux)、jquery(一部)
- CSSプリプロセッサ: Sass
これまでサービスの急成長や大規模リニューアルの影響もあり、あまり基盤が整備されていない面も有ったのですが、現在、次に控える大きなプロダクト開発に合わせて一通りの基盤を整えようとしており、上記技術に加えて
- 構文チェック、フォーマッター: standard、prettier
- テスト:Jest
- 型チェック:flow
- CSS管理: CSS in JS(styled-componentかな?)
なども取り入れて行く予定です。 設計や基盤については整えつつも流行り廃りの早いフロントエンドなので特定のフレームワークに固執することなく、柔軟に新しいフレームワークや技術を取り入れていく方針です。
その他開発を支える技術
その他アソビューの開発で使われてる技術要素も紹介します。
スクラム
サービスが成長していく中で、ユーザに届ける価値をチームとして考える必要があるため、現在ではスクラムによる開発を進めています。 また、それらのサポートの為に、AtlassianのJIRAやConfluenceも利用しています。
ユーザストーリーマッピング
開発に関わったことのある方であれば、プロジェクトの後半に必要な機能の見落としや考慮漏れを経験した方も多いと思います。 アソビューでは、このような課題の発見や、プロジェクトのステークホルダーの理解を深めるためにユーザストーリーマッピングを行っています。
Github
改めて説明の必要性はないと思いますが、支えている技術の一つとなります。
CircleCI
一部、JenkinsによるCI環境も残っていますが、最近開発、運用されているシステムは全面的にCircleCIを利用しています。
CIはリソースを消費する場合も多く、外部サービスで解決できる課題はそちらで解決するようにしています。
CircleCI 2.0からはWorkflowもサポートされジョブの分離、並列実行やマニュアル承認など柔軟なCI制御が可能となっています。
モニタリング
AWSを利用しているため、ベースの監視はCloudWatch Metricsを利用しています。
その他にも、いつくかのツールを利用しています。
Grafana
現在、アソビューではAWSをマルチアカウントで運用しており、CloudWatch Metricsだけではアカウントを跨いだ参照ができません。
そこで、その他のリソース監視も含めGrafanaによって可視化を行っています。
Zipkin
WebのサービスにおいてSEOは表示に重要な観点となります。
その中でも、サイトのパフォーマンスはSEOに直結する要素の一つです。
アソビューでは表側で動いているサービスの他に、バックエンドのAPIも多数存在しています。
このような、分散されたシステムにおいて、パフォーマンスの最適化を行うため、分散トレーシングとしてZipkinを導入しています。
特に、Spring Bootの場合は、Spring Cloud Sleuthにより、容易に分散トレーシングが実現できます。
Micrometer・Prometeus
AWS上で稼働しているアプリケーションは、標準的に提供されるモニタリング機能でも多くの情報を得ることができます。
しかし、例えばJVMのGCのモニタリングなど細かな監視まではサポートされていないことが多いです。
その為、現在ではMicrometerによるSpring Bootアプリケーションの監視と、Prometheusによる集計 + Grafanaによる可視化を進めています。
Spring Boot Admin
アソビューではSpring Bootアプリケーションが多数運用されているため、それらの管理機能を用意するためSpring Boot Adminを利用しています。
ローカルマシン
デザイナーとエンジニアは全員MacBook Proを利用しています。
他の部署はWindowsが多いですが、開発時に使用するツールがMacの方が便利な場合が多く採用されています。
まとめ
アソビューでは、様々なサービス、システムを運用しており、それらを迅速改善し、よりに多くの人にワクワクを伝えていく為、様々な技術を利用しています。
またベンチャー企業として、そして自社が掲げるValueの1つである「Challenge」を体現する為、これからも積極的に新たな技術へ挑戦しています!