物の性質を突き詰めて設計に活かす考え方をトランプのカードで説明する

ドワンゴでニコニコ生放送のWebフロントエンジニアをやっています、 @misuken です。

今回は物の性質を突き詰めて設計に活かすと、ブレない設計に繋がったり、色々な分野にも良い影響が繋がっていくというお話しです。

読み進めた先で [BCD Design](https://qiita.com/misuken/items/19f9f603ab165e228fe1) と繋がっていくこともわかるかと思います。

今回は性質を突き詰める対象をトランプのカードを例として進めていきます。

[スケールの大きな物を設計する際の考え方をトランプのカードで説明する](https://qiita.com/misuken/items/990cebe25104e828e1ef) ではトランプの外の大きな世界の話をしていますが、こちらはトランプの中の小さな世界を掘り下げる内容です。

## トランプのカード

目の前にトランプのカード54枚が置いてあります。

どのように置いてあるでしょうか？

箱から出した状態のままか、ドサッとバラバラに置かれている状態を想像する人が多いと思います。

箱から出した状態とドサッとバラバラに置かれている状態では、どちらのほうが複雑でしょうか？

明らかにドサッとバラバラに置かれているほうが複雑ですね。

カードの 表裏 向き 順序 位置 こういった状態がバラバラだと複雑になるということがわかります。

箱から出したままの場合もカードは54枚ありますが、1つの束として扱えるので複雑度はかなり低く感じるはずです。

しかし、その束の中のカードは 裏表 向き 順序 がバラバラかもしれません。  
カードが積上がっている位置だけは揃っていますが、それ以外が揃っている保証はないからです。

カードの 表裏 向き 順序 位置 が揃っているとなぜ複雑度低いのでしょうか。
それは、考えること(情報量)が減ったり、簡単に予測可能だからと言えます。

例えば、全て揃えてある束のトランプを裏返したとき、スペードのエースが見えたとします。  
このとき、スペードのキングを探そうとしたら13枚目と見当がつきます。  
ジョーカーを2枚探そうとしたら最後の2枚と見当がつきます。

とてもシンプルで複雑さはありません。

その理由は、トランプが持っている性質を前提としているためと考えられます。

## トランプのカードが持つ性質

トランプのカードには以下の性質があります。

- 裏と表があります
- カードの上下はあるものとないものがあります
- スペード ハート ダイヤ クラブのマークがあります
- マークごとに A と 2 〜 10 と J Q K のカードあり 1 〜 13 を表します
- Joker が 2枚あります

## 標準的な状態を探る

トランプのカードの性質を踏まえた上で、揃っている状態について考えてみましょう。
揃っていると言っても色々な揃え方があります。

ただ、揃ってるとしか言わなければ、何かに依存した揃え方ではなくて、標準的な揃え方ということになります。
トランプのカードの性質を分析して標準を探してみます。

### 裏表の標準

裏表の標準はシーンによって変わります。

カード1枚単位だと、遊んでいるシーンによって表だったり裏だったりします。

束で置かれるときは裏であることが多そうですが、カードの束は一気にひっくり返せるので、裏表が揃ってさえいれば重要ではないこともわかります。

どちらかと言えば裏くらいで良いでしょう。

### 向きの標準

カードの向きの標準は上です。  
カードに方向がある場合、視覚的に最も認識しやすいため、上の方向を揃えるのが一般的でしょう。
上下の差が無いカードの場合は `上 === 上 && 下 === 上` ということなので気にする必要はありません。

ちなみに、運転免許証など横の長方形のカードであっても上になります。
カードごとの仕様における上の方向に揃えるのが一般的であるためです。

### マークの標準

マークの順番の標準はどうでしょう？
スペードが特別そうだから先頭に来そうな気がしますが、ハートを選ぶ人もいるかもしれません。
主観が入りやすい場所です。

理由がなければ主観が入ります。
主観は同じ人でも時間が経つと変化しますし、予測もできなければ法則性もありません。

やはりそのものの性質から標準を導き出すことが大切です。

トランプにはコンセプトがあります。
当然マークにもコンセプトがあり、そのマークになった理由も存在します。

それがどういう意味を持つのかを知ることが性質を知ることであり、マーク同士の差を認識することにつながります。

wikipedia で [トランプマークの意味](https://ja.wikipedia.org/wiki/%E3%83%88%E3%83%A9%E3%83%B3%E3%83%97#%E3%83%9E%E3%83%BC%E3%82%AF%E3%81%AE%E6%84%8F%E5%91%B3) を調べるとこう書いてあります。

> 「イタリアの社会階級を表している人の意味を持っている」
> 「スペード」(剣)　貴族や軍人を表す
> 「ハート」(聖杯) 聖職者や僧侶を表す
> 「ダイヤ」(貨幣)　商人を表す
> 「クラブ」(棍棒) 農民や労働者を表す

明らかに標準と言える順序が存在しています。

ゲームごとに違う順序が存在する場合は、そのゲームに依存したそのゲームのスコープにおける標準を定義すれば問題ありません。

### 数字の標準

トランプのカードは A と 2 〜 10 と J Q K のカードが 1 〜 13 に対応しています。  
数字は通常 1 から順に数えられるので、 A 2 〜 10 J Q K が標準になります。

### ジョーカーの標準

通常ジョーカーは1〜2枚含まれているということですが、今回は2枚のジョーカーを含む前提で進めます。

wikipedia で [ジョーカー (トランプ)](https://ja.wikipedia.org/wiki/%E3%82%B8%E3%83%A7%E3%83%BC%E3%82%AB%E3%83%BC_(%E3%83%88%E3%83%A9%E3%83%B3%E3%83%97)) を調べるとこうあります。

> ジョーカーが2枚含まれる場合、1枚のジョーカーはフルカラーで印刷され、もう1枚のジョーカーはエキストラ・ジョーカー（準札）として、白黒等の色を抑えたカラーリングとなることが多い。他に、1枚が赤いジョーカー、もう1枚が黒いジョーカーになっている場合もある。ジョーカーの間にもランクがあるゲームでは、色つきのジョーカーが白黒のジョーカーよりも上位に位置する。赤いジョーカーと黒いジョーカーがあるものでは、赤いジョーカーがハートまたはダイヤ、黒いジョーカーがスペードまたはクラブの代用になる。

これにより、ジョーカーにも強さがあることがわかります。  
マークと同様に上位のほうから ジョーカー エキストラ・ジョーカー という順序が標準であると言えます。

### マークと数字とジョーカーの標準

最後にマークと数字とジョーカーの順序をはっきりしておきましょう。

マークは階級を表し、その階級に所属する数字が存在する関係性であることがわかります。
キングごと、クイーンごとにまとめると意味合い的にも不自然です。

マークと数字の関係では、マークごとにグループ化したあと、それぞれのマークの中で数字が並んでいることが標準と言えます。

ジョーカーは特別なカードで、多くの場合最も強いカードになります。
強さと言えばマークが表していた階級が浮かびます。

スペード ハート ダイヤ クローバー

ジョーカーはこの順序の先頭と末尾どちらに並ぶのが自然でしょうか。
階級の高さ(強さ)の順に並ぶのであれば先頭のほうに分がありそうです。

実際、このような理由なのかは調べてみてもわかりませんでしたが、一般的なトランプの箱を開けると、フェイス面が ジョーカー エキストラ・ジョーカー その他のカード となっていることが多いようです。

ちなみに、冒頭ではスペードのエースが先頭にあったらジョーカーは最後2枚と書いていました。
これは、トランプの性質上、整理されているのであれば先頭か末尾のどちらかに収まるという予測が立つということを意味しています。

### 確定した順序

ジョーカー エキストラ・ジョーカー スペード(A~K) ハート(A~K) ダイヤ(A~K) クローバー(A~K)

この順序はトランプ自体が持つ性質から導き出した順序です。
トランプの性質が変化しない限り普遍的に使えます。

目的のカードがどこにあるかは触らなくても予測できますし、その理由も一切の主観なく説明できます。

この順序以上にシンプルにする方法は無いでしょう。
必ず何かしらの主観が必要になるからです。

### ゲームごとのカードの順序

もしゲームごとに違う順序を定義するのであれば、そのゲームのスコープに同様の定義を行いましょう。
ゲームによってはシーンごとに違うこともあるかもしれません。

それであればシーンごとに同様の定義を行えば良いのです。
すでに標準定義の型があるので、順序を定義することだけに集中できます。

このように参照できたらわかりやすいですね。

```
トランプの順序の定義
ゲームA.トランプの順序の定義
ゲームA.シーンA.トランプの順序の定義
```

### 注意点

- 新品のトランプのカードが必ずしもこの順番で入っているとは限りません
- 対象によってはその分野の慣習(主観)があるかもしれません

## 考察

ここからは、物の性質が色々なことに繋がっていることを考察していきます。

### 主観は余計な複雑さを生む原因

昔、設計が苦手だった頃。
設計とは自分でルールを定義するものだと考えていました。

しかしあるときから、自分で定義したルールは主観であり、他人も同じ用に主観で設計した場合、どちらが優れているかを主観でしか判断できないことに疑問を持つようになりました。

主観は他人から推測ができません。
本人ですら時間が経つと主観が変わります。

主観が入るということは本来不要なはずのトンネルを増設しながらゴールを目指すことであり、やればやるほど他人から理解が難しくなり、複雑さが増します。
ときにはそれがショートカットになる場合もありますが、予想外のところにトンネルが通っているために本来通すべきトンネルが通せないといった問題を生む原因にもなります。

そのため、いくら主観の設計同士でどちらが優れているかを議論しても、納得感のある答えを出せるわけでもなく、どっち付かずの中途半端になる運命にあります。

開発する度に主観で設計し、毎回オリジナルのルールを量産していても、主観である以上足場が固まることはなく、一定の領域から先には到達できません。
(小規模なシステムであれば、安定する場合はありますが、拡張し始めると足場が揺らぎ始めます)

### 物の性質こそが原点

もし、開発する度に物事の性質を理解し、その積み重ねで足場を高くしていけるとしたら、いつまでも安定して登り続けられます。

性質という本質を突き詰めるのであれば、それこそが作ろうとしている物なので、他人にも納得感のある説明ができます。

どちらがより性質の本質を捉えているかというテーマであれば、徐々に議論が収束していきますし、互いの主張が認めやすくなり、質を高めやすい環境になります。

色々な物の性質を理解し始めると、色々な物の互換性も見えてきます。
「あれとあれって実はインタフェース同じだ」とか
「あれとあれって実は概念が同じだ」とか
「このデータ構造はあのパターンと相性良いんじゃないか？」とか

性質に従った適切な単語を使っていると、単語の意味の性質でパズルをして、パズルを解いたら良い設計になっているという面白いこともよく起きるようになります。

### 命名より明名が大切

物の性質自体が名前や状態を持っているので、命名するというアプローチも必要ありません。
**"命名" より "明名"** のほうが適切だと感じています。
すでに性質から導き出せる名前を明らかにすることが大事なのです。

このように、物の性質を正として設計するようになると大きく流れが変わります。
モデリングという点で言えば当たり前のことかもしれませんが、改めて見直してみると、思考停止でついつい主観で決めていることは多いものなのです。

物の性質を正とすることで、いつも同じ物は同じ設計に落ち着き、再利用性が高まり、足場が固まることで高度な領域に集中でき、それがまた質を高める好循環が生まれます。

ちなみに、完全に新しい概念の物を生み出す場合などで、命名を行う場合もあります。
しかし、よくよく考えると既存の何かの性質と同等であることがほとんどなので、命名を行う機会はかなり稀になるはずです。

### BCD Design も物の性質が原点

コンポーネントの分類法である [BCD Design](https://qiita.com/misuken/items/19f9f603ab165e228fe1) はまさに物の性質を突き詰めた先に存在するものです。
物の性質から単語を明らかにし、その単語の性質を利用して分類する、ここに主観が入り込まないからこそ分類が安定します。

## まとめ

- 物の性質を突き詰めていくと大抵は定義や名前が存在します
- 主観を入れれば入れるほど本来不要な複雑さが増していきます
- **"命名" より "明名"** が大切です
- 物の性質は色々な分野にも繋がっていく原点です