Safie Engineers' Blog!

Safieのエンジニアが書くブログです

セーフィーにはどんな種類のエンジニアがいるの?職種別にエンジニアを紹介!

初めまして。セーフィーの柏木です。
AI/画像処理エンジニアで、テックブログ運営チームにも所属しています。

今回は、セーフィーにおけるメイン事業であるクラウド録画サービスと各職種のエンジニアの業務について紹介します。
クラウド録画サービスシステムの全体像と、それぞれのエンジニアが一体何をやっているのか、わかりやすくお伝えできればと思います。

セーフィーのクラウド録画サービスシステム

セーフィーのクラウド録画サービスは、カメラで撮影した映像データがクラウドにアップロードされ、必要に応じてクライアントアプリケーション(フロントエンド、モバイル)に配信されており、幅広い領域の技術が組み合わさって構成されています。こういった領域に馴染みがないとなかなか複雑に感じるサービスかもしれません。

そこで今回はそのサービスの流れにそって、各領域のエンジニア業務を紹介していきます。

f:id:safie:20220118113209j:plain

こちらがサービスの全体像に職種別のエンジニアを当てはめた図になります。

一つのサービスに対して非常に幅広い分野のエンジニアが関わっていることがわかりますね。それでは一つずつ紹介していきます。

クラウド録画サービスの流れと、担当エンジニアの紹介

組み込みソフトウェアエンジニア

f:id:safie:20220107103506j:plain:w400

セーフィーではクラウドカメラを扱っています。
カメラがないとまず映像が撮れません。セーフィーで扱っているカメラの数は非常に多く、またメーカーも様々です。これら幅広いカメラ機種に対応し、使いこなすためのファームウェア開発を行っているのが、「組み込みソフトウェアエンジニア」です。

使いこなすための機能として一例を挙げると、決められた時間にスナップショットの撮影を行いサーバーに保存を行うスナップショットスケジュール機能や、サーバーとの通信接続が切れたときに録画欠損を防ぐための本体録画バックアップ機能があります。また、撮影した映像をサーバーに送信する機能も画一化し実装しています。
新しいカメラを販売する際は真っ先に対応し最前線に立って実装するエンジニアです。

使用言語はC++。ライブラリではBoostも使用しています。

サーバーサイドエンジニア/インフラ・SREエンジニア

f:id:safie:20220107103455p:plain:w400

カメラで撮影された映像はサーバーに送られ、録画されます。ここでサーバーで行われる処理を実装するのが、「サーバーサイドエンジニア」です。
サーバーで録画される期間はプランによって異なるので、サーバーサイドエンジニアはプランに応じた録画データの保存処理を行っています。その後PC等フロント側に映像を送るための前処理も行っています。
また、セーフィーで使用されるAPI全般の開発も行っており、フロントからの制御の大部分はサーバーを経由するため、サーバー側のAPIの開発が必須となります。映像視聴アプリケーション向けの機能を実現するためのAPIのほか、各種管理アプリケーション向けのAPIの開発も行っています。合わせて保守・運用・改善も継続的に実施しています。

使用言語は主にPython。一部Go、Javaも使っています。




サーバーサイドエンジニアが利用している膨大な数のサーバーを構築・管理・運用するのが、「インフラ・SREエンジニア」です。

インフラ・SREエンジニアの役割は主に4つあります。

 1.新しいシステムに対するインフラの設計
 2.コードによるインフラ管理
 3.システム・サーバーのアプリケーションに対する監視
 4.デプロイの改善

セーフィーではインフラの規模が非常に大きく、1000台を超えるサーバーを扱っています。 今後も新しいプロダクト・アプリケーションが増えてくるため、これらの管理・改善は必須の作業です。

使用ツールはTerraform、Ansible。監視にはPrometheus, Grafana, Amazon CloudWatch, StatusCakeなどを使います。デプロイではGitHub Actionsを使うこともあります。

AI/画像処理 エンジニア

f:id:safie:20220106141532j:plain

撮影された映像はAI機能を用いて解析することができます。
例えば映像内の人数を数えるオプションサービス「Safie AI People Count」がそれにあたります。解析はカメラのエッジデバイス内で行うこともあれば、サーバー内で行うこともあります。
それぞれのタスクに対して効率的な処理のパイプラインを作成し、最適なアルゴリズムの調査・実装・改善を行うのが「AI/画像処理エンジニア」です。

アルゴリズムでは、Deep Learningを使用することもあれば、ルールベースの画像処理を扱うこともあります。Deep Learningを使用する際は、データの収集やアノテーションなども担当します。

使用言語はPythonまたはC++。ライブラリはOpenCVやPytorchを使うことが多いです。

フロントエンドエンジニア

f:id:safie:20220106141513j:plain

撮影された映像はWebブラウザで見ることができます。この映像視聴アプリケーションの開発は「フロントエンドエンジニア」の担当です。

映像はカメラの状態によって、Live配信が切れたり、録画映像が存在しない可能性があり、快適な視聴のために複雑なエラーハンドリングを行っています。
従来の非クラウド型VMS(Video Management System)で一般的なマルチビューアー(複数台のカメラ映像同時視聴)や、高解像度・大型モニターでの視聴に対応しており、多くのカメラを扱えます。大量な情報を処理しつつ、ユーザーの使い勝手を向上する工夫を随所に凝らしています。
このアプリケーションの他に、企業・販売代理店向け管理アプリケーションの開発もしています。

使用言語はTypeScriptで、利用しているフレームワークはAngular、Vue.jsです。

iOS/Androidエンジニア

f:id:safie:20220106141524j:plain:w150

映像データはモバイル端末(スマートフォン、タブレット)からも見ることができます。このモバイルアプリの開発を担当しているのが、「iOS/Androidエンジニア」です。

モバイル端末向けアプリにおけるUIの構築や画面の遷移、動画ストリーミングの制御、SafieのサーバーAPIとの通信や、カメラとのBluetooth通信制御などを行っています。
近年はモバイル端末用アプリを使用するユーザーが増え、一日に数万人が利用しており、Webアプリの利用ユーザーを超える人数となっています。
アプリのデザインについては、基本的にデザイン担当の部署から仕様を受け取りますが、UI/UXの改善案をエンジニア側から提案することもあります。

開発言語はiOSがSwift、AndroidはKotlinを使用しています。

業務システムエンジニア

f:id:safie:20220107103433p:plain:w300

顧客管理や受注〜出荷〜請求という一連のオペレーションに用いる社内システムを開発・運用しているのが、「業務システムエンジニア」です。

現在セーフィーではSalesforceをメインのシステムに据え、他システムと連携しています。ECサイトからの注文情報をSalesforceに連携したり、お客様に出荷するカメラと録画プランを紐付けた上でセーフィーの基幹システムと連携したり、売上の情報を請求管理システムに連携したりなど、サービスをより円滑にお客様のもとへ届けるための仕組みづくりをしています。

クラウドカメラサービスの開発とは直接関わりませんが、今後のセーフィーの成長を下支えするために必須のエンジニアとなっています。

QAエンジニア

f:id:safie:20220107103535p:plain:w300

ここまでご紹介したとおり、セーフィーの製品はフロントからデバイス、サーバーなど非常に幅広い分野にまたがっております。

これらの製品を出すためには、品質の保証を行うエンジニアが必要です。セーフィーではQCDMT(Quality(品質)、Cost(費用)Delivery(納期)Managment Team)チームを作り、QAエンジニアが役割を担っています。
QAエンジニアは、開発した製品全般に対してテストを行っており、開発とのテスト内容のすり合わせ、テストスケジュールの調整など、品質のチェックにあたって様々な対応を行っています。
セーフィーのQAはデバイス・フロントアプリ・サーバーAPI・サービス(商品) など、広範囲にわたって仕様を理解する必要があるため非常に難しいQAとなります。しかし開発メンバーと距離が近いので、テスト時実施方法の相談や、実施結果についての不明点などを迅速に話し合える環境があります。
また、現在は効率のよいテストの実行に向けて、一部テストケースの自動化進めるなどの仕組みの効率化を進めるなどの取り組みも行っています。

個人の裁量で必要に応じてJavaScriptやSQLを利用するなど、幅広いスキルを活かした働き方も可能です。

データエンジニア

f:id:safie:20220131192348p:plain

セーフィーのサービスレベルを向上させて行くためには、感覚だけに頼るのではなく各種リアルな情報に基づいた分析が必要です。
必要な各種データを分析し様々な活動に活かすためのシステム基盤を開発しているのが「データエンジニア」になります。

例えばユーザーの契約、解約状況やサービスの利用動向などの集計、分析を行っています。
現在はAmazon RedShiftを利用しており、アナリストと連携しこれらの業務にあたっています。使用言語はPython、SQLです。

最後に

今回は、セーフィーのクラウド録画サービスのシステムの全体像と、各領域のエンジニアの役割について紹介しました。

今後、本ブログでも自分の領域とは馴染みのないエンジニアの記事が出てくることがあるかと思いますが、この記事をふり返ることで「あ~こんな仕事をしているんだな~」と思いながら読んでいただければ嬉しいです。

採用も積極的に行っておりますので、セーフィーに興味を持っていただいた方はぜひご応募ください。

article.safie.link

© Safie Inc.