フューチャー技術ブログ

【技育祭2023秋 登壇レポート】エンジニアを目指す君たちはどう生きるか ~ソフトウェアアーキテクトのすゝめ~

TIG DX Unitの武田です。

技育祭2023秋のDAY1 14:30 - 15:15のセッションにて登壇させていただいた報告記事です。

技育祭について

https://talent.supporterz.jp/geeksai/2023autumn/

技育祭はサポーターズさんが運営している、「技術者を育てる」ことを目的としたエンジニアを目指す学生のための日本最大のオンラインカンファレンスです。

弊社はスポンサーとして毎年登壇枠を頂いており、今回は私が登壇させていただく運びになりました。初めての参加でしたが、その名のとおり「お祭り感」満載の雰囲気があってとても楽しいイベントでした。

当日の内容

https://speakerdeck.com/rhumie/enziniawomu-zhi-sujun-tatihadousheng-kiruka

まずタイトルについて「エンジニアを目指す君たちはどう生きるか ~ソフトウェアアーキテクトのすゝめ~」ということで、流行りのタイトルに乗っかろうとしましたが、安易に乗っかりすぎたかもしれません。登壇陣にはCEOやCTOクラスの方が多数いらっしゃる中、肩書のインパクトだとどうしても負けてしまうので、タイトルはとても大事です。
キャッチーで注目を集めつつ、自分の伝えたい内容を的確に伝えられるタイトルというのを目指したいですね。

発表については、「生き方」を軸としつつ、下記の2点をゴールとして構成しました。

  • ソフトウェアアーキテクトとしての「生き方」を知る/学ぶ
  • これからのエンジニアとしての「生き方」のヒントを得る

このような内容にした背景として、そもそもソフトウェアアーキテクトやソフトウェアアーキテクチャがどのようなものなのか、私自身昔はうまく言語化できていなかったことが挙げられます。
アーキテクチャという言葉自体にまだ馴染みのない学生の方が多かったと思いますが、ソフトウェアアーキテクチャとは何たるかのイメージが少しでも明確になり、アーキテクティングの魅力を感じてもらえたら、という想いで資料は作りました。

アーキテクチャという抽象的な領域をわかりやすく伝えたいと思う一方で、デフォルメしすぎると正確さを欠いてしまうため、そのあたりのバランス感覚を意識するようにしました。

なお2022年秋の技育祭では、私の先輩である真野さんがソフトウェアアーキテクチャに関する話を発表しているため、合わせて読んでみると理解が深まると思います。
https://future-architect.github.io/articles/20221019a/

登壇してみて

  • Zoomのチャットを利用して学生と双方向のやり取りができるので、次回は(もしあれば)もっと活用しながら進めた方が盛り上がりますね。思いつきですが、何かのお題に対して一緒にアーキテクチャを考えるというのもトライしてみたいと思ったりしました。

  • 発表時間について45分だと勘違い(実際は40分)をしており、やや早口になってしまった点は猛反省です。この場を借りてお詫び申し上げます。

  • 技育祭は情報系の学生の参加者が多いと思いますが、私が文系出身だったこともあり学生のレベル感が掴み切れていない部分があるので、わかりやすかった/わかりにくかった、簡単だった/難しかった等々フィードバックを参考にしたいと思います。

当日頂いた質問

質問いただいた方ありがとうございます。
頂いた質問についてはチャットログから拾ってここで回答させていただきます。

質問1

Q. 個人で構成を設計してから開発に入る場合、間違いなく開発中に不備があり修正してしまうのですが、プロのアーキテクチャの方が設計した場合、開発中に修正はありますか? もしある場合、どのくらいの頻度の、そしてどれくらいの規模間の修正を経験したことがありますか?

A. 不備の度合いにもよりますが、今回お話した構成設計、技術選定、処理方式設計などのアーキテクチャ設計は、システムの開発を進める上で土台になる重要な部分であり、間違いがあった場合の影響(手戻り)が大きく、致命傷になる可能性があります。そのため実際の現場では、本開発に入る前にアーキテクチャのPoC(概念実証)を行い、小さく動くものを作りながら、ノックアウトファクター(致命的な不備)が無いか確認した上でアーキテクチャを確定させるというプロセスを踏んだりします。
もちろん設計段階で完璧なものができることは無く、開発を進める中やサービスをリリースした後で「こうすればよかった」という改善点はいろいろと出てくるので、そういったものは費用対効果(修正に費やす費用に対して効果があるか)を鑑みた上で、継続的に改善していく形になります。

質問2

Q. クリーンアーキテクチャやオニオンアーキテクチャなど、ソフトウェア構造を決めるに当たってどんなことを考えて選定するのか聞いてみたいです。

A. クリーンアーキテクチャもオニオンアーキテクチャもヘキサゴナルアーキテクチャもレイヤの責務と依存関係を明確にするという意味では本質的には大差ありません。アーキテクトとして、実際の現場で意識するのは、開発者の「品質」と「生産性」を如何に向上させ、均質化(ムラのない状態に)できるかという点です。
実際の現場では複数人の開発者(私のこれまでの現場では20人から30人程度が多いですが、多いところでは100人を超える現場もあります)。で開発を進めますが、全員が全員スキルレベルが高いというわけではありません。

  • 開発者がどれだけすぐにアーキテクチャをキャッチアップして理解できるか。
  • 開発者が実際にコードを書くときにどこに何を書くか迷いが生じたりしないか、開発者によってバラつきが生じたりしないか(責務が明確に定義できるか)。
  • 開発者が書くコードの量が過剰に増えていないか。
  • テストしやすいようになっているか。

などいろいろなスキルレベルの開発者がいることを前提として、開発者の視点で考えることが多いです。

質問3

Q. ソフトウェアアーキテクト目指すならこれ読んどけ! っていう本とかってありますか。

A. 発表資料中に引用している書籍も含めて、いくつか自分自身のためになった書籍をいくつか紹介します。個別具体のアーキテクチャに特化した書籍というよりは、全体が理解できるようなものを紹介しておきます。

最後に

技育祭、優秀な学生の方々からフレッシュな刺激を頂き、とても楽しかったです。
登壇を通じて、私自身改めてアーキテクティングについて自分の中で体系的に整理ができ、一緒にアーキテクティングをする仲間を増やすためにもこういった情報はどんどんオープンに発信していきたいという気持ちが一層強くなりました。

また機会があれば面白いコンテンツを引っ提げて登壇したいなと思います。
最後になりますが、3セッションある中で聞きに来てくれた方、この記事を読んでくださった方、本当にありがとうございました。