Obsidianでタスク管理する

Posted on | 422 words | ~2 mins

というのがこの頃個人的最適解となっているのでそれについて整理してみた

TL;DR

Obsidianつかうとタスク管理とナレッジ管理を圧倒的操作性の下で完結できてうれしい

前提

  • タスク管理について述べていく前にまず前提として「タスク」が指すものについての補足
    • 以下で述べられる「タスク」は基本的にソフトウェアエンジニアリング的なことを行う過程で発生する「技術的なタスク(実装事/リサーチ事他)」を想定している
  • 「タスク管理」のスコープとするところ
    • 主体は
      • 個人に閉じた話(チームで何らか共同でタスク管理していく話とは別)
    • スコープ
      • 「なにをせねばならんか」「いますべきことは」「やるなかで得られた知見の蓄積」をいかに効率的に行うか、が主眼
      • 「いついつまでに間に合いそうか」といった進捗管理的なことは関心の対象外

タスク管理の基本要素

タスク管理どうやってますかを語る上で、避けて通れない系の基本要素を整理してみると、おおまか以下がありそう

  • a.) (タスクを)一覧する
  • b.) (タスクを)選択する
  • c.) (タスクを)開始/再開する
  • d.) (タスクを)実行する

タスク管理における基本要素毎の課題感

a.) ~ d.)の4項目について、それぞれの課題感を書き綴ってみると

  • a.) (タスクを)一覧する
    • 課題感
      • 「TODOリスト」のつらさ
        • わすれないようにするために人は「TODOリスト」をつくる
        • いずれ長くなってくる
        • リストと向き合うたびに認知負荷がかかる
        • 本来必要なのは「いま集中して取り組むやつ」だけ
        • それ以外のも目に入ってくる。ノイズ。
        • 「あれやんなきゃ」とおもいついたら「リスト」に移す
        • 「リスト化」自体がコスト
          • 「リスト」へのコンテキストスイッチが起きる
          • 入力が面倒
        • 複数コンテキスト(ie. プロジェクト)のTODOアイテムを扱う必要が生じた場合どうするか
          • コンテキスト境界でTODOリスト自体分ける?
            • 複数のTODOリストを管理する
            • TODOリストを行き来する必要が生じる。管理コストがつらくなる。
          • 1枚のTODOリストで複数コンテキストを区別する?
            • 「どのコンテキストのTODOか」をどう区別するかを考える必要が生じる
            • 管理コスト然り、TODOアイテムの追加自体がつらくなる
        • なにがつらいのか
          • 単にやることを忘れないようにしたいだけだが、「リスト」にすることで管理やそれに伴う認知コストが生じる
          • 個人レベルでのタスク管理ではキレイに上から優先度順にTODOアイテムがソートされている必要はなくて「いま取り組むべきもの」を1~3つ見繕えれば事足りる
      • なにを解決したいか
        • -> (「やることを忘れないようにする」を担保しつつも)リスト管理から開放されたい
  • b.) (タスクを)選択する
    • 課題感
      • 特になし
        • 個人的に、「いま取り組むべきものはどれか」を決める上での課題感はない(その時々でわりと自明だったりする)
          • ゴーストの囁き
  • c.) (タスクを)開始/再開する
    • 開始と再開
      • 未着手のものを開始する場合はよいとして、えてして「再開」事と付き合う必要がある
        • なぜ
        • タスク開始から完了までノンストップで完遂することは稀
          • 単純に1日がかりでは終わらなかったり
          • 作業途中で割込の発生とそれに伴うコンテキストスイッチがあったりするのが現実
        • ので、「途中から再開」イベントが往々にして生じる
    • (再開事と向き合う上での)課題感
      • 一旦手を離れて戻ってきた際、「なにをどこまでやっていたか」を思い出すオーバヘッドが生じる
        • 再開する上で「思い出す」オーバヘッドをできるだけ抑えたい
        • 思い出す対象大きく2つ
            1. 「なにをどこまでやっていたか」の「なにを」(=取り組む対象)の把握
            1. 「なにをどこまでやっていたか」の「どこまで」(=取り組んでいる対象のカーソル位置)の把握
    • なにを解決したいか
        1. 「なにを」の把握
        • TODOアイテムの内、「未着手のもの」と「仕掛り中(=WIP)のもの」を区別したい
        • 「WIPのものの中で、現在進行系で取り組むべきもの」をフィルタしたい
        1. 「どこまで」の把握
        • 「仕掛り中のもの」に再度取り掛かる際、「前はどこまで進めていて、次何から始めるとよいか」までのキャッチアップをスムースにしたい
          • いかに低コストで「(雄弁な)作業途中状態のセーブ」が行えるか、が関心
            • まず、作業状態をセーブするための、特定タスクに紐付いたメモの書込先が必要(と抽象で書くとやや冗長な表現だけれども、たとえばタスクがtitleとなっているプレーンテキストファイルであったり、GitHub issueやカンバンツールでいうカードみたいなもの)
            • その上で、テキストベースのメモ書きのみだと、正直足りない場合がある(作業再開する上で記憶を想起させるには十分に雄弁でない場合がある)
              • スクショをはじめとしたメディアファイルの添付ができると、より思い出しやすい
            • また、作業開始~中断までの作業の全体像/プロットがわかるようなアウトラインが可視化できると、よりコンテキストを思い出しやすい
  • d.) (タスクを)実行する
    • (一般論ではない)作業過程の流儀(?)みたいなの
      • 実装事によっては、思考を整理する上で言語化したり、イメージを可視化しながら作業を進める
      • 言語化
        • ふつうにテキストを綴れれば良い
      • イメージの可視化
        • (iPad pencilで図を書いたりしていたこともあったけれども)、おおまかなコンポーネントの関係性やシーケンス図やフローチャートその他諸々については、最近はもっぱらUMLで書く方が速いと感じている(手書きで書いたときの字の汚さで読めないといったことがなく出力が安定しているのもうれしい。コピペで再利用もできるし)
    • なにがほしいか
      • ふつうにテキストでメモが出来て、UMLを書いてそれをプレビューできること

(課題感を踏まえた上で)やりたいこと

上記のタスク管理の基本要素毎の課題感を踏まえた上で、自分なりの要件を整理してみると

基本要素 課題 やりたいこと
a.) (タスクを)一覧する 「TODOリスト」の管理コスト (「やることを忘れないようにする」を担保しつつも)リスト管理から開放されたい
b.) (タスクを)選択する N/A N/A
c.) (タスクを)開始/再開する 一旦手を離れて戻ってきた際、「なにをどこまでやっていたか」を思い出すオーバヘッドが生じる TODOアイテムの内、「未着手のもの」と「仕掛り中(=WIP)のもの」を区別したい

「WIPのものの中で、現在進行系で取り組むべきもの」をフィルタしたい

特定タスクに紐付いたメモの書込先

スクショをはじめとしたメディアファイルの添付ができる

作業開始~中断までの作業の全体像/プロットがわかるようなアウトラインを可視化できる
d.) (タスクを)実行する N/A ふつうにテキストでメモが出来て、UMLを書いてそれをプレビューできること

Obsidianによる解決

上記要件をどういうアプローチで解決するかにあたり、Obsidianをつかうことでこれらを満たすことができた

Obsidianとは

  • そもそもObsidianとはなにか
    • 公式サイト: Obsidian

      Obsidian is a powerful knowledge base on top of a local folder of plain text Markdown files.

      • とあるように、プレーンテキスト(.md)ファイルをベースにナレッジの蓄積を支援するソフトウェア

      • いわゆるノートアプリ

      • About usをみると、基本コンセプトが以下のように述べられている

        … we decided on the three most fundamental directions of Obsidian:

        • Local-first and plain text;
        • Link as first-class citizen;
        • Make it super extensible.

        Although we call it a personal knowledge base or your “second brain”, we also like to think of it as an IDE for your notes. You can think of an IDE as a powerful frontend that tries to understand your code, such as where are functions and variables stored, what are their types, and by doing so make it super easy to navigate code and get suggestions as you type.

        • 基本思想となっているLocal-firstやLinkを中心としたネットワーク構造と3rd-partyプラグインによる拡張が可能という点が正に相まって、現状の個人的最適解となっている(後述)
        • 機能として具体的にどんなことができるかの紹介は公式サイト含め他の良記事に譲りたい

Obsidianをつかった要件の満たし方

基本要素 やりたいこと Obsidian機能
a.) (タスクを)一覧する (「やることを忘れないようにする」を担保しつつも)リスト管理から開放されたい tag機能を使った横断検索による「TODOリスト」項目の分散化
c.) (タスクを)開始/再開する TODOアイテムの内、「未着手のもの」と「仕掛り中(=WIP)のもの」を区別したい tag機能を使ったステータス分類
c.) (タスクを)開始/再開する 「WIPのものの中で、現在進行系で取り組むべきもの」をフィルタしたい Daily note機能を使ったdailyのコンテキストの繰越
c.) (タスクを)開始/再開する 特定タスクに紐付いたメモの書込先 タスクをtitleとしたObsidianノート
c.) (タスクを)開始/再開する スクショをはじめとしたメディアファイルの添付ができる built-inのファイル添付機能
c.) (タスクを)開始/再開する 作業開始~中断までの作業の全体像/プロットがわかるようなアウトラインを可視化できる built-inのアウトライン可視化機能
d.) (タスクを)実行する ふつうにテキストでメモが出来て、UMLを書いてそれをプレビューできること 3rd-partyプラグインによるUMLプレビュー機能

それぞれの補足説明

  • (「やることを忘れないようにする」を担保しつつも)リスト管理から開放されたい

    • -> tag機能を使った横断検索による「TODOリスト」項目の分散化
      • とは
      • 「任意のノート行に対するtag付けでTODO化(#todo付与)」し、「#todo tag検索結果をもって、TODOリストとして可視化する」こと
      • #todo付与によるTODO化とtag検索結果によるTODOリストのビルドのイメージ
      • なにがうれしいか
        • 「リスト」管理から開放される
          • アタマの中にあることをノートに書き出していって、TODOな行に対してナイーブに#todo付与すればよい(「リスト」に戻って、アイテムの追加といった作業が不要になる)
        • 複数コンテキストでも成立する
          • tag検索結果が、「どのノートにおける、どの行か」まで行全体で結果表示されるので、「そのtodoがどのコンテキスト下にあるか」が自明になる(検索hitするノートと該当行単体では自明でないかもしれないが、該当行から#todo付与されたコンテキストを辿ることができる)
          • 「リスト」管理で課題だった複数コンテキスト扱う上で「リストをコンテキスト毎につくる」ないし「1枚のモノリシックリストで複数コンテキストを区別する」といった管理上の悩ましさから開放される
  • TODOアイテムの内、「未着手のもの」と「仕掛り中(=WIP)のもの」を区別したい

    • -> tag機能を使ったステータス分類
      • とは
      • これも上記の#todo付与同様、「WIPのもの」を#wip付与することで分類できる
      • イメージ
  • 「WIPのものの中で、現在進行系で取り組むべきもの」をフィルタしたい

    • -> Daily note機能を使ったdailyのコンテキストの繰越
      • とは
      • えてして、現在進行系の関心は、「昨日の関心」の地続き
      • 1日のはじまりで、「昨日やったこと/やり残していること」からスムースにコンテキスト移行できるとうれしい
      • ObsidianにはDaily note機能があり、「昨日」「今日」「翌日」のログに瞬時にアクセスできる
      • 「昨日」のログから「今日」のログへWIPなタスクを移行してくることで、「今日の関心」について「何すべきか」を思い出す要素が減ってラク
        • 大きな「WIPリスト」を扱う場合だと、「現在は取り組んでいないがWIPステータスとなっているもの」が、「実際に現在進行系で進めているもの」と同列に並び、ノイズになることがある
        • Daily noteを1日におけるホームグラウンドとして扱うことで、現在の関心をラクに繰り越せる(上述の#todo tagと #wip tagでの分類をした上で、Daily noteを活用することで「(その中での)いま現在の関心」を抽出できる)
      • イメージ
        • Daily note機能のactivate
        • Daily noteのHotkey割当
            • デフォルトはすべてBlank
            • 自分は「昨日」をAlt+Shift+D, 「今日」をAlt+Dに割り当てている
        • (たとえば、現在を2022-07-03とした場合の)昨日時点のログ(=2022-07-02)が以下だった場合
        • 「今日 」(=2022-07-03)のログを開き、やり残している「task_B」を繰り越してくるイメージ
          • これを、こう
  • 特定タスクに紐付いたメモの書込先

    • -> タスクをtitleとしたObsidianノート
      • #todo tag付与された関心について、タスク化を行う
      • タスク化は、タスクそのものを指すノートを作成する(Obsidian記法では [[ ]]で囲うことでLink化と参照先となるノート作成が行われる)
        • before: xxxする #todo
        • after: [[xxx]] #todo
          • xxx リンクを選択すると、「xxx」ノートが作成されている
          • 以降はこの「xxx」ノートにタスクに関するメモを書いていけばよい
      • Link化されたノート(=[[ ]]による参照)を、上述のDaily note上で「現在の関心」として関連付けるなどして扱う
  • スクショをはじめとしたメディアファイルの添付ができる

    • -> built-inのファイル添付機能
  • 作業開始~中断までの作業の全体像/プロットがわかるようなアウトラインを可視化できる

    • -> built-inのアウトライン可視化機能
      • Core pluginでアウトライン表示機能がサポートされている
      • activateすると、headingレベルでのアウトラインを把握できる
        • イメージ
  • UMLを書いてそれをプレビューできること

Obsidianのよさ

タスク管理として成立する一方で、“Obsidian自体のよさ"が相まって個人的最適解となっている点についての補足。大きく以下2点について。

  • ナレッジ構築ツールとして、タスク管理との併用が可能
  • 圧倒的操作性

タスク遂行とナレッジ蓄積をシームレスに行う

  • タスク管理していく上でみえてきた課題を、Obsidian機能をつかうことで一定解決できることがわかった
  • 一方で、このツールの最大の特徴は、スケーラブルなナレッジ構築にある(公式が「第二の脳」や「ノートのIDE」と謳うように)
  • タスク管理ツールと技術メモをとるためのツールを別々にしていると、作業の最中で得られた知見を整理したくなった場合、ツール間の移動が生じてコンテキストスイッチのオーバヘッドや「(階層上の)どこに何を書くか」といった認知負荷がかかりがち
  • Obsidianでは、タスク管理とナレッジ整理/蓄積がシームレスにできる
    • Obsidianは知識をネットワークで構築するコンセプトでつくられているので、リンク化を行えば済む
      • タスク作業途中で、たとえば「xxx」という概念について「xxxにおけるyyy」についての知識を整理しておきたい欲求が発生した場合
      • タスクのノートから「xxxにおけるyyy」リンクを派生させてやれば、(プラス派生先で関心の中心対象である「xxx」へのリンクを貼る)
      • タスクA - 「xxxにおけるyyy」- xxxというネットワークが構築される
      • すると、「xxx」->「xxxにおけるyyy」なる(xxxを起点にyyyという特性を補足するといった)ナレッジあるいは「いつどのようなコンテキストでそれが発見されたか」(ie. 「xxxにおけるyyy」 -> 「タスクA」)を辿れる構造が自ずと出来上がる
      • それは、「どのようにナレッジを整理/位置づけるか」についての認知負荷や整理のコストがかからないので、うれしい
  • イメージ

圧倒的操作性

  • 「Local-first」とあるだけに、レスポンスが速い。速さは思考を妨げない。速さは正義。
  • なにが速いのか
    • ノート内のカーソル移動/テキスト編集
      • vim-modeが本家機能として組み込まれている
        • vim keybindでの基本操作はもちろん、マーク(localのみ)やテキストオブジェクトやレジスタもドットコマンドもマクロもつかえる。個人的には必要十分。完成度が高い。(ノートアプリの類で本家がvim keybindサポートしてるのみたことないし、きっと中の人らはvim操作できないと死ぬvimmerが過半数占めているチームなんだろうと勝手に想像してる)
          • XcodeはObsidianの爪の垢を煎じてry
        • 欲を言うなら、
          • relative numberでの行番号表示
          • globalマークでノート間移動
          • などができたらより最高だったが、全然十分
    • スクショの添付が一瞬
      • ローカルで動くのでネットワーク介したuploadが走らない
      • 作業過程のログを残す上で、スクショを多用する身からすると、スクショ添付の圧倒的速さは正義でしかない
    • リンク化/リンク参照が一瞬
      • Hotkey割当ができるので「いまリンク化したいもの」の入力や、「既存のリンク参照」のサジェストからの選択が高速に行える
    • ノート間の移動が一瞬
      • これもHotkey割当が充実
      • キー操作のみでリンク先への移動然り、ノート間のprev/next移動然り、先述したDaily noteの昨日<->今日ノート移動然り、いわゆる「Open Recent」も瞬時に行える(Webベースのアプリだとそうはいかない。ショートカットキーなんてないし、ページ間移動もどうしても数百msecの遅延が伴いがち。すべてSPAで完結しているものとかあるんだろうか..)
  • 以上みてきたように、完成度高いvim-modeとHotkeyカスタマイズが充実していてほぼマウス/トラックパッド不要で操作を完結できる

まとめ

Obsidianつかうとタスク管理とナレッジ管理を圧倒的操作性の下で完結できてうれしい