JINS PROTECT 花粉飛散キャンペーンの裏側
自己紹介
はじめまして。JINSでエンジニアをやっているうりぼーです。
職歴に関しては"この記事の目的"で紹介している記事に記載しているのですが、元ハードウェア屋さんです。
今回は、主務の傍ら店頭キャンペーンを実現させるため開発を担当した案件とその進め方、所管についてお話させていただこうと思います。
※ 多少のフィクションが含まれています
こちらが実施したキャンペーンのプレスリリースです
花粉飛散で割引!「JINS PROTECT」の価格が、飛散量で毎日変動!“飛散価格”は46都道府県で2/22(木)から
この記事の目的
JINSは非ITの企業ですがIT部門がやってるのは運用保守やベンダーコントロールだけではなく、PoC的な施策からデジタル基盤刷新という大規模なものまで多岐に渡っており、多様なバックグラウンドを持つエンジニアが活躍していますよ〜!ということを知っていただく
→ハードウェア屋さんの私も経験を活かして活躍できていますの記事:ジンズにジョインしました
花粉飛散量に連動した店頭キャンペーンをやってみたい!
ある日、PR担当からこのような依頼が…
「花粉・飛沫・乾燥対策メガネJINS PROTECTの価格を46都道府県の花粉飛散量に連動して期間中、毎日価格が変動するキャンペーンを打ちたいのですが手伝ってくれませんか?」
ヒアリングしてみると、以下のような内容でした。
・株式会社ウェザーニューズの花粉観測機「ポールンロボ」で観測された飛散量データを基にJINS PROTECTの価格を変動させたい
・46都道府県の花粉飛散量データ(時系列)を集計する必要があり、マンパワーでは現実的でない
・花粉飛散量の日次集計から価格変動のランク付けをしたい
・できれば自動でキャンペーンサイトへ反映したい
・集計した都道府県別の花粉飛散量や価格変動はPR担当者でも簡単に閲覧できるようにしたい
・外注も検討しているが、要望の全てが実現できなかったり、コストが高くなったりしそう
初めての試みであり協力したい…!とはいえ全てに対応するには私の工数と実装までの日数が…そこで以下の提案をし、整合できたので着手することとなりました。
・マンパワーで対応した場合に一番工数のかかる都道府県別の花粉飛散量集計を自動化しましょう
・自動でキャンペーンサイトへの反映するためにシステムを組むには日数が足りず、現実的ではないので手動で反映できるように花粉飛散量の集計までを自動化しましょう
・集計する都道府県の一覧と自動で出力する花粉飛散量集計はgoogle spread sheet(以下GS)で管理しましょう
ウェザーニューズ社の飛散量データとは
今回のキャンペーンで利用させていただいたサービスの紹介をしておきますね。
ウェザーニューズ社では花粉観測機"ポールンロボ"を独自に開発しておりユーザー参加型の"花粉プロジェクト"としてユーザーへの提供を行い、様々な地点で観測しているようです。
それではひとまず実装
私自信ハードウェア出身でマイコン向けにC言語を書いていた期間が一番多く、それ以外の言語ではPoC向けにラズパイ用のソフトをPythonで書いていたのでPythonで実装することとしました。
実装内容としては、上記で記載した通りウェザーニューズ社のAPIを通してGSから取得した都道府県別に設定した市区町村コードを元に花粉飛散量を集計しGSへ出力するスクリプトです。
ウェザーニューズ社の花粉飛散量オープンデータでは以下のような形式で叩くことで指定地点の花粉飛散量を日時で取得できます。
ひとまず動作は確認できたのでEC2でも立てて日次で動作させようかと考えていました。
それ、GASでやったら?
ある日、同僚へこんなことをやってるよ〜と話したところ。
「それ、GASでやったら?サーバーもいらないしそれくらいならできるでしょ」
GAS自体はなんとなく知っていたのですが、触ったことがなかったのでチャレンジしてみることにしました。
・
・
・
簡単でした。。。Javascriptはほとんど触ったことがなかったのですが、googleのドキュメントを見つつでPythonで実装するのと同程度の時間で実装できました。
GASを使ってみた感想
いいところ
・googleドキュメントとの連携が簡単
→ GAS用のライブラリが提供されており、認証回りもgoogle cloudのweb管理画面からポチポチするだけでよいので以下のように諸々すっ飛ばしてスプレッドシートにアクセスできます
function set_pollen_list(data) {
const sheet = SpreadsheetApp.openById(TARGET_SHEETS_ID).getSheetByName(TARGETS_SHEET_NAME);
console.log(`sheet:${sheet}`);
・サーバーレスで動かせる
→ 簡単なAPIを作ったりバッチ処理をさせるのにちょうどよいです。スケジューリングもできます。
課題
・保守性
→ GASの所有権は作成した本人にあるので、退社等のイベントでどうなるのか怪しい
・複数人での開発
→ git等のリポジトリ管理ではないのでブランチを分けたりマージしたりができなさそう
これらに関しては同僚がgitで管理する方法を記事にしてくださっているので、ご興味のある方はぜひ読んでみてください!スケジューリングを属人化させない方法も今後紹介してくれるようです。
最後に
今回協力した JINS PROTECTの花粉飛散量キャンペーンの成果としては、外注コストと集計に必要な工数を踏まえると、キャンペーン全体の予算から約10%程度の削減と販促効果が得られたようです。
JINSの社風としてスピード感を重視しており、解決できる/しなけばならない問題が多くあります。
ITデジタル部においても同様で多種多様なバックグラウンドを持った方たちが活躍しており、現在もオープンポジション含め募集をしてます。
ご興味を持っていただけましたら、ぜひ応募をお待ちしております!
Discussion