商用と内製とOSSと自作のメリット、デメリット

使用するソフトウェアを選択するときに、商用製品(例:Oracle)を使うのか、自分じゃない人が作った内製ソフト(例:SIerの内製フレームワーク、Web系の独自サーバー管理ツール)を使うのか、世に出回っているOSSソフト(例:Hadoop, Spring, Presto)を使うのか、それとも自分で自作するかという主に四択になります。

この辺はどのレイヤーのソフトなのかでも話が違ってきて、ビジネスロジックがからむものだったら当然自作なわけです。ビジネスロジックがからまないある程度汎用性のあるものが商用製品なりOSSソフトなりの形で出てくる訳でそれをどう取捨選択するかという話です。

商用製品のメリットは機能の多さだと思います。あとはサポートかな。デメリットは有償であることと、マニュアルが膨大にある割にはどこに何が書いてあるか分かりにくかったり、なにか操作してエラーが出た時のエラーメッセージが「NullPointerExceptionが出ました。システム管理者に連絡してください。」みたいなダイアログで詳細なログがどこにあるのか分からなかったり、、、あとサポートに問い合わせても、、、みたいなことがあることです。まあこの辺は製品によります。機能が少ない製品だったらそういうことは少ないと思いますが。あと商用製品だと柔軟性が無いことが多いかもしれません。

ちなみに規模の大きなソフトの場合は自分で使うんじゃなくて、そのベンダー関連の技術者が客先常駐して作業する場合もあって、製品だけじゃなくて人込みだったりします。BIツールのレポーティング系だとそういうのを見聞きします。お金で解決するパターンです。これはこれで社内に技術者が少ない場合は有力な選択肢になります。ベンダーロックインになりますが。

商用製品を自分で使うケースだと、エンジニアにとってその製品に詳しくなることがキャリア上プラスなのか微妙なケースもあります。OracleぐらいメジャーだったらOracleエンジニアです。キリ!とか言えるけど、これがもっとマイナーなRDBMS(例はあげませんw)だったらちと微妙かなと。まあそんなこといったらTeradataとかNetezzaといったDWH製品でもRedshiftやBigQueryといったクラウド系サービスでもちょっとニッチという意味で微妙になっちゃうかもしれませんが、あまりにもマイナーだったりするとモチベーション上がりませんよね。

内製の場合は社内特有の事情が考慮されていることがあってそれが便利なことがある一方、開発者がもういなくなってる場合は負の遺産化するし、いてもコミュニケーション取りづらいような場合は使うのに躊躇します。

OSSのメリットは情報が多いことだと思います。もちろん商用製品でもOracleぐらいメジャーなら情報多いですが、OSSのほうが試しやすいこともあって情報も豊富でググラビリティも高いです。もちろんものによりますが。あとHadoopの世界でも顕著ですがエコシステムの発展が大きいですね。ごく一般的にいって商用や内製だと情報量が少ないし、そもそもググれないことが多いし、エコシステムの発展は望めないですよね。

OSSだと開発者が燃え尽きて開発が終了しちゃう危険性があるけど、商用製品でも撤退する可能性はありますよね。OSSだったらソース公開されている分まだ対応のしようがあるのかなと。ただ規模の大きなソフトウェアだったら自分でパッチあてるとかはだいぶハードルが高いので他のソフトウェアに乗り換えるしかない気はします。

自作の場合はコストがネックですね。自作の場合でも汎用性があれば、もしくは汎用性のある部分を切り出してOSSとして公開するのはありだと思います。ビジネスロジックは設定とかクエリにしかないってこともあると思いますし。

なんかOSS万歳なエントリになってしまいましたが、ユースケースにあうものが商用製品にしかないケースもありますし、その辺しょうがないですね。あと使う人によって意見が分かれることはもちろんあります。僕も商用製品で良いものがあれば使いたいかな。たぶん。