こんにちは、高木です。

ここのところ、PHPでC言語やC++の前処理を行う話題が続いています。最近ちょっとややこしい話題が増えすぎた反省から、今回はやや簡単な内容にしたいと思います。ソースコードにライセンス表示を埋め込むことは多いと思いますが、手作業でやっていると何かと面倒ですし、間違いも起きやすくなります。こういうのこそ自動化してしまいましょう。

何か具体的なライセンス文言があった方が話がしやすいので、今回は下記の修正BSDライセンスを埋め込むことを考えます。

これをソースコードに埋め込むことになるのですが、2点ほど加工が必要になります。ひとつはソースコードには埋め込むにはコメントの形式にしないといけないこと、もうひとつは先頭行の<YEAR>と<OWNER>を適切な内容に変更してあげる必要があることです。

コメントにするには、最初と最後に「/*」と「*/」を出力するだけでもいいのですが、今回は1行ずつ行頭に「//」を追加することを考えます。<YEAR>は発表年なのでファイルのタイムスタンプから読み取るのは不適切で、基本的には明示的に指定すべきものです。<OWNER>は著作権者なので、これも明示的に指定すべきものです。ただし、利便性を考慮して、明示的な指定がなければ、<YEAR>には現在の年を、<OWNER>にはGitのユーザー名を埋め込むことにしましょう。

この方針で書いたPHPのコードは次のようになります。

str_replece関数を2回呼んでいて若干冗長なのですが、わかりやすいようにあえてこのようにしました。最初のstr_replace関数の呼び出しで<YEAR>と<OWNER>を置換し、2回目のstr_replace関数の呼び出しで改行文字を揃えています。その後、いったん行ごとに分解してから「// 」を行頭に付加して再結合しています。

こういう処理はPHPのようなスクリプト言語は得意ですので、どんどん活用していきたいものです。