githubのURLを貼るときに気をつけていること

結論から先にいうと、みんなgithubへの URL のリンク貼るときに、masterのbranchへのリンク*1貼ってることがほとんどだけど、それって微妙にあとから不便になるから、特定のtreeかtagへの参照を貼りませんか?っていう話


いまの一文で意味わかる人は以下の文章読む必要ありません。以下詳細な説明


githubでのそれぞれのプロジェクトのトップページは、デフォルトだとmasterのbranchを表示します。ちなみにこれは設定から変えられます( tag は無理っぽい? )


例えば、 specs2はトップページのデフォルトが1.6のbranchになっています

https://github.com/etorreborre/specs2

今書いたことは、プロジェクトの管理者側の話で、直接関係ないです。*2
で、ここから本題というか言いたいことですが、

githubは、左の行番号表示の部分をクリックすると、その行へのリンクになってURLにも #のあとに行番号が続くようになります。例えば、以下のような感じ

で、この行番号でのリンクがとても便利なわけですが、これをmasterへのリンクにしてしまうと、あとから見たときにソースコード変わってると、参照する場所ずれちゃいますよね?

まぁ絶対全員にやれ!とも思わないですが、結構開発が活発なプロジェクトの場合には、数日前にtwitterやblogに貼ったgithubへのリンクが、すぐに意味不明になってしまうことも結構あります(行がちょっとずれたならまだしも、ファイル名やディレクトリ構成が変更になって完全にリンク切れになる可能性もある)

なので、自分がgithubのURLをtwitterやblogに貼る場合、tagがあれば以下のように tag を選んで

tagへのリンクを貼るようにしています。

URLが

https://github.com/lift/framework/blob/2.4-M5-release/core/json/src/main/scala/net/liftweb/json/JsonAST.scala#L20

となり、こうすれば、tagが変更される(普通はそんなことほぼありえない)とか、tag自体が削除されることがない限りURLのリンクがあとから意味不明になる可能性が大幅に減ります。

もしくは、ちょうどいい tag がない場合は、commitのページからたどって、以下のようなURLで特定のtreeを直接参照するようにすることもできます。

https://github.com/lift/framework/blob/1d74b84e0db0f6ce7ddaecee12b06a11c56f202a/core/json/src/main/scala/net/liftweb/json/JsonAST.scala#L20

以上どーでもいい細かいことですが、ほとんど実践してる人を見かけないので書いて見ました。まぁめんどくさいんですが、せっかく丁寧にblogの記事書いたり、勉強会の発表のスライドにURL埋め込んでも、あとからリンク先が意味不明になるのはもったいないので、場合によっては実践するといいんじゃないかと思います(・ω・`)

あと余談として、Scala本体ってgithubにミラーされている

http://github.com/scala/scala

けれど、このblogを書いている時点ではすべてのtagがgithub上にあるわけではないので、基本的に自分がScala自体のソースコードへのリンクを貼るときは、以下の EPFL *3tracから、特定のtagへのリンクを貼るようにしています。 もうtagもgithubにあるみたいなので、epflのほうにリンク貼らないほうがよいかも。そもそもepflのほうは、もう更新されないみたいだし

http://lampsvn.epfl.ch/trac/scala/browser/scala/tags

*1:つまり最新版という意味になる

*2:デフォルトがmasterになってるので、みんなそのままmasterを参照して、masterのリンクを貼ることが多いっていうこと

*3:odersky先生がいる、Scala自体を作ってるスイスの大学