2024.12.10
“放置系”なのにサイバー攻撃を監視・検知、「統合ログ管理ツール」とは 最先端のログ管理体制を実現する方法
リンクをコピー
記事をブックマーク
広木大地氏(以下、広木):(スライドを示して)次に、それぞれの組織の図があって、ソウゾウさんの組織図がこんな感じになっています。これはさっぱりした図ですが、名村さん、説明してもらってもいいですか。
名村卓氏(以下、名村):メルカリに比べるとソウゾウはまだ小規模なエンジニア組織です。Product Termsというチームと、Enabling Teamsというチームがあります。
最初の組織編成の時にチームトポロジーズの本の影響を色濃く受けて、1つのあるサービスやコンポーネントを作っていくにあたり、できるだけそのチームが独立して動けるようにしたいという、ストリーム・アライン・チームをきちんと作っていくべきだということがあります。
そのチームができるだけドメインに所属せずに、可能な限り幅広い領域にアクセスしながら開発ができるところを目指したので、そういう意味ではProduct Teamsがエンジニアの中には存在して、スクラムごとにチームが分かれている感じになっています。
広木:たぶん聞いている中でわからない方がいると思うのですが、ソウゾウさんはメルカリのグループの中で今何を作っている会社ですか?
名村:メルカリの子会社で2021年にできました。メルカリは実際の消費者同士、コンシューマーtoコンシューマーのサービスです。メルカリが実際に事業者に対して販売する機会を与えるということで、BtoCのサービスである「メルカリShops」というものがあるのですが、ソウゾウでは今それを作っています。
広木:テックブログなどに「こんな感じのマイクロサービスアーキテクチャをやっていますよ」とか、「依存モデルをこんな感じでやっていますよ」と上がっていたかと思うのですが、そのサービスですよね?
名村:そうです。メルカリのテックブログに、技術スタックの2人がいろいろ中で作っている内情をたびたび載せたりしているので、もしかすると知っている方は知っているかもしれません。
広木:その時の記憶をたどってしゃべると、細かくマイクロサービスっぽく分かれている設計になっていたと思います。チームとして今は3チームあって、これをどんどん増やしていく想定になった時に、マイクロサービスなんだけど今はある程度複数のサービスをみんなが見られる状況になっていて、これから増やしていくようなことを想定している感じですか?
名村:そうですね。でももはやエンジニアの数よりマイクロサービスのほうが圧倒的に多いので、チームとマイクロサービスのオーナーシップ的な関係性は実はあまり考えてなくて、システムとして分離されるべきか否かしか、たぶん今は見ていないと思っています。全体としてのアーキテクチャがわりとサーバーレスに寄っていたりするので、そのマイクロサービスが1つの……。
広木:ファンクションぐらい?
名村:そうですね。サービスというか、サーバーなどのそういう大きなアプリケーションの単位ではなくて、わりとファンクションぐらいの単位。「こういう機能」「こういう機能」という感じで組んでいます。
みんなの頭の中では恐らく「そういうコンポーネントのソースコードがたくさんあるよね」ぐらいの感じに見えているとは思います。
広木:これは全部1つのリポジトリですか。それともリポジトリを分けているのですか?
名村:記事に書きましたが、モノレポで、今のソースコードは全部1つのレポジトリに統合されている感じ。
広木:エンジニアとしては見通しは立つけど、アイソレーションがきいているとか、技術的姿勢が入れやすいとか、そういう感じなんですか。
名村:そうですね。見た目的にはマイクロサービスのソースコードがバーッとあるので、1個のモノリスなサーバーにコンポーネントがきれいにバーッと分かれているのと似たような見え方だとは思います。
広木:なるほど。Enabling Teamは何をしているのですか。チームトポロジーのEnablingと同じような感じですか。
名村:チームトポロジーの場合、Enabling Teamはいろいろなチーム種類の中の1個だと思うのですが、ソウゾウの場合はまだ小規模なので、他のタイプのチームを作るには早いというのがありました。
単純にProduct Teamsになんらかの武器を提供するというか、Product Teamsが開発をするために何か手助けになる、もしくは必要になる。もしくは「これがあると開発チームがもっといろいろな機能が作れる」とか、基本的にはそういうものを提供しているチームです。
そういうプロダクティビティに関する開発もやっているし、マシンラーニングのチームもいる。あとはSRE的なチームも、DevOps系をやっているチームもいます。
Product Teamsがto Customerに対して。Enabling Teamsはto Developerのことをやっているチームなので一番説明しやすいかと思います。もちろんML(Machine Learning)のチームがto Customerの機能も作っているので、ちょっと例外的なところはあります。
広木:ありがとうございます。SmartHRさんの組織図を見せていただけるということで。お、たくさんある。
芹澤雅人氏(以下、芹澤):これはカジュアル面談などで使っている図を拝借してきました。僕たちも発想としては似ています。今エンジニアが70〜80名ぐらいいて、プロダクト開発にかかわっている人でいうと、全部で140〜150人ぐらいいます。
そういった人たちを、1プロダクト1チームずつ形成するスタイルで、基本的にエンジニアは兼務はしないように、1つのプロダクトに集中するような体制の下にチームを作っていく感じでやっています。
これは創業初期というか、事業やプロダクト組織が発展していくうえでの痛みによるものもあって、やはり最初はモノリスで実施しました。SmartHRというサービス、プロダクトをどんどん大きくしていったのですが、チームのエンジニアの人数が10人を超えたあたりからどんどんスピードが出にくくなるとか、スクラムがやりにくくなるみたいなことが出てきて、何とか分割しようと模索を始めました。
いろいろやり方はありましたが、僕たちの場合はマイクロサービス、厳密にいうとぜんぜんマイクロサービスではないのですが、機能を分割していくようなことをやりました。
SmartHRを使っていただいた方はイメージできるかもしれないですが、ログインした後に、例えば「年末調整やるぞ」となったら年末調整ボタンをポチっと押して年末調整の画面に遷移します。内部的にはその遷移の時に、アプリケーションがもう切り替わっているんです。
認証を引き継いだり、あとはAPIでSmartHRの本体とやり取りをして年末調整を動かす仕組みになっていて、完全にリポジトリも別でチームも別になっています。
これをやることで、いわゆるコンウェイの法則がかなりきれいに当てはまり、SmartHR本体を作っているチームが1対1で紐づき、また、年末調整の機能を作っているチームがプロダクトに1対1で紐づく感じになります。
初期のチームが肥大化していくうえでの悩みが、これによってかなり解決されたという成功体験があって、それ以降ずっとこういったかたちで組織とプロダクトをスケールさせてきています。
かなりうまくいっているポイントがいくつかあります。(まず)一つひとつのチームが必然的に小さい単位に保てます。そのため、前半で話したようなオーナーシップが持ちやすいとか、自分が知るべきドメインの知識が限定されて負荷が下がるとか、そういうものがかなり効いています。
かつ、マネジメントもこのチームの単位で実行されます。たまに「一緒にコードを書いていない人にエンジニアとして評価されるのは、あまり納得しない」みたいな体験をした方がいるかなと思うのですが、やはりそういうものが減らせたりもします。
一緒にコードを書いているメンバーの中にマネジメント、評価をする人がいて、その人の下にチームビルドが行われていくのも、今回のテーマであるメンバーの成長だったり自立を促しやすい(実感)みたいなのもあって。そのための仕組みとしては、強い基盤になっているのではないかと思います。
広木:ありがとうございます。これはたぶんURLが違うものの、認証系だけは一緒で、フロントエンドも分離するタイプのマイクロサービスなんですよね?
芹澤:そうです。
広木:フロントエンドのコンポーネントの共有化もけっこうしていますか。
芹澤:していますね。これは「SmartHR デザインシステム」か「SmartHR UI」で調べるとけっこう出てくるかなと思います。
広木:Reactのデザインシステムみたいなものですよね。
芹澤:そうそう。社内で共有するだけではなくて、普通にパブリックに出しています。「パブリックに出したのはなぜか」みたいなところは諸説あるのですが、初期の頃からかなり力を入れていて。みんながそのデザインシステムとコンポーネントを使えばシームレスな体験を提供できるようなUI/UXが実現される。それの近道になるようなアイテムはかなり力を割いて整備しています。
広木:確かにBtoBのシステムでいろいろな機能が機能として求められてくるようになると、UIとして一つひとつ作り込んでいくよりも、同じコンポーネントが同じ価値になっているほうがわかりやすいとか、そういう感じですよね。
芹澤:そうですね。
広木:Railsの部分というか、バックエンドの部分でも共通化する何かはあったりするのですか。
芹澤:そうですね。アーキテクチャだけで見るとなんでもいいのですが、メンバーのポータビリティだったり、社内でのノウハウのレバレッジの効きやすさから、どうしても共通でRailsを使ったほうがいいと。Railsを使うことで、資産、アセットが多いので、自然とこうなってしまっている感じです。
ただ、先ほども言ったとおり仕組み的にはなんでもいいかなと思うので、今後作られるサービスの特性次第では、別の言語を使うこともゼロではないかなと思います。
広木:ちなみに単純な興味でうかがいたいのですが、(スライドを示して)コアの部分とプラスと書いてある部分の連携方法は、考えるとけっこうややこしくなりそうだなと思いますが、依存関係としてはそれぞれ独立しているのですか。
芹澤:これはかなりシンプルで、プラス側、僕たちはプラスアプリと呼んでいるのですが、これらは今のところ連携していません。
コアとプラスが1対nの感じになっていて、コアとプラス間はここに書いてあるとおりRESTのAPIでおしゃべりをするような、極めてシンプルな構造です。このあたりはそこまで複雑化されていないところです。
広木:最近のプラガブルなERP(Enterprise Resources Planning)系のものは、そういうものがちょっとずつ増えている感じなんですか。
芹澤:そうだと思います。
広木:GraphQLがちょっとだけ書いてあるのも興味深いです。
芹澤:そうですね。これはシンプルに届出書類というアプリケーションがかなりたくさんの従業員情報を使うので、RESTの限界を超えてしまったというか。GraphQLでいろいろな情報を柔軟に取れたほうが合っているというところで使われています。
今後もそういった特性に応じてインターフェースみたいなところをいろいろ作っていくと思うのですが、今のところはこのREST APIとGraphQLでユースケースは満たせている感じです。
(次回につづく)
関連タグ:
エンジニアの“自立”には2種類ある ソウゾウとSmartHRの取締役が語る、成長と育成
「カルチャーはバリューで伝える」「ロールモデルを作る」 スタートアップ2社が取り組んだ、成長と自立を促す施策
ソウゾウ・SmartHRの組織図から見るチームの分けかた 取締役が語る、現在の構成がつくられたそれぞれの背景と意図
事業の多角化や育成可能なエンジニア組織を実現するために ソウゾウとSmartHRが抱える課題と、解決のための取り組み
マネージャーの成長のためにメンバーができること オープンな関係と成長機会を作るために大切な「相互のフィードバック」
新人教育の文化がない組織をどうリカバリーするか? “痛み”を伴うからこそ意識したい、言語化と障壁の排除
2024.12.10
メールのラリー回数でわかる「評価されない人」の特徴 職場での評価を下げる行動5選
2024.12.09
国内の有名ホテルでは、マグロ丼がなんと1杯「24,000円」 「良いものをより安く」を追いすぎた日本にとって値上げが重要な理由
2024.12.09
10点満点中7点の部下に言うべきこと 部下を育成できない上司の特徴トップ5
2024.11.29
「明日までにお願いできますか?」ちょっとカチンとくる一言 頭がいい人に見える上品な言い方に変えるコツ
2024.12.04
いつも遅刻や自慢話…自分勝手な人にイラっとした時の切り返し 不平等な関係を打開する「相手の期待」を裏切る技
2023.03.21
民間宇宙開発で高まる「飛行機とロケットの衝突」の危機...どうやって回避する?
2024.12.06
嫌いな相手の行動が気になって仕方ない… 臨床心理士が教える、人間関係のストレスを軽くする知恵
2024.12.03
職場の同僚にイライラ…ストレスを最小限に抑える方法 臨床心理士が語る、「いい人でいなきゃ」と自分を追い込むタイプへの処方箋
2024.12.05
「今日こそやろう」と決めたのに…自己嫌悪でイライラする日々を変えるには
PR | 2024.12.04
攻撃者はVPNを狙っている ゼロトラストならランサムウェア攻撃を防げる理由と仕組み