Code Monkey home page Code Monkey logo

boat-bee's People

Contributors

hirokisakabe avatar k-misawa avatar takmita avatar takuya-okamoto-esm avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

boat-bee's Issues

ユーザーは、ユーザー情報を登録できる

詳細

ユーザーは、自分のユーザー情報(社員番号とslackアカウント)を登録できる

タスク

受け入れ条件の定義

このユーザストーリーの目的

  • ユーザは、自分の属性(もしくは属性に紐づけるための情報)を提供することで、より精度の高いリコメンドを得られる
  • ユーザは、なるべく簡単な方法で手間をかけずに情報を入力することができる

受け入れテスト項目一覧

  • 初回利用時(ユーザ登録なしの場合)に、自分のユーザ情報を登録できること
  • 登録したユーザ情報を参照できること
  • 登録したユーザ情報を更新できること
  • 更新したユーザ情報を参照できること
  • ユーザ情報を登録していないと、レビューを投稿できないこと(登録を促すメッセージを出す)

おすすめ本の「詳しく見る」のViewControllerを実装する(画面デザイン含む)

ホーム画面にて、今日のおすすめ本の「詳しく見る」を押下すると表示されるモーダル画面を実装する

機能概要

  • ホーム画面から「詳しく見る」を押下するとレコメンドのモーダルが表示される
  • おすすめ本の情報をサービス層のモジュールから取得する
  • 取得したおすすめ本の情報をレコメンドのモーダルに表示する
  • 「閉じる」ボタンが表示されている

表示項目

  • タイトル
  • 著者
  • ISBN
  • サムネイル画像
  • Google Books URL

Slackの検索画面と検索結果画面を実装する

想定しているサービスの流れ

  • レビュー投稿画面にて、本のタイトル(あいまいOK)を入力するし、「検索」ボタンを押す
  • 検索画面にて、検索結果の一覧を表示する
  • 検索結果の一覧から、意図したものを選択する
  • 検索画面の「選択」ボタンを押すと、検索画面を閉じ、
    レビュー投稿画面の本のタイトルとISBNに選択した内容が入力される
  • 検索画面の「閉じる」ボタンを押すと、検索画面を閉じ、
    レビュー投稿画面の本のタイトルとISBNには、何も表示されない

ユーザは、自分にとっての評価や他の人へのお勧め度を指定して本のレビューを閲覧できる

タスク

受け入れ条件の定義

このユーザストーリーの目的

  • ユーザは、大量のレビューの中から自分の見たいレビューに絞り込んでみることができるようになる

受け入れテスト項目一覧

  • デフォルトではフィルタなしですべてのレビューが表示されること
  • 自分にとっての評価を指定してフィルタ出来ること
  • 他の人へのお勧め度を指定してフィルタ出来ること
  • 両方を同時に指定してフィルタ出来ること(この場合はAND条件となる)

検索処理を実装する

  • 本のタイトル(あいま検索OK)を入力すると、入力内容に該当する本を検索する
  • 検索結果から、本のタイトルとISBNを取得し、画面にわたす

アーキテクチャを決定する

前提

下記、要件を満たすものを考える。

  • Pythonが動作すること
  • Boltが動作すること
  • TensorFlowが動作すること
  • なんらかのデータベースが利用できること

また、現時点ではクラウド上でのモデルの学習は考慮しない。

現時点での候補

AWS

  • API Gateway & Lambda & DynamoDB パターン
  • Serverless Frameworkを利用する
  • Lambdaは、TensorFlow学習済みモデルを含んだカスタムDockerイメージを使う

参考

Heroku

  • slug size制限が存在するので注意

参考

ユーザは、本のレビューを閲覧できる

詳細

  • ユーザは、投稿された本のレビューを閲覧できる(自身以外が投稿したレビューも含む)
  • レビュー数が多くなってくると、一度に表示する数を制限するなど、なにかしら見やすさのための対応が必要だと思われるが、このストーリーでは非対応とする

タスク

ユーザは、アプリをSlackにインストールできる

詳細

  • ユーザは、アプリを手動でSlackにインストールできる
  • このインストールは、マーケットプレイスを介したものではないので、ユーザが直接インストールできなくても、FDPメンバが対応して、ユーザがインストールしたいSlackのワークスペースにインストールできればOKとする
  • トークンが別々になる、など

タスク

ユーザは、おすすめされた本に対して、「興味あり」を記録できる

Why?

  • 利用者は、リコメンドに対してフィードバックすることで、より良い精度で次回のリコメンドを受けたい

タスク

受け入れテスト項目

  • おすすめ本モーダルの、それぞれの本に対して「興味あり/なし」ボタンを表示する
  • ボタンクリックで、「興味あり」「興味なし」を切り替えて表示する
  • 初期状態は「興味なし」状態を表示する
  • 「興味あり/なし」ボタンクリック後は、DBに記録された状態を表示する。
  • 「興味あり/なし」の状態をDBに記録する

ユーザは、本をタイトルから検索できる

詳細

  • ユーザは、タイトルの一部を入力することで、本を検索できる
  • 検索結果は、一覧表示される
  • 検索結果の、本の情報を構成する要素は下記の通り
    • 本のタイトル
    • 本のISBN
    • 本のレビュー(オプショナル)(Amazonレビューなどではなく、Beeのユーザが入力したレビュー。複数可)

その他

  • こちらが対応済みになれば、#4 などで直接ISBNを入力しなくとも、検索結果を使って入力できるようになる

想定する操作

  1. ユーザは、「タイトル」欄にレビュー投稿したい書籍のタイトルを入力する(あいまいでもいい)
  2. ユーザは、「検索」ボタンを押す
  3. システムは、該当する書籍の一覧を表示する(別ダイアログを開いても良い)
  4. ユーザは、リストの中から意図していた書籍を選択する
  5. システムは、選択された書籍のタイトルとISBNをレビュー投稿画面の所定の欄に自動入力する
  6. ユーザは、その他のレビュー情報を投入する

タスク

ユーザ情報登録の、ViewControllerを実装する(画面デザイン含む)

想定しているサービスの流れ

  • アプリのホーム画面に、「プロフィール」ボタンを表示する
  • 「プロフィール」ボタンを押すと、ユーザ情報画面が表示される
  • ユーザ情報画面の名前欄に、Slack-IDの表示名が表示される
  • ユーザ情報画面で、所属事業部を選択できる
  • ユーザ情報が登録されている場合、ユーザ情報画面の所属事業部に登録内容が表示される
  • ユーザ情報画面で、職種(管理職、エンジニア、営業など)を選択できる
  • ユーザ情報が登録されている場合、ユーザ情報画面のポジションに登録内容が表示される
  • ユーザ情報画面で、年代を選択できる
  • ユーザ情報が登録されている場合、ユーザ情報画面の年代に登録内容が表示される
  • ユーザ情報画面の「登録」ボタンを押すと、ユーザ情報画面を閉じる(ユーザ情報は登録される)
  • ユーザ情報画面の「閉じる」ボタンを押すと、ユーザ情報画面を閉じる(ユーザ情報は登録されない)

レビュー閲覧機能の、ViewControllerを実装する(画面デザイン含む)

サービス概要

  • ユーザーは、レビュー閲覧ボタンを押す
  • システムは、レビュー閲覧画面を表示する
    - ユーザーは、レビュー閲覧画面から、閲覧したい本のタイトルを入力する
    - システムは、レビューの一覧(タイトル、isbn)を表示する
    - ユーザーは、一覧からレビューが見たい本を選択する
    - システムは、選択された本のレビューの一覧(レビューの中身まで)を表示する
  • システムは投稿されている全てのレビュー(中身とと共に)表示する

機能概要

  • レビューポータル画面に「レビュー閲覧」ボタンを表示する
     ※別タスク(#78)で実装
  • レビュー閲覧画面を表示する
  • レビュー閲覧画面で、「閉じる」ボタンを押下すると、レビュー閲覧画面が終了する
  • レビュー閲覧画面に、dbに登録投稿されている全てのレビュー(中身も込み)を表示する
    - [ ] レビュー閲覧画面で、本のタイトル(あいまい検索)を入力し、「検索」ボタンを押すと検索結果の一覧が表示される
    - [ ] 検索結果の一覧に、本のタイトルとISBNを表示する(固定値でOK)
    - [ ] 検索結果の一覧に「閉じる」ボタンを表示する
    - [ ] 検索結果の一覧に、選択した明細を特定するための(行番号など)入力フィールドと、「選択」ボタンを表示する
    - [ ] 「閉じる」ボタンを押下すると、検索結果の一覧画面が終了する
    - [ ] 「選択」ボタンを押下すると、検索結果の一覧画面が終了する
    - [ ] 「選択」ボタンを押下すると、新たな検索結果の一覧に、レビューの中身を表示する(固定値でOK)
    - [ ] 新たな検索結果の一覧で「閉じる」ボタンを押下すると、レビュー閲覧画面が終了する

レコメンドのアルゴリズムを決定する

https://github.com/esminc/boat/issues/268 でも少し議論されましたが、
レコメンドのアルゴリズムと、それに伴う使用ライブラリを、ある程度決定したいです。

現時点での候補は、下記の二つです。

協調フィルタリング

参考

ニューラルネットワークベース

参考

ユーザは、おすすめの本を知ることができる(アルゴリズムはモックで)

詳細

  • ユーザは、おすすめの本の情報を取得できる
  • 本おすすめのアルゴリズムはモックで良い(全てのユーザに本Aを返す、ような実装で良い)

タスク

受け入れテスト項目

  • ホーム画面で、「詳しく見る」を押下すると、モーダルが表示されること(以下、おすすめ本モーダルと呼称)
  • おすすめ本モーダルで、おすすめ本に関する下記の項目が表示されていること
    • タイトル
    • 著者
    • ISBN
    • サムネイル画像
    • Google Books URL

ユーザは、本のレビューを投稿できる

詳細

  • レビューを構成する要素は下記の通り

    • 本のタイトル
    • 本のISBN
    • 本の5段階評価(自分にとっての評価)
    • 本の5段階評価(他者へのおすすめ度)
    • 本へのコメント(オプショナル)
    • レビュアー
  • 「本の5段階評価」の「他者」とは、を明確にする(候補)

    • 永和社員、事業部、技術に携わるもの

タスク

アプリケーションの構造を決める

ゴール

  • アプリケーションの全体像を俯瞰できるようなイメージを作成する
  • アーキテクチャを決める(モジュールやレイヤ分割など)

アプリは、定期的に、自動でMLモデルを更新することができる

Why?

  • 現FDPチーム解散後(2022/8月以降)もBeeのサービスを永続的に運営していきたい
  • その際には基本的にモデル更新などは自動化する必要がある

詳細

  • データはユーザの入力によりリアルタイムで更新されるので、更新されたデータを用いて、定期的にMLモデルを更新する。
  • 更新時に、モデルが更新された旨を開発者に通知する

タスク

受け入れテスト項目

  • 現在運用中のMLモデルを自動で更新する仕組みが存在する
  • 更新時に、モデルが更新された旨を開発者に通知する仕組みが存在する

テーブルを定義する

  • ユーザ情報として、保有すべき項目を検討する
  • テーブルの定義を作成する

DynamoDB Local側の作業は特にない

ユーザーは自分のユーザー情報を閲覧できる

詳細

ユーザーは、自分のユーザー情報(社員番号とslackアカウント)を閲覧できる

タスク

受け入れ条件の定義

このユーザストーリーの目的

  • ユーザは、自分が入力した情報を確認することができる

受け入れテスト項目一覧

(ユーザーは、ユーザー情報を登録できる #54 側で定義)

ローカルな開発環境が欲しい

課題

SlackAppはAWS上で動作するため、開発中にコードを描きながら試行錯誤をするためには

  1. コードをコミット&プッシュ
  2. GitHub上でPRを作成
  3. (Github Actionsにより自動的に検証環境にデプロイ)
  4. Slackから操作して実装が正しいか確認する

の手順を踏む必要があり、開発効率が良くない(1トライするのにハードルが高すぎる)

ゴール

AWSに依存せず、ローカルで動作確認可能な環境を作る

作戦

  • SlackAppをgunicornサーバを立ててローカル環境(開発コンテナの中)で起動する
  • NgrokによりSlackAppのRequestURLをNgrok側に向けて、ローカル環境に転送する
  • 現在のコード上でAWSに依存する部分だけを切り離し、ローカル確認ではそれ以外の部分だけを起動できるようにする

第1回スプリントプランニング

やること

  • AI検温計のゴール(達成度)を確認する
    教育目的プロダクトのプロダクトゴールをどう導くか

  • プロダクトビジョンを決める
    「永和社員のフィードバックをもらいながらみんなで育てていくプロダクト」

  • プロダクトゴールを決める(第1弾リリース)
    「より多くの人に使ってもらえ、たくさんのデータが収集できるサービス」

  • 技術テーマを決める
    「リコメンド」

  • サービスの名前を決める
    「Bee(Book Erabu Eiwa)」

  • サービスの要求を決める

    • 書評レビュー投稿機能
    • レコメンド機能
  • ユーザーストーリーの候補を決める
    第1スプリントはサービスよりのものはないので、具体的なタスクで進める

  • スプリントゴールを決める
    「アプリケーションのアーキテクチャを決定する」

  • 公開する内容や対象を決める

    • マーケットプレイスへの公開は必須ではない
    • リポジトリは公開できるよな準備をしておく

共有&確認すること

  • FDPとしての活動のしかた
  • POは岡島さんにお願いする
  • 二本立て方式については未定
  • 機械学習としてのテーマ【レコメンド】
    • 協調フィルタリング
    • 深層学習
    • その他
  • その他
    • 有料プランの場合の支払い方法
      検証を始めるためには早めに知りたい

外部APIを調査する

ゴール

  • タイトルによる検索に使える外部APIとその使い方を確認する
  • ISBNによる検索に使える外部APIとその使い方を確認する
  • 今回のアプリで使用する外部APIを決定する

決定事項

サンプルのSlackアプリを作ってみる

ゴール

Slackのメッセージ欄に「Hello」と入力したら、「World」を返すようなサンプルアプリを作る。

目的

  • Slackサーバーからメッセージを受信する、Slack Web APIに向けてメッセージを送信する仕組みを理解する
  • Slackアプリ開発用のフレームワーク「Bolt for Python」を使ってみる

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.