BLOGブログ

Symfony5に触れてみる

ヒロシです。

名古屋でも新型コロナウィルスが落ち着いてきましたね。
丸善印刷ではリモートワークが推奨されており、ヒロシも6月後半までは本社勤務を避けサテライトオフィスからのリモートワークをしております。

幸運なことに、このコロナ禍にあっても5月、6月と仕事が忙しく、作業時間の確保がしやすいリモートワークの良さを実感しています。

さて、ヒロシは最近、PHPフレームワークの1つ「Symofny」に触れる機会が増えたため、空き時間を見つけてはその使い方を調べています。
今まで「CodeIgniter」や「FuelPHP」など手軽なフレームワークに使ってきたため、「Symofny」敷居の高さには苦労をしています。。

Symfonyのオフィシャルサイト
https://symfony.com/

今のところの感想ですが、オフィシャルサイトのドキュメントが豊富で内容が親切である。 また全体的なメンテナンスがしっかりされている。という点から、長く使えそうな安心感があります。

CentOS7、Apache2、PHP7.3の環境でSymfony5のセットアップまでを試してみたので、 今日はその内容をご紹介したいと思います。

サーバ環境はつぎのとおり

OS

# cat /etc/redhat-release 
CentOS Linux release 7.5.1804 (Core)

PHP

# php -v
PHP 7.3.3 (cli) (built: Mar  5 2019 13:50:38) ( NTS )
...

Apache

# yum info httpd
...
Version     : 2.4.6
...

MySQL

# yum info mysql-community-server
...
Version     : 5.6.47
...

ユーザ作成

Web編集用に「webmaster」というユーザを作成します。

# groupadd webmaster
# useradd webmaster -g webmaster -G apache
# passwd webmaster

Webディレクトリの設定

  • /var/www/以下の所有者はwebmaster、グループをapacheとします。
  • setgid アクセス権を設定します。
  • setgid アクセス権を設定されたディレクトリは、それ以下に作成されたファイルのグループは作成者ではなくディレクトリのグループとなります。
# ls -ld /var/www/
drwxr-xr-x 4 root root 33 May 18 17:38 /var/www/

# ll /var/www/
total 0
drwxr-xr-x 2 root root  6 Apr 21 03:11 cgi-bin
drwxr-xr-x 3 root root 18 May 18 17:46 html

# chown -R webmaster:apache /var/www
# chmod -R g+w /var/www
# chmod -R g+s /var/www

# ls -ld /var/www/
drwxrwsr-x 4 webmaster apache 33 May 19 10:45 /var/www/

# ll /var/www/
total 0
drwxrwsr-x 2 webmaster apache 6 Apr 21 03:11 cgi-bin
drwxrwsr-x 2 webmaster apache 6 Apr 21 03:11 html

Composer

  • PHPパッケージをインストールするためにComposerを利用します。
  • Composerは以下「Download Composer」ページにある「Command-line installation」に記載されているコマンドでインストールされます。
  • https://getcomposer.org/download/

/rootディレクトリに移動します。

# cd /root/

composerをインストール

# php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"
# php -r "if (hash_file('sha384', 'composer-setup.php') === 'a5c698ffe4b8e849a443b120cd5ba38043260d5c4023dbf93e1558871f1f07f58274fc6f4c93bcfd858c6bd0775cd8d1') { echo 'Installer verified'; } else { echo 'Installer corrupt'; unlink('composer-setup.php'); } echo PHP_EOL;"
# php composer-setup.php
# php -r "unlink('composer-setup.php');"

composerコマンドをグローバルで実行できるようにします。

# mv composer.phar /usr/local/bin/composer
# cp /etc/profile /etc/profile.org
# echo 'export PATH=$PATH:/usr/local/bin' >> /etc/profile

「webmaster」ユーザでcomposerを実行できることを確認します。

# su webmaster
$ composer
   ______
  / ____/___  ____ ___  ____  ____  ________  _____
 / /   / __ \/ __ `__ \/ __ \/ __ \/ ___/ _ \/ ___/
/ /___/ /_/ / / / / / / /_/ / /_/ (__  )  __/ /
\____/\____/_/ /_/ /_/ .___/\____/____/\___/_/
                    /_/
Composer version 1.9.2 2020-01-14 16:30:31
....

Symfonyバイナリファイル

  • SymfonyバイナリファイルにはWebアプリケーション構築するために必要なツールがすべて含まれています。
  • では、Symfonyバイナリのインストーラーを以下のURLからダウンロードしてインストールしょう。
  • https://symfony.com/download

symfonyバイナリファイルをインストールし、グローバルで実行できるようにします。

# wget https://get.symfony.com/cli/installer -O - | bash
# mv /root/.symfony/bin/symfony /usr/local/bin/symfony

# su webmaster
$ symfony -V
Symfony CLI version v4.12.4 (Tue Jan 14 13:09:08 UTC 2020)

必須要件チェック

  • 利用中のサーバがSymfonyの動作要件を満たしているか「symfony check:requirements」コマンドで確認します。
  • 足りないモジュールが表示されたら、適宜インストールして、再度コマンドを実行してみてください。
  • 「[OK] Your system is ready to run Symfony projects 」と表示されれば要件は満たしています。
$ symfony check:requirements

Symfony Requirements Checker

> PHP is using the following php.ini file:
/etc/php.ini

> Checking Symfony requirements:

..............WWW.........

                                              
 [OK]                                         
 Your system is ready to run Symfony projects 
  • ヒロシの場合お勧めの追加モジュールなどが3つ表示されましたが、動作要件は満たしているので、今回はこのまま進めます。

Optional recommendations to improve your setup

 * posix_isatty() should be available
   > Install and enable the php_posix extension (used to colorize the
   > CLI output).

 * intl extension should be available
   > Install and enable the intl extension (used for validators).

 * a PHP accelerator should be installed
   > Install and/or enable a PHP accelerator (highly recommended).

Symfonyプロジェクトの作成

Gitクライアントの設定

  • Gitクライアントの設定が適切にされていないとエラーがでます。
  • プロジェクト作成前に下記を設定してください。
$ git config --global user.email "you@example.com"
$ git config --global user.name "Your Name"
  • 一緒に以下も設定しておきます。
commit時に改行コードを変換しないようにする
$ git config --global core.autocrlf false

commitでのエディタ起動でのコメント文字化け対策
$ git config --global core.editor 'vim -c "set fenc=utf-8"'
  • シンタックスカラーを有効にするため、「.gitconfig」に下記を追記します。

~/.gitconfig

[color]
        diff = auto
        status = auto
        branch = auto
        interactive = auto
        ui = true
        pager = true

Symfonyプロジェクトの作成

  • 「Symfony」コマンドで、「/var/www/html/my_project」にSymfonyプロジェクト作成します。
  • 「--full」オプションをつけると、Webアプリケーション構築に必要なパッケージが一緒に追加されます。
$ cd /var/www/html/
$ symfony new my_project --full
* Creating a new Symfony project with Composer
  (running /usr/local/bin/composer create-project symfony/website-skeleton /var/www/html/my_project)

* Setting up the project under Git version control
  (running git init /var/www/html/my_project)

 [OK] Your project is now ready in /var/www/html/my_project                                                             
  • つぎのようにSymfonyプロジェクトが「my_project」ディレクトリに展開されます。
$ cd /var/www/html/my_project/
$ ll
total 268
drwxrwsr-x.  2 webmaster apache     36 Jan 24 20:14 bin
-rw-rw-r--.  1 webmaster apache   2268 Jan 24 20:14 composer.json
-rw-rw-r--.  1 webmaster apache 246959 Jan 24 20:14 composer.lock
drwxrwsr-x.  4 webmaster apache    116 Jan 24 20:14 config
-rw-rw-r--.  1 webmaster apache   1066 Jan 24 20:14 phpunit.xml.dist
drwxrwsr-x.  2 webmaster apache     23 Jan 24 20:14 public
drwxrwsr-x.  6 webmaster apache     92 Jan 24 20:14 src
-rw-rw-r--.  1 webmaster apache  13451 Jan 24 20:14 symfony.lock
drwxrwsr-x.  2 webmaster apache     28 Jan 24 20:14 templates
drwxrwsr-x.  2 webmaster apache     24 Jan 24 20:14 tests
drwxrwsr-x.  2 webmaster apache     24 Jan 24 20:14 translations
drwxrwsrwx.  4 webmaster apache     30 Jan 24 20:14 var
drwxrwsr-x. 18 webmaster apache    268 Jan 24 20:14 vendor
  • 「git init」も既に実行されており、「.gitignore」など必要な設定ファイルが生成された上で初回コミットも済んでいます。
$ git show --stat
commit edc3984698b34f94b5fcc60c778e392f1f03cb14
Author: 
Date:   Fri Jan 24 20:14:48 2020 +0900

    Add initial set of files

 .env                                        |   33 +
 .env.test                                   |    5 +
 .gitignore                                  |   16 +
 bin/console                                 |   42 +
 bin/phpunit                                 |   13 +
 composer.json                               |   84 +
 composer.lock                               | 6755 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 config/bootstrap.php                        |   23 +
 config/bundles.php                          |   15 +
...

Apahceの設定

  • DocumentRootは「/var/www/html/my_project/public」になります。
  • Apacheの設定を以下のように調整します。
  • 「ServerName」は適宜調整してください。
# git diff /etc/httpd/conf/httpd.conf.org /etc/httpd/conf/httpd.conf
...
-#ServerName www.example.com:80
+ServerName 192.168.33.10:80
...
-DocumentRoot "/var/www/html"
+DocumentRoot "/var/www/html/my_project/public"
...
-<Directory "/var/www/html">
+<Directory "/var/www/html/my_project/public">
...
-    AllowOverride None
+    AllowOverride All
...
  • Apacheをリスタートします。
# service httpd configtest
Syntax OK
# service httpd restart
Redirecting to /bin/systemctl restart httpd.service

「http://192.168.33.10/」でSymfonyの初期画面が表示されます。

  • 画面の下部に「An error occured while loading the web debug toolbar.」と表示されました。
  • デバックに便利なツールバーが表示に失敗しています。
  • これを解消するために「symfony/apache-pack」をインストールします。

「symfony/apache-pack」をインストール

  • 「symfony/apache-pack」をインストールします。
$ composer require symfony/apache-pack
...
  • Symfonyの各パッケージ(バンドル)は「レシピ」というインストール設定を持っています。
  • この「レシピ」は「Main recipe」と「Contrib recipe」という2つのレポジトリにあるのですが、「Main recipe」と比べると「Contrib recipe」の方はメンテナンスの品質が下がります。
  • 「symfony/apache-pack」のレシピは「Contrib recipe」にあるため、「使ってよいのか?」と確認されますが、問題ないので、「YES」としてください。
  -  WARNING  symfony/apache-pack (>=1.0): From github.com/symfony/recipes-contrib:master
    The recipe for this package comes from the "contrib" repository, which is open to community contributions.
    Review the recipe at https://github.com/symfony/recipes-contrib/tree/master/symfony/apache-pack/1.0

    Do you want to execute this recipe?
    [y] Yes
    [n] No
    [a] Yes for all packages, only for the current installation session
    [p] Yes permanently, never ask again for this project
    (defaults to n): y
  • インストールが完了すると、「public/.htaccess」が生成されていることがわかります。
  • 「public/.htaccess」には、mod_rewriteの設定などが記載されています。
$ git status
# On branch master
# Changes not staged for commit:
#   (use "git add <file>..." to update what will be committed)
#   (use "git checkout -- <file>..." to discard changes in working directory)
#
#       modified:   composer.json
#       modified:   composer.lock
#       modified:   symfony.lock
#
# Untracked files:
#   (use "git add <file>..." to include in what will be committed)
#
#       public/.htaccess
no changes added to commit (use "git add" and/or "git commit -a")

「http://192.168.33.10/」をリロードするとツールバーが正常に表示されていることがわかります。

今日は以上です!

参考URL:https://symfony.com/doc/current/setup.html

この記事を書いたブログライター:ヒロシ

ヒロシです。
丸善印刷でWebのお仕事をしています。
趣味は英会話です!

この記事を書いたブログライター:ヒロシ

ヒロシです。
丸善印刷でWebのお仕事をしています。
趣味は英会話です!