LoginSignup
7
7

More than 5 years have passed since last update.

フレームワークへの勘違い

Posted at

システム開発においては、今や切っても切り離せない程、「フレームワーク」が当たり前となっています。
そんな「フレームワーク」に関する間違いや思い違いを、筆者の視点で書いていきたいと思います。

■フレームワークって、何?

そもそも、フレームワークとは何でしょうか。
調べると、「雛形」「枠組み」などと解釈されています。
では、何の「雛形」や「枠組み」なのでしょうか。
おおよそは、「アプリケーションの雛形」とか「Webシステムの枠組み」となっていると思います。
しかし、実際は「システム(アプリケーション)を作るための本質的な枠組み」です。
「標準」とか「骨子」と言っても良いでしょう。

例えば、家を作るのに、土台や柱を組んで、家を建てていきます。その為に「『なんたら工法』で、丈夫で早く、高い品質」となります。
現在のフレームワークは、この「なんたら工法」を示しています。
しかし、筆者が言うのは、家を立てるために、ユーザーから要件を聞き、必要な強度設計や各部屋の配置、材料選定や、実際の工程の管理、出来上がった後のフォローや改築などの、一連の手順や方法をフレームワークとする、と言う事です。

この認識が違うため、フレームワークを使ったのに、生産性が上がらなかったり、品質が確保できなかったりします。

そういったことを踏まえて、書いていきたいと思います。
なお、万能なフレームワークはないと思いますが、筆者の言うフレームワークなら、「システムを開発する」という点で、広範囲にカバーできると思います。

■フレームワークの実情

現在、沢山のフレームワークは存在していますが、結局のところ、「製造」工程でしか活用できていません。
「設計」ではフレームワークに従った設計をしているように見えますが、多くの場合、それは偶然です。
実際に経験した人も多いと思うのですが、設計書を見た時に「これって、どうやって実装するの?」と、悩むことがあると思います。
なぜならば、フレームワークを意識しないで設計し、それを「フレームワーク部品(筆者は世の中のフレームワークを、この様に呼んでいます)」に当てはめようとするからです。
つまり、フレームワークの本質を理解せずに、システム開発でフレームワークを無理に使おうとしているわけです。
これだったら、昔ながらの「共通部品(ライブラリ)」と、何ら変わりません。

余談ですが、かつてどこかのSIerが「広義のフレームワーク」「狭義のフレームワーク」と話をしている事を、インターネットで読んだことがあります。
例えば、.NETは狭義のフレームワークだと。
当時は、納得したのですが、今思えば、「広義」「狭義」の表現は、不適切だと思います。
フレームワークとして考える際のレイヤーの違いだと思います。
なので、表現するなら「低水準フレームワーク」「高水準フレームワーク」です。
ただし、筆者の言うフレームワークと、本質的に違うと思います。
部品レベルのフレームワークにこだわる限り、ブラック・プロジェクトは、なくならないでしょう。

■フレームワークはどうあるべきか

冒頭でも示したとおり、「システムを開発するため」にフレームワークはあるべきだと思っています。
では、フレームワークには何が必要なのか。
もちろん、現在の数多ある「フレームワーク(部品)」が示すように、システムを構成する要素を、抽象化した部品は必要です。
それによって、プログラムする際に、部品をカスタマイズすることで、簡単に欲しい機能が作れます。
しかし、これの根本的な問題は、部品の使い方がわからない場合に、悩む必要があり、それに多大なエネルギーを必要とすることです。
多大なエネルギーを必要とする理由は、「システムを開発するために必要な、システムの一部である。」ものとしての抽象化が中途半端な事が要因です。

例えば、テレビのリモコンの使い方を悩む人は少ないと思います。
なぜなら、「電源を入れる/切る」「チャンネルを指定する」「ボリュームを変える」ことができるのが、テレビのリモコンとして最低限備わっているものであり、リモコンの形状を見て、直感的に操作できるからです。
フレームワークにも同様に、直感的に分かる事ができれば、簡単に扱うことができます。
ただし、勘違いしてはいけないのが、TVのリモコンと違って、フレームワークを扱う人は、専門家であり、その道に精通する(もしくは、精通しようとしている)人たちです。
つまり、考え方に方向性がある人達です。
そういった人達が、感覚的に(もしくは、自然に)思考して想像が付くようなところまで、抽象化していなくては行けないと思います。

VisualBasicによって、テキトーにプログラムしてもテキトーにシステムが動く様になってしまった関係で、そういったプログラマが増えてしまいました。
また、そう言ったプログラマに乗じて、設計者の責務を果たさないSEが増えてしまいました。
そんなSEばかりなので、ポリシーもなく要件定義して、上流がグダグダになってしまい、結果、下流が燃え盛るプロジェクトが多くなっています。
結局、荒れないプロジェクトも、蓋を開ければ、ユーザーに我慢をさせる事で、凌いでいる現状ではないでしょうか。

フレームワークのあるべき姿は、こういった現状に対する枠組みとなり、整然としたシステム開発ができるためのもの、であるべきだと思います。
それは、フレームワークを部品レベルで考えていては、できることではありません。

補足しますが、現存するフレームワークがダメなわけではありません。
ただ、抽象化が足りないですし、機能面やトレンドにこだわりすぎです。
よく「MVCフレームワーク」とか言いますが、それは、「なんだかよくわからないが、MVCなら、良いらしい」としか判断できないエンジニアを煽っているだけに過ぎません。
MVCなのは当たり前です。情報→判断→動作(結論)がそうであるように、アウトプットがあるものはすべて、この構成(仕組み)になります。
空気がないと人が生きていけないのと同じくらい、当たり前です。
それを、フレームワーク(と言っても、部品)の売りにしている時点で、根本的に間違っています。

■最後に

タイトルの意味をわかって頂けたでしょうか。
多分、言われるまでもなくわかっている人は多いと思います。
ただ、よくわかってない人やSIer、そういった人やSIerに変に教育されてしまった人やソフトハウスのエンジニアもまた、非常に多いと思います。
今(もしくは、過去)、携わっているプロジェクトが、なにか違うと思った人は、考え方の一つとして、参考にしていただければと思います。

7
7
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
7