見出し画像

スタートアップで役に立つ、闇の魔術に対する防衛術

こんにちは、株式会社ナンバーナインで闇祓いエンジニアをしている糟谷です。

僕は普段闇祓いエンジニアとしてこんな仕事をしているのですが、
闇祓いエンジニアの仕事の一つとして闇の魔術スプレッドシートに対する防衛術があります。

死喰い人同僚によって生み出され、運用していく中で闇の元凶となってしまった魔術スプレッドシートを改善し、本来実現したかったことを素直に行えるようにする。
また、死喰い人同僚が生み出そうとする魔術スプレッドシートに介入し、闇にならないように設計、支援をする。

今回はそんな闇の魔術スプレッドシートに対する防衛術の内容をお話していこうと思います。

スタートアップは闇の魔術の巣窟

スタートアップでは日々新しい仕事が生まれ、その管理のための魔術スプレッドシートが生まれます。
最初はどんな仕事になるのか判断出来ないので、とりあえず担当者の見えている情報を自分で使いやすくまとめた物になることが多いです。

そうして自分の仕事を効率化するために生まれた魔術スプレッドシートは、目の前のタスクを消化するために利用され、正しく作りなおす間も無く全体に共有され、誰も設計を行わないままに正しいやり方として定着していきます。

一度正しいやり方として定着した方法を変えるのは関係者が多ければ多いほど難しく、自分のための魔術スプレッドシートが乱立した混沌カオスは、放置すればするほど増していきます。
また、自分のための魔術スプレッドシートは細かい仕様が他人に分かりづらくなっていることが多く、業務が属人化し、個人の力では改善出来ない混沌カオスを抱えたまま、各々が非効率なタスクに奮闘するようになっていきます。

この混沌カオスを半年も放置すれば、正しい情報がどこにあるのか不明で、複雑に参照を繰り返しているために修復不可能な、立派な闇の魔術スプレッドシートが完成します。

闇を回避するには、どこかのタイミングで自分のための魔術スプレッドシートから、全体の効率化のための魔術スプレッドシートに設計し直す必要があるのです。

スプレッドシートには闇祓いの肝が詰まってる

では、闇を回避するにはどうすればいいのでしょうか。
僕は魔術スプレッドシートに限らず、ソフトウェア全般に必要な要素には以下の4つがあると思っています。

  1. 常にこの情報が正しいと言える状態を保つ

  2. 必要な情報が常にアクセス可能な状態で整理されている

  3. 修正したい時、意図しない場所に影響が及ばないようにする

  4. 担当者以外が見ても変更可能な状態にする

これらの一つでも欠けるとすぐに他の要素にも影響を及ぼし始め、気づいた時には立派な闇へと成長してしまいます。

闇祓いエンジニアは常に4つの要素を満たした状態を保てるよう、さまざまなソフトウェアの設計を行っています(スクラッチのシステム開発だと他にも満たすべきこともありますが、今回は割愛します)。
そして、魔術スプレッドシートの設計の肝の部分は闇祓いエンジニアが日頃行っているシステムの設計と非常に似ており、流用できる部分が多々あります。

以下から、闇祓いエンジニアの行っている設計の肝を少しご紹介します。

闇の祓い方

1. 正規化しろ

2. シートの責務を明確にしろ

3. 参照は一方向にしろ

4. 可能な限り自動化しろ

正規化しろ

正規化とは、データを整形して重複をなくし、複数のシートを参照しあいながらデータを表現する手法です。

生データ

このようなデータがあった場合、そのまま扱ってしまうとさまざまな問題が発生します。
たとえば、ペンネームが変更になった時に対象の全てのデータに手を入れる必要があり、一つでも見逃すと正しくないデータとなってしまいます。
また、メールアドレスの入力でミスをした場合、どのアドレスが正しいのかわからなくなってしまいます。

そのような問題に対応するため、重複するデータを別々のテーブルへと分解し、お互いのテーブルをIDで紐づけて表現します。

正規化したデータ

こうすることで、ペンネームの変更を行う場合には作家リストのペンネーム欄だけを見ればよくなり、
また、メールアドレスは必ず一人一つしか記載されていないため、何が正しいのか一目でわかる状態になります。

正規化について詳しく知りたい方はこちらの記事が比較的わかりやすくておすすめです。

責務を明確にしろ

責務とは「何を目的としているか」です。
各シートが何をしているシートなのか明確にすることで構造をシンプルに保つことができます。
また、同時に他の目的が無いことも明確になるため、何か修正をしようとした時対象のシートだけを気にすればよくなります。

例えば、以下のシートで作家ID 2 の作家を消そうとした時、
4行目を削除してしまうと同時に売上リストの情報も削除してしまいます。
まぁこんな規模で間違えることは無いと思いますが。

責務が不明瞭なシート

このようなミスを避けるため、一つのシートで意識するべき情報は一つに絞る必要があるのです。

責務が明瞭なシート

参照は一方向にしろ

AシートはBシートを参照し、BシートはAシートを参照する状態になっていると、例えば列を一つ増やそうとするだけで全ての参照が壊れ、何が間違っているのかもわからない状態になってしまう可能性があります。
必ず、参照は一方向にするようにしましょう。
一方向であれば複数のシートを参照する、あるいは複数のシートに参照されるのは特に問題ありません。

可能な限り自動化しろ

データに複雑な処理をしなければいけない場合でも、可能な限り自動で処理出来るようにしましょう。
手動で行う処理は間違いの元ですし、属人化してしまうリスクがあります。
関数を使っても複雑でやり方がわからないという場合でも、中間テーブルを使えば自動化できることが多いです。
諦めずに自動化しましょう。
また、人間の判断が必要な場合でも、判断に必要な最低限の情報だけを扱うようにすると、意図しない変更やミスを減らすことができます。

闇祓いの世界へようこそ

闇祓いエンジニアの行っている設計の肝を紹介してきましたが、これらの方法はあくまで一例に過ぎません。
これらを念頭に、でも縛られすぎることなく、最も素晴らしい設計とは何かを常に考え続ける行いだけが闇を祓えるのです。
闇祓いエンジニアの世界に銀の弾丸はありません
闇祓いの方も死喰い人の方も、共に闇を祓い続けて行きましょう。

株式会社ナンバーナインでは、不断の努力をし、一緒に闇を祓う仲間を募集しています。

ナンバーナインで一緒に働くメンバー大募集!

ナンバーナインでは、現在中途採用強化中です。少しでも興味をお持ちいただけたなら、ぜひ以下URLを覗いてみてください。

WEBTOON編集者〜日本で熱いWEBTOONの現場を体験しませんか?

業界経験値不問┃WEBTOON漫画のアートディレクター


経験値不問┃社員の成長に情熱を注ぐ、人事総務ポジション!

その他多数のポジションで募集しています

【INCLUSIVEでも採用強化中】


この記事が気に入ったらサポートをしてみませんか?