ページ

2013-02-20

gistコマンドにPull requestを送ったらマージされた。あるいは如何にしてドールアイコンをオープンソースプロジェクトに表示されることに成功したのか。



ブラウザを使わずに、コマンドラインでgistにソースを登録できるgistコマンドにPull requestを送ったらマージされました。

githubに公開されているオープンソースソフトウェアにPull request(以下、プルリク)を送ったのは初めてで、マージされたのも初めてです。

初めて記念です。


プルリクの内容は、gist登録時に、ブログなどに貼り付けて使用するJavascriptの埋め込み用コードを出力すると同時にクリップボードにコピーする為のオプション(-e or --embed)とその機能を追加したというものです。

詳しくはこちらのプルリクと記事の続きを御覧下さい(英語は合っているのかよくわかりません(;_;))。

背景


gistコマンドは以下のようにして、gistにソースコードを登録出来ます。
(filenameというファイルが在るディレクトリで)
gist filename
登録が成功すると標準出力に登録されたgistのURLが表示され、更にクリップボードにコピーされます(ソースを読んで初めて知りましたw)。

僕はブログにソースコードを載せるときはコードをgistに登録して、ブラウザで開いて埋め込み用のコードをコピーして、ブログに貼り付けるという面倒な事をしていました。


そしてある日こんなことを思いました。

「gistのURLじゃなくて、埋め込み用のコードを直接出力すれば良くね????」

作業開始

とりあえずgithubでgistコマンドのプロジェクトをforkしました(gistをforkしたわけではないですw)。


トップディレクトリに在るgistというファイルのソースコードをじっくり読んで、なにやらrakeコマンドでコードを生成していることを知る(この時初めてrakeがrubyのmakeである事を知った)。

そしてlib/gist.rbをいじればいいことが分かった。

実装すべき以下の通り。
  1. コマンドラインオプション(-e or --embed)の追加
  2. 埋め込みコードの生成
  3. 標準出力への出力 & クリップボードにコピー

コードの行数にして10行程度の変更でした。


しかし、Rubyという言語はちょっとかじったことしか無いので、あれやこれやと調べながら10行程の修正に2時間ほど掛かりました (・・;

そして変数名や関数名など、既存のコードの流儀に合わせ、吟味しました。

実際に埋め込み用のJavaScriptコードを生成する処理が最もハマった所で、Rubyはダブルクオーテーション(")で囲った文字列の中に#{hoge}とやると文字列が展開できます。

しかし埋め込みコードの文字列に既にダブルクオーテーションが含まれているので文字列をシングルクォーテーションで囲みたいのですが、そうすると${hoge}という変数展開が出来ないのです。

あれやこれやと色々調べて以下の書き方が一番しっくり来ると思ったのでそうしました(urlは変数です)。
%Q[<script src="#{url}.js"></script>]

「そうじゃなくって、普通はこうやるもんでしょ・・・」って方法があったら教えて頂きたいです。

そんでもって、ひと通りテストしてからコミットしました。


そしてプルリクエストへ・・・


コミットしたらforkした自分のリポジトリに一旦プッシュして、本家にプルリクを送ります。

適当な英文書いて、「おねがいしまーーーーーーーーす!!!」って感じにサマーウォーズ風に申請しました。


gistコマンドには放置されているプルリクもいっぱいあったので、ちゃんとマージされるか、「そもそもそんな機能いらないよ!!」って言われないか非常にドキドキしながら眠れぬ夜を過ごしました。

しかし、明けない夜はないのです

二日後のこと・・・・

それは突然にやってきた。

ブーブーっとメールの着信音

件名:
Re: [gist] Add "Print embed code" option. (#129)

本文:
Merged #129.


(゚∀゚)キタコレ!!


最新のgistコマンドのヘルプを見ると以下のように表示されます。



-e, --embed Print javascript embed code
という行が私が追加した機能になります。

大変感慨深いです。


ちなみに最新のgistコマンドはbrew等でインストールするのでは無く、以下のコマンドでインスコできます(一行で入れます)。

curl -s https://raw.github.com/defunkt/gist/master/gist > gist && chmod 755 gist && mv gist /usr/local/bin/gist


そんでもって、filenameというファイルのあるディレクトリで以下のコマンドを叩けば、埋め込み用コードが出力されると同時にクリップボードにコピーされます!!
gist -e filename
便利!!!!


そんなこんなで初プルリクエスト & マージでした。

最後に。


ここにドールアイコンが表示されています!!
(mironalとページ内検索)

https://github.com/defunkt/gist/network/members

後ココ(contributors)にも!!!
(有名な日本人 sorahさんも!)

https://github.com/defunkt/gist/blob/master/lib/gist.rb



うぇうぇぃ

1 件のコメント: