写真共有サービスを作ろうとしたらレンズ沼にハマって溺れていた話

#写真共有サービスを作ろうとしたらレンズ沼にハマって

こんにちは！私は「スナップマップ」という写真共有サービスをディレクションしています！
https://snapmap.jp
一言でいうと写真xスポットのナレッジを共有して写真撮影の引き出しを増やしたいなというコミュニティを作ることを目的としていました。
(現在は諸事情により今後が不明瞭ですので、期待を持たれないように過去形で語リます。)

<img width="1052" alt="スクリーンショット 2017-12-04 15.27.33.png" src="https://qiita-image-store.s3.amazonaws.com/0/43688/07f5d7f6-9c3f-ede5-5b7a-c46f221b46a8.png">

こんなサービスやってます。フォトコン開催中！写真好きな方はご応募ください。
(~~リリース等でご承知かとは思いますが弊社の親会社合併後の本サービスの先行きは不透明です。フォトコンまでについては私の方で運営を完遂できる見通しでございます~~)

##写真サービスを作ろうとした場合の壁！
Instagramや500px、Flickrxが圧倒的な先行者として立ちふさがり、国内限定のコミュニティもGanref一強と言って良い状況でどう戦うつもりだったのかなどは置いておくとしても。
サブカルスクールのコーチ・ユナイテッド(CU社)社が0から写真共有を立ち上げるには課題山積な訳です。

写真をどう集める以前に、技術的な基盤がない状況から新しく集まった中途採用のメンバーで開発環境を立ち上げ、写真の保管・配信の方式を決め、データ構造を決め・・・・というところが今回の本題です！

写真撮影のレシピを考えると

- 機材
 - カメラ
 - レンズ
 - 三脚やフィルターなどの道具
- 設定(最低でも)
 - シャッタースピード
 - 絞り値
 - 焦点距離
 
このあたりの情報がないと同じ場所、同じ時間同じ天候でも撮影を再現できません。
情報設計は私はエンジニア出身なこともありまして、比較的にすぐにまとまりました。Exifの構造が厄介だった点は後日触れますが、何より「カメラとレンズってどうするの？ ユーザーに手打ちさせるの？」という話が自然に出てきます。

###カメラやレンズの情報は手打ちでいいのか？
カメラやレンズ情報をサービスに反映させる方法として調査すると条件面が見えてきます。
(Exifというのは写真の撮影に関する設定やらなの情報が入っているファイルフォーマット中の領域です)

- カメラの本体に関しては割とExifに任せて良さそう(マスターを投稿された写真から収集して後日整形する形にする) 
- レンズは純正以外はもうまともには判別できない。

ここからレンズ沼との戦いが始まります。

私は比較的にお金に余裕がないのでキットレンズ以外は全部サードパティー品を愛用しています。
例えばSIGMAのF1.4 30mm DC HSM Artとか。
それらのレンズ情報は判別しようがないと気がつきます。

Exifは仕様はあるにはあるんですが、実装が曖昧なのとメーカーノートと呼ばれるメーカ独自の情報レコードは中身を海外有志の解析に頼んで分かるところと分からんところがあるというのが現状で、仕様が公開されていません。

つまるところ、ユーザーの負担がなるべくない形でレンズ情報を登録してもらうには、独自にDBを構築してサジェストするなり、自分のレンズを保存する仕組みが必要なことがわかりました。

Ganrefでは自分のレンズを登録できるわけですがつまりはそれです。
<img width="640" alt="スクリーンショット 2017-12-04 15.38.05.png" src="https://qiita-image-store.s3.amazonaws.com/0/43688/50aed6d4-2c77-6589-33af-e91792c8177c.png">
※ganrefに置けるカメラ・レンズの選択方法

これを手打ちさせていいのかとなれば、やはりNOだと思います。あまりにも面倒すぎるからです。
そこで我々としては最低限簡易的でもいいからサジェスト機能を用意しようとなりました。

###レンズデータベースが必要だ！

ここからは各社のレンズを調査して手打ちでデータベースを蓄積しました。
アルバイトの雇用などで会社と折り合いがつかなかったので私が一人でやることになってしまいました……

##レンズDBを作るぜ！
カメラの本体はEXIFに当面は任せられるとして、レンズだけは自前で集めないとユーザーにサジェストする事もできないという事で、たった一人レンズの海というか沼と向き合うことに。
とりあえずデータ構造を設計します。

###レンズマスター
とりあえず後で検索機能をリッチ化する事も考えると最低限このくらいだろとして出したものが以下です。
すでに嫌な予感しかしない！

|カラム名|概要|
|:---|:----|
|id|連番のID|
|name|レンズ名|
|レンズタイプ|1・・・単焦点 2・・・ズーム みたいな形で６種類|
|maker_id|メーカーマスターがありますのでそのIDです。メーカー何種類あったと思うよ？キヤニコ、ソニオリ、パナ、シグタムと７〜8社だと思った人はまだ沼にはハマっていません。今回スナップマップでは現存しないメーカーを含め36メーカーを定義しています。|
|対応マウント|何種類あると・・・EF,EF-S,EF-M,ニコF・・・とか色々で20種類くらい？と思った人。まだあなたは沼の入り口です。今回スナップマップでは62種類+α2種類を用意しています！|
|対応センサー|中判、フルサイズ、APS-H、APS-C、フォーサーズ、1.5型、1型などですがスナップマップではフィルムとスマホを考慮して15種類用意しています！|
|焦点距離望遠端|テレ端ですが単焦点の場合は両方に同じ数字を入れます。今回スナップマップでは3.2mm〜2000mmまでのラインナップをデータ化しています。|
|焦点距離広角端|ワイド端です。|
|F値望遠端|これは開放F値のワイド端とテレ端ことを言っています|
|F値広角端|どの程度の幅があると思われますか？F1.2〜F11はパッと浮かぶでしょうか？スナップマップではF0.85からF13.5までのレンズをマスターに登録しています。|

カタログとしてはこの程度で十分ではないでしょうか？

~~ここまで作り込んだのだけど、どうもこのデータを利用した機能を自分自身で追加することがなくなりそうで草も生えないというのは内緒です~~

###そしてレンズ沼にハマる！
すでに概要欄で沼っぷりがアピールされていますが、いざGoogleDriveのSpredSheatにデータを起こし始めるとドロドロの泥沼。

####マウントが沼

長すぎるので最も闇を感じたマミヤを抜粋。
```
マミヤC
マミヤプレス
マミヤRB67
マミヤRB67L
マミヤRZ67
マミヤM645
マミヤM645AF
マミヤNew6
マミヤ7
マミヤES
マミヤNC
マミヤミラクル
```

もうわかんねーよ。マミヤ製オールドレンズのどのレンズがどのマウントなのか調べるだけで日が暮れました！

####メーカーが沼！

定義したメーカーは以下
スマホメーカーも入ります。(スマホってカメラだから)

```
キヤノン
ニコン
SONY
オリンパス
パナソニック
ペンタックス/RICHO
FUJIFILM
SIGMA
ライカ
タムロン
トキナ
コシナ
サムスン
SAMYANG
ケンコー
京セラ
LensBaby
コニカミノルタ
ハッセルブラッド
マミヤ
ローライ
APPLE
Google
LG
ペンタックス
Phase One
ZEISS
中一光学
HandeVision
LAOWA(Venus Optics)
Veydra
Schneider Optics
興和光学
Rising
トダ精光
Rodenstock
```
PhaseOneなんて誰も投稿してこねーよって思いましたが一応調べました！
まだ投稿はありません！

###オールドレンズが沼

例えばM42とか(間違ってる可能性すごくあるので詳しい方いたらこっそりご連絡ください)
<img width="348" alt="スクリーンショット 2017-12-04 16.21.08.png" src="https://qiita-image-store.s3.amazonaws.com/0/43688/2752bee2-ed8c-e267-450c-3859b9bc58a9.png">

例えばキヤノンFDとか
<img width="361" alt="スクリーンショット 2017-12-04 16.28.20.png" src="https://qiita-image-store.s3.amazonaws.com/0/43688/be9cb237-651b-1fe1-5fcd-efa8e2bffb16.png">

タムロンのアダプトールとかももうね。

###現行レンズが沼
中韓系メーカーとか
例えばピンホールレンズのRisingとか
http://rising.co.kr/

<img width="274" alt="スクリーンショット 2017-12-04 16.31.50.png" src="https://qiita-image-store.s3.amazonaws.com/0/43688/e0791555-e96f-4382-96bf-b81adbdc2267.png">
見境ないだろ！

カリフォルニアのおもしろレンズとか
http://www.kenko-tokina.co.jp/imaging/eq/camera-lens/lensbaby/lineup/
<img width="712" alt="スクリーンショット 2017-12-04 16.39.28.png" src="https://qiita-image-store.s3.amazonaws.com/0/43688/e9a2e966-1695-85a4-0c50-cc89fb2025e8.png">
6マウント対応！
もうどのマウントかをレンズ名に入れるのはやめた。
(サジェストするときに紐づいているマウントIDで自動でマウント名入れればいいやとなった)

##まとめ
写真共有サービスを作ろうとして一番辛かったのがレンズマスター作りです。
(最近発売されたレンズ足してない！)

この苦労を乗り越え、エンジニアの素晴らしいサジェスト実装を得てあいまいな検索でレンズをどんどんサジェストする仕組みを乗せることができました。

<img width="838" alt="スクリーンショット 2017-12-04 16.46.24.png" src="https://qiita-image-store.s3.amazonaws.com/0/43688/f653b288-ffcd-7f69-a32d-7ee8ff401211.png">
※本体はEXIFからレンズは SIGMA〜でも F1.4 30mm〜でも 30mm〜でもサジェストされてきます。
 
現時点で3013本のレンズをスナップマップは登録済みです。
このまま何事もなくれば現行レンズの販促用の白背景画像ってどこに言えばもらえるのか調べようと思っていましたが。その苦労がなくなりそうなことだけホッとしています。

重ね重ねになりますがただいまスナップマップでは最高5万円のAmazon
ギフトを副賞につけた日本の四季フォトｘスポットコンテストを開催中です。
スマホやコンデジの作品も応募OKですのでご興味がありましたらよろしくお願いします！

###関連
Exif沼の話
https://qiita.com/Hoshi_7/items/342a413d35d3c88fe341