どーも!
たかぽんです!
今回はSymfonyをlocal環境でうごかせるようにしてみようと思います!
目次
Symfonyって?
SymfonyはPHPのフレームワークのひとつで、筆者はよくlaravelの記事を書いていたのですが、縁あってSymfonyも触る機会があったため、今回調べてみようと思います。
ちなみに、Symfonyの公式サイトは以下からご確認ください。
Symfony自体は先ほどもお伝えしたように、PHPのWebアプリ向けのフレームワークになっていて、WebアプリケーションをPHPで作りたい!といった場合の選択肢の一つですね。
ちなみに、こちらにある通り、2023/07月時点では6.3.1が安定版です。
リリースカレンダーはこんな感じでした。
筆者はほかのフレームワークとしてはlaravelくらいしか知らないのですが...
メジャーバージョンの最後の一つはEOLが長めに設定されているので、最悪のケースでも約3~4年周期でメジャーアップデートみたいな感じになりそうですね。
もちろん、都度都度細かいアップデートを繰り返す方がいいんでしょうが...
(なかなかそうはいかないやんごとなき事情もありますから,,,)
いくつかのソースをあさってみた感じ、やはり堂々の一はLaravelが多いですね。
Symfonyも2位以降はところによって結構バラバラで、なんともいえない...と言う感じです。
今回のSymfonyは一位にはなれないけど2~5位あたりには割と入ってきている...といった印象でした。
この手の統計データあればいいんですが...良さそうなのはパッと見つけられておらず、そのため、ざっくりと調べてそれっぽいサイトを参考にさせていただきました。(数が多いのでパッと貼らせてもらいます!)
- https://www.cloudways.com/blog/best-php-frameworks/
- https://www.peerspot.com/categories/php-frameworks
- https://raygun.com/blog/top-php-frameworks/
- https://www.trio.dev/blog/php-frameworks
- https://www.hostinger.com/tutorials/best-php-framework
- https://github.com/EvanLi/Github-Ranking/blob/master/Top100/PHP.md
Symfonyをインストールする
さて、それではlocalでSymfonyをインストールしてみようと思います...!
また、今回はMacユーザー向けの解説になりますので、ご了承ください。
今回は下記を参考にしつつ進めていくため、Windowsの方でも、Windowsの手順に沿っていただければ進められるかと思います。
では、やっていきます!
symfony-cliをインストール
まず最初にsymfony-cliをインストールします。
symfony-cliをインストールするためには事前にhomebrewがインストールされている必要があるので、ご留意ください。
brewコマンドが入っているよ!と言う形は、cliのインストールは下記のコマンドを叩くだけでOKです!
brew install symfony-cli/tap/symfony-cli
これによって、"symfony ~"といったコマンドを叩けるようになるはずです。
例えば下記コマンドでSymfony CLIのバージョンを確認できます。
(Symfony自体のバージョンではないのでそこは注意!)
taka@Taka symfony % symfony version
Symfony CLI version 5.5.7 (c) 2021-2023 Fabien Potencier #StandWithUkraine Support Ukraine (2023-07-21T10:15:00Z - stable)
出力が確認できればOKです!
次はSymfonyのプロジェクトファイルを作っていきます。
Symfonyのプロジェクトを作成する
こちらもとても簡単です!
下記コマンドで、そのカレントディレクトリ以下に"my_project"と言う名称でプロジェクトフォルダが作られます。
任意のフォルダにて実行して、lsでフォルダが作成されていればOKです!
(作成した後、my_projectフォルダ下で"php bin/console --version"を実行すればSymfony自体のバージョンを確認できますし、"php bin/console about"を実行すればPHPのバージョンやKernelの情報も淡褪せて確認できるようです!)
taka@Taka symfony % symfony new --webapp my_project
taka@Taka symfony % ls
my_project
taka@Taka symfony % cd my_project
taka@Taka my_project % php bin/console --version
Symfony 6.3.1 (env: dev, debug: true) #StandWithUkraine https://sf.to/ukraine
taka@Taka my_project2 % php bin/console about
-------------------- ---------------------------------
Symfony
-------------------- ---------------------------------
Version 6.3.1
Long-Term Support No
End of maintenance 01/2024 (in +186 days)
End of life 01/2024 (in +186 days)
-------------------- ---------------------------------
Kernel
-------------------- ---------------------------------
Type App\Kernel
Environment dev
Debug true
Charset UTF-8
Cache directory ./var/cache/dev (7.9 MiB)
Build directory ./var/cache/dev (7.9 MiB)
Log directory ./var/log (599 B)
-------------------- ---------------------------------
PHP
-------------------- ---------------------------------
Version 8.2.8
Architecture 64 bits
Intl locale ja_JP
Timezone UTC (2023-07-29T09:22:08+00:00)
OPcache true
APCu false
Xdebug false
-------------------- ---------------------------------
Symfonyを起動する
さて、それではSymfonyを起動しましょう!
下記のコマンド"symfony server:start"で起動することができます。
taka@Taka my_project % symfony server:start
[WARNING] run "symfony server:ca:install" first if you want to run the web server with TLS support, or use "--p12" or
"--no-tls" to avoid this warning
Following Web Server log file (/Users/taka/.symfony5/log/9db8c200620401e7fdc063a8fe5ab55ebb9b9842.log)
Following PHP-FPM log file (/Users/taka/.symfony5/log/9db8c200620401e7fdc063a8fe5ab55ebb9b9842/53fb8ec204547646acb3461995e4da5a54cc7575.log)
[WARNING] The local web server is optimized for local development and MUST never be used in a production setup.
[OK] Web server listening
The Web server is using PHP FPM 8.2.8
http://127.0.0.1:8001
起動すると、上記のように、わ〜っと色々出てきます。
その中から、"[OK] Web server listening"の箇所を探し、その下にあるURLを選択し、アクセスしてみましょう。
おそらくデフォルトであれば、"http://127.0.0.1:8001"へブラウザでアクセスすればOKなはずです。
symfonyの初期画面が出てきました...!
楽ちんですね!
また、筆者も今見ていて知ったのですが、このページはプロジェクト内のviewファイルを表示しているわけではなく、画面丈夫にある通り、"you haven't configured any homepage URL"であるから表示されており、新規のページを追加してルーティングを設定する必要がありそうです。
そのため、このページの文字を編集しよう!とファイルを探しても見つからないと思います。
では、表示は出来たので、簡単なページを一つ作るまでやってみます。
Symfonyで初めてのページを作ってみる!
ではやっていきます!
参考にするのは本家のチュートリアルをほぼそのまま参考にしてみます。
まず、"my_project/src/Controller"下に"LuckyController.php"というファイルを作成します。
公式ほぼそのままですが、中身は以下ですね!
<?php
namespace App\Controller;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;
class LuckyController
{
#[Route('/lucky/number')]
public function number(): Response
{
$number = random_int(0, 100);
return new Response(
'<html><body>Lucky number: '.$number.'</body></html>'
);
}
}
これによって、"baseのURL + Routeで指定したURL"へのアクセス...つまり、"http://127.0.0.1:8001/lucky/number"へのアクセスが来た場合に、このControllerが呼び出され、ResponseとしてHTMLが返されることになるはずです。
デザイン性は皆無ですが...
このような感じでアクセすることができました...!
Controllerの処理にある通り、Lucky numberの$numberは0 ~ 100の乱数なので、画面を更新すると数値が変わったりします。
筆者もまだまだ知識皆無ではありますが本当に最低限のルーティングによりアクセスされた際処理を行って、Viewを返す...という一連の流れが見えてきましたね!
おそらく、この形で実際に実装されているものはほとんどなさそう
というのも、Routeの定義はControllerではなく、別ファイルで設定したり、Viewも今はResponseにHTMLをそのまま返すようにしていますが、別ファイルでHTMLファイルを作成して、Controller側で呼び出して返すとか...少なくとも、今回の内容が最善の実装ではないと思ってます。
そのため、チュートリアルように本当に最短距離でルーティングとviewを実装したケースなんだな...、くらいの認識が良いかとおもいます。
まとめ
さて、今回はsymfonyのインストールと、symfonyのページを一つ作成し、そのページへアクセスしてみました!
機会あって触ることになりましたが、やはり簡単なフレームワークを一つ学んでいると、なんとなくあんな感じかな?みたいなのはわかるので、学習効率がとても良くなったように思います。
(逆にLaravel学んでいた時はわけわからない!って感じでしたので...)
実はSymfonyに加え、ZendやCodeigniterなどもちょっと触る機会がありそうなので、そのうちちょこっと触ってみるかもしれません。
もちろん、このSymfonyの深掘りも追ってやっていければと思います!