背景
業務で下記のようなことをしたい!、というような場面ってありませんか?
- 今エディタで開いているファイルをGithub上で開きたい
- 今エディタで見ている行を変更したPullRequest(以下PR)を確認したい
- PRを確認しないと、なぜそういう変更になったのか等の背景が分からないですよね
- PRが分かれば、だいたい元issueにもたどり着けますよね
VSCodeだと簡単にGithubに飛べますよね。
しかし、私は普段Emacsを使用しているのです。
Emacsでも同じようなことがしたいと思い、ネットの情報を参考にさせていただきながらスクリプトを作りました。
本当はEmacsLispで作ろうと思ったのですが、妥協して Rubyで実装しちゃいました。
以下その紹介です。
ソース
使い方
READMEに書きましたが改めて説明を。
Githubでファイルを開く
$ ruby open_file_on_gh.rb <file_path> <line_number>
open_file_on_gh.rb
- 第一引数: Githubで開きたいファイルのパス
- 第二引数: 行番号
これで、Githubでファイルが開けます。
GithubでPRを開く
$ ruby open_pr_on_gh.rb <file_path> <line_number>
open_file_on_gh.rb
- 第一引数: 対象のファイルパス
- 第二引数: 行番号
これで、対象ファイルの該当行を変更した直近のPRが開けます。
Emacs側の設定
上記のスクリプトを任意の場所に置いて、それを呼ぶだけです。
私の場合、Git系はhydraで M-g
に設定してあるので、
M-g o
でファイルをGithubで開く、
M-g P
でPRを開く、
というようにしています。
(defun open-file-on-github ()
(interactive)
(shell-command (concat
"ruby ~/projects/gh_operation/open_file_on_gh.rb "
buffer-file-name
" "
(number-to-string (line-number-at-pos)))))
(defun open-pr-on-github ()
(interactive)
(shell-command (concat
"ruby ~/projects/gh_operation/open_pr_on_gh.rb "
buffer-file-name
" "
(number-to-string (line-number-at-pos)))))
コードの大まかな内容
open_file_on_gh.rb
- 対象ファイルがあるディレクトリを取得し、そのディレクトリに移動する
- そこで
git remote get-url origin
コマンドを実行し、Githubのアカウント名、リポジトリ名を取得する - 対象ファイルのrootディレクトリ(Railsでいうと
Rails.root
)を取得し、pathを作成する - 作成したパスを
hub
コマンドで叩く!
open_pr_on_gh.rb
- 対象ファイルがあるディレクトリを取得し、そのディレクトリに移動する
- そこで
git remote get-url origin
コマンドを実行し、Githubのアカウント名、リポジトリ名を取得する -
git blame
コマンドを駆使し、コミットハッシュを取得する -
git log
コマンドとコミットハッシュを駆使し、PRの番号を取得する - Githubアカウント名、リポジトリ名、PR番号を元にURLを作成
- そのURLを
hub
コマンドで叩く!
注意点
-
Ruby
がインストールされていることが必須 -
hub
コマンドがインストールされていることが必須 - 行番号の指定によっては開かない。。
-
https
プロトコルだと動かない
ナドナド
あとがき
時間あるときに、git blame
で何をしているのか等、コードの詳細の追記をしたいと思います。
ちなみに、このスクリプトを呼ぶだけでなので、Vimでも使用できると思います。
参考