SIGNOTE13 SIGNATEを支える技術
こんにちは。
株式会社SIGNATEでVPoEを担当している丹羽(ニワ)です。
前回はSIGNATEの事業内容を説明しながら、エンジニア組織の事業に対する関わりと魅力、これからエンジニア組織としてやりたいことを説明しました。
今回は第2弾として、SIGNATEを支える技術に関して、少し技術的な部分のご説明ができればと思います。
開発
SIGNATEの開発は基本的にAtlassian製品を利用して管理されています。
ソースコード管理にはBitbucket、Issue・タスク管理にはJIRAが使用されています。
仕様などのドキュメントはなるべくConfluenceにまとめるようにしています。
システム構成図やシーケンス図などは、draw.ioを利用してなるべくConfluence上にまとまるようにしていますが、一部の図やワイヤーフレームはPowerPoint・Googleスライドにまとめられ管理されていたりもします。
CIには、bitbucket-piplineを利用しており、CDには、AlgoCDを利用しています。各リポジトリで継続的にテストやビルド・デプロイが実行されるようになっています。
一部例外として、【SIGNATE Competition】では、ユーザの方々が簡単に投稿できるようCLIツールを提供していたり、コンペの参加に必要なDockerfileを提供していたりしますので、OSSとして扱うモノは全てGitHubで管理しています。
プログラミング言語・フレームワーク
直近で作成された【SIGNATE Cloud】などのプロダクトは基本的にRubyを使用して書かれています。Ruby on Rails による開発速度の向上、仕様変更への対応のしやすさなどが採用の決め手になっています。
ユーザを管理するための基盤となるプロダクトのみ、処理速度や通信量、リリース後の運用面、優秀なエンジニアを採用するためなど、様々な将来性を考えGoを採用して書いています。
一方で、昔から稼働し続けている【SIGNATE Competition】は、PHPで書かれています。フレームワークにはLaravelが利用されています。
また、弊社の強みである評価周りのシステムや、AI周りのシステムは全てPythonで書かれています。
フロントエンドには基本的にJavaScriptが使用されています。
TypeScriptを導入して開発を進めているところもありますが、まだまだJavaScriptが支配的です。
フレームワークは基本的にVueが採用されています。
これは、弊社にフロントエンドエンジニアがいなかった時に、Reactに比べ部分的に導入しやすかった、学習コストが低くバックエンドエンジニアでも導入が容易だったなどの歴史的な背景からきています。
昨今のフロントエンド界隈のトレンド的には、Reactが優勢のようですので、ID基盤周りで採用し始めています。
弊社の現状のプロダクトには今の所あまりニーズがないのですが、今後様々な事業展開をしていくにあたり、iOS や Android などのネイティブアプリの需要が高まりそうでもあるため、React Native で作ることなどを想定してReactを採用するようにしています。
インフラ
プロダクトはクラウドインフラ上で動作させています。基本的に AWSを使用していますが、要件やお客様の希望によって一部GCPやAzureを使用しているものもあります。
プロダクトはアプリケーションやプロセス別にDockerを使用してコンテナ化しています。Dockerでコンテナ化されたアプリケーションは多岐に渡るため、Kubernetesで管理を行っています。
クラウドリソースの管理にはインフラ周りを効率的に構築していけるよう Terraform を使用しています。インフラ周りはほとんどコード化されて管理されており、ベンチャーとしてはかなりインフラが整っていると思っています。
データストア
データベースには MySQL を使用しており、AWS の RDS インスタンスで動かしています。スナップショット機能を利用してバックアップをとっています。
MySQL の他にも、細かい部分では Redis や Elasticsearch (Elasticsearch Service)、Amazon DynamoDB など、プロダクトや機能の性質にあわせて適材適所で使用しています。
モニタリング
メトリクスの収集とアラーティングには Mackerel を使用しており、リソースの監視なども Mackerel 上でまとめてやっています。この他、Kubenetesを管理するためのツールとして導入しているRancher上のGrafanaもリソースの監視に使用しています。
一部のプロダクトでは、Datadogを使用して監視を行なっています。
脅威検出・脆弱性検出には、FalcoやTrivyを使用しています。また、アプリケーションのエラーログの収集には Sentry を使用しています。
いずれのツールも異常や問題を検知した場合にはSlackに通知が来るようになっています。
データ分析
プロダクト上で生成されるログデータや、社内で使用されている商談や売上、工数を管理するツールのデータなどは、定期的にBigQueryへ転送しています。
BigQuery上に集まったデータはdbtを利用してある程度の粒度まで集約・加工がされます。
dbtで集約されたログデータの分析や KPI などの可視化にはMetabaseを使用しています。
データ分析基盤周りに興味がある方は、ぜひ『SIGNOTE02 SIGNATEのデータマネジメント』 なども見てみてください!
コミュニケーションツール
コミュニケーションツールとしてはSlack、GoogleMeetsを主に使用しています。文字ベースでのやりとりが多いですが、口頭でクイックに相談したい場合は、Slackのハドルミーティングを、デイリースクラムなどの定例で開催を行うミーティングにはGoogleMeetsを使用しています。
まとめ
ここまでSIGNATEを支える技術について紹介してみました。こうして洗い出してみると、インフラ周りがかなりしっかりしており、その恩恵を受けてアプリケーション開発がスムーズに行えている印象を強く持てました。
今回の記事を作るにあたり、エンジニアにも協力いただき技術の洗い出しをしていたのですが、
など、嬉しいコメントをいただいたりもしました。
とはいえ、今後事業の目指す方向性に合わせた開発や、改善したい部分はまだまだ沢山ある状況です。
ココまでの内容で少しでも興味をお持ちいただけましたら、是非お気軽にご連絡ください!カジュアル面談はいつでも受付中です。
<カジュアル面談に応募する>