カルボナーラ街道

計測と観察

個人のタスク管理をGitHub Projectに移行し始めた

要約

  • 個人のタスク管理にGitHub Projectを導入した
  • ターミナルからタスク(issue)を追加できるがプロジェクトの紐付けがまだ

モチベーション

note.route06.co.jp

先日上記の記事を見てめっちゃ良かったので個人(= 仕事以外)のタスク管理を見直したい。個人のタスク管理は数年ごとにツールを変えているので方針を決めて統一したい。また、最近なるべくターミナルで物事を済ませたい機運が高まっているのでAPI連携などを加味して個人のタスク管理を改善していく。

利用ツール変遷

個人のタスク管理のツールはその時所属している組織が利用しているものを個人でも使っていた。

  • Slack
  • Asana
  • Notion

Slackは一日ごとに何かしら投稿してそこにスレッドとして当日やるタスクを紐付けていた。そもそもSlackはコミュニケーションツールなのでタスク管理には向いていない。タスクのラベル付けはカスタム絵文字とかでどうにかなりそうだがコストがかかる。また、当日はやらないけど将来的にやりたいタスクを積むのが難しい。

AsanaはScrapboxとあわせて使っていた。Asanaでタスク管理を行い、ログやメモをScrapboxのページに書いてそれらを紐付けて使っていた。この組み合わせは使いやすい。ボードでカンバン風に利用していた。

Notionはタスク管理とメモやログを全て含めて使っていた。パワフルなツール。使いやすい。データベースの見た目をボードにしてカンバン風に利用していた。

現状の課題

今まで利用したツールはすべてブラウザかアプリ上で利用していた。タスクの確認や追加はブラウザかアプリを経由する必要がある。ターミナルで実行できるようにしたい!

利用ツールを決める

この時点でGitHubのProjectを使うことに決めていた。

  • GraphQL APIがある
  • 利用ツールを増やしたくない

GraphQLは個人的に勉強しているという理由。上記を満たすのがGitHubで、issueに紐付けられるProjectが便利そう、という決断に至った。

GitHub Project

docs.github.com

GitHub Project

早速タスクを追加してみた。フィルタリングができる。一つのリポジトリにissueを登録して、ラベルごとでフィルタリングをかければカンバン風に使うことができる。

ターミナルからタスクの追加

タスク(issue)の追加をターミナルで実行できるようにしたい。

> hub issue create -m "風呂掃除"
https://github.com/{USER}/{REPOSITORY}/issues/{NUMBER}

ターミナルからのissueの追加はhub*1を使ったことがあるが、Projectへの紐付けが現時点で出来なさそうだった。

ghを使ってissue追加

GitHubコマンドラインツールに gh というものがある。hub と比べて新しい試みらしい。

github.com

…ここでとてもハマった。この記事を書いている時点でgh経由からprojectを関連付けたissueの登録はできない。issueがすでに存在していて、PRはオープンで存在した。

github.com

github.com

コードに埋め込まれてるクエリを直接実行したらいけるのでは?という予想でGitHub Explorer*2上で試したが、コードに埋め込まれている無印projectsからは値が空配列で返ってきた。v2のprojectsは期待したものが返ってきた。

query { 
    repository(owner: "{OWNER}", name: "{NAME}") {
        # 空で返ってくる
        projects(first: 100) {
            nodes {
                ... on Project {
                    name
                }
            }
        }

        # 返ってくる
        projectsV2(first: 100) {
            nodes {
                ... on ProjectV2 {
                    title
                }
            }
        }
    }
}

ではgh経由で直接mutationを渡して実行してみてはどうか?ということでやってみた。

> gh api graphql query='
mutation {
  createIssue(
    input:{
      repositoryId: "(事前に引っ張ってくる)",
      title: "風呂掃除",
      labelIds: ["(事前に引っ張ってくる)"]
    }
  ) {
    clientMutationId
  }
}
'

上記でissueの追加はできたが、プロジェクトの紐付けが出来なかった。projectでidを引っ張ってくると空で返ってくるし、projectV2でidを引っ張ってきてクエリ時に渡しても不正と言われて困っている。無印とV2のIDの仕様が違うのであれば無印からidが欲しいが取れない。

当面は以下でissueを追加する。projectへの紐付け方法は考える。バッチ処理させるのも勉強になりそう。

gh issue create --label Life --title 風呂掃除

おわりに

一旦GitHub Projectで個人のタスクを管理していくことにした。少しずつ日々の暮らしを良くしていきたい。

参考