CAVIN Tech Blog

CAVIN Inc.のエンジニアブログです。 技術的な内容に加え、福岡市 (Fukuoka Growth Next / fgn) でのスタートアップ運営の日常や、舞台裏をお伝えします。

「ホテル × 花 × 写真」卒業写真撮影会を裏で支える技術

「ホテル × 花 × 写真」卒業写真撮影会を裏で支える技術 | CAVIN Tech Blog

こんにちは。エンジニアの中原です。

昨今のCOVID-19の影響により卒業式や送別会、結婚式などのイベントの延期・中止が相次ぎ、花の需要が急減しています。

その中でCAVINとして何かできないかということで、卒業式に参加できなかった大学生の皆さんに向けた明星和楽さん主催の「ホテル×花×写真」卒業式というイベントをお手伝いさせていただきました。

具体的には会場の装飾で使用する花の手配を行ったわけですが、 イベントが発足してからお花を準備するまでの裏側をお伝えしようと思います。

当日の様子はこちらから閲覧できます。

myojowaraku.net

目次

イベント2日前に何が起こったか

イベント2日前に「今すぐ**円以内で明日仕入れることのできる品種の組み合わせを出して欲しい」という依頼をもらいました。

現在10品種ほどを扱っており、これを手作業で洗い出すのは時間がかかってしまうので、SQLを書いて算出しました。

算出のための条件

下記の条件で品種と本数を算出したかったです。

  • 合計**円以内
  • mm月dd日に仕入れることができる

実際のSQL

はじめに、2/17に仕入れることのできる品種の一覧を出して見ました。

SELECT flower_species.name as "品種名", 
flower_harvests.price as "単価(円)", 
flower_harvests.confirmed_count as "個数(本)"
FROM flower_harvests
INNER JOIN flowers
ON flowers.id = flower_harvests.flower_id
INNER JOIN flower_species
ON flower_species.id = flowers.flower_specie_id
WHERE confirmed_count IS NOT NULL
and harvest_date = "2020-mm-dd";

出力結果は以下です。

品種名 単価(円) 個数(本)
A x1 y1
B x2 y2
C x3 y3
D x4 y4
E x5 y5
F x6 y6
G x7 y7
... ... ...

ただし、出品者は複数あったので、配送の便宜を図るため1出品者の品種のみに限定しました。

品種名 単価(円) 個数(本)
A x1 y1
B x2 y2
C x3 y3
D x4 y4
E x5 y5

ここまで出力できれば、あとは xn * ynの和が指定された金額を超えないようynをそれぞれ決定するだけでした。

ynの値をランダムに生成しても良かったのですが、 今回の卒業式の雰囲気に合う品種を選定する必要があったので ここから先は手作業で行いました✌️

今回配慮しなかったこと

スピード感重視のタスクで時間の制限があり、 本来は丁寧に考慮すべきところをあえて外す必要がありました。

  • 在庫数ではなく出品本数を使用して計算した。

在庫数は、出品本数から注文された本数を差し引いた値を使用しますが 今回はイベント2日前の注文はまだ入っていなかったので考慮しませんでした。

最後に

私の見積もりによると、実際に2時間ほどかかる作業が30分に短縮されました!

今回使用したのはなんてことない、さっと書くことのできるSQLですが クエリ言語を書くことで手作業では数時間かかるところをぐっと短縮することができるのが魅力的です。

SQLは技術者だけのツールではなく、ビジネスやマーケティングでも必要不可欠なクエリ言語です。

完璧なSQLは書けなくても、ちょっとした一文がかけるだけで実際の分析に費やす時間は大きく変わるので今後もこういった形で貢献ができたらいいなと思いました。