スピードと品質と採用と。Insight Edge の採用技術とアーキテクチャ

梅雨の時期でジメジメしてきましたね。なかなか外にでかけづらいので休日はティアキンに精を出したいと思っているエンジニアリングマネージャの猪子です。

ある程度経験を積んだエンジニアであれば、過去何回か案件や通常業務で利用する技術の選定をしたことがあるかと思います。

本記事ではInsight Edgeにおける技術・アーキテクチャの採用指針や実際に採用した技術について紹介したいと思います。

採用技術・アーキテクチャを決める軸

企業でメインとして利用する技術や案件で採用するアーキテクチャを決める為の基準は非常に重要で、判断を間違うと著しく開発効率が下がったり、更に悪い状況だとサービス継続が危ぶまれる場合もあります。

これまで、幾つかの技術を採用してきましたが、私が新規に技術を採用する際の観点は以下にまとめられるかと思います。

観点 内容
ビジネス目標との整合性 選定する技術は企業のビジネス戦略と一致しているか。例えば、高度なデータ分析を必要とする企業であれば、より高度な機能を持つデータレイク、データストアなどのツール / サービス選定が必要です。
非機能要求 機能だけでなく、アプリケーションのパフォーマンス要件、セキュリティ要件、信頼性要件等、非機能面での技術的な要求に対応できるかという点です
費用対効果 採用する技術のコストは、その技術が提供するビジネス価値に対して適切かどうか。直接的な調達コストだけでなく、メンテナンスやトレーニングのコストも考慮が必要です。
開発者との親和性 開発者との親和性も大切な要素です。親和性においてはスキル・経験があり、効率的に技術を利用できるか、という側面の他に、採用の観点を含め開発者がその技術利用したいというモチベーションがあるかという側面もあります
技術の成熟度とコミュニティのサポート 新しい技術を採用する際に技術がまだ成熟していない場合、成熟しているがEOLが近い場合、業界で利用している開発者が少ない場合は注意が必要です(特に言語・FW等)。又、コミュニティサポートや豊富な情報リソースがあるかも要確認です。

全てを完全に満たすものというのは難しいので(基本存在しない)、その時々の状況に応じた観点の優先度を決めつつ評価・評価していく事が必要です。

過去に自分が見た失敗事例でいうと、選定したプログラム言語としては"ビジネス目標との整合性"、"非機能要求"、"開発者との親和性"については合致していたものの、"技術の成熟度"という側面で使いこなせる人材が業界に少数なため、運用保守出来る人材を採用できずサービス継続のために泣く泣くプログラム言語を移行したというものがあります。。。

Insight Edgeの採用技術・アーキテクチャの方向性

Insight Edgeは元々少数のメンバでアプリ開発・データ分析両方の案件をスピード感を持って推進するという"ビジネス目標との整合性"、"開発者との親和性"や"技術的な成熟度"からPythonを選択していました。

フロントエンドについても同様の観点からReact / TypeScriptを採用しています。

ちなみにGitHubが発表している2022年で最もGitHub上で利用されている言語の1-4位は上からJavaScript、Python、Java、TypeScriptとなっています。(4つ中3つをInsight Edge内で利用) 元々PythonはML系のライブラリ・機能の優位性からデータサイエンティストを中心にそのシェアを伸ばしてきていると思いますが、近年、ML系技術がさらにコモディティ化しており、今後もWebエンジニアがML系技術を積極利用することは変わらないと思うのでPythonのシェアは高いまま維持し続けるだろうと予想しています。

これらある程度全社共通的な技術を利用しつつ、Insight Edgeでは今後の案件でさらなる開発効率化が見込めそうなものについては積極的に技術を取り入れるようにしています。(目安として、1つの案件で1つは技術的なチャレンジを取り入れるようにしています) このあたりのチャレンジングな技術要素は案件の主担当者のエンジニアに委ねています。

我々の主な目標はPoCの開発であり、PoCではスピードを出しつつ、検証に必要十分な品質を確保するのが重要な要素になります。如何にこれを満たすための最適な技術・アーキテクチャを選定するかが案件をリードするエンジニアの腕の見せどころであり、常日頃からエンジニアも業務の中で新規技術のキャッチアップを行う事が出来るような全社的な取り組みをしています。

採用技術・アーキテクチャ例

これまでInsight Edgeで採用した具体的な採用技術を幾つか紹介します。

業務共通

通常業務で利用しているツール・サービスについてはInsight Edge設立当初に既存メンバが慣れているもの、という観点で決めたものが多いです。 概ね一般的なものが多いですが、WrikeについてはWBS・ガントチャートのUIが心地よくて個人的に気に入って使ってます。

用途 ツール・サービス名
メッセージング Slack
ドキュメント管理 Confluence
プロジェクト管理 Wrike
レポジトリ GitHub
クラウドPlatform AWS / Google Cloud / Azure

業務でよく使うものについては、"費用対効果"も重要ですが、開発者がモチベーション高く気持ちよく仕事が出来るか("開発者との親和性")を重視しています!

開発編

Webアプリ

Webアプリを素早く構築技術は多種多様であり、Insight Edgeでもスピード感を持ってPoC開発をするために各種技術を使い分けています。又、必要に応じ、仕様の複雑さ、技術的な制約を鑑みてノーコード・ローコードを活用し、出来るだけ"作らない"開発を目指しています。 その他、各種サービスモジュールも多分に活用しています

用途 ツール・サービス名
ノーコード・ローコード Bubble / Power Apps / AppSheet / GAS / GitHub Copilot etc
認証 Cognito(AWS) / IAP(GCP)
CICD GitHub Actions
ローカル開発環境 Docker Desktop
その他 各種クラウドPlatformのサービス等

IoT

IoT機器については要件によって各種センサ / 通信プロトコル / 電池等を使い分けるので案件毎で千差万別です。

通信プロトコル(主にLPWA)については、各種ありますが導入のし易さ(基地局設置不要)、通信コスト等の観点から "LoRaWAN", "Sigfox"を採用することが多いです。

データ分析編

モデル + 簡易IF

データ分析系の案件では何らかのモデルを構築し、ユーザが利用するための簡易的なIF(画面 / API)を提供することが多いです。

元々はスクラッチで作ることもあったのですが、最近ではStreamlit, Mercury等を使い、JupyterLab等で記載されたプログラムをWebアプリ化することが多いです

BI / DWH

BIツールはコスト・機能・デスクトップアプリとしてのレスポンス性能で Looker Studio, Tableauを使い分け、MS Suiteとの統合が必要な場合、Power BIも利用しています。

DWHはBigQueryを基本にしつつ、最近はSnowflakeも採用をし始めています。パフォーマンスや、コスト効率、AWSしか使えないが、BigQueryの利用体験をしたい時に採用する想定です.

その他

その他継続的にChatGPT、XR等最新の技術トレンドもキャッチアップし、業務・案件の中に取り入れています。

尚、Insight Edgeでは業務時間の10%を活用し、これらの技術トレンドのキャッチアップ等自己研鑽に取り組む"勉強会"の制度を設けています。 勉強会は業務に直結しないテーマもOKで、エンジニアだけではなく営業やコンサルタントの人も参加し、自由な発想や創発が生まれる場としています。

終わりに

如何だったでしょうか?Insight Edgeは、カイゼンのマインドを持ち日頃から最適な技術を調査・選定するのが好きなメンバが集まっている会社です。

技術を活用した効率化が好き!新規技術にも取り組んでいきたい!という方はカジュアルにお話させて頂ければと思いますので、お気軽に こちら からお申し込みください!