そんな時に便利なのがGistです。
「Gistというと、単なるコードスニペットサービスでしょ?」と思われるかもしれませんが、Gistの凄いところはちょっとしたスクリプトをソース管理出来る所です。
以下、簡単なperlスクリプトをソース管理しながら完成まで仕上げる過程を例を持って示してみます。
ただし、ここで言っておきたい事が一つ。Gistを便利に使う為のツール、Gistyを入れるべきです。
GistyはGistにポストすると同時に所定の場所にgit cloneしてくれ、初期ポストからコーディング開始までをスムーズに促してくれます。
ファイル名を決める
まぁ、やりたい事が見つかっているならば、既にファイル名は決まっているでしょうね。
% vi cookpad.pl
% cat cookpad.pl
#!perl
use strict;
use warnings;
出来てなくても良いです。とりあえずpostしましょう。なお、Gistyでポストする前には、cloneするディレクトリを環境変数GISTY_DIRに設定しておきましょう。
% gisty post cookpad.pl
恥ずかしいならばprivate postでもいいでしょう。
% gisty private_post cookpad.pl
Initialized empty Git repository in /home/mattn/gisty/aea6b5797ba2b83a6dc8/.git/
Enter passphrase for key '/home/mattn/.ssh/id_rsa':
remote: Counting objects: 3, done.
remote: Total 3 (delta 0), reused 0 (delta 0)
Receiving objects: 100% (3/3), done.
% ls /home/mattn/gisty
118f0658700dce0c48df
%
このポストが成功した時点で、環境変数GISTY_DIRで設定したディレクトリに「aea6b5797ba2b83a6dc8」というディレクトリが出来ています。作ったファイルは実はもう要りません。出来たディレクトリに移動して作業を開始します。なお、先日ご紹介した「Big Sky :: SSHポートが通らなくてもgithub.comにpushする方法」に付け足して"~/.ssh/config"に
Host gist.github.com
User git
Hostname ssh.github.com
Port 443
IdentityFile /home/mattn/.ssh/id_rsa
#IdentityFile /home/mattn/.ssh/id_rsa.ppk
TCPKeepAlive yes
IdentitiesOnly yes
としておけば、SSHポートが通らなくてもGistをclone/push出来ます。コーディングする
ま、ここは人によりいろいろですね。私の場合は
#!perl
use strict;
use warnings;
use utf8;
use URI;
use Encode;
use Perl6::Say;
use Web::Scraper;
if ( $^O eq "MSWin32" ) {
binmode STDOUT, ":encoding(cp932)";
@ARGV = map { Encode::decode( "cp932", $_ ) } @ARGV;
}
my $menu = shift || '味噌汁';
my $recipes = scraper {
process 'div.recipe-text', 'recipes[]' => scraper {
process 'a.recipe-title', title => 'TEXT',
process 'a.recipe-title', url => '@href',
};
result 'recipes';
}->scrape( URI->new("http://cookpad.com/レシピ/$menu") );
say $_->{title}, "\n\t", $_->{url} for ( @{$recipes} );
こんな感じに仕上げました。その都度、何度か
# git commit -a
してcommitしています。リモートにも反映させる
# git push origin master
Enter passphrase for key '/home/mattn/.ssh/id_rsa':
Counting objects: 5, done.
Compressing objects: 100% (2/2), done.
Writing objects: 100% (3/3), 617 bytes, done.
Total 3 (delta 0), reused 0 (delta 0)
To git@gist.github.com:aea6b5797ba2b83a6dc8.git
af1ff17..24c4fd9 master -> master
private postじゃない場合なら、誰かがforkして改良してくれるかもしれませんね。Github/Gist、Gistyって便利
コーディングの時間を除くと、Gistへの登録やGitでの作業に費やした時間はほぼ十数秒しかありませんでした。個人のスクリプトをgitでソース管理してくれるGithub、そしてGistを便利にしてくれるGistyすばらしいですね。
皆さんもちょっとしたスクリプトの作成をGist/Gistyから始めてみませんか。