生産者と消費者をつなぐ「OWNERS」でのサーバーレスとDynamoDB活用を披露
「SQL書きたい」のリクエストにukkaのエンジニアはどう応えたのか?
第6回となるX-tech JAWSで、AgriTechセッションを披露したのは、生産者と消費者をつなぐプラットフォーム「OWNERS(オーナーズ)」を運営するukkaの植本裕紀さん。前半は農業の課題、OWNERSが生まれたきっかけ、後半はサーバーレスへの移行とサービス活用と内容盛りだくさんのセッションとなった。
予約注文の形で生産者と消費者の濃い関係性を産み出す”遅い”農産物通販「OWNERS」
「100年後に続く食と農のあるべき形を創る」をミッションとして掲げるukkaは、農業・水産・加工業の 分野で生産者と消費者を予約注文の形でつなぐ「OWNERS」を運営するスタートアップ。消費者はOWNERS上で、種をまくような段階から生産者の作るこだわり食材の一口オーナーになることができる。栽培期間中は生産者と直接コミュニケーションでき、一番美味しいタイミングで食材が届くというサービスだ。登壇したukkaの植本さんは、もともと京都発のスタートアップでCTOを務め、フリーランスを経て、ukkaにテックリードとしてジョインしたという。
OWNERSが生まれた背景には 農業に関するさまざまな課題がある。現在、多くの生産者は価格決定権を持っておらず、流通や中間業者の介在により、適正な利益が回ってこないという課題を抱えている。お金になるのも、農作物が収穫され、出荷されたタイミングだ。生産している間は収入はなく、金融機関からお金を借りなければならず、生産してもどれだけ売れるかわからない不安にさらされる。また、生産者側がいくらこだわって作っても、一般の消費・流通小売りの仕組みでは生産者の情報は見えなくなり、評価も価格につながりにくい。「こだわって作った作物でも、規格外になってしまうと、商品にならない。本当に美味しいのに捨ててしまう。こうしたことが課題だと考えています」と植本さんは語る。
こうした課題を見据えたOWNERSに一口オーナーとして登録すると、予約販売という形になるので、生産者にとってはキャッシュフローの問題を解消する一助となる。また、商品が届くまでの間も生産者と消費者はOWNERS上でコミュニケーションをとることができ、生産者の考えるベストなタイミングで出荷される。「消費者からすれば、最高の食材を最高のタイミングで食べることができる」と植本さんはアピールする。
OWNERSにはこだわりの生産者がさまざまな食材を販売している。たとえば、「葉取らずリンゴ」は、葉での光合成で作られた養分をしっかり果実に蓄えられるよう、葉っぱをとらずに味を追求したリンゴだ。「リンゴは赤くないと、流通にのらないので葉っぱをとって日焼けさせます。でも、OWNERSでは色がまばらだけど美味しい葉取らずリンゴをストーリーで伝えて、お客様に納得して買ってもらっています」(植本さん)。
子育て中の植本さんにとっても、いい食材を求めてわざわざ高級スーパーを探す必要もなく、生産者とのやりとりも楽しいという。「届いたこだわり食材を家族みんなで開けて、食べる瞬間はなにものにも代えがたい。生産者とのコミュニケーションを最高のスパイスとして楽しめるサービスと言えるのではないか」(植本さん)。
植本さんは、「『消費者』ではなく、『当事者』を増やしたいとつねづね言っています。私たちが生産者を支えているんだという意識を感じてもらって、OWNERSプラットフォームが育つことで一次産業の問題を解決したいと思います」と語る。
ちなみに会場ではOWNERSからの提供で、愛媛県宇和島市のYAMAUCHI FARMのミカンが提供された。山内ファームはブラッドオレンジを日本で先駆けて生産した農場として知られており、オーナーの山内氏は「柑橘女王」とも呼ばれているという。「たぶん皮がむきにくかったと思うんですが、むきにくい方が鮮度がいい」とという植本さんの豆知識に会場からは「へぇー」の声があふれる。
ベーシックなLAMP環境からサーバーレスアーキテクチャに移行
農業の現状やOWNERSのサービス紹介を終えた後は、もちろんAWS活用のお話。もともとOWNERSはベーシックなLAMP環境で構築されていたが、昨年の夏にシステムを大きくリニューアルした。PHPだったアプリケーションはPythonで書き直し、ELB+EC2の構成は管理が楽なLambda+API Gatewayに移行。また、MySQLだったデータベースに関しても、スキーマレスでサービスの改善施策に役立ちそうなDynamoDBに変更した。さらに新しいエンジニアが環境構築で時間を費やすことがないように、Dockerも導入した。
今までCI/CDはあまり意識していなかったが、リニューアルを機にCircleCIを導入。「大型なリリースの前はデプロイを何回も繰り返さないといけないのだが、けっこう時間をとられてしまう。そんな過去の経験があったので、人の手でデプロイしないという強い気持ちでデプロイフローを整えた」(植本さん)という。また、CircleCI上でもDockerを立ち上げているので、デプロイがこけてもエラーが追いやすくなっているとのことだ。
サーバーレスアーキテクチャの採用ということで、Webサービス本体はLambdaだけで運用し、ログはCloudWatch。バッチ処理もLambdaを採用している。Lambdaを使った感想としては、「API Gatewayってテキストの扱いは得意だけど、バイナリデータの扱いは苦手」「もともとサービス規模が小さいので、Lambdaで全然いける。コストは大幅に下がった」などだ。
マーケターからSQL書きたいと言われたので
データベースのDynamoDBは100テーブルくらいの規模で、昨年末にDynamoDB On-Demandが登場したので、さっそく使ってみたが効果は歴然。「キャパシティ不足のアラートから解放され、さらに安くなった。もともとバッチ処理でフルスキャンする処理があったので、ある程度キャパシティに余裕を持たせていたのだが、On-Demandで従量課金になったので、安くなった。控えめに言って最高です」と植本さんは語る。
とはいえ、DynamoDBはNoSQL DBなので、マーケターから「SQL書きたいんですけど」と言われたときは困った。そこで考えたのが、DynamoDBからETLサービスのAWS Glueを用いてS3上でSQLを使えるAthenaに流す方法。具体的にはAWS GlueでDynamoDBをフルスキャンし、ETL JobでJSONをS3に書き出す。これを1日1回深夜に回しておいて、マーケターはAthenaからクエリできるようにした。「この処理をすべてコンソールからのポチポチで実現できたので、本当にすごいと思った」と感動した植本さんだ。
次に使ってみた感想。確かにBigQueryに比べれば遅いが、Athenaもレスポンスは十分速い。コスト面ではAthenaは安いが、Glueがややお高めなので、今は必要なテーブルの分のみAthenaに流している。また、現状ではDynamoDBのスキーマ変更があったら、手動でETL Jobを作り直す必要があるという。
最後、植本さんはLambdaの同時実行上限数は1000だが、申請によって上限を上げられる点を指摘。多くなる場合は開発当初から申請しておくとよいとアドバイスし、お約束のエンジニア募集をアナウンスして20分を終えた。社会課題含めたビジネスとAWSのテクノロジーを両方勉強できたX-Techらしいセッションだった。
週刊アスキーの最新情報を購読しよう