リポジトリ:https://github.com/skanehira/gh.vim 原本:https://docs.google.com/presentation/d/1wfa7C6fRBpAawnnklcIbnDgC4ztyKoWzyo7TPwR0Rfc/edit?usp=sharing
Vim/NeovimでGitHubを使うby ゴリラ
View Slide
自己紹介● ゴリラ● Vimが好きになる本の著者● 趣味○ OSS作る○ 漫画/アニメ/音楽/カラオケ● Vimで生活したい病● 仕事ではPM、気持ちはPG
今回のテーマVim上でGitHubを操作するgh.vimを作った話
gh.vimの機能一覧● issueの一覧、編集、作成、Open/Close、ブラウザで開く● issueコメントの一覧、編集、作成、ブラウザで開く● PR一覧、差分表示、ブラウザで開く● プロジェクトの一覧、カード移動、ブラウザで開く● GitHub Actionsの結果とログ閲覧、ブラウザで開く● ファイルツリー、ファイル閲覧、ブラウザで開く● リポジトリ一覧、README閲覧、ブラウザで開く● Gist一覧、ファイル閲覧
● Vim/Neovim対応Vim: 8.2 ~Neovim: 0.5.0 ~● バッファのみ提供例)特定のリポジトリのCloseされたissue一覧をみたいとき:e gh://{owner}/{repo}/issues?state=closed● 導入が簡単curl のみ使用しているgh.vimの特徴
issue list
issue list(プレビューあり)プレビュー
issue listの項目issue numberissue stateissue authorissue title
issue edit:w でバッファの内容で更新するtranslate.vimを使うと翻訳しながらissueを読める
issue createテンプレートがあると選択可能Enterでテンプレートを展開issueのタイトルを入力 :w でバッファの内容でissueを作成
issue comment list:w でバッファの内容でコメント更新コメント一覧
PR listPRの差分PR 一覧
issue listの項目PR numberPR statePR authorPR title
Project listProject一覧Project カード一覧カラム間のカード移動が可能
GitHub ActionsGitHub Actions JobsJob logVimだけでGitHub Actionsの結果を確認
Repository file treeRepository file treefile contents
Gist listGist file previewGist list
Gist edit開き方を選択:w でバッファ内容で更新
● BufReadCmd を使って gh://* というバッファが開かれたら適宜に処理を行う仕組み
● API通信は vatal.vim と vital-Whisky の Promise を使って非同期で処理● curlを使って、コマンドを組み立てていく仕組み
● 一部のAPIはGraphQLを使っている将来的にクエリー系は全般GraphQLに移行予定仕組み
● 詳細はこちらの記事をどうぞhttps://qiita.com/gorilla0513/items/480d454ca74868eb07bd仕組み
● キャッシュ機構がないので、データ通信量が多い例)issue 編集バッファでは開くたびに通信している● データ取得系はほぼRESTを使っているので、不要なデータが多い例)PR 一覧では number/state/author/title しか使っていないが、他にもいろいろなデータが返ってくる● テストがないので、諸々ツライ例)デグレがしょっちゅう発生する● エラーが握りつぶされることがある● 開発の人手不足例)実装したい機能が多いが、コアで実装やっているのは自分だけ課題
● 一緒に開発してくれる人募集中ちょっと試しにやってみたい人はissueを適当にピックアップしてOK● 直近はv1.0.0リリースに向けてせっせと作っている● リリース後にテストを書く(流石にきつくなってきた)● 認知度を上げる(宣伝方法検討中)今後の展望issue一覧