Rabbit Slide Show

ソースコード参照URIの考察と作成したツールの紹介

2023-09-16

Description

2023-09-16に開催された[松江Ruby会議10](https://matsue.rubyist.net/matrk10/)での発表資料 --- ソースコードを参照するURIは,ブランチ名を使ったものよりもコミットIDを使ったもの(permalink)がよく,さらにはタグ名を使ったものがより望ましいと考える.本発表ではその説明と作成したツールの紹介を行う.

Text

Page: 1

ソースコード参照 URI の考察と作成し
たツールの紹介
西田雄也
2023-09-16
Powered by Rabbit 3.0.3

Page: 2

自己紹介
西田雄也 ネットワーク応用通信研究所
GitHub: https://github.com/nishidayuya
X(旧Twitter): https://twitter.com/nishidayuya
なにかツールを作るのが趣味
git-cococo: Gitの作業ディレクトリ上で実行したコマンドによる変更を
コミットメッセージに残しながらコミットするコマンド
img_to_pdf: 画像ファイルを大きく印刷するために複数ページのPDFに
するコマンド
redmine_ruby_wasm: Redmineに書いたRubyのコードを実行
dpu: 今日紹介するもの
1/33

Page: 3

では

Page: 4

想像して
ください

Page: 5

想像してください
とあるウェブサービスのクライアントプログラムの改修をして
いました.
POSTする際のデフォルトのタイムアウト時間は60秒でした.
なぜ60秒であるのか.
調べたところ,ある pull-request に辿り着きました.
4/33

Page: 6

悲劇

Page: 7

参照先の URI
が見当違い

Page: 8

なぜで
しょうか

Page: 9

なぜでしょうか
コメントが書かれた当時(2021-01-07)は合っていた
↓
対象リポジトリの開発が進んだ
当該コードの行番号が変わった
↓
コメントはそのままのため,不適切な位置になった
8/33

Page: 10

発生する場面
今回は pull-request のコメントでした
ソースコード上のコメント
X(旧Twitter)のポスト
ブログ記事
…
↓
ソースコードを参照する URI を書く全ての場面
9/33

Page: 11

そうす
ると

Page: 12

どうすれば
良かったの
か

Page: 13

どうすれば良かったのか
ブランチ名による URI
https://github.com/ruby/ruby/blob/master/lib/net/http.rb#L690
↑↑↑↑ここ
12/33

Page: 14

どうすれば良かったのか
ブランチ名による URI
https://github.com/ruby/ruby/blob/master/lib/net/http.rb#L690
↑↑↑↑ここ変える
↓
コミット ID かタグを元にした URI にする
https://github.com/ruby/ruby/blob/
4d0985a7bd8f591dff4b430e288bfd83af782e51/lib/net/
http.rb#L690
masterブランチに新しいコミットが積まれてもそのままで
OK!
13/33

Page: 15

GitHub.com
の場合

Page: 16

GitHub.comの場合
三点リーダークリック→「 Copy permalink 」クリック
y C-l C-cでコピーしても良い
コミット ID を元にした URI が得られる!
15/33

Page: 17

解決

Page: 18

でも…

Page: 19

でも…
いちいちウェブブラウザ上でソースコードを参照するのは面倒
テキストエディター上で読むことが多いため
手で URI を作るのも面倒
↓
手元のテキストエディターからサクッと URI を取得したい.
↓
18/33

Page: 20

エディター
の拡張を書
こう

Page: 21

エディターの拡張を書こう
自分が使うテキストエディター
Emacs: 普段使い
Textbringer: 軽い編集時
Vim: sudoで編集するとき
Visual Studio Code: ペアプロ・モブプロ時にLiveShare
↓
いっぱいある
20/33

Page: 22

エディターの拡張を書こう
自分が使うテキストエディター
Emacs: Emacs Lispで書く
Textbringer: Rubyで書く
Vim: Vim scriptで書く(らしい)
Visual Studio Code: TypeScriptやJavaScriptで書く
↓
URIを決定するのはRubyで書いて各拡張から呼びだそう!
21/33

Page: 23

デモ

Page: 24

dpu.gem: determine
permanent URI
gem install dpu
https://github.com/nishidayuya/dpu
タグを使った URI を生成するメソッドとコマンド
最新20タグ以内に同一内容のファイルがなかったらコミット ID を使う.
↓
ブランチ URI の悲劇は起こさない.
23/33

Page: 25

dpu.gem
なぜタグを使うか.
短い
https://github.com/ruby/ruby/blob/v3_0_0/lib/net/http.rb#L690
https://github.com/ruby/ruby/blob/
4d0985a7bd8f591dff4b430e288bfd83af782e51/lib/net/
http.rb#L690
動いているプログラムの調査をするときは,
動かしているバージョンのソースコードを調べる.
URIを見ただけでバージョンが明らか
24/33

Page: 26

dpu.gem
対応している SCM のサービス
GitHub.com
sourcehut
pull-requestいただきました
(GitLab.com)
25/33

Page: 27

dpu.gem - EmacsとTextbringer
https://github.com/nishidayuya/dpu に設定方法
Emacs
.emacsに書いて使う
Textbringer
.textbringer.rbに書いて使う
直接 dpu.gem のメソッド呼び出しをしている.
26/33

Page: 28

dpu.gem - Vim
自分が Vim script わかってない
sudoで編集するときなので作っていない
↓
どなたか作られましたらご連絡ください!
27/33

Page: 29

dpu.gem - Visual Studio Code
Marketplaceに出してます
Copy permanent URL で検索
https://marketplace.visualstudio.com/items?
itemName=nishidayuya.copy-permanent-url
2023-09-15時点のインストール数は脅威の
28/33

Page: 30

dpu.gem - Visual Studio Code
Marketplaceに出してます
Copy permanent URL で検索
https://marketplace.visualstudio.com/items?
itemName=nishidayuya.copy-permanent-url
2023-09-15時点のインストール数は脅威の
29/33

Page: 31

dpu.gem - Visual Studio Code
ruby.wasmを同梱して呼び出そうと考えた.
↓
dpu.gemのインストールをしなくても
拡張をインストールしたら使えるように
(Rubyが入っていないとしてもすぐ使える)
30/33

Page: 32

dpu.gem - Visual Studio Code
ruby.wasmを同梱して呼び出そうと考えましたが…
↓
dpu.gemは中でGitのコマンドを実行する.
https://github.com/ruby/ruby/blob/
a1dc1a3de9683daf5a543d6f618e17aabfcb8708/wasm/
README.md#current-limitation より
Spawning a new process is not supported. e.g. Kernel.spawn and
Kernel.system
ruby.wasmの下にあるwasi libcをコマンド実行に対応させる
必要がありそう…→調査できてない
31/33

Page: 33

類似ソフトウェア
Emacs
git-link: https://github.com/sshaw/git-link
Vim
vim-github-link: https://github.com/knsh14/vim-github-link
Visual Studio Code
GitHub Pull Requests and Issues
vscode-copy-github-permalink
Copy GitHub URL
32/33

Page: 34

まとめ
ブランチへの URI は古くなる→やめよう
タグまたはコミット ID を使った URI を使う
ツールもあるよ!
スターはこちら→ https://github.com/nishidayuya/dpu
Powered by Rabbit 3.0.3
33/33

Other slides