Skip to content
  • About
    • What is Symfony?
    • Community
    • News
    • Contributing
    • Support
  • Documentation
    • Symfony Docs
    • Symfony Book
    • Screencasts
    • Symfony Bundles
    • Symfony Cloud
    • Training
  • Services
    • Platform.sh for Symfony Best platform to deploy Symfony apps
    • SymfonyInsight Automatic quality checks for your apps
    • Symfony Certification Prove your knowledge and boost your career
    • SensioLabs Professional services to help you with Symfony
    • Blackfire Profile and monitor performance of your apps
  • Other
  • Blog
  • Download
sponsored by
  1. Home
  2. Documentation
  3. Symfony: The Fast Track
  4. Japanese
  5. トラブルシューティング

トラブルシューティング

プロジェクトのセットアップは、正しいデバッグツールを用意することでもあります。幸運にも、たくさんの便利なツールが webapp パッケージの一部として既に含まれています。

Symfony Debugging Tools について

まずはじめに、Symfony Profilerは問題の原因を調べるときに役に立ちます。

ホームページを見てみると、スクリーンの一番下にツールバーが表示されていると思います:

/

最初に気づくこととして 404 が赤字で表示されていますね。このページはまだホームページとして定義していないので最初の表示として使われています。エラーページですが、デフォルトでも、ちゃんと表示されるなんて素敵でしょう。正しい HTTP ステータスコードは 200 ではなく 404 となっています。このようにデバッグツールバーがあるので、正しい情報を見ることができます。

小さな感嘆符(!)をクリックすると、Symfony profiler 内のログから "実際の" 例外のメッセージを見ることができます。スタックトレースを見たいときは、左のメニューの "Exception" リンクをクリックしてください。

コードに問題があるときは、以下のような問題が起きている箇所を調べることができる例外ページが表示されます:

//

いくつかクリックして、Symfony profiler でどんな情報にアクセスができるか試してくてください。

デバッグ時にはログはとても役に立ちます。Symfony には、すべてのログ(Webサーバのログ、PHPのログ、アプリケーションのログ)を tail できる便利なコマンドがあります。

1
$ symfony server:log

では、小さな実験をしてみましょう。 public/index.php を開いて、 PHP のコードを壊してみてください(たとえばfoobar という文字をコードの途中に追加してみましょう)。ブラウザでページを更新して何がログに流れてくるか見てみましょう:

1
2
Dec 21 10:04:59 |DEBUG| PHP    PHP Parse error:  syntax error, unexpected 'use' (T_USE) in public/index.php on line 5 path="/usr/bin/php7.42" php="7.42.0"
Dec 21 10:04:59 |ERROR| SERVER GET  (500) / ip="127.0.0.1"

エラーに気づきやすいように色付けされて出力されます。

Symfony の環境について

Symfony Profilerは開発中のみ有用なので、プロダクション環境にはインストールされないようにしたいです。デフォルトで、Symfonyは自動的に dev と test 環境のみにインストールします。

Symfony は、 環境 の概念があります。デフォルトでは、 dev, prod, test の3つの環境がありますが、必要であれば追加することができます。すべての環境において、同じコードが使われますが、異なる 設定 をすることが可能です。

例えば、dev 環境では、すべてのデバッグツールを有効にしています。しかし、prod 環境では、アプリケーションのパフォーマンスを最適にしています。

APP_ENV の環境変数を変更することで、環境をスイッチすることができます。

Platform.sh へデプロイする際は APP_ENV に既にセットされている環境は、自動的に prod となります。

環境設定の扱いに関して

APP_ENV はあなたのターミナルにセットしてある "実際の" 環境変数です。

1
$ export APP_ENV=dev

本番のサーバーで、環境変数を使用して APP_ENV のような値をセットするのは良いことです。しかし、開発時のマシンでは、環境変数をたくさん定義するとややこしくなりますので、代わりに .env ファイルに定義します。

注意が必要な .env ファイルはプロジェクトを作成したときに自動的に生成されます:

.env
1
2
3
4
5
6
###> symfony/framework-bundle ###
APP_ENV=dev
APP_SECRET=c2927f273163f7225a358e3a1bbbed8a
#TRUSTED_PROXIES=127.0.0.1,127.0.0.2
#TRUSTED_HOSTS='^localhost|example\.com$'
###< symfony/framework-bundle ###

Tip

Symfony Flex のレシピによって、.env を使用すれば、どんなパッケージも環境変数をセットすることが可能です。

.env ファイルはリポジトリにコミットされ、本番の デフォルト の値として使われます。 .env.local ファイルを作成すれば値を上書きすることができますが、リポジトリにコミットするべきファイルではないので、 .gitignore に既に書いてあります。

シークレットな値や注意が必要な値をこれらのファイルに書かないでください。他のステップでシークレットな値を扱う方法を学びますので、待っていてください。

IDE の設定

開発環境では、例外が投げられると Symfony は、例外メッセージとスタックトレースのページを表示します。ファイルパスから、自分の使っている IDE で問題の箇所を開くことができます。この機能を使うには、 IDE を設定する必要があります。Symfony は最初からたくさんの IDE をサポートしています; 私は VSCode を今回のプロジェクトで使用しています:

1
2
3
4
5
6
7
--- a/php.ini
+++ b/php.ini
@@ -5,3 +5,4 @@ max_execution_time=30
 session.use_strict_mode=On
 realpath_cache_ttl=3600
 zend.detect_unicode=Off
+xdebug.file_link_format=vscode://file/%f:%l

ファイルへのリンクは例外だけではありません。例えば、IDE に設定すれば、デバッグの際のコントローラも開くことができます。

本番のデバッグ

本番サーバのデバッグは、より複雑です。例えば、 Symfony profiler は使えませんし、ログの情報も冗長にしていません。それでも、ログの tail は可能です:

1
$ symfony cloud:logs --tail

また、Webコンテナ上に SSH で接続することも可能です:

1
$ symfony cloud:ssh

簡単に壊すことはできないので心配しないでください。ほとんどのファイルシステムは書き込み権限はありません。本番でのホットフィックスはできないようになっています。より良い方法はこの書籍の後の方で説明します。

より深く学ぶために

  • SymfonyCasts Environment と設定ファイルのチュートリアル;
  • SymfonyCasts Environment Variables のチュートリアル;
  • SymfonyCasts: Webデバッグツールバーとプロファイラーのチュートリアル;
  • Symfony アプリケーションにおける 複数の .env ファイルの使い方
Previous page メソドロジーを適用する
Next page コントローラーを作成する
This work, including the code samples, is licensed under a Creative Commons BY-NC-SA 4.0 license.
TOC
    Version

    Symfony 6.4 is backed by

    Online Sylius certification, take it now!

    Online Sylius certification, take it now!

    Save your teams and projects before they sink

    Save your teams and projects before they sink

    Version:
    Locale:
    ebook

    This book is backed by:

    see all backers

    Symfony footer

    Avatar of NickSdot, a Symfony contributor

    Thanks NickSdot for being a Symfony contributor

    2 commits • 90 lines changed

    View all contributors that help us make Symfony

    Become a Symfony contributor

    Be an active part of the community and contribute ideas, code and bug fixes. Both experts and newcomers are welcome.

    Learn how to contribute

    Symfony™ is a trademark of Symfony SAS. All rights reserved.

    • What is Symfony?

      • What is Symfony?
      • Symfony at a Glance
      • Symfony Components
      • Symfony Releases
      • Security Policy
      • Logo & Screenshots
      • Trademark & Licenses
      • symfony1 Legacy
    • Learn Symfony

      • Symfony Docs
      • Symfony Book
      • Reference
      • Bundles
      • Best Practices
      • Training
      • eLearning Platform
      • Certification
    • Screencasts

      • Learn Symfony
      • Learn PHP
      • Learn JavaScript
      • Learn Drupal
      • Learn RESTful APIs
    • Community

      • Symfony Community
      • SymfonyConnect
      • Events & Meetups
      • Projects using Symfony
      • Contributors
      • Symfony Jobs
      • Backers
      • Code of Conduct
      • Downloads Stats
      • Support
    • Blog

      • All Blog Posts
      • A Week of Symfony
      • Case Studies
      • Cloud
      • Community
      • Conferences
      • Diversity
      • Living on the edge
      • Releases
      • Security Advisories
      • Symfony Insight
      • Twig
      • SensioLabs Blog
    • Services

      • SensioLabs services
      • Train developers
      • Manage your project quality
      • Improve your project performance
      • Host Symfony projects

      Powered by

    Follow Symfony