システム開発を行う時には通常「フレームワーク」というものを使って開発を行います。フレームワークはよく「骨組み」と例えられます。一つのシステムを作り上げるためには様々な処理をプログラミングによって記述しますが、どんなシステムを作るにしても毎回必ず実装するオーソドックスな処理も数多く存在します。そうした処理を「骨組み」として集結させたものがフレームワークです。
現在のシステム開発ではフレームワークに従ってコーディングを行い、「骨組み」の部分はフレームワークに任せ、そこにエンジニアが肉付けを行っていくのが現在通常行われているシステム開発のスタイルです。フレームワークは過去様々な優秀なエンジニアによって改善が繰り返されてきてますから、そこには偉大な先人たちの叡智が集結しています。フレームワークを使うことで様々な恩恵を受けることができます。
フレームワークを使うことによって得られるメリットは計り知れないので、よほど特殊な事情でもない限り、現在のシステム開発ではフレームワークを使わないという選択はほぼないと考えて良いでしょう。(WEBシステムではない、組み込み系のシステム等ではフレームワークを使わないケースもあるようです)
ところが現在でも「フレームワークは使うべきではない」と頑なに主張する人を時々見かけます。そんな人はめったにいませんが、長く開発を行っている人であれば一度くらいはそういう人を見かけたこともあるのではないでしょうか。
私の中ではシステム開発においてフレームワークを使わない選択肢など全くないので、「フレームワークを使うべきではない」と主張する人がなぜそういう主張をするのか理解できないのですが、理解できないなりになぜ彼らがそういう主張を繰り返すのか、またそうした主張を繰り返す人は少数ながらもなぜいなくならないのかを考察してみました。
※上述の通りWEB以外ではあり得る話かもしれないので、ここではWEBシステムの開発において「フレームワークを使うべきではない」と主張する人についての話だと思ってください。
実際の開発費用・期間をまとめた資料を無料で差し上げます。資料請求はこちら>>
フレームワークを使うメリット
フレームワークには先人たちの叡智が詰まっており、これを使用するメリットとしてはざっと考えただけでも例えば下記のようなものがあります。
セキュリティ上のメリット
プログラミングは適切に実装しないと簡単にセキュリティホールを生んでしまいます。過去から現在までの間に、多種多様なセキュリティ的な欠陥が発見されては、それに対する対処がされるということが繰り返されてきました。これは今後も同様でずっと繰り返されていくことでしょう。
フレームワークを利用すると、過去に明らかとなっている一般的なセキュリティ対策について多くの場合対策がされていますので、フレームワークの作法に従ってプログラミングを行えば、経験の浅いエンジニアであっても、そこまでセキュリティを深く気にしなくてもそれなりのセキュリティレベルでシステムを構築することができます。
逆にフレームワークを使わずに実装した場合、経験豊富なベテランエンジニアであっても、フレームワークを使った場合と同様のセキュリティレベルでシステムを構築することは極めて困難と言えます。十分に気をつけていたとしても、ついうっかりセキュリティホールを埋め込んでしまうことは十分に考えられます。
品質上のメリット
システム開発において「品質」とは、単にバグが少ないということだけではなく、メンテナンス性に優れていることも品質が高いシステムと言えます。システム開発では品質は重要です。
フレームワークを使わない開発とは、例えるなら何も書いていない真っ白で大きな紙に「自由に好きなものを書いてください」と言っているようなイメージです。人によって鉛筆で書く人もいるかもしれませんし、絵の具で書く人もいるかもしれません。文章を書く人もいるかもしれませんし、絵を書く人もいるかもしれません。
これに対してフレームワークを使う場合は、真っ白な紙ではなくて例えば作文用の原稿用紙を渡して何か書いてくださいと言うようなイメージです。原稿用紙だと絵の具を使って書く人はいないですし、書き方は絵ではなくて文章に限定されます。このように一定の枠組みを提供することによって、誰が書いても一定の品質を担保する役割もフレームワークにはあります。
フレームワークを使えば、プロジェクトメンバーの力量に関わらず全員が一定の枠組みに従ってプログラムのソースコードを書くようになりますので、一定の品質をキープしやすくなり、メンテナンスも行いやすくなります。
生産性のメリット
上述の通りフレームワークとは通常必ず必要となる処理を「骨組み」として提供してくれるものです。フレームワークがなければ骨組みに該当する処理も独自に実装していく必要がありますが、フレームワークを利用することでエンジニアは肉付けの部分の実装に集中することができます。フレームワークを利用しない場合と比べて生産性は大きく向上します。
またフレームワークを利用する大きなメリットの一つとしては、エンジニアの実力に関わらず一定の成果物を生産することができるという点にもあります。フレームワークが提供する骨組みに従って実装していくため、意図してよほど強引なやり方をしない限りは骨組みから外れた実装はできないため、出来上がったプログラムをメンテナンスする時にもフレームワークのルールに則って対応することができます。
よく聞くフレームワークを使うデメリット
「フレームワークを使うべきではない」と主張する人がよく言う内容についてもいくつか見てみましょう。ただしここで紹介する内容のどれをとっても、フレームワークを使わないという選択には繋がらないと私は考えてます。
パフォーマンスが低下する
フレームワークを利用することでパフォーマンスが低下することは事実です。フレームワークが提供している処理を通過しますので、その分の実行速度分はパフォーマンスが低下します。またフレームワークでは通常よりも処理時間のかかる特殊な実装方法がされている場合もあります。
しかしながら、フレームワークを利用することで発生するパフォーマンス低下はほんのわずかなものです。ページを表示させるときの表示速度が0.1秒から0.11秒になったところで、通常のシステムにおいて問題になるようなことはないでしょう。
またフレームワークを利用しないことで仮にわずかばかりの処理速度向上効果が得られたとしても、フレームワークを利用しないことで発生してしまう開発生産性低下の被害の方がはるかに深刻でしょう。そんなわずかなパフォーマンス低下を気にするのであれば、システムを乗せるサーバーのスペックをほんの少し上げてあげた方がはるかにパフォーマンス向上に寄与するでしょう。
実際の開発費用・期間をまとめた資料を無料で差し上げます。資料請求はこちら>>
フレームワークの中身がわからない
10~15年ほど前に流行ったオレオレフレームワーク(特定の企業が開発して有料で販売されるフレームワーク)であれば、フレームワークのソースコードを読むことができずに、フレームワークの中身がわからないということも実際に発生していました。これによる被害が時に甚大になることもあったことは事実です。
しかし今の時代の開発プロジェクトで使われるフレームワークのほとんどはオープンソースです。必要であればフレームワークのソースコードを読めば、スキル不足で中身を理解できないということはあったとしても、中身を見ることができずにわからないということは基本的にはないはずです。
というか技術に興味のあるエンジニアであれば、普通は一度くらい何かのフレームワークの中身のコードを読んだことくらいありますよね?
フレームワーク起因の障害がある
フレームワークは万能ではありませんから、フレームワークに起因する障害が発生することがあるのは事実です。時にはフレームワークに深刻なセキュリティホールが発見されて、それによってシステムに大きな問題が発生してしまうこともあります。
例えば今から数年前に、Struts2というフレームワークに深刻な脆弱性が発見され、このフレームワークを使用していたシステムが大きな問題となったことがありました。下記の記事はJINSのWebサイトで不正アクセスが発生してしまった時の記事です。
https://xtech.nikkei.com/it/atcl/news/17/032400930/
時にこうした大きな脆弱性が発見されて問題になることは確かにありますが、そもそもフレームワークを使わずに完全に独自実装する方が脆弱性を含んでしまう可能性ははるかに高いです。フレームワークでは過去様々な場面で発生した脆弱性の多くに既に対応されているからです。
そもそも脆弱性や障害の問題はフレームワーク独自の問題ではなく、どんなシステムを使っていても発生しうる問題です。世界中で多くの人が利用しているWindowsでも、しょっちゅうWindows Updateで脆弱性の修正が行われています。
フレームワークも開発が終了しているもの、あるいはマイナーすぎてあまり利用者がいなくてアップデートも行われていないようなものでない限りは、脆弱性が発見されたとしても通常は速やかに対策が実施されて最新バージョンが配布されるようになります。システムの保守を行わずにフレームワークを含めた各種ソフトウエアのバージョンアップを行わないことは非常に危険ですが、適切にシステムの保守を行いバージョンアップを行っておけば、リスクはかなり小さなものにできます。
オレオレフレームワーク
オレオレフレームワークについて記事に追加してほしいというご要望を受けて追加することにしましたw
オレオレフレームワークとは、ある企業が独自に開発したフレームワークのことで、10~15年くらい前まではよく見かけました。今でもその残骸を見かけることはレアケースですがあります。
オレオレフレームワークは一般に普及しているフレームワークに比べて機能が劣っており、ドキュメントについても当然書籍などはなくネットを検索しても情報が検索できるわけでもなく(愚痴は検索されるw)、開発者にとっては生産性が上がるとはとても言えるものではなく、ストレス以外の何物でもありません。
「オレオレフレームワークは使うべきではない」という主張であれば、全面的に支持します。
実際の開発費用・期間をまとめた資料を無料で差し上げます。資料請求はこちら>>
どんなフレームワークを選定するべきか
フレームワークの選定については、何か理由があってどうしても特定のものを使わなければならない理由がない限り、基本的には利用者(開発者)が多く流行っているものを選定すれば良いと思います。
なぜ流行っているフレームワークが良いかと言うと、システム開発のプロジェクトを立ち上げる時には「世の中に開発者が多いこと」はかなり重要な要素だからです。時代遅れのフレームワークや、マニアック過ぎるフレームワークを選定してしまうと、そのフレームワークの使い手となるエンジニアが少なくなるため、採用する時に困ることになります。
また世の中で多く使われているということは、そのフレームワークの開発も活発に行われているということです。必要なアップデートが速やかに行われていく可能性が高いため、発見された脆弱性に対しても速やかに対応できる可能性が高くなります。
また流行っているフレームワークというのは、当然そのフレームワークに関する書籍やウェブ上の情報も豊富になります。開発者としても学習したり何か調べたりしたい時に、あまりマイナー過ぎるフレームワークよりは、その時に流行っているフレームワークの方が仕事がしやすいのです。
ちなみに意味もわからずモダンな開発が行いたい!と叫んでいるだけのエンジニアは単に未熟である可能性が高いので無視しても差し支えないと思います。
フレームワークの学習にはコストがかかる
エンジニアが新しいフレームワークを覚える時には、当然のことながら学習コストが発生します。フレームワークは新しいものが次から次へと誕生し、流行りのものも数年単位で変わっていくことが多いため、継続的に学習することのできないエンジニアにとっては中々辛いかもしれません。
私の推察ですが「フレームワークを使うべきではない」と主張する人達の正体とは、継続的に学習することのできなかったエンジニアの成れの果てではないかと思います。
新しいフレームワークを学習することができない(学習できない)人達が、色々な大義名分を並べ立てることで自分が継続学習できない事実を隠しているだけではないかと思います。
その証拠に「フレームワークを使うべきではない」と主張する人で、フレームワークについて詳しいエンジニアというものを私は一人も見たことがありません。
きちんとフレームワークの学習をした上で「フレームワークを使うべきではない」と主張するならまだわからなくもないですが、私の観測範囲だと彼らは例外なくフレームワークについてよくわかっていない人達ばかりです。色々なフレームワークについて熟知した上で「このフレームワークは使うべきではない」なら説得力ありますが、彼らはそうではないんですよね。
フレームワークについて普通に学習している人であれば(少なくともWebシステムの場合は)「フレームワークを使うべきではない」とはならないというのが私の結論です。
異論反論お待ちしてます。