2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Githubでファイルを開く、該当行のPullRequestを開くRubyスクリプトを作った

Last updated at Posted at 2019-07-23

背景

業務で下記のようなことをしたい!、というような場面ってありませんか?

  • 今エディタで開いているファイルを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でも使用できると思います。

参考

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?