最近2年間フレームワークを使わない現場で仕事をしています。
来月から現場が変わるので、フレームワークに関して簡単に振り返っておこうと思います。
特定フレームワークの使い方などに触れるものではなく、フレームワークってどういうもんだっけ?
という浅い内容になります。
フレームワークとは
さて、勉強の始まりは概念を理解すること。
ググってみると先生がいっぱい出てきますが、読んでみると大体
「システムにおいて汎用的に必要な機能群を提供するもの」
みたいな感じだと思います。
そもそも「フレームワークとは?」を求める人にはあまりイメージがピンと来ないのでは。。。
大雑把ではありますが、例えるとしたらQiitaも似てるようなものではと思いました。
Qiitaも記事を簡単に書くために必要な機能を提供してくれますからね。
タイトルはここに書いて、タグはここに、本文はここにマークダウンで書いてね!みたいな。
システムを作るにも必ず必要な色んな機能があって、
「このパッケージを使って説明通りに作れば簡単にシステムが出来上がり~!」
みたいな物がフレームワークです。
メリット
一般的に言われるメリット&デメリットに対して、個人的な考えを書いてみました。
- システムを簡単に作れる
提供される様々な機能を使うことで、少ないソースで簡単にシステムが作れます。
フレームワークを使わない今の現場で初めて感じたのは、ソース量がとても多いということでした。
当然それは開発コストの向上に繋がります。
- ソースがわかりやすい
ソースの統一性が取れて保守性が上がります。
今の現場は作った人によってソースのスタイルや利用ライブラリ、システムの構成などが全部バラバラで、ソースが読み辛かった思いがあります。
また改修する際にも色々と気を使うところが多くなる印象がありました。
- バグが少ない
既に作られている機能を使うのでバグが減ります。
プログラマが機能を一から全て作っていると人的ミスや考慮漏れは必ず起こるものです。
フレームワークを使うことでテストのコストも減らせますし、よりバグの少ないシステムを作ることができます。
今の現場はテストにかなり工数をかけてガッツリ試験する傾向があります。
(フレームワークを使わないからだけとは言えないでしょうが)
デメリット
- プログラマの実力が高まらない
フレームワークを使ってると「よく分かってないけどなんとなく動いた」的なことがよくあります。
そのためシステムは簡単に作れるものの、ちゃんとした理解は不足しがちです。
逆にフレームワークを使わないと難易度は上がりますが力量は身に付くと思います。
今の現場で働きながら一番良かったと思う所でもあります。
- フレームワークの脆弱性に引きずられる
数年前の話ですが、JAVAのフレームワークであるApache Strutsで脆弱性が発覚した話をよく聞きました。
そのためStrutsからSpringに切り替える案件も見た覚えがあります。
脆弱性診断でも、お前らこのフレームワーク使ってるか!みたいな指摘を目にすることが多いです。
- 学習コストがかかる
フレームワークを学ぶための教材が書かれるようなものですので、当然学習コストがかかります。
JAVAで良く使われるSpringは学習コストが高いとよく言われています。
知り合いの方もSpringの案件で、仕事よりSpringを勉強することがしんどかったと言っていました。
まとめ
フレームワークに関して簡単に調べながら振り返ってみました。
使う、使わないは色んな検証を経て決めるものでしょう。
個人的にはまだ経験や知識が浅い時期はフレームワークを使わずプログラミングの実力を磨くのが望ましいと思います。
どのぐらいスキルが身についてからフレームワークを積極的に使って生産性を高めるべきかと。
まー自分がやりたい仕事だけやる訳にはいきませんが。。。
次は使ってみたいと思っているSpring(JAVA)とReact(Javascript)に関して調べてみようと思います。