個人で短期間で開発するプログラムは、ソースコードもある程度秩序を保つことが出来ます。まあ、プログラマの技量にもよるんですが、それは一旦横においておいて。
一方、複数人のチームである程度の期間に渡って開発していると、どうしてもソースコードがカオスになってきてしまいます。多少は仕方がないですが、年月が積み重なってカオスレベルが高くなってくると、どんどん修正の難易度も上がっていってしまいますので、なんとかしたいところではあります。
もちろんそのための方法はいろいろあるわけでして、まず思いつくのがコーディング規約と静的解析ツール。これでコーディングスタイルをある程度統一することができますので、人によって書き方が全然違うというようなことは回避できます。ただ、この方法で回避できるのって文章でいうところの校正に相当するところだと思うんですよ。誤字脱字など、文章自体の誤りを見つけてただすことは出来るけれど、文章全体が秩序を保っているかまでは正せない。もちろん校正も大事な作業ではあるんですが。
文章でいうところの校閲に相当するチェック方法もあります。校正よりももうちょっと全体を俯瞰的に見るというか、文章ではなく文脈をみるというか。コードレビューであったりとか、ペアプログラミングとかですね。ただ、これらの方法も所詮は今回の修正範囲をチェックできるだけなんですね。ソースコード全体としての秩序を保つような修正になっているかどうかを保証は出来ない。DRYであるかどうかも、一つの修正自体はDRYになっていても、実は隣の人が行ってる修正でも同じようなモジュールを作っていて、両方をマージした結果システム全体としてはDRYでなくなってしまうってのは、実はよくあります。同じような処理をするユーティリティモジュールがシステム全体ではあちこちに散らばっていたり、ユーティリティモジュールがあることを知らずにべた書きされてるところが残っていたり。
というところで思いついたのが、コードディレクターというアイデアなんです。実際に思いついたのはずっと昔のことなんですけどね。当時私はCG制作プロダクションで働いていました。職種はプログラマなんでCG制作自体は行わないのですが、すぐ近くで同僚がバリバリCG制作してますので、その様子を垣間見ることができました。そこで気が付いたのが、ディレクターという職種の事。CGに限らず映像制作全般におけることですが、ディレクターは最終的には一人だけ存在します。大きな現場ではパートごとにディレクターが立つこともありますけどね。でもその作品全体ではやはり最終的には一人です。そしてその作品においては全てのカットにおいて、ディレクターが了承したものだけが含まれます。これまた実際の現場は理想通りに運ばないのでぐだぐだになることもあるんですが、原則としては全て一人のディレクターがチェックしてるんですね。たった一人のディレクターによって統制されることによって、多数のスタッフが関わっている映像作品が一貫性を保てるようになっている。
これと同じようなことがプログラム開発でも出来ないかなと思うんですよ。開発自体は多数のスタッフが行うけれど、最終的にコードをシステムに取り込むかどうかは全て一人のコードディレクターがチェックを行う。一見コードレビューと似たような仕組みに見えますが、コードレビューは開発者が相互に行っていることと、レビュー範囲があくまでもその時点の改修範囲にとどまっていてシステム全体を見通せてないという違いがあります。そりゃ優れたレビュアーはシステム全体を見通したレビューを行うでしょうけれど、それを全てのレビュアーに課すことは出来ませんよね。また、レビューアーが違えばそれぞれ考え方が違うので、システム全体としての一貫性は保てなくなってしまう危惧もあります。
これはいいなと思ったんですが、実際には難しいですかね。コードディレクターがそこまでシステム全体を細部まで把握できるのかという問題と、コードレビューを一人っきりで行うことになるので、その作業ボリュームが賄いきれるのかという問題が少なくともありそうです。
(2022/3/12追記)
読み直して今更思ったんですが、コードディレクターはやっぱり無理があるかなぁと。
映像のディレクターがOK/NGを出すのって、出来上がったカットに対してだけなんですよ。そのカットの制作過程は一切気にしない。気にするディレクターも居るとは思うけど、普通はそこまで見てたらキリがないから見ないですよね。
一方、コードディレクターのみるコードってカットの制作過程に相当するかなと。全てのコードを見れるのが理想だけど、現実問題として一人のコードディレクターがコードの全てを見るのは無理だよねぇと。
ということで、このアイデアはやっぱり無理があったなということで。やらなくてよかった。