gistを便利に使うためのコマンドラインツール「gist」


githubのgistって便利ですよねー。ソースコード単位で変更管理が出来る。
サンプルなどを載せるのには最適ですね。
ただ、毎回ブラウザでアクセスして、テキストエリアに貼り付けてって面倒臭いですねー。それを解消するためのツールが「gist」

    【インストール方法】
    自分はMacでbrewを使っているので
    % brew install gist

以下のようにやるとちゃちゃっとgistにアップできます。gistのmanページに記載されていますー!!

    % gist < file.txt
    % echo secret | gist --private
    % echo "puts :hi" | gist -t rb
    % gist script.py
    % gist -
    この場合、ユーザの設定もしていないのであれば Anonymous としてアップされる

githubのアカウントの設定方法とアカウント情報をgitconfigに直で書くのではなく、includeを使って別ファイルを用いた処理について書きます!!
ちょっとハマった部分もありメモ代わりに


gistコマンドにgithubのアカウント設定

事前にgithubのアカウントは所持していることが前提となります。githubのアカウントを設定することで設定したアカウントでgistに投稿することができます。
単純に $HOME/.gitconfig に以下の内容を入れればOK

    % vi ~/.gitconfig
    [github]
    user     = USERNAME
    password = PASSWORD

ただ私の場合、設定ファイルはdotfilesとしてgithubで管理しています。gitconfigもgithub上に上げているので生パスワードを.gitconfigに書くのには抵抗が。。。

そこで、 Include ですよねーー。ユーザ名とパスワードは別ファイルにしてincludeさせる。別ファイルはgitignoreに設定してリポジトリへの更新対象外にする。ということです。
設定方法はこれまた単純に、.gitconfigに[Include]ディレクティブを追加するだけです。

    【gitconfigでインクルードする設定】
    % vi ~/.gitconfig
    [include]
    path = ~/dotfiles/.gitconfig.local

更に.gitconifg.localに [github]ディレクティブを設定します。

    【インクルードするファイルの設定】
    % vi ~/.gitconfig.local
    [github]
    user     = USERNAME
    password = PASSWORD

gistにアップして試してみる

いざ、やってみましょう。ちゃんとアカウントに紐付いてアップできるかなー

    % echo "Hello World" | gist -o

あれーー??Anonymousになってる。。。???

Includeの設定が効いてないのか??
ということで調べてみよう。。。


gistコマンドのコードを見てみる

gistはRubyのスクリプトで書かれているので何となく分かるだろうということで調査してみる!!!
brewでインストールしたので、「/usr/local/bin/gist」というファイルが実行ファイルになる。

    % vi /usr/local/bin/gist
    …略
    def config(key)
      env_key = ENV[key.upcase.gsub(/\./, '_')]
      return env_key if env_key and not env_key.strip.empty?
      str_to_bool `git config --global #{key}`.strip
    end
    …略

なるほどなー「git config –global」で情報を取得しているんだなーというところで確認してみる。

    % git config --global -l
    include.path=~/dotfiles/.gitconfig.local
    user.name=yusabana
    user.email=EMAIL
    color.ui=auto
    alias.st=status
    …略
    % git config -l
    include.path=~/dotfiles/.gitconfig.local
    github.user=********
    github.password=*******
    user.name=yusabana
    user.email=EMAIL
    color.ui=auto
    alias.st=status
    …略

上記2つの出力を見比べてみると「–global」の場合、「github.user」, 「github.password」の2つの設定includeのファイルの中身が展開されていない?!!!!これが原因じゃないか??
更に調べてみると、「–includes」 というオプションがあるではないか

    % git config --global --includes -l
    include.path=~/dotfiles/.gitconfig.local
    github.user=********
    github.password=*******
    user.name=yusabana
    user.email=EMAIL
    color.ui=auto
    alias.st=status
    …略

ちゃんとgithub.user, github.passwordが展開されていますねー
ということで、gistの実行ファイルを書き換えてみました。

    % vi /usr/local/bin/gist
    …略
    def config(key)
      env_key = ENV[key.upcase.gsub(/\./, '_')]
      return env_key if env_key and not env_key.strip.empty?
      str_to_bool `git config --global --includes #{key}`.strip
    end
    …略

これで修正は完了!!


もう一度gistを使って試してみる

今度こそ、、ちゃんとアカウントに紐付いてアップできるかなー

    % echo "Hello World" | gist -o

良し!!!いけました!!!

何とかコード修正も普通にgitコマンドを使っているところだったから問題なくいけましたねー!!
ちょっとgistコマンドのgithubのpull request 見ると同様の事を上げている方がいたので、自分もコメント入れておきました。

https://github.com/defunkt/gist/pull/113

ただ、これ見ると5ヶ月以上も更新してくれていないので、更新されるのを待つのもあれなので、スクリプトを修正しておこう。
また、これらを調べているうちに、「gisty」ってコマンドもあることを知った。これのほうが変更管理も出来るようで便利そう。gistコマンドは初回アップロードのみしか出来ないので。。。

今度はgistyを使ってみます!:)

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です