ブラウザを使わずに、コマンドラインで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をいじればいいことが分かった。
実装すべき以下の通り。
- コマンドラインオプション(-e or --embed)の追加
- 埋め込みコードの生成
- 標準出力への出力 & クリップボードにコピー
コードの行数にして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コマンドのヘルプを見ると以下のように表示されます。
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Usage: gist [options] [filename or stdin] [filename] ... | |
Filename '-' forces gist to read from stdin. | |
-p, --[no-]private Make the gist private | |
-t, --type [EXTENSION] Set syntax highlighting of the Gist by file extension | |
-d, --description DESCRIPTION Set description of the new gist | |
-o, --[no-]open Open gist in browser | |
-e, --embed Print javascript embed code | |
-m, --man Print manual | |
-v, --version Print version | |
-h, --help Display this screen |
-e, --embed Print javascript embed codeという行が私が追加した機能になります。
大変感慨深いです。
ちなみに最新のgistコマンドはbrew等でインストールするのでは無く、以下のコマンドでインスコできます(一行で入れます)。
そんなこんなで初プルリクエスト & マージでした。
ここにドールアイコンが表示されています!!
(mironalとページ内検索)
https://github.com/defunkt/gist/network/members
後ココ(contributors)にも!!!
(有名な日本人 sorahさんも!)
https://github.com/defunkt/gist/blob/master/lib/gist.rb
うぇうぇぃ
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
うぇうぇぃ
nice
返信削除bb