第34回「フレームワークの誤解とフレームワークから学ぶこと」
更新日:
こんにちは。森川です。
なかなかしっかり書く時間がとれなかったので、しばらく書くことができなかったオブジェクト指向シリーズ第9話目を書いてみたいと思います。
前回までは、
これまでの流れ
- 1. オブジェクト指向について書いてみたい
- 2. オブジェクト指向(OO オーオー)とはなんぞや??(前編)
- 3. オブジェクト指向(OO オーオー)とはなんぞや??(後編)
- 4. 偉大な先人達に学べ。デザインパターンの重要性。
- 5. たかが文法されど文法。
- 6. 思考を変えろ!!数学的から国語的思考へ
- 7. 思考を変えろ!!さらばコメントアウト 前編
- 8. 思考を変えろ!!さらばコメントアウト 後編
今回は、「フレームワークの誤解とフレームワークから学ぶこと」というお題で書いてみたい。
システム開発の仕事をしているとよくこんなことを聞かれます。
なんのフレームワーク使っていますか??なんのフレームワークがいいですか??
私の考え
CakePHPでもRailsでもなんでもいいですよ。自分が好きなの使ってください。
私が思うフレームワークの誤解
フレームワークはいくらルール(規約)を必死に暗記しても技術力はあがりません。
今の時代、無数のフレームワークがありますが、CakePHPもRailsもあれもこれも覚えましたと言っても、当然、作業スピード、開発速度は早くはなりますが、システム開発の理解力が上がったかというとそんなことはないです。
質問です。
フレームワークを使ってセキュリティや変更、再利用性を考えたきちんとしたシステムを構築するのと、フレームワークを使わずに素の状態からきちんとしたシステムを構築するのはどっちが難しいでしょうか??
それは断然に後者だよね。前者は難しくないよ。
それはセキュリティや再利用性のことなんか知らなくてもフレームワークが勝手に補ってくれるから。
フレームワークってルールが決まっているよね、そのルールに従えば自然とまとまるようになっている。
小難しいことを知らなくてもできるのよ。
これでわかってもらえると思います。
プロのシステム屋が目指さないといけないのは、明らかに後者なのです。
フレームワークを使わなくても自分でセキュリティや再利用性や変更を考慮したシステムが組める人ってなかなかいないと思います。
私もまだまだだけど、当社もそこを目指しています。
フレームワークを使うな!!っと言ってるわけではありません
間違えないでください、フレームワークを使うな!!っと言ってるわけではないです。
うちも下請けの仕事もしているので、このフレームワークを使ってくれと指定されることはよくありますし、フレームワークありきの言語もあると思います。
実際、我々もいろいろなフレームワークを扱ってきました。
フレームワークを使うとき私はどのように考えているかというと、使い方ルールを覚えるのでなくて、フレームワークの根本にある思想や考え方を学ぼうとしています。
そうです、OOの思想でシステムを構築していくとどういうものができるかというと、フレームワークができるのですよ。
フレームワークを使えば、このブログでも題材にあげているデザインパターンは知らなくてもシステムは構築できます。
でも、フレームワークのコアの部分にはデザインパターンはたくさん使われていますよ。
つまり、フレームワークって便利な道具じゃないのです。フレームワークはOOを学習するのにとてもよい題材なのです。
フレームワークから学ぶこと
例えば、CakePHPに「save」というテーブルへ保存するメソッドがあります。
これは新規の場合はinsert、同一のデータが存在した場合はupdateしてくれるメソッドです。
「おーなんて便利なメソッドなんだ!」ではなくて、OOで設計できる人は普通にそういうメソッドを作ります。
コントローラー側にif文を使って「もし新規ならばinsertそうでないならばupdate、、、」みたいにゴネゴネ書かかないのよ。
「save」というメソッドを覚えるのではなくて、なぜ?どうやって?saveというメソッドにまとめているか考えることです。
例えば、CakePHPにHelperやComponentってあるけど、これは何のためにあるのか??Fuel PHPには、Presenter層というのがあるが何のためにあるのか??
フレームワークの規約を覚えることは大して意味はないです。
そうではなくて思想や考え方を学ぶことがとても重要で、それを学んで自分達のプログラミングに取り入れるのです。
我々はそうやって自社のオリジナルフレームワークを作って、どんどんブラッシュアップしています。いろんな仕事で学んできたものから、いいとこどりして作ってきたもので、当然これからも変化していくと思います
同業者にいろいろ聞いてみた
知り合いに聞いてみた。
大手システム会社のSEさんと話したときに、汎用的なフレームワークを使いますか?と聞いてみた。
答えは、「そんなものは使いませんよ。長年蓄積してきたものが我々のフレームワークになっています。」
また、JAVAなどフレームワークありきの言語になると、「〇〇というフレームワークを自社用に改良して使っています。」というのも聞いた。
これも教えてもらった話だけど、JAVAの世界でフレームワークが初めて出てきたとき各開発会社がどのような反応をしたかというと、「そんなものを使うとうちの技術者のレベルが下がるので使いません」という反応だったらしい。
システム会社などのホームページを見ていると「当社は独自の〇〇フレームワークで開発します」みたいな文言をみることもある。
こういうことを聞いたり見たりしていても私の考えは全然間違いではないと思います。
やっぱりオリジナルフレームワーク持ってると開発スピードが断然に速いしね。
中身わかってるからかゆいとこまで手が届くのでとてく楽。
このようなことができるようになると
このように自分でフレームワークが作れるようになると、システム開発に関しておおよそなんでもできるようになってくる。
WEBだろうがWindowsデスクトップアプリだろうが、MVCやMVVMなど若干モデルの違いやセッションの有無はあるが、そのモデルに合わせてフレームワークを作るようになる。
WordPressだってそう、HTMLコーディングは癖があり同じ人が書くとおおよそどのサイトも似たようなコーディングになる。
であればCoreのクラスを拡張して、自然と自分達のコーディング形式になるように改良しておけば、たくさんあるWordPress関数の長ったらしい引数覚える必要なし。
WordPressへの入れ込みもコピペで完成です。
当社が、ホームページ制作からWEBアプリ、スマホ、Windowsデスクトップまで幅広くできている大きな理由の一つです。