- 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の機能は頻繁に利用するため、高速できなければいけない
- Issueの追加
- Issueの一覧
- Issueの表示
どのように解決するか
Electronベースなウェブページ + UserScriptなクライアントを作る
- クライアント上でバックグランドで表示を定期的に更新する
- 開いた瞬間に常に最新の状態にする
- CRの同期、最新状態の反映、Instant Startup(~1s)
- 特定のURLスキームで特定の処理(Issueの作成を開くなど)を行えるようにする
- 開いた時にある種のコマンドを管理する
- Issueの完了
- Issueの進行状態の変更
- Issueの削除
- Issueの整理
- たんにGitHubのウェブページを扱う
- 外部Issueの取り込み
- UserScriptでCross Reference Issueを1 clickで作る
- TODOの一覧 = Issueの一覧
- TODOのタグ = ラベル
- TODOの進捗 = Project Boardで管理
- Issueは自動的にBoardに追加できる
- プロジェクトボードの自動化について
- TODOに書けるもの
- Markdown、画像、一部添付ファイル
- TODOの追加 = Issueの追加
- モバイル対応
- ブラウザ
- GitHub Mobile App
- リポジトリ外の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と区別できなくて事後る可能性がある
- クライアントアプリを通してカバーするか、なにかしらの対応が必要