@kyanny's blog

私は天才ではありません。ただ、人より長く一つの事と付き合っていただけです - アインシュタイン

公開私のコードポケット

コードポケット、いいですね。コードポケットとはちょっと違う用途かもな、とは思いますが、僕のやり方を書いてみる。

僕もよく、数行ていどの書き捨てプログラムを書きます。何か新しいモジュールを試したいときとか、 SYNOPSIS をコピペして動かしてみるので一つ、ちょっと書き換えてみてもう一つ、アプリケーションの中でこんな風に使えるといいなーというイメージにそってさらにもう一つ、とか。

ここで困るのは、僕のネーミングセンス(いやボキャブラリーか?)が貧しいからなのか、 a.pl とか hoge.pl とか re.pl とか lwp.pl とか、いかにもありふれた名前で書き始めてしまう。書き捨てプログラムのファイル名なんていちいち考えてられないし、マトモそうな名前を思いつく間に書き終わってしまうくらい短いものだし、かといってワンライナーとか perlsh みたいなのは本当に一回書いたらそれっきり、コピペとかしづらい。

で、確かこれは typester さんか誰かのブログでよんだアイデアをもとに思いついた(というか単に真似ただけかも)のだけど、 ~/daily/YYYY-MM-DD というディレクトリを作ってそこを書き捨てプログラム用の一時作業ディレクトリにしています。

いちいち mkdir とかしてらんないので、 bash と eshell 用にこんな関数を書いておいて

;; today - 今日の日付のディレクトリに移動 なければ作成
(defun today ()
  (interactive)
  (let ((today (concat (getenv "HOME") "/" "daily" "/" (format-time-string "%Y-%m-%d" (current-time)))))
    (if (file-exists-p today)
        (cd today)
      (progn 
        (make-directory today)
        (cd today)))))
# functions
today(){
    _WORK=$HOME/daily
    _DATE=`date +%Y-%m-%d`
    _TODAY=$_WORK/$_DATE
    mkdir -p $_TODAY
    cd $_TODAY
}

$ today とだけうてば、今日の日付の綺麗なディレクトリができるのでそこで存分にありふれた名前のファイル名で何か書き始める。 C-x C-f hoge.pl とかしてすでにあるファイルを開いてしまって(しかも今から書こうと思ってたのは正規表現を試すプログラムなのに、既存のファイルにはデータベース操作のコードが書いてあるとか)、コメントアウトしたり古い内容を消したり hoge1.pl と打ち直したりする手間が省ける。

この方法には「あとで探しづらい」という大きな問題があり、実際探しづらい。。 find なり moccur-grep-find なりすればそれなりのものが見つかるかもしれないけど、オレオレライブラリ集というよりは実験場みたいな位置づけなので、いまのところだいたいこんなもんでなんとかなっています。あとで絶対何度も参照したくなるはず、と思うコードはブログに貼り付けておくか、最近だと github にあげておいたりするし。

ちなみにこれをやり始めたのは一年くらい前だったかな、ファイル数とかどのくらいあるんだろ、と思ってしらべてみたら、 *.pl な名前のファイルが 242 個、一番古い日付のディレクトリが 2008-05-10 でほぼ一年前、名前一覧はちょっと公開はできなそう(unko.pl とかが恥ずかしいわけじゃないです)、総行数は 21392 行だそうで、一ファイルごとの平均行数は 88.396694214876 らしい。でも一つだけ 13000 行のがあって(なんだろう)、他はだいたい見てみると 20 行から 30 行くらいだった。ファイル名を流し読みしてみた印象では、 hoge とか unko とか a とか、何のことやらさっぱりなのがちらほら、あとは lwp とか encode みたいな名前のがときどき、全体的にゴミっぽい感じでした。

まとめると、僕はだいたい三日のうち二日は 20 行から 30 行くらいのゴミっぽい Perl のコードを書いている。