Giter VIP home page Giter VIP logo

f_2002_1's Introduction

おしゃべじたぶる(サーバーサイド)

iOSアプリのソースコードはこちらのリポジトリjphacks/F_2002をご参照ください。

宣伝動画

製品概要

農業 x Tech

背景(製品開発のきっかけ、課題等)

弊チームではアイデアソンを通じて「アグリテック」分野に挑戦してみたいということになりました。 理由としては

  • コロナ化で家庭菜園のブームがあるため、ニーズが増えている
  • 他の案だと既にデジタル化したものをデジタル化することになるが、家庭菜園のテックは新しいデジタルであり、クロステックになる
  • メンバーの1人の実家が種苗店のため、農業に関するリソースと知見がある
  • メンバーの技能それぞれを生かし、IoTやアプリなど、複合的な技術で制作ができる

というものが挙げられました。

実際に調査やヒアリングをしていく中で、需要があることを確認しました。 そこで伺った課題、続かない理由としては

  • 水やりの適切な量、タイミングがわからない、忘れてしまう。
  • 植物の知識がないので、良い日当たりや病気などがわからず枯らしてしまう
  • 飽きてしまい続かない が挙げられ、これらはIoTとチャット機能で解決できると判断しました。

また、水耕栽培を行うやさい物語のような、IoT家庭栽培の競合は少数確かに存在していましたが、水耕に限定されていることと、 どれも無機質で「おしゃべりができる」ことによって植物を身近に感じるサービスはありませんでした。

しかし、無機質を好むような本当に合理的な人であれば育てず野菜を購入する場合が多いのではないでしょうか。 私たち「おしゃべじたぶる」は機能的であるのみならず、本来無駄であるはずの雑談を通して野菜を身近に感じてもらう、それが家庭菜園の醍醐味であり、継続に繋がると考えました。

製品説明(具体的な製品の説明)

「おしゃべじたぶる」は野菜とおしゃべりしながら、家庭菜園を楽しめるスマホアプリです。
栽培キットの購入から野菜として収穫するまで、必要な全ての工程をアプリがサポートします。
栽培中はチャット画面から野菜とおしゃべりできるだけでなく、水やりや日光に当てるといったアドバイスもしてくれるため、事前知識のない方でも安心です。
可愛いキャラクターとUIデザインにより、子供と一緒に育てる保護者や若い女性におすすめです。

アプリ挙動のデモ動画

特長

1 キャラクター

野菜ごとに親近感を持つ、仲良くなるために必要なキャラ付けを行い、セリフ回しに特徴が出るようにしました。キャラクターはどれもオリジナルです。 暖かみがあるカラーリングで制作しました。 キャラクター

2 栽培キットの購入

栽培に必要なセットが盛り込まれたキットを簡単に購入できます。

3 チャット

難解な言葉を使わず、仲良くなることをメインに雑談やアラートなどを行います。 カメラを使って、葉っぱなどの写真を撮影すると病気について診断し、適切な助言をします。

4 IoT

気温や水分量をセンサーで計測し、データを蓄積します。十分な育成環境から規定値を下回ったり、上回ったりした場合、チャットからアラートを呼びかけます。

解決出来ること

  • 家庭菜園に関する知識や経験が身につく
  • 家庭菜園に興味はあるが続けられない人のモチベーションを維持できる

今後の展望

  • このアプリで実際に育成しきれるか実験する
  • 栽培キット配送サービスとの連携
  • 病気・栄養不足といった診断機能の充実
  • 野菜の種類を増やし、育成の選択肢を増やす
  • チャット機能への文言追加

注力したこと(こだわり等)

  • デザインチームはデザインがずれることを懸念して、アイデアが決まった段階でサービスの認識をすり合わせ、カラーやフォント、サイズなどのデザイントーンを統一し、作業に落とし込みました。UIUX、デザインスタイルはヒアリングを元に、刺さるものを考案し制作した。
  • iOSチームはデザインチームからの要件を可能な限り満たせるように実装しました。
  • サーバーチームはOpenAPI を利用して仕様を共有し、Clean Architecture でテストしやすい実装をしました。また、モブプログラミングも採用しました。さらに、GitHub Actions を利用して、テスト、デプロイを自動化しました。
  • また、開発全体ではDiscordを用いて各チームと素早く情報共有できるようにしました。

さらに詳しい情報は発表資料をご覧ください。

開発技術

全体構成図

活用した技術

デザイン・動画制作

  • アイデアソン: Miro
  • デザインスタイルガイドとUIデザイン: Figma
  • Adobe Illustrator(キャラクター、グラフィックの作成)
  • Adobe Photoshop(素材加工)
  • Adobe Premire Pro(動画編集・加工)
  • Adobe After Efect(モーショングラフィックの作成)

iOS

Server

デバイス

ハッカソンで開発した独自機能・技術

  • チャット部分の実装においてライブラリでカバーできないカメラを利用した投稿機能,投稿ボタンと外部のpickerライブラリの連携を独自に実装した
  • GitHub Actions を利用して自動でテスト、デプロイできるようにした
  • OpenAPI を利用してAPI の仕様の共有を行った
  • Clean Architecture をもとに、テストしやすいディレクトリ構成で実装した

製品に取り入れた研究内容(データ・ソフトウェアなど)(※アカデミック部門の場合のみ提出必須)

  • なし

事前開発プロダクト

  • なし

f_2002_1's People

Contributors

khmer495 avatar konnyaku256 avatar okakyo avatar yukigwkota avatar ikemoti avatar madrapon avatar

Watchers

James Cloos avatar liam avatar taigaKatsumata avatar  avatar

Forkers

ikemoti

f_2002_1's Issues

ディレクトリ構造を考える

./go配下はクリーンアーキテクチャを参考に構成

.
├── Makefile
├── README.md
├── api
│   └── openapi.yaml
├── database
│   ├── data
│   └── my.cnf
├── docker-compose.yml
├── docs
│   └── openapi_viewer
└── go
    ├── Dockerfile
    ├── entity
    │   └── model
    ├── go.mod
    ├── go.sum
    ├── infrastracture
    ├── interface
    │   ├── controller
    │   └── database
    ├── main.go
    └── usecase

APIのモックサーバーを建てる

postmanとopenapiを使って構築
webhookによりmainブランチのapi/openapi.yamlが更新されると自動的にpostman側も更新されるように設定

Firebaseの認証情報でユーザーの検証をするフローを確認

ユーザー登録時

  1. ユーザー登録時にfirebase authenticationにも登録し、uidをデータベースに登録する

ログイン&リクエスト時

  1. クライアントでログインを行う
  2. クライアントでログイン情報からIDトークンを取得する(cf
  3. クライアントからサーバーへのリクエスト時はヘッダーにAuthorizationキーを付け、IDトークンを付与する(cf
  4. サーバー側でFirebase SDKを用いてIDトークンからuidを取得する
  5. uidでユーザーを特定する

Firebase の環境構築開始

  • Firebase Functions のプロジェクト構築
  • Firebase へデプロイして正常に動作するかを確認
  • CI / CD 環境を構築する必要あり
  • Lint, テスト、デプロイがCI/ CD が自動で動作するか
  • デプロイしたものが正常に動作

開発環境を作る

docker-composeを使ってdbサーバーとapiサーバーを立てる
makefileも作成
goのrealizeにより、コンテナ起動中でもgoを再コンパイル&echoサーバーを再起動してくれるように設定

Makefile

up:
	docker-compose up
down:
	docker-compose down
build:
	docker-compose build

赤色、緑色、何もなしの3状態でホーム画面の植物側のメッセージの表示の仕方を変える

サーバー側での対応案

植物側のメッセージに緊急フラグを入れる
ホーム画面のチャットアイコンと植物のメッセージについて

  • 赤色?:植物側の緊急フラグの入ったメッセージの後にユーザーが返信していない状態。ホーム画面のメッセージには緊急フラグを入ったメッセージを出す。
  • 緑色?:赤色ではないが、新着メッセージがある状態。ホーム画面のメッセージには最新のメッセージを出す。
  • 何もなし:赤色でも緑色でもない状態。ホーム画面のメッセージには、ホーム画面用のAPIに含まれる特定のメッセージを出す。

新着判定に関して

firebase上でチャットルームに未読/既読状態を持つ。
また、firebase上で、クライアントが未読を既読にできるエンドポイントを用意する。
サーバー側は植物のメッセージをDBに保存するときに未読にする。
クライアント側はユーザーがチャット欄に来た時に既読にする。

緊急判定について

緊急フラグが立っており未対応のメッセージのIDが積まれたスタックをサーバー側で用意する
スタックにはサーバー側で植物のメッセージをDBに入れるタイミングで、緊急フラグのあるもののときに積んでいく
スタックの要素数が0であればルームは正常状態、1以上であれば緊急状態
スタックを削除する用のエンドポイントを用意し、クライアントに叩いてもらう
特定のメッセージに対して対応ができるのであればIDを指定して1個ずつ削除、無理そうなら既読or返信するタイミングでスタックを空にする

対応画面

image

API構成を考える

OpenAPIを使ってドキュメント化する
openapiはこちら
openapiのプレビューはこちら

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.