Webフレームワークに関する世界観です。
PHPフレームワークやJavaScriptフレームワークやJava(Webフレームワーク)も参照のこと。
自分の書いたブログ「神々とともに生きる詩人」2021/01/27より。
サーバでHTMLデータを返す際に、動的にサーバ側で処理を行うことをサーバサイドと呼ぶ。
クライアントサイドではJavaScriptを用いるが、サーバサイドではPHPやRubyといった言語を用いることが一般的。
実際は単にPHPやRubyを直接書くこともできるが、よりWebサービスの開発のために便利な機能を詰め込んだ、フレームワークというものを用いてサーバサイドの処理を記述する。
PHPではLaravel, RubyではRuby on Railsといったフレームワークが知られている。
しかしながら、クライアントサイドでJavaScriptを使いながら、サーバサイドでRailsを使うのは、言語が二種類あって非効率である。
このため、サーバサイドでもJavaScriptを使うNode.jsといった「サーバサイドJavaScript」と呼ばれる仕組みもある。
RailsやLaravelでは、MVCフレームワークと呼ばれるモデルで開発を行う。
MVCフレームワークでは、まず外部からのリクエストを処理するルーティングと呼ばれる処理があり、そのルーティングによって、MVCのCに相当するコントローラのアクションに処理が移る。
アクションでは、Mに相当するモデルによって、データベースとのやり取りを行い、Vに相当するビューによって、HTMLを動的に作成してブラウザに返す。
従来はこのMVCの処理を全てサーバ側で行っていたが、ビューの処理はクライアントサイドだけでも行えることが最近分かってきたため、Vue.jsやReactといったビューに特化したJavaScriptフレームワークで、クライアントでビューの処理を行うことも一般的になってきている。
Ruby on Railsの登場を受けて、最近のWebアプリケーションやWebサービスの開発には、「フレームワーク」と呼ばれるものを用いて行う機会が増えてきた。
Webフレームワークは各Web言語(Java, Perl, PHP, Python, Rubyなど)に存在し、「MVCモデル」と呼ばれる枠組みを使って、効率的・生産的にサービスを開発することができる。
多くのWebフレームワークでは、MVCモデルを採用している。
概念 | 説明 |
---|---|
Model |
モデル(Model)は、データベースへのデータの記録と参照。 ビューとコントローラの中のデータ操作は、モデルにおけるデータベース設計と対応付けられる。 |
View |
ビュー(View)は、HTMLのテンプレートからユーザーが操作するページ画面を動的に作成する。 PHPやERB(埋め込みRuby)などを使って、HTMLの中にコードを埋め込んでテンプレートを記述する。 |
Controller |
コントローラ(Controller)は、リクエストとイベントに応じたコントロール(処理の制御)を行う。 モデルとビューの間を仲介し、それぞれのアクションからモデルとビューに処理を配分する。 |
このようにすることで、単なるHTMLページに処理を埋め込むだけのPerl/CGIやPHPよりも、データベースとHTMLを使ったスマートで保守性の高いWebサービスを開発できる。
2023.05.12編集
MVCを用いたWebフレームワークは、基本的なもので良ければ、自前で設計・実装して作ることもできる。PHPフレームワークを参照のこと。
まず、Perl/CGIがある。Perl/CGIでは、Apacheを用いてサーバー側で処理を行う。Perlスクリプトを簡単に作ることで、掲示板やカウンターなどのWebサービスを作ることが出来た。
次に、PHPがある。PHPでは、HTMLタグの中にスクリプトを埋め込むことで、さらに簡単にプログラミングが出来た。
次にあるのは、JavaサーブレットとJSPである。プロセスをいちいち立ち上げるのではなく、ひとつのプログラムのスレッドとして管理することで、効率的にサーバーサイドプログラムが出来た。
そして、いよいよWebフレームワークの夜明けが来る。Rubyはとても少ないコードで簡単なプログラミングが出来た。
さあ、Railsが登場した。Railsの登場は革命である。全てのコードをRubyで書き、MVCと呼ばれる生産的な「フレームワーク構造」を使うことで、革命的なほど簡単にWebサービスを作ることが出来た。
Railsを模したWebフレームワークとして、CakePHPやDjangoなどが登場した。「PHPやPythonでもRuby on Railsのようなことがやりたい」という声が多く、誰もが同じようなMVCフレームワークを作った。
同時に、クライアントサイドでも革命が起こった。JavaScriptフレームワークである。JavaScriptフレームワークでは、クライアントサイドでもMVCと良く似た構造のプログラミングを可能とした。
しだいに、「RailsはRailsで難しくて複雑だ」という意見が増えた。このことから、もっと簡単で、もっと短いコードで作るフレームワークは作れないか、という声が増えた。これが、マイクロフレームワークである。
MVCなどの生産的で効率的な構造に従って開発するフレームワーク。各言語に存在する。
言語 | リンク |
---|---|
Java |
Java(サーブレット) Java(Webフレームワーク) Struts Spring Framework Java(各種言語) |
Perl |
Perl/CGI Catalyst Mojolicious |
PHP |
PHPフレームワーク CakePHP Laravel |
Python |
Pythonのツール Django |
Ruby |
Rubyのツール Ruby on Rails |
JavaScript |
Node.js Express JavaScriptフレームワーク |
2023.05.12編集
Rubyを使って、Webプログラミングを正しく効率的に行うフレームワーク。だが、「簡単すぎて技術力がつかない」と一部では批判的な意見も。
Ruby on Railsを参照のこと。
以下はRailsのセキュリティガイド。
以下は日本語に訳されたRailsのチュートリアルとガイド。
サーバーサイドのJavaScript環境。
MongoDB, Express, AngularJS, Node.jsの4つのアプリケーションを合わせて、MEANと呼ぶように提唱された。JavaScriptによるWeb環境である。
Node.js、Express、Angular、MongoDBも参照のこと。
素のHTMLを書くのではなく、簡単なインターフェースから高度な統合サイトを作ることが出来る技術。
WordPressを参照のこと。
Webフレームワークについて言えることは、雨後の筍のようにフレームワークが新しく現れては消えていく、ということです。
せっかく既存のフレームワークの開発手法を覚えても、それがいつまでも使えるという保証はなく、新しいフレームワークが登場しては、その使い方を覚え直さなければなりません。
特に、今まではRubyだったのに、それがPythonやJavaScriptを利用したさらに新しいものに変わるということは日常茶飯事です。
また、フロントエンド(クライアントサイド)およびバックエンド(サーバーサイド)の開発は、日々複雑化しています。
複雑になった結果、全貌をきちんと理解することは困難を極めます。複雑なフロントエンドとバックエンドの開発がどういうものなのか、よく分かっていない人があまりに増えました(自分もその一人です)
Perl/CGIの頃から基本は変わっていないのですが、応用は様変わりしています。もはや、CGIスクリプトが書けるというだけではプログラマとしては通用しません。
このように、Webの開発は壮絶を極めます。それでもWebをやる覚悟があるなら、サーバ運営がクラウドだろうがVPSだろうが自宅サーバだろうが、そんなものは関係ありません。そんなものは些細な問題です。フレームワークを覚えながらフロントエンドとバックエンドの開発をやるなら、ぜひ素晴らしいサービスの開発を頑張ってください。
CGIも参照のこと。
2023.05.12
Webサイトにアクセスした時に、URLに基づいてどのページを表示するかを案内する。
アクションは、コントローラで定義されるメソッドのこと。
ルーティングによって適切なコントローラとアクションが指名され、Railsはコントローラのインスタンスを作ってアクションを実行する。
Webサイトのさまざまな機能(たとえばリスト表示やフォローなど)はアクションに実装する。
RailsではHTMLにRubyコードを埋め込めるERBを使ってビューテンプレートを記述する。
パーシャルは、複数のビューテンプレートの共通する部分を分割し、自動で読み込んでくれる機能。
SQLで直接データベースを操作しなくても、Rubyからデータベースにテーブルを作成できる。
SQLコマンドを打つことなく、データベーステーブルを自動作成する。
ユーザーがWebサイトのフォームに入力した時、その入力内容のデータにあらかじめ制限をかける。
たとえば数値だけ有効、空文字列は無効など。
Webフレームワークは、簡単なものであれば自分で独自に作成することもできる。書籍「パーフェクトPHP」などを読んでほしい。