移転しました。

約3秒後に自動的にリダイレクトします。

GitHubでよく使っている機能まとめ

Viibarのエンジニアの id:mstssk です。

Viibarの開発部では、発表者を持ち回りにして好き勝手なことを発表しあう社内勉強会をやっています。

発表内容は本当に好き勝手でよく、初めて発表担当が回ってきたときは延々Splatoonの話をしたりしたんですが、今回は「もっとみんなGitHub使いこなそうぜ」という内容にしました。


※この記事はZennにも投稿しています。

id:mstsskGitHubを使うにあたって日常的に使っている機能などなどです。 社内勉強会のために書き出したものをちょっとだけ清書して投稿しています。

定期的に確認するページ

ページ URL
通知 https://github.com/notifications
レビュー依頼 https://github.com/pulls/review-requested
自分が担当のIssue,PR https://github.com/pulls/assigned
自分へのmention https://github.com/pulls/mentioned

ただし、仕事では特定のOrganizationだけにスコープを絞りたいので、次のようなURLをブックマークして使ってます。

https://github.com/pulls?q=is%3Aopen+user%3AViibar+assignee%3Amstssk

Pull Request の Draft 機能

PRをDraftにしておくことで作業中であることを明確にできます。 Draft機能ができる前はPRのタイトルに [WIP] と入れたりしていました。

ただし、DraftのPRでもレビュアー設定をしたら、レビュアー設定された人に通知が飛びます。 不必要にノイズを飛ばさないよう、レビューできる状態になってからレビュアーは設定しましょう。

自分をアサインする

機能というか習慣です。

https://github.com/pulls/assigned のページを活用して自分が現在携わっているものを一覧しやすくするためにも、作業中のIssueやPRには基本的にちゃんと自分をアサインするべきです。

アサインするのを忘れがちなのなら、 https://github.com/apps/auto-assign のような自動でアサインするBotを使ってもいいです。

PRをレビュー依頼を出す前にrebaseする

これも習慣やお作法の類です。 トピックブランチで作業している間にベースブランチが進んでいるとかはよくある話なので、動作確認してレビュー依頼出す直前にrebaseしておきましょう。

$ git fetch
$ git rebase origin/master topic
$ git push origin topic --force-with-lease

Permalink

GitHubリポジトリ上のファイルの特定の箇所を指し示す時、そのブランチの変更に関わらず一定になるPermalinkを使いましょう。

f:id:mstssk:20210810145724p:plain

タグの場合ならこういうURL https://github.com/mstssk/rollup-plugin-cleandir/blob/v1.0.0/index.ts#L4

Blameしながら親コミットをたどる

Blameの画面で、そのコミットが適用される前のコミットに移動するリンクがあります。 どういう経緯で変更が行われたのか参照するときに便利です。

f:id:mstssk:20210810145931p:plain

ただし、コミットログが雑にされている場合もあり、どちらかというと次のコミットからPRをたどる方法の方をよく使ったりします。

コミットが所属するPRを参照する

各コミットのページには、そのコミットが含まれているブランチやタグ、PRへのリンクがあります。 このリンクからPRを見に行く事で、どういう目的で手が加えられたか参照できます。 私が所属するプロジェクトでは、コミットログについてはあまり口を出さないが、すくなくともPRではどういう目的の実装なのか書いていたり関連するIssue Trackerへのリンクが貼られているかもレビュー時にチェックすることで、最低限は実装の由来を将来辿れるようにしている事が多いです。

f:id:mstssk:20210810150010p:plain

Organizationごとに別のメールアドレスに通知する

仕事用とプライベートとでGitHubアカウントを分けていない場合、仕事のOrganizationのリポジトリに関連する通知がプライベートのメールアドレスに届いても困ります。

GitHubは所属しているOrganization別に通知先メールアドレスを切り替える事ができます。 仕事用のメールアドレスをGitHubアカウントに追加して、会社のOrganizationだけ仕事用のメールアドレスに切り替えておきましょう。

docs.github.com

2FAはアクセストークンをパスワード代わりにするよりSSH keyで

docs.github.com

GitHub アカウントを2FAにしておくと、リポジトリにpushする時にパスワードを求められたりしてびっくりしたりしつつアクセストークンを設定したりしたものですが、今はマシン別にSSHキーを準備して済ませています。

リポジトリをcloneするときもSSH形式で行っておくとスムーズです。

トークン使う方法でも同じくらいシンプルにできるかもしれませんが、自分はSSH keyで済ませるほうがしっくりきたので。

Security Alerts

docs.github.com

依存関係の脆弱性アラートとDependabotの自動バージョンアップPR作成は有効にしておきましょう。

依存の依存の依存パッケージに脆弱性アラートが上がったときなんかは複雑すぎてDependabotがエラーになってたりしますが。

GitHubリポジトリwatch

  • 特定のissue,PRだけをwatchもできる
    • 使っているOSSの特定のバグを踏んだ時、その対応をしているissueをwatchしてpatchが公開されたらすぐ対応できるようにとか
  • カスタムwatchでリリースだけチェックするというのもあり

リポジトリ内のファイル名で検索

あれ?あそこどうなってたっけ?と思った時に手元でIDE立ち上げるより、GitHubリポジトリ上でファイル名で検索したほうが早いこともあります。

「Go to file」ボタンでもいいですが、 t でショートカット起動を覚えておくと楽です。

他のショートカットなどはこちら。

docs.github.com

Schedules reminders

https://github.com/settings/reminders/

SlackとGitHubを連携させておくと、チームのチャンネルに通知したりもできますが、個人用にスケジュールを決めたリマインダーも設定できます。

id:mstssk の場合は、毎日特定の時間にチームのチャンネルにレビュー待ちなどの通知がくるのとは別に、レビュー依頼が出されたらリアルタイムで通知してくれるようにもしています。

参考: dev.classmethod.jp

PRのレビュー時の便利機能

☑️ Viewed

レビュー対象のファイルが多い場合に特に使います。 ☑するとそのファイルが折りたたまれてくれるので、他のファイルの確認に集中できます。

Hide whitespace changes

空白のdiffを無視して表示してくれます。 インデントが変わってるだけなど、不必要なdiffを無視してレビューできます。 昔から隠し機能としてURLに ?w=1 を付けるとwhitespaceのignoreができたのですが、あるタイミングでちゃんと機能としてUIに搭載されました。

github.blog

Suggested changes

レビューで具体例を挙げてこう直すといいよ、と伝える場合に使える機能です。 ちょっとしたtypoの指摘などにも使えます。 レビュイーはそのまま取り込むことも出来ます。 あくまでPRとして出されたdiffの中でしか使えないので、周辺のコードも含んだ大きめの変更指摘なんかには使えません。

docs.github.com


GitHub外の機能

Octotree https://www.octotree.io/

現在開いているリポジトリ・ブランチの内容をツリー表示してくれます。 特定のファイルを見たいわけでなく、上からたどって探したいときなんかに重宝します。