世界を動かす技術を、日本語で。

コードとしての企業

概要

  • ソフトウェア企業の情報管理とISO 27001監査における現状の課題
  • 組織データのプログラマティックな表現「Company as Code」の構想
  • ドメイン固有言語(DSL)による組織モデルの例示
  • グラフ構造による組織関係の可視化と自動化の可能性
  • 実装に必要なシステム構成と今後の展望

ソフトウェア企業における情報管理のアイロニー

  • 先進的なツール で運用やコンプライアンスを自動化している現状
  • しかし、 組織の中核 (方針・手順・構造)は未だに「デジタル紙」管理
  • 日常業務の大半 がデータ化・API化されている一方、組織情報は分散・静的ドキュメント
  • 監査やポリシー更新のたびに 膨大な工数 が発生
  • 組織データの「疎さ」と運用データの「豊かさ」のギャップ

Company as Code:組織をコードで表現する発想

  • Infrastructure as CodePolicy as Code の成果を組織管理にも応用
  • 組織全体を プログラマティックに表現 し、バージョン管理・クエリ・自動検証を可能に
  • ポリシー変更 をコード変更として管理し、影響範囲を自動分析
  • 組織設計 を「ステージング環境」でシミュレーションし、波及効果を可視化
  • 既存の HRISGRCツール では実現困難な「全体最適」と「関係性の明示化」

Company Manifest:理想的な組織モデルの要件

  • 人・ポリシー・システム 間の関係を明示的にトレース
    • 依存関係の追跡、ポリシー影響範囲の即時可視化
  • 変更履歴の明確化 (誰が・何を・なぜ変更したか)
    • 監査や組織進化の理解に不可欠
  • 既存ツールとの連携 (Azure、Slack等)
    • 常に最新の組織像を維持し、ポリシーに基づく設定自動化
  • 変更の事前検証環境自動テスト
    • ルールやコントロール単位での検証
  • ノンテクニカルな利用者にも直感的なUI

DSLによる組織構造の定義例

  • エンティティ型・識別子・属性 で構成される宣言的記述
  • 例:エンジニアリングチームの定義
Role "SoftwareEngineer" {
  Responsibilities = [ "クリーンなコード作成", "コードレビュー参加", "技術決定の記録" ]
}
Role "EngineeringManager" {
  Responsibilities = [ "技術リーダーシップ", "評価面談", "チームリソース管理" ]
}
OrganisationalUnit "EngineeringTeam" {
  Department = "Engineering"
  CostCenter = "ENG-001"
}
Person "AliceSmith" {
  FullName = "Alice Smith"
  Role = Role.EngineeringManager
  Unit = OrganisationalUnit.EngineeringTeam
  Email = "alice.smith@company.com"
}
Person "BobJohnson" {
  FullName = "Bob Johnson"
  Role = Role.SoftwareEngineer
  Unit = OrganisationalUnit.EngineeringTeam
  Manager = Person.AliceSmith
  Email = "bob.johnson@company.com"
}
PolicyGroup "SecurityPolicies" {
  Owner = Person.AliceSmith
}
PolicyRule "MFARequired" {
  Group = PolicyGroup.SecurityPolicies
  Enforcement = "Mandatory"
  ComplianceLevel = "Critical"
}
ExternalRequirement "ISO27001_A9_4_1" {
  Standard = "ISO 27001:2013"
  Control = "A.9.4.1"
  ComplianceLevel = "Mandatory"
}
ComplianceMapping "MFACompliance" {
  Requirement = ExternalRequirement.ISO27001_A9_4_1
  ImplementingPolicies = [PolicyRule.MFARequired]
}
  • 宣言的なDSL で組織全体の構造・規則・外部規制との対応関係を一元管理
  • ファイル分割・ディレクトリ管理 でバージョン管理やレビューも容易

組織グラフ構造による関係性の可視化

  • 有向非巡回グラフ(DAG) ではなく、 無向循環グラフ が必要
    • 人が人を管理し、ポリシーが活動を参照し、複雑な相互依存が発生
  • グラフクエリ による影響分析例
    • 「MFAポリシー変更時、どの外部要件が影響を受けるか」等
  • C#によるシンプルなノード・エッジ実装例 (省略)

実装に必要なシステム構成

  • グラフDB :組織モデルの永続化
  • リレーショナルDB :エビデンス等の付随データ管理
  • イベントストア :監査証跡・変更履歴の保存
  • プラグイン型インテグレーション基盤
    • GitHubやAzure等からのデータ収集
    • ポリシー検証・自動証拠収集
    • 組織変更時の自動プロビジョニング・権限変更
  • DSL内のControlエンティティ で外部スクリプト連携・自動チェック
Control "MFAMonitoring" {
  Implements = ComplianceMapping.MFACompliance
  Verify {
    Script = "Security/mfa-checks.js"
    Methods = [ "allUsersHaveMfaEnabled" ]
    Frequency = "Daily"
  }
}

今後の展望と課題

  • 組織の複雑性 をコードでどこまで抽象化・モデル化できるか
  • 既存ツール群の統合新たな抽象化レイヤー の必要性
  • エンジニアとビジネスリーダー 双方が使いやすい設計
  • 継続的なコンプライアンス監査・組織設計の自動化 の実現可能性

この「Company as Code」構想は、組織運営の透明性・効率性・自動化を大きく進化させる可能性を秘めています。今後は、実際のプロトタイプ実装や既存ツールとの連携事例の蓄積が期待されます。

Hackerたちの意見

これに最も近いのはGitLabの形だと思う。あそこは有名なオープンハンドブックを作って、企業向けの仕事をたくさんやってたよね(https://handbook.gitlab.com/)。初期の頃は、すごくオープンで包括的だった。仕事でどう扱うか迷ったときに、何度も見たことがあるよ。

それはかなりクールだね。今でもちゃんと展開されて更新されてるのかな?もし「エージェント」ワーカーを展開したいなら、そのソースは文脈の宝の山だね。

そのサイトはGitリポジトリとしても利用可能だよ - もちろんGitLabでね: https://gitlab.com/gitlab-com/content-sites/handbook

これって要するにERPを再発明しようとしてるだけじゃない?(つまり、SAPが2070億ドルの企業を築いたもので、フォーチュン500の90%や他の大企業が使ってるやつ)。ERPをコード化することが今のものより価値があるって主張することもできるけど、これが全く新しいアイデアだって言うのはちょっとおかしいよね。

俺が働いてたところは、会社で起こることは基本的にLotus Notesの中でアクションとして実装されてた。実装の選択やパフォーマンスは最悪だったけど(決定した時はNotesが唯一の選択肢だったけど、25年後にはそうでもない)、実際のアイデアは素晴らしくて、めちゃくちゃうまくいってたよ。

Hats Protocolでこれを試したんだけど、俺たちのアプローチはすごく合ってると思う! https://blog.hatsprotocol.xyz/organizational-graphs DAOsの視点からアプローチしたんだけど、最初は役立ったけど最終的には制限があったかな。ブロックチェーンじゃないバージョンが流行ると思う。Tailscaleはそれを実現するのにいいポジションにいるよ。俺たちの得た洞察は、組織内で上下に機能するための適切な委任の原則を構築する必要があるってこと。最近の考えは「Trust Zone」って呼んでるもので、詳しくはここにあるよ: https://blog.hatsprotocol.xyz/making-daos-work 「DAO」の部分は無視しても大丈夫。質問があれば喜んで答えるよ。この探求にはまだすごくインスパイアされてるから。

Hats Protocolで似たようなコンセプトを実装した経験をシェアしてくれてありがとう!委任のための「Trust Zone」のアイデアは興味深いね。これらの組織構造をプログラムで構築・維持する際に、具体的な課題に直面したことはある?

これは新しいアイデアじゃないよ。俺はキャリアの初めにこういうことを提案したし、聞いてくれる人がいるときには何度も提案してきた。問題は、組織内の権力ダイナミクスに対する脅威なんだ。コンプライアンスの人たちは、自分たちの成果がこんな風に簡単に検索できてインデックス化されるのは得にならない。だって、彼らの必要性が減るからね。経営者やリーダーもこれからは、さまざまなコンプライアンスフレームワークの知識が求められるから、得にはならない。知識や専門性から権力を得ている人たちが、会社やその運営を支配していることが多くて、彼らはこれを実装するよりも、むしろ完全にブロックする方が得なんだ。俺はこのアイデアが大好きだよ。組織内の透明性が好きで、サイロの壁を越えて問題を特定して解決するのが無限に楽になるから。これは最高の協力だし、俺はそれを支持する。でも、競争が社会全体のデフォルトの運営モードとされている限り、これが大規模に実現するとは思えない。それでも、内部の協力を重視する組織で働きたいと思ってる。そこではうまくやれると思う。

問題は、いや、ほんとに唯一の問題は、これが組織内の権力ダイナミクスに与える脅威だってことだよね。それに専門知識も、正直なところ。ドキュメンテーションをコードとして扱うのは、ソフトウェア業界で言うところのテストや型システムのことだ。大多数の開発者は、自分のコードに対して良いテストすら書けないし(そもそも試そうとすらしない人も多い)、ロック証明を書くように頼んだら完全に目が glazed over しちゃうんだよね。コードに命をかけてる人たちですらそうなんだから、ビジネスの人たちなんてもっと遠いよ。

今日の「コンプライアンス」はなくなっていくね。

とはいえ、内部協力を重視する組織で働きたいな。そこでなら自分が成長できる気がする。キャリアの中でずっとそんな組織を探してたけど、最近は自分で作らない限り無理だろうなって諦めてる。[1] https://blog.webb.page/WM-081

それは権力を制約し、意思決定を監査可能にして、権力を持つ人々をガイドラインに従わせるんだ。経営陣は、このパラダイムが嫌いなのは、大手テックプラットフォームが行動やモデレーションのガイドラインを曖昧にしているのと同じ理由だよ。明確に正当化できない理由で、削除したり、罰したり、解雇したり、権力を行使する自由を与えてくれるからね。これはEUや世界中の国々が避けているのと全く同じパラダイムで、報道の自由や表現の自由のようなものにおいて適正手続きを否定して、問題視する発言や人々、グループを抑圧したり「管理」したりする柔軟性を持たせている。明確な法の支配が権力の行使を制約するんだ。権力を振るいたい人は、絶対にそれを好まないよ。

Hacker Newsで議論の続きを見る