お仕事をする個人向けのタスク計画・実行をサポートするWebアプリを作ってみることにした話
こんちには遠藤です。
最近は、電子工作、IoT系の記事を主に書いていましたが、久しぶりにアプリを作って見ることにしました。まだWebアプリにするかElectronで固めたデスクトップアプリにするかは検討中ですが、おそらくWebアプリになるのではと思います。
作るアプリと解決したい課題
で、今回どんなアプリを作るのかというと、ずばりタスク管理アプリです。ただタスクを管理するならすでに便利なアプリはたくさんあるのでですが、自分的に以下を解決するアプリがほしいと考えていいます。
チームタスクを個人タスクの落として実行できる
私はエンジニアなので、仕事のタスク管理はGithubのIssuesやJIRA、Backlogなどがメインになります。ただ、これらのツールはあくまでチームで共有し管理するためのものです。実際にここから個人で仕事をするためには、作業の落としこみ(タスクの分解)が必要で、その作業単位に管理したいところです。
Githubなどオリジナルの場所に個人レベルのタスクを書いても良いですが、作業の落とし込みは各人のスキルや属性にも依存し、煩雑になりがちなため別のところで管理しておく方が良いと思います(社内ではこのあたりQuipを使っていたりします)。
作業計画がたてられる
ここでいう作業計画とは、今日明日、明後日くらいの直近の作業計画です。普段私はマルチタスクで仕事をしていますが、立て込んでいるときは、特定のプロジェクトに作業が偏らないように時間単位で作業計画を組む必要があることもあります。
このとき、普通のタスク管理ツールだと管理できるのは期限(Due)のみでカレンダーがついていているものでも期限をプロットするだけだったりします。しかし実際には、1つのタスクが時間・日付をまたがってスケジュール・実行される方が多く、これを解決できるツールは意外と少ないです。
結局、期限に向けてメモツールなどでさらに細かいタスク管理したり、それを頭の中でやっている方が多いのでは無いかと思います。
作業割合をあとで確認できる
特に複数のプロジェクトに関わっている場合は、プロジェクトごとにどのくらい時間を使ったか、それぞれの割合はどうかを振り返えれるようにしておく必要があります。目的としては、やりすぎや偏りを防止することと、それを見える化することによって自分の作業効率、スクラムで言うところのヴェロシティみたいなものが体感的にわかってくるようになります。
また、時間管理のツールとしてはTogglを始めとするタイムトラッキングツールがありますが、この手のツールは自分には継続が難しく(大体Startし忘れる)、そこまで厳密に管理したいわけではないので合いませんでした。
すでに存在するツール
もちろん既存のサービスと組み合わせでもなんとかなったりはします。
Plan
今回は、ぶっちゃけてしまえばPlanのクローンを作ろうと思っています。
Planは過去にしばらく使っていたのですが、Insight機能がいまいち自分に合わないのとPCブラウザ版が微妙に動きがおかしかったので使うのをやめてしまっていました。それでも1年くらいは使っていました。
Planの特徴としては、以下のようにタスクをカレンダーにドラッグして計画を立てられるのが便利です。
Plan自体の開発はすでに止まっていそうですが、サービスは利用できるので気になる方は試してみてください。
Googleタスク & カレンダー
Googleタスクの期限は、日付だけではなく時間が指定でき、Googleカレンダーの右サイドバーにタスクを開いていると、それをドラッグして期限を設定できます。
これを利用して、時間管理っぽいことをできなくもありません。
あくまで期限なのでPlanの様に1タスクに対して複数スケジュールができませんが、タスクを細かく分割すればなんとなく計画をたてることができます。
こちらもそこそこの期間試してみましたが、Googleタスク自体の機能が自分にとっては足りなく運用が厳しくなって諦めました。
Sudachi
Sudachiはデスクトップアプリです。
日付ごとにテキストを追加すると、行ごとにタスクとして右のカレンダーにも追加されます。
用途によっては便利そうなUIです。
朝メール ドットコム
今年に入って、社内で各自の作業計画を共有するために朝メール ドットコムを活用しています。なんだかんだとざっくり計画を立てて振り返えることができるのななかなか便利です。
こちらはタスクは管理できないので、計画だけが必要な場合はおすすめです。
タスクの管理階層
ここからは、これから作るアプリの仕様について、考えていることを紹介します。
まずはタスクの管理階層です。
タスク管理を考える上で一番むずかしいところで、かつ汎用化が難しいところですが、あくまで自分に最適化されたツールをつくるので以下のように定義します。
プロジェクト
プロジェクトは、実世界のプロジェクトと同意です。自分の場合は担当製品や、お客さまごとに作成する管理単位です。
GTDでいうところのコンテキストに近いものです。
タスク
Github IssuesとかJIRAの課題などチームで管理するタスクの単位です。ゆくゆくは、連携して自分がアサインされているIssueを取り込めたりすると素敵ですね。
GTDでいうところのプロジェクトはこちらになります。
サブタスク (作業単位)
チームのタスクを個人に落とし込んだ作業単位がサブタスクです。なんかいい名前が思いついたら変えるかもしれません。
データモデル的には、タスクの自己参照として定義する予定です。そうすることによって、サブタスクなしで使用する場合でもタスクからもスケジュールを作成する際も違和感なくデータの参照関係を保持しておけるメリットがあります。
また、将来的にはアウトラインエディタのように無限階層で管理できるようになるかも。ツールを使う難易度あがるのでおそらくやらないです。
スケジュール
スケジュールは、カレンダーに計画するまたは記録する単位です。
タスク、または、サブタスクからスケジュールを作れます。
アプリの画面
タスク管理とスケジュール
メインとなるタスク管理とスケジュールの画面はこんな感じをイメージしています。
ここは概ねPlanのパクリですw
上記には書かれていないですが、タスクのコンテンツとして関連するスケジュールもタイムラインとして一覧できるようにしたいところです。
インサイト
以下を見れるようにしたいですが、詳細は決めていません。
・プロジェクトごとに作業時間割合 (Pieチャート)
・日毎の作業量推移 (棒グラフ)
技術選定
APIレイヤーの無い、Firestoreを使った2層のアーキテクチャのWebアプリするということは考えていますが、細かいところはこれから調べて決めていく予定です。
・フレームワーク: React
・UIフレームワーク: 未定
・ストレージ: Firestore
・認証: Firebase Authentication使う
フロントのフレームワークはReactを使います。Hooksが導入されてからちゃんと使ったことがないので、まずはHooksのみで作ってみて厳しくなってから、ステート管理ライブラリを検討しようかと思っています。
UIフレームワークは、まあ適当にBootstrapでも良いかと思っていますが、もうちょい探してみる予定です。
ストレージですが、Firestoreはドキュメント単位のアクセス管理がデータベース自体に定義できるので、API層を導入しなくてもデータの参照を制御することができます。とはいえ個人向けアプリなので、ログインユーザが自分のデータのみ見えるように制御するだけです。
また、SudachiのようにElectronでデスクトップアプリとして配布するのもありですが、配布やアップデートが大変そうなのでとりあえずWebアプリの方向で進めます。
今考えているのはこんなところです。
今後の計画
10月は企画しただけなので、実際に作り始めるのは来月以降になりそうです。ミニマムに使えるバージョンができたらすぐ公開したいと考えているの、年内か年明けになんらかの公開できるようにしたいなと考えています。お楽しみにー。