フロントエンドエンジニアの近藤です。 Web版のカメラ録画映像ビューアー(Safie Viewer)開発 を主に担当しています。 セーフィーにはエンジニアの成長機会について、希望すれば柔軟に対応できる体制があります。その一つとして今年1月から部署内でソフトウェアアーキテクト勉強会を隔週ペースで開催しています。今回はこの取組みについての紹介です。
勉強会発足の経緯
以前のセーフィーの開発部門は、フロントやサーバー、インフラなどの職能ごとに部署が別れていました。長らく続いていたこの体制ですが、部署の組み替えによる最適な組織構成を模索する中で、昨年末にクライアントとサーバーの両担当エンジニアが所属する新しい部署が誕生しました。これまで個々のサービス開発でコミュニケーションを取っていたエンジニアが一同に介したこの機会に、現状ソフトウェアの課題点を洗い出すブレインストーミングを開催したのが背景にあります。
▲ KJ法を用いたブレインストーミングを実施(ビール🍻を飲みながら、最後は参加者でピザ🍕を食べました)
ブレインストーミングで出てきた課題は、弊社のビジネスの複雑さ、開発部門外とのコミュニケーション、属人化やドキュメント不足と様々です。結果としては、参加者それぞれがこれらの課題を自分ごと化し、自分に出来る改善に取り組むことになりました。私はこれらの課題の長期的な解決策として、ソフトウェアアーキテクト技術の学習を挙げ、これが勉強会発足の経緯となります。
ソフトウェアアーキテクト(アーキテクチャ)とは
ソフトウェアアーキテクチャと聞いて何を思い浮かべるでしょうか。弊社でヒアリングしたところ、マイクロサービスやUML、ドメイン駆動設計、クリーンアーキテクチャ、CQRSなどを提示した方が多くいました。これはまさしくソフトウェアアーキテクチャで、ソフトウェアを構成する重要な要素です。ではソフトウェアアーキテクチャを設計するソフトウェアアーキテクトとは、どのような職能なのでしょうか。
これは私の考えですが、ソフトウェアには「解決したい課題」があり、その課題を「解決する手段」がソフトウェアアーキテクチャだと考えています。ソフトウェアアーキテクトは「解決したい課題」に向き合い、適切なソフトウェアアーキテクチャを選定して「課題を解決する」職能を持った人物です。
「解決したい課題」に向き合うためには、考慮すべきことが数多くあります。ソフトウェアに関わるステークホルダーへの理解、ステークホルダーごとのビジネス目標の分析、リスクや技術負債の管理などです。開発した後も継続した改善が必要になるため、教育も含めた開発チームの運営も必要になってきます。
ソフトウェアアーキテクトになるためには
ではソフトウェアアーキテクトのスキルを高めるにはどうすれば良いのでしょうか。このスキルの経験値を上げるには、ソフトウェアアーキテクチャを設計する立場として開発に携わることが重要です。さらに、そこから改善を繰り返した「良いソフトウェア開発」を継続することで育まれるものだと考えます。この勉強会では「課題を解決する、良いソフトウェア開発」について深堀りすることにしました。
勉強会では、昨年11月にO'Reilly社から出版された「Design It!」を教科書として使用しています。

Design It! ―プログラマーのためのアーキテクティング入門
- 作者:Michael Keeling
- 発売日: 2019/11/25
- メディア: 単行本(ソフトカバー)
▲ 実際に勉強会で利用したスライド
この本では、ソフトウェアアーキテクトが行うこととして以下があると説明しています。
- エンジニアリングの観点から問題(品質特性)を定義する
- システムを分割し、責務を割り当てる
- 品質特性間のトレードオフを決定する
- 技術的負債を管理する
- チームのアーキテクチャスキルを高める
▲ 実際に勉強会で利用したスライド、いらすとやを多用しています。
上記の内容について工学的なアプローチを行い、「良いソフトウェア開発」を達成する方法が説明されているのがこの本です。ソフトウェア工学の論文を引用し、ソフトウェア開発のベストプラクティスが数多く掲載されています。加えて、このベストプラクティスを実践するための「アクティビティ」と呼ばれる多数のワークショップが紹介されているのがとても良いです。
勉強会では、まずは本の内容を理解することを目指しています。その後、自身がソフトウェアアーキテクトとなり、業務に活かすことが最終的な目標です。
勉強会の様子
では、具体的にどのような勉強会を運営しているかについて少し説明します。勉強会では座学だけでは無く、教科書で紹介されているアクティビティを実践しています。「ステークホルダーマップ作成」や、「品質特性ウェブ」などを実践し、自らが開発に関わっているサービスについて深堀りしていきました。
▲ すべての勉強会の様子は録画していて、弊社のサービス上でアーカイブされています。
ステークホルダーマップ作成
「ステークホルダー」は利害関係者と訳されます。このアクティビティの目的はソフトウェアに関わる人物を分析し、その関心事を理解することです。いざワークショップを行ってみると実に様々な関心事を持った関係者がいることがわかります。社内だけでも我々開発を行うエンジニアの他に、営業やカスタマーサポート、工事調整部署などがあり、それぞれ別の関心事を持っています。また、社外におけるステークホルダーはサービスを利用しているエンドユーザーだけではありません。弊社は出資関係にある企業がサービスの代理店である場合もあり、その他にも複数のカメラベンダーとの関係があります。エンドユーザーに関しても、大企業や中小で防犯カメラを導入する目的は変わってきます。ステークホルダーの関心事を整理することはソフトウェア開発おける非常に重要な要素です。参加者の中にはエンドユーザーのことしか意識に無かった方もいて、新たな視点を持つことが出来たのではと思いました。
▲ ステークホルダーマップ作成の様子
品質特性ウェブ
ステークホルダーの関心事を分析した後は、品質特性の重要度を可視化する「品質特性ウェブ(Quality Attribute Web)」のアクティビティを行いました。関心事やそこから想定した品質特性シナリオを付箋に書き出し、品質特性のレーダーチャート上に貼っていきます。このアクティビティは、作成したチャートを使ってステークホルダーの関心事から品質特性の中でも何が重要なのかを考えることが目的です。
▲ 品質特性ウェブのアクティビティの様子
リモート勉強会
新型コロナウィルス感染拡大の影響でリモートワークとなったため暫くの間勉強会を休止していましたが、先日リモート開催しました。社内勉強会のリモート開催に課題は多いですが、意識高いエンジニアのスキルアップの機会を減らすことの無いよう工夫をして継続していきたいと考えています。
▲ リモート開催の様子、新規の勉強会参加者のためにこれまでの振り返りを実施
参加者の声
勉強会では、実際に自分たちで開発運用しているサービスを用いてアクティビティを実施しています。「どのようなステークホルダーが存在するか」といった話題や、「紹介されているソフトウェアアーキテクチャが既存のシステムのどこで利用されているか」などの話題になることもあり、入社から日が浅い参加者にとってはサービスの全体像を理解するのに一役買っています。
また、セーフィーには経験豊富なエンジニアも多く、この教科書で紹介されている内容を感覚的に実践している方もいます。ただ、そういった方々からも、体系的にまとめられ、手法として実践的に学ぶことには価値があると評価を得ています。
まとめ
ソフトウェアアーキテクト勉強会の紹介でした。この他にもいくつかの勉強会が開催されています。ネットワークカメラのプラットフォームサービスは、IoT、AI、動画配信など多数の技術に触れることができ、エンジニアリングとしても高い品質を要求されるサービスです。このようなサービスの特性上、弊社のエンジニアは多様な専門性と興味関心を持っている方が多い気がしていて、日常の業務でも勉強になることが多い職場です。
弊社ではこれらの技術に関心があり、成長機会を求める意識の高い方を歓迎します。ご興味のある方のご連絡をお待ちしてます。