組織をコードのように設計する
Spelldataが実践するアクターモデル型ワークスタイル
著者: 竹洞 陽一郎
Spelldataは、創業時からフルリモートワークを前提にした組織作りと運営を行っています。
その仕組みは、プログラミング言語Erlangのアクターモデルを参考にしています。
アクターモデルの原則を取り入れることで、組織内の情報伝達と連携がスムーズになり、迅速な意思決定が可能になることを狙っています。
完全在宅勤務でも高い生産性を維持することを目指しています。
Erlangとは
Erlangは、並行性と分散システムをサポートする機能言語です。
1986年にエリックソン社のJoe Armstrong、Robert Virding、Mike Williamsによって開発されました。
Erlangは、高度な並行性、フォールトトレランス(耐障害性)、ソフトリアルタイム処理、およびホットスワップ機能を持つことで知られています。
これらの特性は、Erlangが大規模で並行性が重要なシステムに適している理由です。
Erlangは、アクターモデルに基づいた並行プログラミングをサポートしています。
このアプローチでは、独立したプロセスがメッセージを介して通信することで、複数のタスクを同時に実行できます。
また、Erlangは分散システムの開発にも適しており、障害に対する耐性が高くなります。
Erlangは、通信、金融、Web開発、IoTなどの分野で使用されています。
また、Erlangは、WhatsAppやRabbitMQなどの分散メッセージングシステムの開発にも使用されています。
Erlangを知ったのは、私のソフトウェア工学の師匠である、株式会社一の大槻繁さんからです。
確か、Akamaiで働いていた2007年頃だったと思います。
独立したプロセスがメッセージを介して通信するという仕組みに、とても魅了されました。
関数型プログラミング言語である点も心惹かれた要因でした。
アクターモデルとは
アクターモデルとは、並行性と分散システムのための計算モデルで、1973年にカール・ヒューイットによって提案されました。
アクターモデルは、システム内の並行性を管理し、スケーラビリティやフォールトトレランスを向上させることを目的としています。
アクターモデルでは、アクターと呼ばれる計算の基本単位が存在し、アクターは以下の3つの基本的な動作を行います。
- メッセージの送信
-
アクターは、他のアクターに非同期メッセージを送信できます。
このメッセージングは、アクター間の通信と並行性の管理を容易にします。 - メッセージの処理
-
アクターは、受信したメッセージに対して何らかの処理を行います。
この処理は、アクター内で独立して実行され、他のアクターの動作に影響を与えません。
これにより、並行性が維持されます。 - アクターの生成
-
アクターは、新しいアクターを生成できます。
これにより、システムは必要に応じてスケールアウトできます。
アクターモデルは、分散システムや並行プログラミングにおいて、以下のような利点を提供します。
- スケーラビリティ
- アクターの生成が容易であり、システムは必要に応じてスケールアウトできます。
- 並行性の管理
- アクター間の非同期メッセージングにより、並行性が維持され、デッドロックや競合状態が回避されます。
- フォールトトレランス
- アクターが独立して動作し、障害が他のアクターに伝播しないため、システム全体のフォールトトレランスが向上します。
アクターモデルは、ErlangやAkka(ScalaとJava用のアクターライブラリ)などのプログラミング言語やフレームワークで実装されており、高度な並行性や分散システムの構築に広く活用されています。
たまたま、2007年にAkamaiの仕事で、アクターモデルの研究で著名な東京大学の米澤明憲先生とお会いする機会がありました。
師匠からErlangを教えてもらったこともあり、アクターモデルについて学び始めたのも、その頃です。
ソフトウェアアーキテクチャの組織論への応用
現実世界の事象をプログラミング言語でモデル化することを、「ドメインモデリング」と言います。
通常は、現実世界のビジネスロジックをコンピュータで扱える形に変換し、システムの開発を行います。
Spelldataでのフルリモートワークの仕組みは、その逆の発想に基づいています。
「プログラミング言語の中で完成された、優れた効率的なモデルがあるのであれば、逆にそれを現実世界の組織に適用してはどうか?」というアイディアです。
私たちは、このアクターモデルを参考にして、組織内の情報伝達と連携がスムーズに行えるよう、組織作りを進めています。
この取り組みは、技術に裏打ちされた合理性を持ちながら、働く人間にとっても持続可能な環境を提供することを目指しています。
Spelldataがアクターモデルを参考にした組織作りで実現しようとしていることは以下の通りです。
- 独立性と自律性の強化(社員の裁量)
-
アクターモデルでは、プロセスが独立して動作し、他のプロセスとメッセージを介して連携します。
Spelldataは、社員が自律的に働くことを推奨し、過度な管理や報告業務を減らすことで、個人の独立性を高めています。 - 明確な役割分担(強みへの集中)
-
各アクターが特定のタスクに焦点を当てることで、効率的な処理が可能になります。
組織においても明確な役割分担を行い、それぞれのチームや個人が自分の得意分野に集中し、責任を持ってタスクを遂行できるようにしています。 - 高速な意思決定と情報共有(スピード)
-
アクターモデルでは、プロセス間のメッセージングがスムーズに行われることで、高速な意思決定が可能になります。
Spelldataは、社内での情報共有を促進し、ビジネスチャンスを逃さない迅速な意思決定ができる組織を目指しています。 - フォールトトレランスとリカバリー(安定性と助け合い)
-
アクターモデルは障害に対して耐性が高く、一部に問題が起きてもシステム全体は止まりません。
組織においては、特定の担当者に不測の事態(体調不良や急用)が発生しても、他のメンバーが即座にタスクを引き継げる体制を意味します。
これにより、個人への過度な負担を防ぎつつ、お客様への納期と品質を安定して守り抜くことができます。 - 柔軟性とスケーラビリティ(成長への適応)
-
アクターモデルのような並行性を持つシステムは、スケーラビリティが高いと言われています。
Spelldataは、組織の柔軟性を高めることで、ビジネスの変化や拡大に対応しやすくし、成長に適応できる組織を構築しています。
結論:持続可能な組織と顧客への価値
SpelldataのErlangのアクターモデルを参考にした組織作りは、完全在宅勤務でも高い生産性を維持するための鍵です。
情報伝達の円滑化、高速な意思決定、そして何より「誰かが倒れてもチームで支え、お客様に迷惑をかけない」という堅牢な基盤(ファウンデーション)を築いています。
リモートワークが一般化する現代において、私たちの取り組みは、技術の力で新しい働き方の可能性を広げる有益な事例であると確信しています。