AppSheet でゲーミフィケーション要素のあるtodoのアプリをつくったった

目次

  • ノーコードでtodoアプリを作った。
  • その過程とハマったところを記録しておく。

ゲーミフィケーション

  • ゲーム感覚で日常のタスクをこなしていこう、というもの。
  • ゲーム感覚で楽しく取り組むための工夫についての学問がゲーミフィケーション。
  • その基本的なポイントとして報酬とペナルティがある。
  • 人間はスコアアタックに魅力を感じて、スコアをロストすることに嫌悪感を覚える
  • その習性を利用して日常の習慣をゲームにする。

ゲーム化したいこと

  • 私はストーリーに興味がある。RPGをやっていてもお話やキャラ同士の掛け合いに強く関心を持っていた。テイルズオブシリーズとか大好きだった。
  • そこで自分でもストーリーを作れるようになりたい。
  • その練習として即興小説を毎日書くモチベーションを作りたい。

ゲームの骨子

  • ゲームの内容としては、即興小説を毎日書くとスコアアップして、サボるとスコアがリセットされるようにしたい。

ノーコードでアプリ作成

  • 一度アプリ作成に取り組んでみたかった。
  • 私に現時点でアプリ作成の技能や知識はないので、その点を補助するツールが必要になる。
  • そこでノーコードでアプリを作成できるツールを見つけた。AppSheetだ。

AppSheet

  • Google が買収したことで話題になったノーコードでアプリを作成できるサービス。
  • 公式にデプロイするのは有料アカウントが必要になる。 個人でアプリのテストを行う間は無料なので、アプリを自分だけが使う場合には無料コースでも大丈夫。 試しに触ってみる。

手順

  • サインアップ。グーグルのアカウントを使った。
  • データからアプリを作成を選択。
  • 事前にスプレッドシートでどういう仕組みになって欲しいかを練れる。
  • スプレッドシートをアプリにするためのUIを自動で作ってくれるイメージで進められる。
  • スプレッドシートの内容をアプリにするイメージで進めていく。

完成品

  • ゲームのスコアに換算するタスクをメモする画面。
  • 達成したかどうかもメモ出来るようにした。

sFFppLC9lKbI3buFnlzA926bb3G3/X2ovK6qq9xA4xLmi.jpg

  • その日に達成したスコアを記入する画面。
  • 前のページで達成した個数をカウントして初期値にしている。
  • AppSheet にCOUNTIF関数はないので、以下の記事を参考にした。

https://community.appsheet.com/t/is-there-any-way-i-can-do-countifs-function/652

COUNT(SELECT(シート2[やった], AND([やった], ( [e-mail]=USEREMAIL())))

[やった]がtrueでユーザーのe-mailが一致するデータを集計している。

sFFppLC9lKbI3buFnlzA926bb3G3/5nCfU7Xep17MPUjg.jpg

  • これまでのタスク達成の履歴を表示する画面。

sFFppLC9lKbI3buFnlzA926bb3G3/LXsAH8URlnrgvMtt.jpg

  • これまでの総合スコアの推移をグラフにして表示する画面。

sFFppLC9lKbI3buFnlzA926bb3G3/0sszXLZI7voP6NLN.jpg

ハマったところ

  • ノーコードとは言いつつ、凝ったことをしようと思うと、データベースを弄る必要がある。
  • 今回は継続スコアを計算させたかったため、条件分岐やスコアの足し算をするために二つの行を参照する必要があった。
  • その際にデータベースに関する知識を必要とされるので、ど素人にも扱えるかというと微妙。
    • でもアプリを作りながら関連する知識を身につけていこうという方針ならオススメできる。
    • 私も手を動かしながら、足りない知識を要所要所で勉強するつもりで取り組んだ。
  • データベースについての知識をほぼ持っていないので、スプレッドシートを参照する関数を作成するときに挙動が想像出来なかった。
  • 出力される項目を間違えていたためにデバッグに二時間ほど費やした。
  • 日付で前日の情報が無い場合には継続スコアをリセットする関数を作ろうとした。
    • 検索の関数に与える条件を間違えていたために、日付で検索して日付を出力するようになっていた。

間違っていた部分

SELECT (シート1[日付],[日付]=[_THISROW]-1 )

正しい記述

SELECT (シート1[継続スコア],[日付]=[_THISROW]-1 )
  • python のような抽象度の高い言語を普段扱っているので、コンパイルを通らないという壁を乗り越えるのに苦労した。

ハマったところ2

  • 色々と触っているうちにエラーのままの機能がでてきた。
  • そのせいでinfoが赤く表示された。
  • 必要の無い機能は削除しておくのが安全。

実装したいこと

  • 朝に即興小説を書いて、このアプリで進捗を打ち込んだ後にポップアップで褒めて欲しい。note だと継続日数に応じて応援の言葉が出てきて嬉しい。なので同じような機能をつけるとゲーム感が増すかも!
  • ハイスコアを表示したい。できたらランキング形式に出来るとゲームっぽい。複数のユーザーで競争できるとよいかも。
    • 対策:単純にソートして最大値を取り出すようにすればいいのでは?
  • ユーザー毎に異なるシートを参照させたい。こアプリで他のユーザーとデータを共有したくはない。
    • 対策:ユーザーのメールアドレスを入力する列を追加して、検索で現在のユーザーのデータだけを抽出した。結果としてユーザー毎に異なるシートを参照する必要はなくなった。
  • 複数の日課の継続度合いを一つのアプリで可視化したい。
    • 対策:そのためにはシートを操作する必要がある?複数のスコアを並べると複雑になって、直感的な理解が妨げられるのでは?
  • 目標とタスクのビューにあるやったの列を毎日自動でリセットしたい。
    • 対策:Behaviorでなんとかなるのかな?

まとめ

  • ひとまず動くアプリが出来た!
  • ノーコードとは言いつつ条件分岐などでコードの記述は求められる。
  • 自分の理想と実現可能な実力とのギャップを明確にできた。

See also