Symfonyの使い方を徹底解説!インストールの手順やバージョン確認方法は?導入のメリットやLaravelとの違いも比較
PHPフレームワークとして利用されるSymfony。
Laravelと比較されることも多いSymfonyですがどのような導入のメリットがあるのでしょうか。
今回はSymfonyの使い方や作業環境を整えるまでの道筋をご紹介していきます。
基本的なインストールとセットアップの手順からSymfonyで作業するためのバージョン確認方法、そしてLaravelとの違いも確認しながらSymfonyの全体像をみていきましょう。
先に読むと良い公式ドキュメント
Symfonyの公式ドキュメントは大きく分けて5つに分類されます。
- Book(ドキュメント)
- Cookbook(クイックブック)
- Best Practices(ベストプラクティス)
- Components(コンポーネント)
- Reference(リファレンス)
「Book(ドキュメント)」と「Best Practices(ベストプラクティス)」を読んでおくとスムーズに流れがつかめます。
まずはこの概要に沿って手順を確認していきましょう。
Book
基礎知識
- SymfonyとHTTPの基礎
- SymfonyとフラットPHP
インストール&セットアップ&ページ作成
- Symfonyの使い方「インストールとセットアップ」
- Symfonyで最初のページを作成
最初に上記の2項目を説明していきます。
Symfonyの使い方「インストールとセットアップ」
インストールの手順
- 「7.2.5以降のPHP」
- 「PHPの拡張機能」(Ctype、iconv、JSON、PCRE、Session、SimpleXML、Tokenizer)
- 「Composer」(Symfonyのローカル開発用)
- 「Symfony」
まずは上記の4項目をインストールします。
次にコンソールターミナルを開き「symfony」のアプリケーションを作成しますがこのとき2パターンから作成を選ぶことが可能です。
- symfony new my_project_name –full
- symfony new my_project_name
「容量が大きい完全版」と「軽量版」の2パターンが選べ「 –full」と記載されている方を選択すると「Symfonyの通常の必要な完全版パッケージ」がインストールするできます。
Symfonyをインストールしない方法
次にインストールなしでSymfonyを活用できる方法を解説します。
自分のPC環境や用途、タイミングに応じてベストな方法を選択しましょう。
- composer create-project symfony/website-skeleton my_project_name
- composer create-project symfony/skeleton my_project_name
「Composer」を用いることで「インストールできない」や「したくない」方でもSymfonyのアプリケーションを作成できます。
いずれか一つを選択すれば新しい「Symfony」の準備が完了です。
Symfonyの実行方法
本番の開発環境で作業をしてしまうと開発時のバグや修正処理などを行う際にコードや間違いなどでプログラムが正しく動かなくなり、新たに作り直す必要が出てきてしまいます。
その場合、効率的な開発や思い切った変更や修正ができなくなるため「ローカルWebサーバー」での作業がおすすめです。
このローカルツールは複数あるPHPアプリケーションで動作するので不自由なく快適に開発が行なえます。
cd my-project/
symfony server:start
上記のコードを入力することでローカルWebサーバーが起動します。
正常に機能している場合は「http://localhost:8000/」の表示で確認できるでしょう。
新たに「Symfonyプロジェクト&その他」のセットアップ方法
Symfonyプロジェクト&Gitのセットアップ方法について確認していきましょう。
Symfonyプロジェクト以外にも複数の開発者が作成するコードでも作動します。
この場合「Git」を例にしていきましょう。
【コマンド例】
cd projects/
git clone …
cd my-project/
composer install
上記のコマンド以外にも「.envファイル」で「Configuring Environment Variables in .env Files」の環境変数を構成のコードを書き、データベールなどの固有タスクでの実行が必要です。
初めてSymfonyアプリケーションを起動した際に次のコマンドを入力すると作業効率を上げてくれる場合があります。
php bin/console about
バージョン確認方法
【symfony3系でのコマンド実行で調べる方法】
php bin/console –version
【symfony2系でのコマンド実行で調べる方法】
php app/console –version
【symfony1系でのコマンド実行で調べる方法】
symfony -V
Symfonyで上記をルートディレクトリに入力することで確認することができます。
また「Symfony3」は「2系」からのアップグレードが可能で「symfony1系」と「symfony2、3系」とでは全く別物です。
アップグレードでは後方互換性の一部が切り捨てになることを覚えておきましょう。
Symfonyで最初のページを作成前に知っておくべきこと
ページ作成でよく使われる言語
最初のページを作成する前にページ作成でよく使われる言語をご紹介します。
「config/」⇒「ルート&サービス&パッケージ構成」
【使用頻度が高いもの】
「src/」⇒「PHPの全格納場所」
「templates/」⇒「Twigテンプレート全格納場所」
【重要性が低いファイル格納場所】
「bin/」⇒「bin/console」
【自動的に作成&保存される格納場所】
「var/」=「例 『var/cache/』(キャッシュファイル)『var/log/』(ログ)」
【ライブラリ】
「vendor/」=「ベンダー(サードパーティ)」
【プロジェクトのドキュメントルート】
「public/」=「ここに公開用のファイルを格納」
ページの作成ではじめに知っておくこと
【ページ作成(2段プロセス)】
「ルートの作成」⇒「/aboutページへのURL(例:)」=「コントローラーを指す」
「コントローラーの作成」⇒「ページ作成に必要なPHP関数」
上記の内容を把握してからページ作成を行ないましょう。
ページの作成
例として「/lucky/number」といわれる「入力するページを生成」していきます。
下記の手順で行っていきましょう。
「クラス(Controller)」⇒「メソッド(controller)」を作成します。
【関連付けが必要】
「/lucky/number」=「ユーザーが参照」⇒「メソッド実行(/lucky/number)」
# config/routes.yaml
# the “app_lucky_number” route name is not important yet
app_lucky_number:
path: /lucky/number
controller: App\Controller\LuckyController::number
【完了】
Symfony Webサーバーを活用している人は以下にアクセスして試してください。
「http:// localhost:8000 / lucky / number」
詳しくはこちら(Chapter 2)
「Cookbook」&「Best Practices」
「Cookbook」には応用的な活用方法が多く記載されています。
特にコンポーネントの組み合わせ解説がメインです。
「Best Practices」はSymfonyを活用していく中で必要なルール集で「プロジェクト」「構成」「ビジネス理論」「コントローラー」「テンプレート」「フォーカム」「国際化」「セキュリティ」「Webアセット」「テスト」などの全体の決まりや構成を把握できます。
Symfony開発を行っていく上で全体的に必要な情報を集約されているため一度すべて目を通しておくといいでしょう。
「Components」&「Reference」
「Components」は「Book」よりもより深いコンポーネント情報を記載しています。
必要に応じて読むのがおすすめです。
「Reference」には「構成オプション」「カーネルの構造」「フォーム検証」「Twig拡張」「組み込み」などが記載されています。
こちらも必要に応じてみていくといいでしょう。
Laravelとの違いとは
次にLaravelとSymfonyの違いについて紹介します。
Active Recordはデータベースからのデータ抽出するアプローチですが「ドメイン駆動設計(DDD)」にあたってLaravelとSymfonyを比べるとSymfonyのほうが向いているとえるでしょう。
ドメイン駆動設計では実装方法の指定がなく、指定がある方法としてドメイン層を指定しています。
ドメイン駆動設計を複数のフレームワークの指定がないと判断して実装できると思う方も多いですが実際は下記のようにORMの種類によって異なっているのです。
【フレームワーク】
「Laravel」⇒「ORM」⇒「Eloquent」
「Symfony」⇒「ORM」⇒「Doctrine」
つまりORMが「Eloquent」と「Doctrine」に分かれており、異なっていることがわかります。
「Eloquent」の方は設定の必要がありません。
比較的簡単ですが「アクセス修飾子」が使えないという特徴があります。
Laravelはモデルに「invariant」の実装ができずドメイン駆動設計には不適任なフレームワークといえるでしょう。
データベースの「モデル属性」の「マッピング」&「テーブル」の「カラム」の設定が必要となります。
Laravelはもちろん使い勝手の良いフレームワークですがドメイン駆動設計の観点から絡みてみるとSymfonyの方が優れているのです。
SymfonyとLaravelを考察
両者のフレームワークは優れた機能の拡張性を保有しています。
お互いのフレームワークの大まかな特徴はSymfonyは大規模型(感触)なのに対してLaravelは小規模型(感触)です。
Symfonyでの構造はプログラムする際にしっかり感じた構造になっており、Laravelはライトでとっつきやすいプログラムングといえます。
これは体感的な問題で大規模でも小規模であっても最終的にはどちらのフレームワークが使いたいかどうか、自らの肌にあっているかどうかを考えるといいでしょう。
Laravelはシンプル構造に特化しているイメージで、Symfonyはしっかり構造に特化しているイメージになりますが、これは設定ファイルでも特徴が異なります。
【ルーティングの定義】
- Symfony 「yaml」「アノテーション」 (PHPでも記述できるが冗長)
- Laravel 「PHP(冗長ではない)」 (グローバルネットスペース&スタティクスクラス)
Symfonyは設定ファイルに最適で「yaml」「アノテーション」を使用するのに対して「Laravel」はPHPでのフレームワークを推進しています。
SymfonyとLaravelのメリット・デメリット
Laravel導入のメリット
PHP開発で必要な機能を集約しているのがLaravelやSymfonyのフレームワークですが、Laravelは「Web職人のためのPHPフレームワーク」と謳われています。
英語表記では「The PHP Framework For Web Artisans」となっているのです。
LaravelはSymfonyに比べて近年使用する開発者が増加している理由として「You Tube」のライブラリと連動可能な機能やPHPフレームワークの初心者にも分かりやすく工夫している点があげられるでしょう。
日本語のライブラリも豊富なため、非常に受け入れやすいフレームワークといえます。
Symfony導入のメリット
Symfonyは大規模なウェブサービスで用いられることが多いPHPフレームワークです。
安定してウェブサービスを作れるため異なったOSの対応にも快適に作動する構造になっているのが特徴で、大人数でのウェブ開発では一歩先に出ているのがSymfonyとなっています。
習得には時間を費やしますが習得した技術やノウハウは安定的に次に生かせる構造に仕上がっているため個人開発よりも企業向けにおすすめできるのがSymfonyといえるでしょう。
企業での業務委託や案件やフリーランス活動であっても資金力がある外注は企業が多いので、個人で大きな単発案件やプロジェクトで稼ぐ人にはSymfonyをおすすめします。
企業向けの大規模開発に水準を向けているため、これからも大掛かりな企業が参入してくるでしょう。
そのため利益アップを見込めるのもSymfonyの強みです。
実際、企業ではLaravelで開発していて、様々な対応面を考えてSymfonyに切り替える企業も多くなってきました。
企業案件もこれから増加傾向にあります。
Symfonyは安定的に稼いでいけるフリーランスの強い味方ともいえるでしょう。
Laravel導入のデメリット
Laravelのデメリットは簡単で分かりやすく初心者が入りやすい反面、高度な対応ができずあくまでもPHPよりのフレームワークだという点です。
小規模な個人開発では優秀ですが「企業向けだと対応できない部分」もあります。
あくまでもPHPを基盤としているため一部の企業にとっては不向きな一面も持ち合わせているのです。
Symfony導入のデメリット
Symfonyは開発人口はLaravelに比べると少数にとどまり初心者開発者には少し難しい点がデメリットです。
日本語のマニュアルも少ない傾向にあります。
Symfonyのデメリット解消対策
これから開発人口はIT業界の発展とともに増加し、それに合わせて確実にSymfonyの需要は増え続けます。
現代でも大手企業にはSymfonyを導入する企業が好んで使用される傾向が増加しているため企業からの業務委託や企業案件の募集提示は増え続け、ジャンルとしては安定して高評価のPHPフレームワークになるといえるでしょう。
また初心者が入りにくい点については基礎知識を常に収集して更新していく事が必要となります。
ここでいう基本知識とはプログラミング言語の「単語」と「どんなふうに使われているのか」の組み合わせを常に勉強していくことが求められるでしょう。
統括
SymfonyとLaravelをメリット・デメリットもご紹介してきました。
PHPフレームワークの開発ではしっかりと情報を吸収してから作業していくことをおすすめします。
初めに情報収集が十分でないと整理がつかなくなってしまうため注意しましょう。