フレームワークを使う理由ってなんですか?
エンジニア歴4年目になります。
あるとき、プログラミング初学者の方から「フレームワークってそもそもなんで使う必要があるんですか?プログラミング言語勉強したんで、それで同じように開発できないんすかね?」と質問をいただきました。
カフェを新しく作る時を考える時を例に出して答えたのですが、何しろアドリブだったので後から振り返るともう少しわかりやすく説明できた気がしたので、今後同じような質問をされたときに困らないように記事として残しておこうかなと。
理由① 誰もが共通で使える間取りや設計図を持っている
実店舗のカフェをオープンすることを考えるとします。
そのときに「レジカウンターはどこに置こうか」「お客さんが座るテーブルはどこに置こうか」など考えると思いますが、おおまかなレイアウトってどこのカフェも一緒だよね(ルール)、というのがわかるとそれを元にお店の準備(開発)を行うことができますし、準備を手伝ってくれる人が増えても「ここにテーブルを配置すればいいのね」とスムーズに引き継いでお店の準備(開発)をしてくれます。
開発のルールがわかると、コードの書き方が統一されるので、保守性が高まります。新規開発者が困らないし、チーム開発がしやすくなりますね。
理由② どの店舗でも使っているような設備を新しく作る必要がない (車輪の再発明の回避)
新しくカフェを作ろうと思ったときに、「よーし、新しくカフェをオープンするから、気合い入れてコーヒーマシンを一から作ってやるぞ!」という人はなかなかいないでしょう。
カフェを作る理由には、自分の淹れたコーヒーを楽しんで欲しかったり、そのコーヒーと共に過ごす空間や時間を楽しんでほしいといったことがあると思います。
その理由を叶えるために必要な工程であれば、何も言うことはないですが、コーヒーマシンやお客さんが座る椅子やテーブルなんかはどのカフェでも基本的には使うものなので、わざわざ一から作らず、自分が気に入っているものを使った方が本来のやりたいことに注力することができます。
一から作る手間がなくなることを、プログラミングの世界では『車輪の再発明の回避』と言ったりします。フレームワークを導入することで、データベース操作機能やセッション管理なども一から作る必要がなくなります。
理由③ 「防犯・安全システム」が備わっている
-
泥棒対策
カフェを開くとき、泥棒に商品を盗まれたり、お客様の情報を抜き取られたりするのは困ります。自分で一からセキュリティ対策をするのは大変です。フレームワーク機能 カフェの例え SQLインジェクション対策 頑丈な金庫と専門の警備員。お客さん(ユーザー)がお店の注文用紙(入力フォーム)に「金庫の鍵を渡せ」と書いても、警備員(フレームワーク)が不正な要求を自動で見破り、シャットアウトしてくれます。 XSS(クロスサイトスクリプティング)対策 特殊なコーティングが施された壁。お客様が壁に悪意のある落書き(不正なコード)をしても、フレームワークが自動でそれを無害なものに変換し、他の来店客(ユーザー)に影響が出ないようにします。 -
なりすまし対策(CSRF対策)
カフェの運営では、「悪意のある第三者が、お客様になりすまして不正な注文をする」のを防ぐ必要があります。注文してないコーヒーが100杯も届くのは困りますからね。フレームワーク機能 カフェの例え CSRF(クロスサイトリクエストフォージェリ)対策 注文伝票に必ず必要な「暗証コード」。フレームワークは、お客様が注文(データ送信)をするたびに、自動で特別な暗証コード(トークン)を伝票に追加します。このコードがない注文や、コードが間違っている注文は、「なりすまし」と判断して自動的に却下します。 -
会員情報保護(認証・認可)
会員の大切な情報や、従業員のアクセス権限をしっかり管理する必要があります。フレームワーク機能 カフェの例え 認証(ログイン機能) 電子キーによる入退室管理システム。会員様がお店に来たとき、フレームワークは「この人は本当に会員本人か」を高速かつ安全にチェックし、ログイン(入室)を許可します。 認可(アクセス権限) 役職ごとのアクセスカード。アルバイトには倉庫の鍵を渡さないように、「このユーザーは管理者だから全ての設定を変更できる」「このユーザーは一般会員だから自分の情報しか見られない」といった権限の管理も簡単に設定できるようになっています。
まとめ
フレームワークは、高速かつ安全に、そして複数人で協力しながら効率的に、質の高いアプリを作るための最高の土台を提供してくれるものです。
「安心して開発に集中できる土台」を提供してくれるのが、フレームワークの機能です。
何か説明として不十分だなとか、もう少しこういう説明も欲しいみたいなのがあればコメントください!