Scrap Book

Insights and updates

オーバーエンジニアリングから学んだこと ~ Slack + Ansibleの社内自動化が使われなかった話 ~

オーバーエンジニアリングから学んだこと

2025年7月23日 | Project Management

技術的には「正しい」構成だったはずが

少人数のチームで運用していた社内向けサービスに、Slackから操作できる便利な自動化インターフェースを構築したことがありました。

そのアプリケーションは、一般的なものよりも大容量のストレージを必要としており、クラウドストレージを使うとかなりのコストがかかるため、オンプレミスで運用することに決めました。

このアプリケーションは24時間365日稼働が前提であり、ダウンタイムやエラーが発生した際には、週末であってもできるだけ早く対応する必要がありました。

そのため、簡易的なインターフェースから、アプリケーションのステータス確認や再起動ができる仕組みが必要でした。

当時の責任者と協議した結果、次のような構成でシステムを構築することになりました。

この構成は、「効率的」「再利用可能」「DevOps的に正しい」と当時は評価していました。しかし、結局この仕組みは使われなくなりました。使われなくなった時に、チーム内で会議したところオーバーエンジニアリングだという話になりました。

なぜこのようなことが起きたのか?この記事では、実際の運用現場で起きたことと、そこから得た教訓をまとめます。

なぜこの構成にしたのか?

  • アプリケーションは24/7で稼働させる必要がある
  • 冗長構成にすると不具合が発生するため、自動再起動ではなく、人の操作が必要だった
  • 少人数のチームで、できるだけ効率よく起動・停止を行いたかった

そのため、「簡単にプロセスを制御できる方法」を模索し、SlackのSlash Commandによる運用に決定しました。

Slackはすでに社内全体で導入されており、操作インターフェースとしても自然でした。

また、アプリケーションはコンテナではなくVM上で直接動かしたかったため、構成管理はAnsibleで行い、AWXを経由して実行することにしました。

運用者は使えなかった

実装自体には問題はなく、エンジニアはSlackのSlash Commandを使って操作できていました。

しかし、エンジニア経験のない運用担当者にとっては、難解で使いづらいインターフェースになってしまいました。

  • Slack Slash Command の構文は Bashに近く、GUIのような直感的な操作ができなかった
  • 「簡単な仕組み」と思っていたが、実際には操作の前提知識が求められた
  • 結果として Slash Command は廃止され、アプリケーション操作は元の手動管理に戻された
    • 各ホストにSSHして作業することもあったので、その意味でも今回導入したサービスの利便性はあまり高くなかった。

なぜオーバーエンジニアリングだったのか?

1. 本質的な要件の誤認識

  • 求められていたのは「便利なインターフェース」ではなく、誰でも確実に扱えるシンプルさだった
  • 運用担当者はエンジニアではなく、障害対応や再起動に慣れていないため、技術的な操作は現実的でなかった

2. チーム体制と運用方針の未整理

  • 運用方針が曖昧だったため、特定のメンバーに負荷が集中した
  • 開発中も明確な方針がないまま進み、結果として開発者が開発・運用・保守まで背負う形になった

3. 調査不足

  • 運用対象アプリケーションの特性や、他社・他チームでの運用例についての調査が不十分だった
  • 事前に運用のベストプラクティスを調べていれば、この構成自体を選択しなかった可能性がある

少人数のチームこそ「責任ある設計」と「合意形成」が必要

この経験から、私が学んだのは以下の3つの教訓です。

  1. 少人数のチームでは、完璧な自動化より「許容できる運用」を選ぶ判断も必要
    • 「動かなければ人が起動する」ぐらいで十分な場面もある
  2. インターフェース設計は、「一番詳しくない人」を基準にすべき
    • 実際に操作するのが自分でないなら、誰にでも使えるUIが不可欠
  3. チーム全体での合意形成がないまま進むと、責任と負荷が特定の人に偏る
    • 特に少人数体制では、技術リーダーが責任を持って方針を定める必要がある
    • そのためには、事前の十分な調査・検討フェーズが不可欠

技術的に正しい ≠ 現場で使われる

オーバーエンジニアリングとは、単に「やりすぎた」ということではありません。

今回のケースは、手段が目的化し、現場の文脈や制約を無視して設計されたことで、使われない仕組みになってしまった典型例でした。

もし最初に、関係者全員に全体像を説明し、運用の前提や制限を共有した上で設計していれば、よりシンプルかつ持続可能な仕組みにできたかもしれません。つまり、適切なサイズのプロジェクトにしておけば、オーバーエンジニアリングにならなかったと思います。考慮事項が多かったため、オーバーエンジニアリングになってしまったと思いますが、ビジネス的にも何を優先させるかを明確にさせることで、より簡潔にできたのではないか、ということがこのプロジェクトからの教訓です。

お問い合わせ

ご質問があれば、お気軽にお問い合わせください。

CONTACT