GitHubから1ファイルだけ取得する方法

どうにかクローンできないかと調べてたけど GitHubAPI 使って curl 等から HTTP でダウンロードできた。
プログラムから GitHub リポジトリのファイルを読み込みたいときに便利。

準備

GitHub の OAuthToken が必要。
Personal access tokens のページから Generate new token して以下の権限にチェックを入れる。

  • public_repo
  • read:org ※Organization リポジトリの場合のみ必要

Generate token して表示されるトークンをコピー。

実行方法

OAuthToken を利用しているので、Public リポジトリだけでなく Private リポジトリからも取得できる。
curl コマンドを使う場合は以下の形式となる。

$ curl -H 'Authorization: token <token>' -H 'Accept: application/vnd.github.v3.raw' -L https://api.github.com/repos/<owner>/<repo>/contents/<path>

<token>, <owner>, <repo>, <path> の部分を任意の文字列に置き換える。
例えば github.com/jnst/dotfiles.bashrc をダウンロードしたいときは

$ curl -H 'Authorization: token XXXXXXXXXXXXXXXXXXXXXXXX' -H 'Accept: application/vnd.github.v3.raw' -L https://api.github.com/repos/jnst/dotfiles/contents/.bashrc

# alias
alias ll='ls -AlhF'

# prompt
PS1="\W \u\[\e[1;31m\]$\[\e[00m\] "

# history
HISTSIZE=5000
HISTFILESIZE=5000
HISTTIMEFORMAT='%Y-%m-%d %T '

また、ブランチ名を指定したいときは末尾に &ref=develop のように付与すればいい。

Rubyのmaxとmax_byの違い

使い方が異なる。
max メソッドは比較演算子 <=> の結果、つまり戻り値は -1, 0, 1 のいずれかを返す必要がある。 max_by は比較したい値を返すだけでよい。

gist.github.com

ちなみに maxmax_byEnumerable で定義されているメソッドなので Hash に対しても使えるが、上記のように配列展開が必要になって面倒くさいことになる。

Go言語:自己文書化するためのテスト名

Google 社員で Go 言語のコミッターでもある @rakyll さんの 2017年2月3日のブログ記事『自己文書化するためのテスト名』が参考になった。ちょうどテストをしっかりと書くようになってきたところだったので非常にタイムリー。

SOURCE

Naming tests to self-document by @rakyll

Licensed under a Creative Commons Attribution-ShareAlike 4.0 International License.

翻訳

Go 言語はテスト名のつけ方を強制しません。 テストはコードの保守性に大きく貢献します。 正確性のチェックだけでなく、その使い方やコードの自己文書化にも役立ちます。その上、型や関数の責務を知るための最高の情報源です。良いテスト名をつけることで内部的なドキュメントとして役立ち、結果、コードの保守性も向上することになります。

入力や出力についてを名付けるのではなく、テストしているものの役割を強調してください。

func TestTitleIllegalChar(t *testing.T) {}

こう書かずに、編集時に不正な文字をエスケープする必要があることを説明するのです。

func TestTitleEscape(t *testing.T) {}

この名前の変更により、タイトルの不正な文字がどのように処理されるかを自己文書化できました。

時には包括的なテスト名にして、大きなテーブル駆動テストを書くことがあります(訳注: こういうコード)。 テーブル駆動テストを実行するなら、それらをサブテストに変換し、個々のケースに名前を付けることができます。 go test -v を実行するとそれら名前が出力され、型や関数の仕様として機能します。