Slide 1

Slide 1 text

Vim/NeovimでGitHubを使う by ゴリラ

Slide 2

Slide 2 text

自己紹介 ● ゴリラ ● Vimが好きになる本の著者 ● 趣味 ○ OSS作る ○ 漫画/アニメ/音楽/カラオケ ● Vimで生活したい病 ● 仕事ではPM、気持ちはPG

Slide 3

Slide 3 text

今回のテーマ Vim上でGitHubを操作するgh.vimを作った話

Slide 4

Slide 4 text

gh.vimの機能一覧 ● issueの一覧、編集、作成、Open/Close、ブラウザで開く ● issueコメントの一覧、編集、作成、ブラウザで開く ● PR一覧、差分表示、ブラウザで開く ● プロジェクトの一覧、カード移動、ブラウザで開く ● GitHub Actionsの結果とログ閲覧、ブラウザで開く ● ファイルツリー、ファイル閲覧、ブラウザで開く ● リポジトリ一覧、README閲覧、ブラウザで開く ● Gist一覧、ファイル閲覧

Slide 5

Slide 5 text

● Vim/Neovim対応 Vim: 8.2 ~ Neovim: 0.5.0 ~ ● バッファのみ提供 例)特定のリポジトリのCloseされたissue一覧をみたいとき :e gh://{owner}/{repo}/issues?state=closed ● 導入が簡単 curl のみ使用している gh.vimの特徴

Slide 6

Slide 6 text

issue list

Slide 7

Slide 7 text

issue list(プレビューあり) プレビュー

Slide 8

Slide 8 text

issue listの項目 issue number issue state issue author issue title

Slide 9

Slide 9 text

issue edit :w でバッファの内 容で更新する translate.vimを 使うと翻訳しながら issueを読める

Slide 10

Slide 10 text

issue create テンプレートがあると選択可能 Enterでテンプレートを展開 issueのタイトルを入力 :w でバッファの内容で issueを作成

Slide 11

Slide 11 text

issue comment list :w でバッファの内容で コメント更新 コメント一覧

Slide 12

Slide 12 text

PR list PRの差分 PR 一覧

Slide 13

Slide 13 text

issue listの項目 PR number PR state PR author PR title

Slide 14

Slide 14 text

Project list Project一覧 Project カード一覧 カラム間の カード移動が可能

Slide 15

Slide 15 text

GitHub Actions GitHub Actions Jobs Job log Vimだけで GitHub Actions の結果を確認

Slide 16

Slide 16 text

Repository file tree Repository file tree file contents

Slide 17

Slide 17 text

Gist list Gist file preview Gist list

Slide 18

Slide 18 text

Gist edit 開き方を選択 :w でバッファ内容 で更新

Slide 19

Slide 19 text

● BufReadCmd を使って gh://* というバッファが開かれたら適宜に処理を行う 仕組み

Slide 20

Slide 20 text

● API通信は vatal.vim と vital-Whisky の Promise を使って非同期で処理 ● curlを使って、コマンドを組み立てていく 仕組み

Slide 21

Slide 21 text

● 一部のAPIはGraphQLを使っている 将来的にクエリー系は全般GraphQLに移行予定 仕組み

Slide 22

Slide 22 text

● 詳細はこちらの記事をどうぞ https://qiita.com/gorilla0513/items/480d454ca74868eb07bd 仕組み

Slide 23

Slide 23 text

● キャッシュ機構がないので、データ通信量が多い 例)issue 編集バッファでは開くたびに通信している ● データ取得系はほぼRESTを使っているので、不要なデータが多い 例)PR 一覧では number/state/author/title しか使っていないが、他にもいろいろ なデータが返ってくる ● テストがないので、諸々ツライ 例)デグレがしょっちゅう発生する ● エラーが握りつぶされることがある ● 開発の人手不足 例)実装したい機能が多いが、コアで実装やっているのは自分だけ 課題

Slide 24

Slide 24 text

● 一緒に開発してくれる人募集中 ちょっと試しにやってみたい人はissueを適当にピックアップしてOK ● 直近はv1.0.0リリースに向けて せっせと作っている ● リリース後にテストを書く (流石にきつくなってきた) ● 認知度を上げる (宣伝方法検討中) 今後の展望 issue一覧