Symfony4の環境構築をしてHelloWorldを表示させるまでの解説をします。
- macOSが前提ですが、Windowsも流れは同じです
- 私のphpのバージョンはphp7.4.2です
- 学習の予備知識として、PHPを学習していることが望ましいです
- オブジェクト思考については都度解説を入れていきます
Symfonyとは
SymfonyとはPHPのフレームワークです。
フレームワークで様々な機能を使用することができ、開発効率を上げることができます。
始めはPHPを使う方が簡単に思えますが、複雑な処理を実装するならフレームワークを使った方が簡単に実現できます。
フレームワークにはSymfonyの他にもLaravelやCakePHPなどがあり、Symfonyは海外シェアが高く、日本ではLaravelのシェアが高いです。
私の知っている限りでは、EC-CUBEで主に使われています。
私は業務でEC-CUBEを使用するため選択しましたが、SymfonyとLaravelを使って思うのは、基本は同じだと言うことです(LaravelもベースはSymfonyです)。
どれか一つ習得できれば他の習得も容易になります。
ただ、正直言って、日本語の情報が少ないので初学者が選択するのには不向きです。
特に縛りがないならLaravelをオススメします。
事前知識
Symfonyを学ぶにあたり、ざっくりと要点を掴みましょう。
Composer
Composerとはパッケージ管理ツールです。
Symfonyで使いたい機能を管理してくれるものです。
使いたい機能があればComposerで追加して使うことができ、自分で開発するより圧倒的に楽です。
これさえ理解していれば使えますが、もう少し知っておいて欲しいことがあります。
依存性解決とは
例えば、機能Aを使いたいとします。
ただし、機能Aを使うには、機能Bがないといけません。
機能B使うには機能Cが必要です。
機能C使うには機能Dが…..
こんなことをしてたら開発に入るまで大変ですよね(昔はやっていたと聞きました)。
この問題をComposerは自動で判断して解決してくれます。
勝手にしてくれるので特に気にしなくてもいいですが、裏ではこういったことをしてくれています。
オブジェクト思考とは
一言で表すのは難しいのですが、オブジェクト思考とはプログラムを使い回す仕組みです。
例えば、アンパンマン、カレーパンマン、食パンマンをプログラムで作るとします。
そこで、3人を全て一から作ると大変ですよね。
3者とも人間?のような見た目をしているので、先に人間の形をプログラミングしておけば、使いまわせそうな感じです。
体の色を付け加えたり、技を追加したりすればキャラクターとして使える状態のプログラムなら、後々ジャムおじさんやバタコさんのような人型キャラクターを作るときも楽に作れそうですね。
その使い回す部分をオブジェクトとして扱います。
ひとまず十分かと思いますが、本当の意味で理解するならプログラムを組むのが一番の近道です。
Symfonyを学ぶならオブジェクト思考からは逃げられません。といってもJavaなどよりは優しいのである程度で大丈夫です。
MVCモデルとは
M = モデル
V = ビュー
C = コントローラー
SymfonyはMVCモデルという3つの要素で構成されます。
モデル
データベースとやりとりする
ビュー
コントローラーで行った処理を元にページを表示する
コントローラー
計算などの処理をする
かなりざっくりですが、概要は以上になります。
概要だけ掴んでプログラムを組んだ方が効率的なので、さっそく開発環境を準備しましょう。
開発環境の準備
流れとしては、下記になります。
- phpのバージョン確認とアップデート
- composerのインストール
- Symfonyのダウンロード
- ビルトインサーバー立ち上げ
phpのバージョン確認とアップデート
まずはphpのバージョンを確認しましょう。
ターミナルを立ち上げて「php -v」と入力して実行してください。
phpのバージョンが確認できます。
今回はSymfony4.4.*を使うので、phpは7.1以降ならOKです。
それより低い場合はアップデートしましょう。
phpのバージョンを上げるのが面倒ならMAMPのインストールでも大丈夫です。
MAMPを入れることによって、複数の種類のphpが実行できます。
Composerのインストール
次にComposerをインストールします。
SymfonyはComposerでダウンロードするので必須です。
Symfonyのダウンロード
ターミナルを開いてプロジェクトを作りたい場所まで移動し、下記のコマンドを打つとプロジェクトが作成されます。
composer create-project symfony/website-skeleton:"^4.4" symfony-app
最後のsymfony-appは任意の名前でOKです。
WebServerBundleのインストール
WebServerBundleは、Symfonyアプリケーションをビルトインサーバーで手軽に動かすためのものです。
ターミナルで、作成したプロジェクト(フォルダ)のトップに移動して下記コマンドを入力するとWebServerBundleがインストールされます。
composer require server
少し本筋とはそれますが、使いたい機能があればこのようにComposerでインストールすれば使えるようになります。
作成したプロジェクト(フォルダ)の直下にあるcomposer.jsonを確認してみてください。追加した”symfony/web-server-bundle”の記述が追加されているはずです。
追加したものはここで確認できます。
ビルトインサーバー立ち上げ
WebServerBundleをインストールしたのでビルトインサーバーを立ち上げれるようになりました。
作成したプロジェクト(フォルダ)のトップにターミナルで移動し、下記のコマンドを打つと開発用のサーバーが立ち上がります。
php bin/console server:run
ターミナルに http:127.0.0.0.1:8000 と表示されるので、コピーしてブラウザに貼り付けます。
これでページが表示されたら成功です!
トップページの作成
新規ページの作成
開発環境が整ったので、さっそくトップページを作成しましょう。
※さっき開いていたページは実は404ページです
少し思い出して欲しいのですが、ページはコントローラーの処理を元に表示されます。
ビュー
コントローラーで行った処理を元にページを表示する
コントローラー
計算などの処理をする
ページ作成と言っても、まずはコントローラーを作ることから始めます。
ただし、これは手作業では作成しません(面倒なので)。
ターミナルでプロジェクトのトップ階層に移動して、下記のコマンドを入力します。
php bin/console make:controller
名前を聞かれるので、「HelloController」と入力しましょう。
下記にコントローラーとtwigファイル(後ほど説明します)が作成されます。
コントローラー : /src/Controller/HelloController
twigファイル : /template/hello/index.html.twig
仕組みはひとまず置いといて、「http://127.0.0.1:8000/hello」と入力しましょう。
Hello HelloController! …といったページが表示されます。
これで新規にページを作成することができました。
トップページの作成
ページを作成することはできましたが、まだトップページ(http://127.0.0.1:8000)は404ページのままです。
先ほど新規に作成したHelloControllerをトップページで表示されるように変更していきましょう。
urlを決定しているのは、HelloController.phpの下記になります。
/**
* @Route("/hello", name="hello")
*/
コメントのように見えますが、アノテーションといってコメントではありません。
ここの「/hello」を「/」に変更します。
これでトップページ(http://127.0.0.1:8000)にアクセスすると、ページが変わります。
もし表示されないなら、「/var/cache/」の下にある「dev」フォルダをフォルダごと削除して再度トップにアクセスしてください。
Symfonyは始めてファイルを読み込むときにコンパイルして、一度作成されたキャッシュ(ファイル)をそのまま使い続けます。
変更したのに変わらない場合はまずはキャッシュを疑うことを癖付けましょう。
キャッシュはコンソールのコマンドでも消せますが、こちらから消しても問題ないと思います(本番環境でする場合は慎重にしてください)。
ページの表示内容を変更する
トップページを表示できましたが、なんだかよくわからない内容が表示されています。
トップページに「Hello World」と表示させていきましょう。
「/template/hello/index.html.twig」の記述を全て消して、「Hello World」とだけ記述したら完成です!
トップページ(http://127.0.0.1:8000)にHello Worldが表示されたら成功です。
まとめ
簡単な表示をさせることができるようになりましたね。
あと最低限覚えなければならないこととしては下記の3つです。
- twig
- フォーム
- データベース
別記事で解説するので、よければそちらも参考にしてみてください。
また、もっと詳しく知りたいという方には下記の2冊をおすすめします。
Symfony2なので古くて進めるのも大変なのですが、それを考えても1冊目はこれがおすすめです。
と言うのも、Symfonyの歴史や、細かいテクニック、テスト手法など開発全体のことが丁寧に書かれています。
とはいえ「古くて進めれない、、」ということになると思いますので、別記事で解説します。
2冊目に選ぶならこれです。Symfony2入門は良書なのですが、2015年の書籍ためどうしても最近の流れには合わないところが出てきます。
この本でそこを補完しつつ、新しい技術も学べます。
当然Symfony2に比べるとかなり進化しているので、基本的にSymfony4の書き方の方が楽です。