- 2022/09/20(火)
[TasQuest]typescriptでタスク管理アプリを育ててます
表示が乱れた場合は再ロードをお試しください。
タスク管理アプリって、いろいろあるけど「これだ!」ってのが見つからない。
Notionもいいけど、オフラインで使えないのがちょっと…。
というわけで、自分で作ってみました。「TasQuest」って名前のタスク管理アプリ。
TypeScriptとReactで、ゆるっと育て中です。
タスク管理アプリの最適解がわからない
タスク管理アプリって色々ありますよね。
例えば、Things、todoist、googleやmicrosoftのtodo、Taskumaなど。「タスク」と検索するだけで無限に出てきます。色々なタスク管理アプリを触ってきたのですが、どれもしっくりきません。
こういう「作業効率化」と呼ばれるジャンルで一番注目を集めているのは「Notion」でしょうか。
なんといってもNotionはノーコードで自分だけのデータベースが作れるという驚異的な機能を持っています。
色々なYoutuberや有名人、エンジニアの方がテンプレートを配布していますよね。最近ではAIも使えるようになって、どんどん使いやすくなっている印象があります。
しかし、このNotionの気になるところは「オフラインで使えないこと」と「Linuxネイティブアプリがない」です。
私は田舎に住んでいるといってもインターネットには接続できますし、山奥にでも行かない限り現代の日本で使えない場所はないでしょう。
では、なぜオフラインにこだわるかというと、「インターネットの時間を減らしたい」からです。
悩み=つまらないのにインターネットを見てしまう
これは最近の私のブームと言ってもいいかもしれません。以前にも似たような記事を書きましたが、とにかくインターネットの時間を減らしたいです。
私はSNSもやっていないしソーシャルゲームもすべてやめたので、いわゆるスマホ中毒と言われる人達と比べれば全然使っている時間が少ないと思います。しかし、それでも時には10時間くらい見てしまうこともあるし、普通の日でも2~3時間のスクリーンタイムの日が多いです。これは、電話や検索で必要な時間も含まれているので無駄時間はもう少し少ないと考えられますが、それでも多いですよね。特に平日の時間がない日にこれだけ使っているのは、自分でも負担になっていると感じています。
それでも使ってしまうのは、最近のインターネットのアルゴリズムが優秀すぎるからだと思います。例えば好きなYoutubeを一本だけ見ようとしても、おすすめに面白そうな動画が並ぶので気になってしまい、結局30分くらいがあっという間に過ぎてしまいます。インターネットサーフィンも同様に次から次へとみてしまいますよね。
正直、見たコンテンツが面白ければいいのですが、その見ているコンテンツが軒並みつまらないのが問題です。それなのに、見てしまうという矛盾が難しいですよね。よくできていると思います。
これを断ち切るには、いっそのことインターネットを使わないレベルの処置が必要だと思います。私は自分に甘いタイプなので特に!
とにかくタスクアプリを作ってみようと思う
話がそれましたが、要するにNotionがよさげなんだけど、オフラインで使えないから自分で作ってみようと思いました。
どういう機能がいいかと考えてみると意外と難しいですよね。
とりあえず、核となる部分は
・オフラインで使える
・Linuxで動く
・タスクに階層構造を与える
ということくらいです。
本当はもっといっぱい案がありました。例えば、タスクをこなすとポイントがもらえるとか、タスクがモンスターとして表示されるとか。
↓テスト

元々Habiticaというサイトが好きで、それに似たようなソフトを作ろうかなと考えていました。ゲーミフィケーションなタスク管理アプリとして。
しかし、実際にプロトタイプとして作ってみると、非常に面白くない。ゲームとして。面白さを演習するにはレベルデザインや演出が重要だともうのですが、とにかく難しい。しっくりこないので没となりました。
初めてのTypescript・React
アプリを作るのに使用した言語はTypescriptです。
TypescriptはJavascriptに型を指定できる言語です。
Reactは Facebook(現Meta)が開発した、JavaScriptのライブラリです。Webページを部品のように組み立てて作るためのツールです。
どちらも現代のフロントエンドでの開発の主流だと思います。
私はこのWebサイトを自作しているので、軽くJavascriptには慣れていましたが、Reactは初めてだったので勉強しながら進めました。
正直、「useeffect」と「useState」でpropsに渡すくらいしか使いこなせていませんでしたが、なんとか動作するものを作ることができました。まだまだ奥が深そうです。
一応、特徴など
登録できる項目としては、
・タスク名
・親タスクのid
・締め切り日
という非常にシンプルなモノだけです。(もっといろいろあったときもあったけど、そんな便利ではなかったので消した。)

このアプリの唯一と言ってもいい特徴がこの親idの指定ができることです。(もしかしたら他のアプリでもあるかも)
指定することで階層構造を組むことができます。
編集でも変更できるので、違う階層に変更することができます。

タイムラインボタンを押すと構造に関わらず、締切順に整列しなおします。


使ってみて分かった問題
使ってみて感じた問題があります。
例えば、下の画像みたいな実績ページやタスク間の関係を可視化してみたり、タスクのこなした数を可視化できるようなダッシュボードを作ってみました。
実績ビュー

ネットワークビュー

ダッシュボード

これは可視化・数値化することがゲーム感につながると思ったからです。
しかし、全然面白くない。
外発的モチベーションが使えない
外発的モチベーションとは、例えばyoutubeに動画をあげたら再生数であったりコメントが返ってきたり、収益が発生するようなことです。
Youtubeやnoteなどはそのような外からの反応があるため比較的楽しく継続できるような設計になっていると思います。
しかし、個人的なタスクになるとそのような外発的な反響を得るようなことはできません。
タスクを数値化してご褒美システムを導入してみましたが、なんかQOLが下がっている気がしてやめました。
純粋な内発的なモチベーションがないようなタスクを楽しくこなすことは難しいです。
2つの種類のタスク
なぜ、ゲーム感が少ないのか、面白くないのかを考えてみるとタスクには二つの種類があるような気がしてきました。
一つは自己成長的タスク、もう一つは業務的タスクと名付けます。
自己成長タスクは名前の通り、自身の成長に関するタスクです。例えば英語の学習や絵の練習などです。
業務的タスクは先ほどと違い、やりたくないけどやらなければいけないようなタスクです。
自己成長タスクに関しては非常に数値化しやすくゲーム的に演出することができます。
しかし、業務的タスクに関しては数値化や演出が難しいです。レベルなどを実装しても何かむなしい感じがします。それは成長を目的としていないタスクなのにレベルが上げられても困るからです。
実際のゲームと比較して
二つの異なるタスクが混在していることが問題だと分かりました。
実際のゲームと比較して考えると、自己成長タスクに関してはポイントをあげるゲームと似せることでゲーム感を高めることができます。例えばテトリスとかスイカゲームみたいに点数をあげることで成長を感じられて楽しいという構造です。
では、後者の業務的タスクは何のゲームに似せることがいいでしょうか。
一つはRPGです。タスクを物語化することで楽しいのではないかと考えました。しかし、実際にやってみると全然楽しくありません。なぜなら、演出や展開は全て自分で決めているため驚きがないからです。
物語として意外な展開とか予想を超えるような演出がないとつまらないです。
解決策はまだ見つかってないです。もう少し本を読んで考えようと思います。
まとめ
初めてアプリを作ってみました。
自慢できるような出来でも機能もないけど、自分で使いながら改善していこうと思います。
しない可能性もあります。
動かなかったらごめんなさい。
