Giter Site home page Giter Site logo

cem-app's Introduction

CEM-App

Challenge Every Monthコミュニティ用SlackApp。


環境

  • Node.js(v10)
  • Google App Engine
  • Firestore
  • TypeScript

仕様

データ設計

  • challenger: 挑戦者。一般的に言うユーザーと同義
  • project: challengeを複数まとめたもの。月ごとに複数設定できる。ジャンル分けとして利用するような想定
  • challenge: 挑戦や目標。一行程度を想定しており、projectに属する

コマンド設計

  • cem_register: 挑戦者登録
  • cem_new: プロジェクトとチャレンジの登録
  • cem_edit: 登録されたプロジェクトとチャレンジの修正、変更
  • cem_delete: 登録されたプロジェクトとチャレンジの削除
  • cem_publish: 登録されたプロジェクトの表明
  • cem_progress: 表明されているプロジェクトの振り返り(中間報告)
  • cem_review: 表明されているプロジェクトの振り返り(最終報告)

リマインダー設定

  • 月の始めに挑戦目標を表明するようにリマインド
  • 月の一定の日時にまだ行なわれてないものをリマインド
    • まだ前月の振り返りが行われてない場合
    • まだ今月の挑戦目標を表明されてない場合
    • どちらもされているが進捗確認を促す場合
  • 月の終わりに振り返りを促すためのリマインド

貢献者のみなさん

このプロジェクトに貢献してくれたみなさん

Contributors

開発に携わる以外にも貢献できる方法(e.g. 意見の交換、ドキュメントの更新)もありますので、お力添えいただける場合は是非コントリビューションガイドも参照してみてください。

cem-app's People

Contributors

aquitcd avatar dependabot[bot] avatar hirotokirimaru avatar kdnakt avatar yoshitaku-jp avatar zakizaki-ri9 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar

cem-app's Issues

サーバーを移管するか、乗せかえる(DBも)

概要

現在デプロイされているのは個人管理のGAEなので、
それではない何か別のサーバーに乗せかえて運用する

合わせてDBも個人のFirestoreなのでそれもなんとかする

背景

現在、@AquiTCDが個人で管理するGAEとFirestoreで運用されています。
別段特に問題はないのですが、サーバーを管理運用したい人、
別の何かでやってみたい人、個人に1つの無料枠ではなくもっと余裕のある何かに変えたい、
など、何かしらの理由で別のところに乗せかえる案

修正しないと困ること/修正して良くなること

@AquiTCDの個人用GAE無料枠が空く

対応策

候補として

  • Heroku
  • Cloud Function or Lambda
  • Azure

など
GAEのままなら、コミュニティとして1つGoogleアカウントをとって
そのアカウントでGAEを立てる

リマインダーなどの定型文を数種類の文言からランダムに選ばれるメッセージにする

要望概要

現在リマインドなどのメッセージ文言が固定なのでこれをいくつかの文章からランダムに表示したい

その要望を満たすと嬉しいこと

  • 最初にコントリビュートしやすいためのとっかかりになる
  • ランダム性があって楽しみがある
    • 固定のメッセージだと誰か一人のセンスになってしまう
  • ランダムで自分の作成したメッセージが選ばれるとちょっと嬉しい

ゴール

  • リマインドが発火してメッセージが送られた時にそれぞれ異なるメッセージが表示されること

タスク

  • メッセージを作成する箇所をStringからStringのArrayにする
  • 実行のたびにランダムでArrayからStringが決まるようにする

CIをGitHubActionsに移行する

概要

現在CircleCIで回してる

  • lint, formatチェック
  • デプロイ

をGitHubActionsに移行する

背景

CircleCIは @AquiTCD 個人アカウントのものを使っているため

修正しないと困ること/修正して良くなること

個人依存がなくなる
(おそらくはないが)無料プランなので、@AquiTCD がCircleCIの無料分を使いきるとデプロイされない

対応策

CircleCI用の .circleci/config.yml.github/workflows配下のファイルにそれぞれ移行する

なお、デプロイ用の環境変数はCircleCI側に保持しているものもあるので、そちらの移行の際はお気軽に@AquiTCD までお尋ねください。

Wikiのユーザーガイドを充実させる

概要

CEMたろうの使いかたがわかりにくいようなのでユーザーガイドを充実させる

背景

特に/cem_newで挑戦を複数登録するのがわかりにくい様子。
またみなさん無駄にリスト記法を使おうとして失敗しているのを見る。
実装で吸収もできなくないけどまずはドキュメントを拡充させる。

修正しないと困ること/修正して良くなること

まちがいが減る。ユーザー体験の苦情

対応策

ちゃんと意見を聞いて説明文章を書く。
もしくは開発を担当してない人が文章を書く(客観的視点の獲得のため)

cem_newでプロジェクト登録できない場合がある

任意のはずのdescriptionを入力しないと次のエラーが出る
(Slackにはエラーが出ないので登録できなかったことがユーザーに伝わらない)
UnhandledPromiseRejectionWarning: TypeError: Cannot read property 'description' of undefined"

リマインダ機能

要望概要

挑戦目標に関する必要な行動を促すためのリマインダを追加したい

その要望を満たすと嬉しいこと

  • 人の手で促す発言をしなくて良くなる
  • 挑戦目標をふりかえり、表明、途中経過報告を円滑にするようになる

ゴール

  • 月の始めに挑戦目標を表明するようにリマインド
  • 月の中間に進捗確認を促す場合
  • 月の終わりに振り返りを促すためのリマインド

Webサイトと統合

要望概要

せっかくFirestoreに格納してるのだから、
Nuxtからデータを取得してそのまま表示するWebサイトを作って統合する

その要望を満たすと嬉しいこと

活動状況をコミュニティ外にも公表できる
=> 新規に興味を持つ人増える?

単純に開発がチャレンジングで楽しい、技術もつく

ゴール

  • Slackから登録されたユーザーの今月の目標一覧がWeb上で見える
  • ユーザーごとの今月だけでなく過去の目標とそのレビュー結果が見える

登録されたプロジェクトとチャレンジの修正、変更

要望概要

既に登録された自分のプロジェクトとチャンレンジの修正、変更をするスラッシュコマンドが必要
なお、コマンドは/cem_editを予定

その要望を満たすと嬉しいこと

  • 間違えて登録したプロジェクトやチャレンジの変更ができる
  • 既に登録したが対象月の変更をしたり、内容の変更に対応できる
  • 結果、思いついたらどんどん登録ができるようになる

ゴール

  • すでに登録したプロジェクトの一覧を選択できる
  • 選択したプロジェクトの月を変更できる
  • 選択したプロジェクトのチャレンジを変更できる

挑戦者ごとにカスタムされたリマインダー

要望概要

まだ済んでないアクションに対して、人ごとに個別メンションをつけてリマインドする

その要望を満たすと嬉しいこと

  • よりちゃんと必要なアクションを実行する
  • すでに済んでいる人には不必要な通知されず邪魔にならない

ゴール

  • 月の一定の日時にまだ行なわれてないものにリマインド
    • 目標発表
    • 前月のふりかえり
  • 個人個人自由に設定した日時で進捗確認のリマインド
    • /cem_remind 日 などでリマインドする日を追加

ユーザ名・アイコンが更新されない

概要

/cem_registerを実行した後にslackのユーザ名やアイコンを変更しても、
/cem_publish, /cem_reviewなどの発言が新しいユーザ名やアイコンにならない

背景

現状、slackbotが該当ユーザのユーザ名とアイコンを使って発言している。
その更新が行われていないので、初回のときから変更されないと推測される。

修正しないと困ること/修正して良くなること

/cem_registerを実行した後にユーザ名やアイコンを変更しても反映されない
(そこまで重大な問題でも無いけど……)

対応策

おそらく現状、 /cem_registerのときにユーザー名とアイコンを取得していると思われる。
対処は以下のいずれかと思われる

  • コードは変更せず、ユーザ名やアイコンを変更したら再度/cem_registerするようにwikiの文章などで促す
  • 毎月のサイクルのどこかで(例えば/cem_publishのときに)毎回ユーザ名とアイコンを取得する
    変更してない場合は余計な処理になってしまう……

月初にチャレンジの表明宣言(/cem_publish)が期待どおり動作しない

不具合概要

現在の状況

  • 行った時間: 1日の9時前
  • /cem_newでいくつかプロジェクトとチャレンジを登録
    • この時デフォルト値は先月の月だった
  • /cem_publish

結果として、発表できるものがないとエラー。

望ましい状況

どうようの操作で対象のチャンネルに登録内容が表示されること

再現手順

上記参照
※ 予想では月跨ぎ時と日本時間(JST)との関連が推測される。したがって、試すのは1日9時前を意識したほうが良さそう

修正しないとどう困るか

早々に表明したいのに時間を待たないといけない

原因

おそらくだが、JST、UTCの差で内部的に月が変わってないのが問題。

修正案

/cem_publishの対象を調査して期待どおりになるように修正

Nuxtが同じExpress上で動作するようにする

概要

#29 の前段として
https://github.com/challenge-every-month/challenge-every-month
からGridsomeを移行してもってくる
NuxtがExpressをサーバーとして動作するようにする

背景

Gridsomeの場合、表示を更新したい都度にビルドが必要になる
せっかくDBでデータを持ってるのに有効活用できない

修正しないと困ること/修正して良くなること

  • #29 をみすえてWebに挑戦データを表示するための仕組みができる
  • ゆくゆくはSPA的なWebに成長させることができる
    • auth入れて認証すればWebから入力、操作することも可能
    • PWAにしてアプリ化も夢じゃない!

対応策

  • nuxtをセットアップ
  • Boltに含まれるexpressをnuxt middlewareにする
  • nuxtはできればTSで書く

[WIP] exerciseの日数計算がおかしい

不具合概要

exerciseの日数計算がおかしい

現在の状況

午前0時代の発言が正常に加算されないようす

望ましい状況

前回実施時から日付さえ変わっていれば加算される

再現手順

修正しないとどう困るか

原因

修正案

review時、未レビューのものがすべて対象になっている

概要

review時、未レビューのものがすべて対象になっている

背景

4月の目標をpublishしたあとに、3月の目標をレビューをおこなった。
その際、4月の目標も未レビューと扱われてしまった。

修正しないと困ること/修正して良くなること

その月に実施していく目標なのにレビューが実施されてしまい、
目標が登録されていない状態になる。

対応策

ユーザに対して、レビューをおこなってもらってから目標を登録してもらう。

レビュー対象を月ごとで選べている状態が理想に思われる。

登録されたプロジェクトの表明

要望概要

既に登録された自分のプロジェクトと内包するチャレンジの表明するスラッシュコマンドが必要
なお、コマンドは/cem_publishを予定

その要望を満たすと嬉しいこと

  • 現在、メッセージとして各人が書いているチャレンジ表明が簡単になる
  • 統一フォーマットにより可読性が上がる

ゴール

  • 当月のプロジェクトと内包するチャレンジをわかりやすく表示できる
  • 表明したプロジェクトとチャレンジのステータスが挑戦中に変更される

表明されているプロジェクトの振り返り

要望概要

既に表明された自分のプロジェクトと内包するチャレンジの結果をふりかえりを表明するスラッシュコマンドが必要
なお、コマンドは/cem_reviewを予定

その要望を満たすと嬉しいこと

  • 現在、メッセージとして各人が書いている振りかえりが簡単になる
  • 統一フォーマットにより可読性が上がる

ゴール

  • 当月のプロジェクトと内包するチャレンジの振り返りをわかりやすく表示できる
  • 表明したプロジェクトのステータスが終了に変更される
  • 表明したチャレンジのステータスが達成、または未達成に変更される

自動デプロイをGoogleCloudBuildに移行する

概要

要確認
GCBに移行しなくても単純にクレカ登録してあれば問題ない可能性が高い。
それとは別にGCBにしてもよいし、CircleCIかGitHubActionsに移行しても良いかもしれない。


どうやらGAE standardのデプロイはGoogle Cloud Buildでやらないといけなくなるらしい(要出典)のでそれの対応。
勘違いでした

そこでCircleCIを剥がすならLintも、GitHubにして
CircleCI脱却をしたほうがよいかもしれない

背景

修正しないと困ること/修正して良くなること

対応策

登録されたプロジェクトとチャレンジの削除

要望概要

既に登録された自分のプロジェクトとチャレンジの削除をするスラッシュコマンドが必要
なお、コマンドは/cem_deleteを予定

その要望を満たすと嬉しいこと

  • 間違えて登録したプロジェクトやチャレンジの削除ができる
  • 結果、思いついたらとりあえず登録を書くようになる

ゴール

  • すでに登録したプロジェクトの一覧を選択できる
  • 選択したプロジェクトを削除できる
  • 同時に選択したプロジェクトが内包するチャレンジも削除される

中間進捗報告ができる

要望概要

中間進捗報告もできるようになる

その要望を満たすと嬉しいこと

  • 自身で発表した挑戦目標をコピペして整形しなくてよい
  • 仕組みがあることで進捗発表の障壁を下げる

ゴール

  • /cem_progress などでダイアログを開く
  • 目標一つづつにコメントをつけることができる
  • コメントはDBに保存される
  • 記入した結果をメッセージとして表示できる

中間報告のコメント部分を複数行にする

要望概要

中間報告(/cem_progress)でのコメントを複数行にする。

その要望を満たすと嬉しいこと

1行だけしか表示されないので、リンクを張ったりすると表示上は読めなくなる。

ゴール

中間報告のコメントを複数行にして表示、および更新できること。

タスク

  • タスク1

Nuxtの組み込みのアプローチを変えて再トライする

概要

調査しきれてないので確実ではないですが、Nuxtを

  1. tsから動かさないでjsにトランスパイルしてから動かす
  2. nuxt generateで書き出してから動かす

のどちらかのアプローチでいけそうな気がしています。

背景

#30 として #36 で対応したNuxtフロントエンドの組み込みが
実稼動させてみるとサーバーが落ちるようなので #37 で戻しました。

修正しないと困ること/修正して良くなること

#30 の問題が解決されてキレイなフロントを作る下地が今度こそ整う

対応策

  • nuxt ts runtimeでビルドしたもの動かす方法を模索
  • 上記が不可であればnuxtをjsで書いてビルドする
  • 上記が不可であればtsに戻してgenerateする方向で対応する

/cem_publish 時に目標が登録順を担保されずに表示される

不具合概要

現在の状況

/cem_newで入力した順番がpublish時に保証されない

望ましい状況

/cem_newで入力した順番がpublish時に保証される

再現手順

  1. 目標を立てる
  2. publishする

原因

fireBaseに登録する際に、順序が概念がないため

修正案

順序を表現するフィールドを追加して、JSでソートする

/cem_help時のメッセージがmarkdown書式に変換されない

不具合概要

現在の状況

/cem_helpを実行した際のメッセージが、markdownに変換されていない。

スクリーンショット 2020-03-21 20 12 44

望ましい状況

markdown変換されたメッセージが表示されること。

再現手順

  1. どこかのチャンネルで/cem_helpを実行

修正しないとどう困るか

困らない。見た目だけの問題。

原因

おそらく、Slackのmarkdown書式に沿っていないためと思われる。

修正案

太字系

text: `*Here comes a new challenger!*\n挑戦者[${userName}]さんを新規登録しました`,

を参考にした感じ、

**ルール**\n

は、*ルール*のように、
アスタリスクを一つに変更すれば解決する。

その他

調べる必要あり。

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.