🐕

機能は追加すればいいというものではない

2023/01/03に公開

みなさん、新機能は好きですか。ソフトウェアへの機能追加は、ユーザ目線で単純に考えると「できることが増えていくのでよい」という響きを帯びています。しかし実際は、長く使われるソフトウェアであればあるほど、新機能を追加すべきかどうかはものすごく気を使って決めるものであって、やればいいというものではないのです。この記事の目的は、新機能の追加には細心の注意が必要だとわかってもらうことです。おもな対象読者はソフトウェアを長期間メンテしたことがないかたがたです。

みなさんが使っているOSSに新機能を追加するPRを送った場合を考えてみましょう。ここで重要なのは、PRが送られてきたメンテナやコミッタといわれるコア開発者たちの立場になって考えることです。彼らの役割は、自分たちを含むユーザがそのソフトウェアを使い続けられるようにメンテし続けることです。このメンテのコストに注目すると、機能追加は基本的にコストを上げるはたらきをします。

具体的にどのようにコストが上がるのか、以下に例を示します。

  • 新機能を使う人のサポートをする必要がある
  • 追加された機能や既存機能にデグレが起きないことをアップデートのたびに確認する必要がある
  • コードパスが複雑になるので、のちに別の機能追加するときやリファクタリングするときのコストが上がる

上記のコストはPRを書いた人ではなくコア開発者にのしかかるのがポイントです。悪い言い方をすると、PRを送った人にとっては機能が入ったバージョンがリリースされることがゴールですが、コア開発者にとってははそうではありません。彼らは新機能を含んだコードをメンテし続けていく必要があるののです。このため「新機能を作ってくれてありがとう、マージしとくね」と簡単に言うわけにはいかないのです。

このような事情により、機能追加をするのは「このソフトウェアはこういうものである」に合致するもの、および、「多くのユーザが求めているもの」に絞られがちです。これをやっておかないとプロジェクトのメンテはどんどん大変になっていき、変更が難しくなったり、品質が劣化したりします。「作りたがり」の人が主導権を握って、何も考えずにどんどん新機能を追加していき、メンテ不能になって破綻したプロジェクトは枚挙にいとまがありません。

例ではOSSを挙げましたが、ソースが公開されていない企業の製品にもこの話は当てはまります。どんな開発スタイルであろうと、オープンソースであろうとなかろうと、開発責任者は細心の注意を払って、ソフトウェアを制御可能な状態に保ち続けなければならないのです。

ここまで書いたことはなかなか文書だけでは理解しづらいので、真に理解するためには何らかの形でソフトウェアを長期間メンテする立場に立つことをおすすめします。大変ですが視野が広がり、成長はできるかと思います。

Discussion