応用、diffからreptファイルを作る

reptファイルをもっと簡単に作ろう

reptファイルを手で書いても構わないのですが、もっと簡単に作る方法があります。rept4diffを使うことです。

rept4diffは、reptをインストールすると標準で付属しています。これはunified diff形式のファイルからreptファイルを生成するためのツールです。この説明だけでは、何故そんなツールが必要なのかピンとこないかもしれません。

その意味を理解するために、何故diffからreptファイルを作れると便利なのか?ということから説明します。

reptで表現したいものは、過去に手で書いたコードの繰り返し

整頓すれば、コードジェネレータにしたい対象とは

  1. 過去に書いた自分のコードから
  2. 特殊部分を取り除いたもの

です。

ある特定のコード片を一定回数繰り返した時、人は何らかのパターンを認識し、自動化出来そうだ、と感じる訳です。過去の繰り返しを再現するのであれば、思い出しながら書き直すよりも実際に書いたものから特殊パターンを外した方が簡単だし正確です。

バージョン管理システムは過去に書いたコードの全ての差分を管理している

少し話を変えて、SubversionやCVS、Git等のバージョン管理システムのことを考えて見ましょう。

バージョン管理システムは過去に書いたコードの全てのバージョンを保持しています、しかし観点を変えると、過去に書いた全てのコード差分を保持しているのです!つまり、あの時に書いたコードセット(どのファイルを新規に足し、どのファイルに挿入したか)を好きなタイミングで取り出すことが出来ます。ほとんどのバージョン管理システムでは、あるバージョンとバージョンの間の差分をdiff形式で取得することが可能なはずです。

さて、材料は一通り揃いました。バージョン管理システム、diffファイル、rept4diffを組み合わせましょう。

まとめ

  1. 自身のソースコードをバージョン管理システムで管理する
  2. 特定の繰り返しパターンを見つけたら・・・
  3. そのパターンを記述したリビジョン間のdiffを取得する
  4. rept4diffを使ってdiffをreptファイルに変換
  5. 機械的に変換されたreptファイルを修正する、不要な部分を削除したり、挿入マーカーを調整したり
  6. reptファイルをコミット!