こんにちは。リンクアンドモチベーション SRE グループの川津と申します!
私は採用の面談をする事も度々あるのですが、やはり弊社に興味を持って下さる開発者のみなさんが一番気になるのは、弊社で開発しているサービスの技術的な側面だと思います。
弊社のカジュアル面談等をさせて頂きますと、会社紹介資料 (こちら) に以下のページがあります。
このページで「モチベーションクラウドは〜技術で開発をしてまして...」と説明をする訳ですが、これだけだとどういうサービス開発なのか、なかなかイメージし辛いと思います。
そこで今回は本記事にて、モチベーションクラウドのアーキテクチャを説明できる範囲でご紹介できたらなと思います。
そもそもモチベーションクラウドとは?
モチベーションクラウドは組織改善のためのクラウドサービスです。
とは言え「モチベーションクラウドって何だ?」という方が大半だと思われます。そこで最もベーシックな機能である「サーベイの実施と公開」を例にご説明します。
モチベーションクラウドでは、事前に設定した期間毎 (例: 半年) にご契約頂いた企業様の社員宛にサーベイを送信します。
サーベイの回答期間が過ぎると回答の結果集計処理が実施されます。下例の様に事業部や部署 (「属性」と呼びます) など、様々な観点から集計結果が確認できます。
属性 (例: 部署) を選択して詳細を確認する事ができます。「この部署では職場環境に対する不満が多かった」等、どういった回答がされたか集計結果を確認できます。
これら画面の閲覧は Web サーバーへの一般的な HTTP リクエスト処理になりますが、集計処理等はスケジューリングされたバックグラウンド処理となります。
アーキテクチャ (インフラ図)
まずは大まかな概要を知ってもらう為に、モチベーションクラウドのざっくりとしたアーキテクチャ図を書いてみました。
モチベーションクラウドは一般的なシングルページアプリケーション (SPA) として構築しています。
基盤には Amazon Web Services を用いており、サーバーサイドは Amazon ECS を用いたコンテナ環境にしています。上図中には3種のサーバー/コンテナが登場します。
サーバー/コンテナ名 | 役割 |
Web コンテナ | ブラウザからの HTTP リクエストを受付する、バックエンド Rest API コンテナです。 |
Batch (cron) サーバー | 非同期処理のスケジューリングをし、ジョブ (SQS メッセージ) 投下するサーバーです。 |
Worker コンテナ | 非同期処理 (ジョブ) を実際に実行するコンテナです。 |
また、一般的な Web アプリケーションと同様に、モチベーションクラウドでも次の代表的なストレージサービスを利用しています。
AWS Resources | 役割 |
Amazon RDS | マネージドデータベースサービスである Amazon Aurora MySQL を利用しています。 |
Amazon ElastiCache for Redis | オンメモリキャッシュである Redis は、認証情報等の短期的なデータの置き場として利用します。 |
Amazon S3 | PDF 等のクライアントがダウンロード可能なファイルは Amazon S3 で管理します。 |
その他、各種 AWS リソース/サービスの監視に Datadog を導入したり、Slack との連携を実装する等、開発体験を向上する為の仕組み・サービスの利用を積極的に行っています。
フロントとバックエンド
モチベーションクラウドは一般的なシングルページアプリケーション (SPA) として構築しています。
以前は Ruby on Rails のテンプレートエンジンである ERB を使って、サーバーサイドレンダリングをして返すページもありましたが、現在は JavaScript, TypeScript (Vue.js / SCSS) で開発しておりほぼ全てのページが SPA となっております。
Rest API 郡を提供するバックエンドは Ruby on Rails を使って開発をしています。
弊社で開発している SaaS サービスの多くは上記 JavaScript, TypeScript (Vue.js / SCSS)、Ruby on Rails と Python を主要プログラミング言語としております。
リリースとデプロイ
モチベーションクラウドでは、サービスの新規構築には Amazon CDK / Terraform を利用しております。
また、本番環境へのリリース・デプロイは下図の通り自動化されています。
ソースコードは Github で管理しておりますが、開発者がプルリクエストを master ブランチにマージすると、push された最新のコードを元に Docker イメージをビルドします。
ビルドされたリリースイメージは待機系環境 (Blue / Green デプロイ) にデプロイされ、待機系・稼働系の切り替え後、エンドユーザーからのリクエストは新しいリリース済のアプリケーションに届きます。
まとめ
いかがでしたでしょうか。本記事に書いた内容は開発のほんの一部・表層に過ぎません。
モチベーションクラウドはまだまだ機能的にも発展途上であり、弊社ではモチベーションクラウド (及びそのシリーズサービス) の開発に協力して下さる開発者の方を募集しております。
私達と一緒にサービスの開発をしませんか!?
カジュアル面談も応募ページからお気軽にご連絡ください!