支援対象地域:札幌、仙台、関東、愛知、関西、広島、福岡

  • TOP
  •   
  • コラム
  •   
  • PHPのフレームワーク「Symfon

はじめに

PHPはHTMLと組み合わせて利用できることもあり、プログラミング言語の中でも特にWeb系システムの開発に相性の良い言語です。またPHPでは様々なフレームワークが開発されているため、それらを利用することで開発のスピードを上げられるようになっています。今回はPHPにおいて人気のフレームワーク「Symfony」の特徴と、もう一つの人気フレームワーク「Laravel」の違いについて紹介していきます。PHPでWeb開発を行うにあたってどのフレームワークを使おうか迷っている方はぜひ選定の基準としてご覧ください。

PHPとフレームワーク

「Symfony」の紹介の前に、簡単にPHP言語の概要とフレームワークについて紹介します。

PHPとは?

PHPは例えばメールフォームやショッピグカートといった動的なコンテンツをWebサイト内に設置する際等に使用する言語で、近年多くのホームページで利用されているCMSのWordPress自体もPHPで開発されています。WordPressを利用するに当たってデータベース「MySQL」との接続は必須となりますが、PHPはデータベースとの接続においても便利な言語と言えます。

PHP自体は1990年代中盤に開発され、2022年時点で30年近くの歴史を持つ言語です。様々なWeb系システムの相性が良く、次々とフレームワークがリリースされ、学習ツールが充実しているため初心者でも学習しやすい等の特徴もあって長い間多くの開発現場で利用されています。なおWebの動的コンテンツを構築する際によく利用される言語としてはJavaScriptもありますが、JavaScriptはどちらかというと閲覧者が視覚的に画面上で確認できる部分、デザインに付帯する部分をメインで構築する言語であるのに対して、PHPはサーバーサイドの内部処理を構築する言語となるため、それぞれ用途によって棲み分けされた状態で、長い間Web系システムの開発における重要な役割を担っています。

フレームワークの役割とは?

フレームワークはプログラミング言語である機能を開発するために利用する雛形です。フレームワークを利用することでプログラマーは全くの白紙状態からプログラミングしていく必要がなくなり、場合によっては雛形をほんの数行編集するだけで一つのプログラムを完成させることも可能です。フレームワークはPHPだけでなくRubyやPython、C言語、Java等多くの言語でそれぞれに用意されています。なお言語にはラリブラリというものもありますが、ライブラリは一部機能を実現するためのプログラムが複数集まったものです。そのため基本的には、フレームワークという大枠の中にライブラリが含まれていると考えていただいて問題ありません。

フレームワークのメリットとしては、開発を効率的に進めることはもちろん、コーディング内容が統一できるというメリットもあります。システムをずっと一人のエンジニアで担当するのであれば問題ありませんが、企業で開発している多くの場合は担当者が変わることも珍しくないため、別のエンジニアへの引き継ぎが発生します。そのため引き継ぎ後にメンテナンスや改修が必要となった際には、前任者のコーディング内容を読解したうえで作業を行うこととなります。この時にコードに統一性があればプログラマーによるクセ等を最小限に止めることができ、誰でも簡単にコードを解読できて結果として作業効率が上がります。またフレームワークを利用することでバグやコードの誤りも防ぐことができます

「Symfony(シンフォニー)」の特徴とメリット

Symfonyは「Mojavi」というPHPの別のフレームワークをベースとし、別のRubyという言語の有名なフレームワーク「Ruby on Rails」の影響を多分に受けているフレームワークで、2007年に最初のバージョンがリリースされました。「Mojavi」がMVC(モデル・ビュー・コントローラ)に沿ったフレームワークということもあり、Symfonyの構造にもMVCが取り入れられています

なおMVCとはアプリケーションの設計を整理しながら組み立てていくための概念で、Model、View、Controllerに分かれます。Modelはデータベースとの接続、操作に関する部分の機能実装に該当し、ViewはHTMLにデーターベースのデータを反映させて生成する機能が該当します。そしてControllerではユーザーからのリクエストに対してModel、Viewで処理を行い、結果をユーザーに返します。

このMVCの構造を持つSymfonyはアプリケーションを最適化することに成功しており、さらにバンドル(AppBundle)と呼ばれるプログラムのパターンを自動化して再利用できるようにする仕組みが備わっていることでシステム開発の効率アップが期待できるフレームワークとなっています。またWebシステムで利用されることの多いMySQL、PostgreSQL、Oracle等のデータベースと互換性があることも大きな特徴です。なおSymfonyは、PHP5.0以上のバージョンでのみ動作が可能となることにご注意ください。

以上見る限りでは、Webシステムを開発する際は常にSymfonyを使えば良いのではと思われるかもしれませんが、何でもかんでも導入してしまうと却って効率化から遠ざかってしまう可能性があります。SymfonyがMVCモデルやオブジェクト指向の構造を採用していることがその理由であり、無理にこれらの構造を取り入れることで本来シンプルであったシステムを複雑にしてしまい、余計に時間をかけてしまうということにもなりかねません。そのため数ページの簡単なWebサイトを作成するのであれば別のフレームワークを利用、あるいはフレームワークを使わず構築する方が早く、大規模で複雑な開発を行う場合にSymfonyを利用することで、コードの軽量化、可読性が実現でき、高いパフォーマンスを発揮できるようになります。

Symfonyのその他特徴

その他覚えておくと便利なSymfonyの特徴は4つあります。一つは前述もしているオブジェクト指向という点です。SymfonyにはC++やJava言語に見られるオブジェクト指向の仕組みが取り入れられているので、使いこなすには概要を理解しておく必要があります。

2つ目は「ORM(Object-Relational Mapping)」です。ORMの役割を端的に表すと、データベースの言語を利用することなくオブジェクト指向のメソッド等のみを使ってデータベースへの操作が行える仕組みとなります。

3つ目はRAD(Rapid Application Development)で、こちらはシステムの開発手法におけるいわゆる「スパイラル開発」となります。スパイラル開発はシステムの設計、開発、試作品を構築したうえでテストを繰り返すことによって開発期間を縮めつつ、品質を上げる手法です。

4つ目はYAML(YAML Ain’t Markup Language)です。YAMLはXMLのようなマークアップ言語に近いですが、シーケンス、マッピング、スカラといった要素を組み合わせてデータの集合体を作成することで、XMLもわかりやすい構造にすることが可能です。

以上、Symfonyを利用する際はMVCの他にオブジェクト指向、ORM、RAD、YAMLというキーワードを意識しておくと使いこなせるまでの近道となることでしょう。

「Laravel」との相違点について

LaravelもPHPで人気のフレームワークですが、Symfonyとどう違うのかについて紹介しておきます。実はLaravelはSymfonyをベースとしたフレームワークのため多くの共通点を持っていて、LaravelもMVCの構造となってる点、ORMの仕組みが利用できるという点では同様です。またフレームワークのコミュニティも活発で情報が豊富にあり、安全で信頼性の高いシステムを構築できます。

相違点として、SymfonyではTwigというテンプレートシステムが利用され、データベースのアクセスにはDoctrineが利用されているのに対して、Laravelはブレードテンプレートシステムが利用され、データベースのアクセスにはEloquentが使われている等の技術的な点が挙げられます。その他にもデバックツールに関してSymfonyの方が高度、Symfonyのバンドルが3000程度なのに対してLaravelのパッケージが9000以上と充実していること等が挙げられますが、これと言って決定的な違いはなく、プログラマーにとってどちらが使いやすいか、あるいは使い慣れているかで利用を選択して特に問題はないと言えるでしょう。もし選択に迷うことがあれば、SymfonyはPHPの不足している点を補うフレームワーク、LaravelはPHPの長所を有効に利用しているフレームワークということを頭に入れたうえで選定することをおすすめします。

まとめ

「Symfony」はフレームワークの持つ各種メリットをフルに活用でき、「Laravel」と共に人気のあるPHPのWebアプリケーションフレームワークの一つで、引き続きバージョンアップも行われています。PHPのデメリットと言われる保守性や安定性を補ったうえで、大規模システムの開発に向いた作りとなっているので、今回の記事を参考に「Symfony」の詳細な特徴を把握しつつ今後Web系システムの開発現場で「Symfony」を有効活用してみてはいかがでしょうか。