みなさんは開発をする際に運用のことを考えているだろうか。
私は個人的に運用を重視しており、運用が不可能になったらサービスは死ぬというのが理念であり、運用コストの低いシステムを構築するのがモットーである。
もし、ちゃんとした組織で分業が進んでいれば幸せだろう。
しかし前職では圧倒的人手不足、運用コスト、その他様々な理由に悩まされた。
そう、これはスタートアップ企業で生き残りをかけた運用方法の模索のお話である。
運用タスク地獄
前職では入社した時点で、新しいイベントなどのコンテンツを更新するためにいちいちHTMLやコントローラーを書いてデプロイする必要があった。想像して欲しい。新たに機能を作りたいと話しているのに業務時間のほとんどがコンテンツの更新に当てられているのである。はっきり言おう。クソだ。一週間で1、2回しかコンテンツの更新されないサイトに誰が来るというのだ。
この記事を見た人で、その様な環境に浸っていたいという人はそう多くはないだろう。
これはさすがに酷かった、酷すぎた。なので、URLでパスパラメータを使用し、AjaxでS3に置いたHTMLファイルを読み込むようにした。S3にファイルを置き、DynamoDBにデータを登録することでデプロイする必要はなくなったので多少コストを下げることはできたが、アーキテクチャが少し複雑になってしまった。しかし、いいのだ。生き残ることこそ正義である。
また、考えてほしい。なんでもかんでも運用に任せるということは運用の人の時間を奪うということだ。それはどのような結果をもたらすか。
まず、一つ一つの運用業務に使う時間が減り、ミスが増えることでサービスの質の低下に繋がる。
さらに、運用業務を回しきれなくなったら人員を増加するしかなくなるので人的コストが発生する。新たに人を雇うとなると年収(400万を想定)と社会保険料(50万前後)、エージェントへの支払い(年収の30%)で約570万ほどのコストが発生し、給料へ回る金が減るのである。低賃金で苦労するのが好きな人など圧倒的少数だろう。
では、どの様に運用コストを下げていくか。
スクリプトの作成
いちいち手動でデータを登録したりファイルをアップロードするとミスが発生することがある。また、データの集計もSQLを打ち込んで結果を手動で打ち込んでいくなどEXCELの計算結果をそろばんで確認するように非効率極まりない。
そのため、csvやjsonのデータを作成しシェルスクリプトやPythonでスクリプト化することで、実行して結果を確かめればミスや時間をだいぶ減らせる。
しかし、それでも問題がなくなるわけではない。そう、コミュニケーションコストが発生するのである。ある時は電話で、ある時はslackで支持は飛んでくる。「あれやって」「これやって」と。こちらにも仕事はあるのだが?
ではコミュニケーションコストを減らすためどの様にすればいいか。教育だ。csvやjson、HTMLといった雛形を作成して変更方法を教えた。ITリテラシーが低いからといって、覚えないのはサボタージュである。少なくとも前職はWebサービスの会社であり、やらない理由など存在しない。
そして、教育するなによりの功績は責任から逃れることができる。思ってたのと違う、こうじゃないなどの意見をねじ伏せることができる。作ったのあんたらやん?
もちろん、言われたことしか対応しなかったら雰囲気が険悪になるだけなので、こうしたいなどの意見があったら相談に乗って対応することもあるが、今までのものでこと足りる分には運用コストは最初と比べると大幅に低くなる。
S3の利用
後半によく使った方法だが、CSやセールスなどコンテンツを更新する人にS3にデータをあげてもらう方法である。
いちいちデータの受け渡しをメールなどでやっているとやはり面倒臭い。
なのでS3のデータを参照すれば、コンテンツの更新の依頼を受けたらコマンドを実行するだけだし、内容を修正したかったらデータを修正して再度アップロードして連絡をもらえばいい。
上流から運用方法を考える
そもそも、なぜ運用コストは積み上がってしまうのか。
理由の一つとして機能を作る段階で技術や開発に傾倒するなど、運用を考えていないことが原因である。
企画や要件定義の段階で効率的にデータを更新する方法を考えるべきである。
また、運用する際のルールをあらかじめ決めておくことで、「これなるはやでお願い」のような横槍に対して次回の更新はいつになりますとタスクをコントロールする盾となってくれる。タスクが発生するごとに対応していたら時間など瞬く間に消費されていくだけである。
しかしながら、社長等のトップダウンの理不尽な命令を防げるかというとそれは組織次第、メンバー次第である。
CMSの導入
上記の方法は入社した時点ですでにシステムがあり、根本的にシステムを変更する余裕がなかったのである。人的にも時間的にも。
では、システムを導入する際どのような技術を導入すべきか。
そう、CMSである。
世界一有名なCMSはWordpressだろう。Djangoならwagtailなど様々なCMSがある。また、最近ではheadlessというViewがなくAPIでコンテンツを管理するCMSも存在する。
CMSを導入することでなにが嬉しいかというとコンテンツの更新がエンジニアの手を離れ、コンテンツを管理するチームだけで収まるのである。
その分、開発の時間をとることができるのだ。
エンジニアの、エンジニアによる、エンジニアのための組織を作るためにも、ぜひCMSを考慮していきたい。
0件のコメント