Skip to content

Instantly share code, notes, and snippets.

@azu
Last active December 15, 2020 10:23
Show Gist options
  • Save azu/cd4233b3774e6afd3362401dc5520b7f to your computer and use it in GitHub Desktop.
Save azu/cd4233b3774e6afd3362401dc5520b7f to your computer and use it in GitHub Desktop.
Proposal: GitHub Issues as TODO → Implementation https://github.com/azu/missue

GitHub Issues as TODO

目的

  • GitHub Issuesを個人用のTodo管理アプリとして使う
  • GitHub Private Repositoryとして動作する設計
  • Template Repositoryとして作成して、リポジトリを作るだけで利用できるようにする
  • Cross Reference Issueの管理

作るもの

  • 該当リポジトリのGitHub Issueを扱うElectronクライアントアプリ
  • Cross Reference Issueを作成するUserScript or ブラウザ拡張
  • Cross Reference Issueの同期を行うロジック

背景

  • TODO管理はTODO管理アプリ内に閉じていることが多い
    • 外部連携などが難しい(メールからTODOを追加などが面倒)
    • GitHubはIFTTTやzapierなどすでにたくさんの連携方法がある
    • TODOアプリはすべてのことを流せる場所になってないと見なくなる
      • GitHubは十分それができる
      • メール to GitHub
      • Slack to GitHub
      • サイト to GitHub
      • GitHub to RSSなども別の箇所に流しやすい
  • すでにGitHub Issueで管理していることを重複してTODOアプリで管理したくない
    • TODOの何割かの既存のIssueに紐付いている
    • azu/my-board-for-githubはこれを解決するために作成した。
    • 欠点
      • 表示のためにGraphQLを叩くので遅い
      • すでにあるIssueのみしか管理できない
    • これを拡張して、TODOもIssueとして管理すれば、TODOアプリは必要なさそうに見えた
    • すでに、これからやりたいことは https://github.com/azu/azu/ で管理していたり分散していた

機能

機能をFast Pathとその他に分ける Fast Pathの機能は頻繁に利用するため、高速できなければいけない

Fast path(1st class)

  • Issueの追加
  • Issueの一覧
  • Issueの表示

どのように解決するか

Electronベースなウェブページ + UserScriptなクライアントを作る

  • クライアント上でバックグランドで表示を定期的に更新する
    • 開いた瞬間に常に最新の状態にする
  • CRの同期、最新状態の反映、Instant Startup(~1s)
  • 特定のURLスキームで特定の処理(Issueの作成を開くなど)を行えるようにする
    • 開いた時にある種のコマンドを管理する

Normal path(2nd class)

  • Issueの完了
  • Issueの進行状態の変更
  • Issueの削除
  • Issueの整理
    • たんにGitHubのウェブページを扱う
  • 外部Issueの取り込み
    • UserScriptでCross Reference Issueを1 clickで作る

TODOアプリとしての機能

  • TODOの一覧 = Issueの一覧
  • TODOのタグ = ラベル
  • TODOの進捗 = Project Boardで管理
  • TODOに書けるもの
    • Markdown、画像、一部添付ファイル
  • TODOの追加 = Issueの追加
  • モバイル対応
    • ブラウザ
    • GitHub Mobile App

Cross Repoitory Issueの管理

  • リポジトリ外のIssueやPRも管理したい = リンク先のIssueのステータスは自動的に同期する
  • 仕組み: Cross Repoitory Issueを作成する

User ScriptでボタンひとつでCross Reference Issueを作れるようにする

azu/my-board-for-github: Project Board to handle across all GitHub repositories!のような話

Cross References Issueの管理

  • Label: CR をつける
  • is:opened と CrossReferencedEventを取得してステータスを同期する

Cross References Issueの同期方法

  • クライアントアプリで開いた時に行う
  • GitHub ActionsでCronとして動かす
    • 24回 * 2分 * 30 日 コスト大きめ
    • lambdaとかのcronに回すとかもあり

メモ

GitHub IssueをTODOとして扱う利点

  • GitHub Actionsでのサーバサイド拡張性の高さ
  • ウェブページとして完成しているため、モバイルなどでも利便性はGitHub公式が拡充してくれる
  • GitHub Issueとして管理することで、GitHubの通知の仕組みを利用できる
    • Issueを閉じたら、通知するなどがデフォルトで備わっている
  • 既存のワークフローとの親和性
    • 新しいことを覚える必要性はない
  • Markdown、画像などの対応が存在している
  • PublicなIssue、PrivateなIssueどちらも同じように対応できる
    • リポジトリが境界になっているのがやや微妙

GitHub IssueをTODOとして扱う欠点

  • GitHub上でデータが管理されている
    • 完全なオフラインではない
    • GitHubにデータが乗る
  • Cross ReferenceのIssueを扱う仕組みがデフォルトにない
  • 既存のIssueと区別できなくて事後る可能性がある
    • クライアントアプリを通してカバーするか、なにかしらの対応が必要
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment