技術ブログ技術ブログPHPPythonエンジニアがPHPフレームワークSymfonyをざっくり紹介する普段私はPythonにDjangoで書くことが多いのですが、先日PHPのSymfonyを触る機会がありました。そこで今回は、普段Djangoを使っている目線でのSymfonyの構成などをざっくりご紹介したいと思います。Symfonyとは?Symphonyではありません。Google先生に頼っていて思うような検索結果が出ていないときは、結構な確率でタイポしていたりします。Symfonyとは、PHPのフレームワークの一つです。PHPのフレームワークというと、日本ではLaravelやCakePHPがメジャーですが、海外ではSymfonyも幅広く使われています。Controller)です。View(Django)ModelをView(Symfony)やTemplateに渡す部分ざっくり上記になっています。名前が違ったり被っていたりするので分かりにくいですが、大まかな考え方は近しい部分があります。appここに、プロジェクト全体で使用する設定ファイル(yamlなど)や、初期表示のindex.htmlを入れたりします。binコンソールで使用するコマンドなどのファイルを格納します。srcBundleごとにソースコードやHTMLファイルを格納します。開発をする際触るのはここになるかと思います。SampleBundleそもそもBundleって何?と思う方も多いかと思われます。簡潔にまとめると、Bundleとは、データベースと関連付いたエンティティや、ソースコードやテスト、画面に表示するHTMLなどのファイルをひとところにまとめた機能の塊です。Djangoで言うところのアプリケーションに近いものだと思うと、想像しやすいかもしれません。Bundle単位で機能拡張ソースコードも多く公開されているので、取捨選択することで自分でコードを書かずとも色々な機能を組み込めるようになっています。ControllerDjangoで言うところのView部分です。画面表示するデータを制御したり、URLのルーティング制御を行います。Entityデータベースのテーブルに応じたEntityを格納する場所です。setterを設定したり、更新時のシーケンスなど、データベースの接続の際の付加処理を設定します。Djangoの方がこの部分に記載する処理の幅は広くなりがちですが、各アプリのmodels.pyに記載するような、データベースに応じたオブジェクトを定義する場所です。Form画面で使用するFormを設定する部分です。ここで、各項目のバリデーションも設定するのですが、細かいバリデーション処理はまた別途記載したります。Djangoでいう各アプリのforms.pyに近い役割を担っています。Resourcesviewsディレクトリに、HTMLファイルを格納します。Bundle固有で使う設定ファイルなどある場合は、ここに置いたりも。ServiceServiceだったりhelperだったり、Bundle内の位置付けで名称は多々あるかと。Controllerでやるには複雑な処理や、細かいビジネスロジックを記載していく部分になります。Validator文字通り、バリデーションを記述する部分です。ここでバリデーションクラスを作成し、formの方でインポートして各項目へのバリデーションを設定します。varキャッシュファイルや、ログファイルを格納しておくディレクトリになります。vendorライブラリ一般を格納するディレクトリになります。webJsやcss、画像ファイルなど、画面上から見えるファイルを格納する場所です。Djangoでいうstaticのような役割です。個人的に使っていてSymfonyってここが面白い!と感じた部分を取り上げてみます。分業がしやすい画面表示はここ、バリデーションはここ、formの生成内容はここ、と細かく記述ファイルが分かれているので、多人数で分業をする際はコンフリクトを減らしやすいかと思います。Bundleごとに切り分けて開発を進める事も出来るため、開発方法の幅が広がります。テンプレート言語のTwigが使いやすいDjangoのtemplate記法と近しい、Twigが使えます。画面上でオブジェクトをループさせてテーブルに値を入れ込んだり、if分岐で表示するものを変えたり、生のHTMLでは表現しにくい処理が簡潔に行えます。検索であったりデータの登録・更新、ログインと、formを使わないシステムはほぼ無いかと思われます。Symfonyでは、Validationクラスで細かく設定してのバリデーションや、entityをまるっとフォームに入れてそれを使用してデータの更新を行う事、また画面にレンダリングする際も、細かくlabelやform本体の配置は行えます。使い方のルールがある程度定まっている事で、多人数での開発の際にソースの揺れを減らせる事もメリットだと思います。今までSymfonyの名前も知らなかったのですが、使ってみると意外と馴染んだ部分もありました。PHPのメリットでありデメリットでもある自由にコードが書ける(≒フォーマットの統一が難しい)という部分を、Symfonyの記法である程度統一規格を持たせ一貫性のあるソースに仕上げやすいという風にうまくカバーしていました。日本でのシェアが広くない事もあり、ドキュメントは少ないのでそこはお気をつけください。PHPで開発を行う事がありましたら、フレームワークの選択肢の一つに検討してみてはいかがでしょうか?2016/09/19PHP2ファイルでLAMP開発環境構築LAMPでの開発を行う際、まず必要となるのがローカル開発環境の用意でしょう。本番環境へと順々にソースコードを反映していくのが一般的なフローかと思います。今回、一番手元である「LAMPローカル環境」の簡単な構築方法について初心者向けに紹介したいと思います。シェルスクリプト」で構築を行っていきますが、各バージョンは以下となります。もので統一させていただいております。シェルスクリプトの2つのみです。ファイルのみの構成となるので、共有が非常に楽という利点があります。イメージファイルではないので、サイズを気にすることもありません。別ファイルで定義したほうが見やすかったり再利用できたりもするので、別々に記述する手法を私はよく取ります。(個人的にはこのほうが分かりやすいのかなと思っています)それでは、順々に見ていきましょう。設定準備をしようまずは、以下からvagrantとVirtualBoxをインストールします。initを実行し、Vagrantfileを作成します。構築確認用に「source」のディレクトリを作成、php_info.phpというファイルを作っておきましょう。中身は以下となります。Vagrantfileを設定しようVagrantfileのの中身を以下のように記述します。"2"設定構文のバージョン番号を定義します。現状(2019年1月執筆時点)vagrantのバージョン1.1以降は"2"を設定するようにします。|config|構文についてはインデントでブロックを表しています。サンプルでは、configブロックとwebブロックがあります。webブロックを順に追っていきましょう。"centos7-web"ホスト名を指定します。未指定ですと、どんな仮想マシンに接続しているのか分かり難いので指定しましょう。"192.168.33.10"IPアドレスを指定します。空きのあるアドレスを指定しましょう。truevagrant起動時にシェルスクリプトを実行させます(サンプルでは、同階層の「provision.sh」を実行します)。本記事のキモとなる箇所です。"/var/www/html/source"第1引数:同期をとりたいディレクトリを指定します。(サンプル同階層の「source」ディレクトリと同期をとります)第2引数:仮想マシン内に設置するパスを指定します。シェルスクリプトを設定しようvagrant起動時に実行するシェルスクリプトの内容を記述します。シェルスクリプトについては、必要に応じてインストールしたいものを追加していきましょう。今回の場合は、Apache、MySQL、PHPをインストールしていきます。サンプルは以下となります。upを実行し、しばらく待ちましょう。完了後(上記のように「COMPLETE!」表示で完了です。おわりに如何でしたでしょうか。2ファイルで容易に「ローカル環境」が作成できたかと思います。この2つを用いることで手軽に環境構築/破壊が気軽に行えます。試行錯誤を手軽さに行えるので非常に便利です。この手軽さは、これからphpを始めてみようと思う方に特におすすめなのではと。以上、phpエンジニアの簡単な紹介でした。乱文長文、失礼しました。