noriaki blog はてな出張所

主に技術や読んだ書籍、考えたことなどを書くブログ。技術系ブログは http://blog.noriaki.me

新人にもオススメしたい、技術も分かる企画屋さんになるためのデータ構造脳のつくり方

データ構造脳の大切さ

スマホアプリやWebサービスの企画をお仕事や趣味でやっている人も多いのではないかと思いますが、個人でやるにもチームでやるにも企画の後(または同時)に考えないといけないこととは、そのアプリやサービスが取り扱うデータの内容とデータ構造です。

アプリやサービスの中でどんなデータが使われるのかというデータ内容、そのデータはどのようなかたちで保存されるのかといったデータ構造は、適切に考えられると企画を実装するにあたって色んなメリットがあります。

  • アプリ・サービス実装にかかる工数が軽減される
  • コード上でデータの取り扱いが簡単になるためバグ発生確率が低下する
  • UX・UIを企画するときにバックエンドシステムとの整合性を意識できる

主に最後のメリットによって、そのほかのメリットが生じると言えるでしょう。

では、こういったデータ構造はエンジニアはじめ技術の人たちしか検討・整理できないのでしょうか?

私は訓練次第でどんな人でもある程度考えられるようになると思っています。

そこで、今日は実際に私が行っていた訓練方法を実例をもとにご紹介します。 この訓練方法は、この記事の最後に紹介している書籍に書かれている考え方を実際に手近にあるものを使って実践してみるものです。

コンビニのレシートからデータ構造を推測してみる訓練

まずは、この画像をご覧ください。

f:id:uchiuchiyama:20130416131818j:plain

なんの変哲も無い、私が昼食を買ったときのレシートです。アプリやサービスなどの画面とは違いますが立派なUIです。このレシートを受け取った私は、いつ、どこで、なにをどのくらい、どうやって購入したのか分かるようになっています。

このレシートをもとに、「買い物(購入)」処理に関するデータ構造を想像してみるのが今回の訓練です。

なお、この訓練に正解はありません。 実際のDB構造を見ることができるものでもない限り、答え合わせはできないのですが、想像してアウトプットする習慣を付けることが重要です。

レシートにどんな情報が書いてあるのか

こういった買い物(購入)といった取引(トランザクション)には、ほぼ必ず以下のようなデータが紐付いています。将棋や囲碁での定石にあたるものでしょうか。

  • いつ取引が行われたのか(それが記録されたのはいつか) (When)
  • どこで取引が行われたのか (Where)
  • 何が取引されたのか (What)
  • その取引を担当したのは誰なのか (Who)
  • どのように取引されたのか(どのような手段で取引されたのか) (How)

まず、これらの情報をありったけ見つけて書き出します。 その次にその情報を似たまとまり毎に分類して整理していきましょう。

いつ?

f:id:uchiuchiyama:20130503165346j:plain

この部分に書いてありますね。2013年4月16日 09:21です。 つまり、この取引データが作成された日時です。表にすると以下ですね。

レシート

データ項目 データ内容
作成日時 2013/04/16 09:21

どこで?

f:id:uchiuchiyama:20130503165400j:plain

取引された場所を探してみましょう。この部分にお店の名前と住所、電話番号が書いてあります。 先ほどの表に追加してみましょう。

レシート

データ項目 データ内容
作成日時 2013/04/16 09:21
お店の名前 東新橋一丁目店
お店の住所 東京都港区東新橋1-3-1
お店の電話番号 03-3573-7228

なにが?

f:id:uchiuchiyama:20130503165420p:plain

何が取引(購入)されたかは簡単に見つかりますね。2つあるので2つとも見つけてみます。商品名と購入価格があるのでそれぞれを表に追加してみましょう。

レシート

データ項目 データ内容
作成日時 2013/04/16 09:21
お店の名前 東新橋一丁目店
お店の住所 東京都港区東新橋1-3-1
お店の電話番号 03-3573-7228
買った商品1の名前 アサヒマツ ナマミソズイ ナメコジル
買った商品1の値段 137円
買った商品2の名前 手巻寿司納豆
買った商品2の値段 135円

だれが?

f:id:uchiuchiyama:20130503165424j:plain

取引を担当した人はレシートの下の方に書いてありますね。 これも追加してみましょう。

レシート

データ項目 データ内容
作成日時 2013/04/16 09:21
お店の名前 東新橋一丁目店
お店の住所 東京都港区東新橋1-3-1
お店の電話番号 03-3573-7228
買った商品1の名前 アサヒマツ ナマミソズイ ナメコジル
買った商品1の値段 137円
買った商品2の名前 手巻寿司納豆
買った商品2の値段 135円
レジ担当者の名前 森川

どのように?

f:id:uchiuchiyama:20130503184426j:plain

支払い方法はこの部分に書いてありますね。今回は電子マネーのiDを利用しました。iDに関する情報が書いてありますね。ここでは支払い方法としてのiDと、支払い回数を抜き出してみます。

そのほかにも様々書かれていますが、これは皆さんで考えてみてください、宿題ですね。

まとめてみると

レシート

データ項目 データ内容
作成日時 2013/04/16 09:21
お店の名前 東新橋一丁目店
お店の住所 東京都港区東新橋1-3-1
お店の電話番号 03-3573-7228
買った商品1の名前 アサヒマツ ナマミソズイ ナメコジル
買った商品1の値段 137円
買った商品2の名前 手巻寿司納豆
買った商品2の値段 135円
レジ担当者の名前 森川
支払い方法 iD
支払い回数 一回

データの入れ物(テーブル)がレシートで、データ項目(カラム)とデータ内容(値)をまとめています。

分類して整理する

どこで?の部分で出てきたお店の名前とお店の住所のように、別のものを表している各項目にお店のという共通部分があることに気づいたでしょうか。また、買った商品1や買った商品2というように同じものが複数登場することにも気づいたと思います。

こういった共通部分を抜き出して別のデータ構造としたり、重複するデータを複数のつながりにまとめたりすることを、データ(ベース)を正規化すると呼びます。

今回のレシートでは、例えば以下のように正規化できます。

レシート

データ項目 データ内容
id 1
作成日時 2013/04/16 09:21
レジ担当者の名前 森川
お店id 1
支払い方法 iD
支払い回数 一回

お店

データ項目 データ内容
id 1
お店の名前 東新橋一丁目店
お店の住所 東京都港区東新橋1-3-1
お店の電話番号 03-3573-7228

商品

データ項目 データ内容  
レシートid 1 1
名前 アサヒマツ ナマミソズイ ナメコジル 手巻寿司納豆
値段 137円 135円

お店id 1 の東新橋一丁目店で、4/16森川さんのレジでiD1回払いの取引(購入)をしたことをレシートテーブルとお店テーブルで記録しています。

また、このとき購入された商品は、アサヒマツ ナマミソズイ ナメコジル手巻寿司納豆をそれぞれのデータとして、商品テーブルにレシートidと一緒に記録しています。

正規化のことを書くとそれだけでもう2記事くらい書く必要があるので書籍等に譲りますが、データベースを利用するシステムやUIを考慮して適切に正規化を行うことは様々な利点があります。

たとえば今回の例では、データベースを持っているお店や企業(今回の場合はLAWSON)では、1日に何回も取引が行われ(レシートも発行され)ます。 そのため、取引のたびにお店の情報をデータベースに記録していくとデータ量がとんでもないことになりそうです。また、もしお店の電話番号が変わったら今までの取引の全てのデータを修正していかなければなりません。

この訓練のときには、データを見つけることに加えて正規化も意識しながらスッキリとしたデータ構造が作れるように考えてみるようにしましょう。

最後に

企画からローンチまでの期間がどんどん短くなっている現在では、実装するのも自分だという人はもちろん、技術の人たちと一緒に考えていくスタイルの人でも、企画する人が技術のことを知っていることによってコミュニケーションコストが下がります。 結果、より早くアプリやサービスを完成させることができるため、技術は技術屋さんにお任せではなく、少しでも知っていくことが大切です。 (もちろん、技術の人が企画やマーケティングを知ることも同じくらい大切です)

今日ご紹介したような訓練を日常的に行えば、今は苦手に思っている人でもきっと適切なデータ構造を簡単にすばやく考えられるようになるでしょう。 まずは身近なものから、見かけたら頭の中で変換する癖が付くくらい実践してみましょう。

今回、訓練を説明するのに参考にした書籍は楽々ERDレッスンです。この本には今日の内容はもちろん、データ構造を考える上で必須となる基本的な考え方が分かりやすく書かれています。2006年4月に発売された本ですが、データ構造理解は考え方のベースとなる部分なので流行り廃りがなく現在でも十分な内容です。訓練を続けると共にぜひ読んでみて下さい。

楽々ERDレッスン (CodeZine BOOKS)

楽々ERDレッスン (CodeZine BOOKS)

(c)2014-2016 Noriaki Uchiyama
※ここで書いているものは私個人のものであり、特に明示しない限り所属する企業や団体には一切関係ありません