Hatena::ブログ(Diary)

モバイル系ニートエンジニア`chobi_e`の日記 Twitter

2010-12-01

Symfony Advent 2010開催しています!

さて、いきあたりばったりではありますが








始まりました、Symfony Advent 2010







もといクリスマスまでの、しんふぉにゃん達の集い 2010







熱き 思いを 語り合う




しんふぉにゃん多数!








24日までガッツリと皆で盛り上げて行きましょう!







改めましてSymfony Advent 2010の簡単な紹介をさせていただきますと


AdventCalendarは西欧のイベントの一つで聖誕祭までの4週間を待ちわびるために1日ごとに小さな窓の付いたカレンダーを開けていくイベントです。24日分の窓を開けると素敵な絵が出てきたりして子供心に楽しいなと思ったりしていました。




転じて技術界隈では12月1日から24日まで技術的なtipsを書いて行こうというイベントとなり、今回のSymfony Advent 2010では有志を募ってsymfonyやSymfony2のイイ所を持ち回りで記事にしようぜ!という事で集まりつつ記事を書いたり色々なやりとりを行なっています(現在も絶賛メンバー募集中です。)


はじめましてのSymfony2 Component


Symfony2、Doctrine2とライブラリが多くちょっと使ってみるという場合に敷居が高く感じられてしまうのではないでしょうか?


そこで、手始めにSymfony2に親しんでみよう、ということで私のオススメはUniversalClassLoaderです。



PHP5になって数年、最近ではspl_autoload_registerのラッパーがかなり巷で使われるようになってきましたね。個人的に色々と触ってきて一番使い安いなぁと思っているのがSymfony2のUniversalClassLoaderです。


UniversalClassLoaderでは今までのスタイルのライブラリの自動読み込みとNamespaceに対応した自動読み込み機能に対応している便利なクラスです。


それでは実際に使ってみましょう。まずはお決まりのSymfony2のダウンロードからです。

  mkdir advent_first_day
  cd advent_first_day
  git clone https://github.com/symfony/symfony.git

別途Symfony2のサンドボックスがhttp://symfony-reloaded.org/downloads/sandbox_2_0_PR3.zipにありますので

そちらからダウンロードして解凍、sandbox/src/vendor/symfonyディレクトリを適当な場所に置いてもOKです。


それでは、Autoloaderを登録するコードを書いてみましょう。

autoloader.php

  <?php
  require __DIR__ .'/symfony/src/Symfony/Component/HttpFoundation/UniversalClassLoader.php';

  $loader = new \Symfony\Component\HttpFoundation\UniversalClassLoader();
  $loader->registerNamespaces(array(
      'Text\\Restructured' => "vendor/text-restructured/src",
      //...Namespace => ディレクトリという形で登録していきます。
  ));
  $loader->registerPrefixes(array(
      'Net' => "./lib",
      //...ライブラリのPrefix => ディレクトリという形で登録していきます。
  ));

  //register()を呼ぶことでautoloaderが有効になります。
  $loader->register();

Namespaceの登録はregisterNamespacesメソッド,今までのPEARスタイルのライブラリであればregisterPrefixesメソッドを使うことで自動読み込みの設定が簡単に行なえます。


UniversalClassloaderのメソッド一覧

  • registerNamespace($namespace, $path)

単一のNamespaceを登録する。

  • registerNamespaces(array $namespaces)

namespace => path形式の配列で複数のNamespaceを登録する

  • registerPrefix($prefix)

単一のPEAR形式のライブラリを登録する

  • registerPrefixes(array $prefixes)

PREFIX => path形式の配列で複数のPEAR形式のライブラリを登録する



UniversalClassLoaderは単一のファイルで完結しておりますので、PHP5.3以上が使える環境であれば

上記のようにUniversalClassLoader.phpを読み込んで使えばシンプルで、高速なautoloaderを使うことが出来ます。


autoloaderの実装ではライブラリ名を指定しない方法もありますが、UniversalClassloaderのように指定したほうがファイル名の解決が高速に行えるのでこのような実装を使うべきだと思います。

(混み入った話になってしまいますがファイル名解決をPHPに任せるとinclude_pathを舐めるのでIOのコストが結構かかります。)


因みに5.2系を使われている方は一番上にあるnamespace宣言を消しておいておけば使え うわーなにをするやめrせdfhjp




Symfony2は自分達のプロジェクトの便利ライブラリとしても使い始められますのでこの機会に試されてみてはどうでしょうか?



Symfony Advent 2010であなたの記事を公開してみませんか?


Symfony Advent 2010では12月1日から12月24日までを使って日替わりでsymfonyでイイなと思った小さなtipsから内部構造まで迫った解説などをブログ記事にして公開していくイベントです。


参加についてはATNDで参加表明の上、Google GroupのSymfony Advent 2010に追加リクエストを送信ください。


Symfony Advent 2010チーム一同、あなたの参加をお待ちしております。

日本Symfonyユーザー会

Symfony アドベントカレンダー2010

※Syfony Advent 2010はsymfony好きな有志で集まったチームです。

2010-11-27 PHP_reStructuredTextを書いた

PHP_reStructuredTextを書いた


Symfony2のドキュメント管理がPythonのSphinxを使っておりまして、それはそれで非常にドキュメントが書きやすい状態なのですが、カスタマイズなどを考えるとやっぱりPHPerとしてはツールもPHPで動いていて欲しいと思うわけでして・・・・。


と、いうことなのでPure PHPで記述したreStructuredText parserをgithub上で公開しました。あまりこういったテキスト処理系のは得意じゃないのでまるまる3日ほど悩みまくりましたがなんとか実際に解析できて今後も開発を続けられそうな感じなものができたっぽいです。


とりあえずの使い方サンプル。

# README.rstを解析してHTMLにするよ。
git clone https://github.com/chobie/PHP_reStructuredText.git
cd PHP_reStructuredText
php test/rst2html.php README.rst

とりあえずの目標としては現状のreStructuredTextの実装に合わせてある程度同様にparseできる事を目標として継続していきたいな、と思います。Parserが完成したらドキュメントツリーの実装やって・・・と夢はひろがりんぐですね!


ここらへんの実装についてお詳しい方、よい書籍などご存知の方がおりましたら教えて頂けると嬉しいです。

2010-11-21 Symfony2勉強会に参加したよ! このエントリーを含むブックマーク

2010/11/21(日)にZyngaJapanさんで行われたSymfony2勉強会に参加

しました。


私のLT資料「PDOBundleをつくる」を置いておきます。




基本的にはSymfony2を理解するためにBundleを書くをLT用にまとめたものです。実際にPDOBundle作るなら←のリンクを見て頂けたほうが早いと思います。


今現在就職活動をしているのでLT内に含めてしまいましたが、その後に色々な方から名刺頂けたりお話伺えたりして非常にプラスになりました!


この場を借りて厚くお礼を申し上げます。


就職活動やった事がない私がとりあえず就職活動してみた所、5社さんくらいから選考落ちしてしまい落ち込んでいたのですが(タイミングと適当すぎた経歴書が問題なのかもしれませんが)、Symfony2に前向きに取り組んでいる方々から色々と温かいお言葉を頂けて今後のモチベーションアップにつながりました。


勉強会で思ったこと


参加されたみなさんすげー++++


ほぼ全員の方がSymfony2が実行できる環境用意してきていました。用意が難しい方も

結構いるんじゃないかなと思ったのでVMをせこせこ作っていたのですが杞憂でしたねー。

(とはいえ、諸事情で時間的に用意が難しい方もいらっしゃるので勉強会毎にVMはつくり続けたいと思います。)


勉強会でこーいうのききたい、あーいうのやって欲しい等あればtwitterで#Symfony2studyかメーリングリストに投げてもらうと次回に反映できると思います。



反省点としては、今回の勉強会では@innx_hidenoriさんに任せっきりになってしまったので次回1月15日に行われるSymfony2勉強会ではもうちょっと役割分担できるようにしたいな、と個人的に思っています!

2010-11-10 VirtualBoxでお手軽にSymfony2を試せる環境を作ったよ

VirtualBoxでお手軽にSymfony2を試せる環境を作ったよ


Symfony2勉強会で扱う環境の構築が難しい方のために手前味噌ではありますがUbuntu10.10のVirtualBox環境を用意しました。

主にPHPプログラムは書くけど、サーバー周りは触ってないのでよく分からないという方向けのエントリです。


※2010/11現在Symfony2は現段階(PR3)ではまだまだ足りない機能などがあり、開発者からも「実運用するのは crazy」と言われている段階です。Symfony2勉強会に参加した(い)けど環境構築が難しいという方のために作成した学習目的のVMとなりますので何卒ご了承ください。



作業時間:約30分

ほぼダウンロードのみですが。


必要なファイルをダウンロードする


Download VirtualBoxから自分の環境に必要なVirtualBoxを拾ってインストールしてきます。72M程度あるので環境にもよりますが10分くらいかかるので先にSymfony2用のUbuntu10.10イメージをダウンロードしましょう。

(最新版)Symfony2 Ubuntu10.10 image 2010-11-29版Download

md5: 402f52ce6b432fb387fbdb0e72a674bb


Symfony2 Ubuntu10.10 image 2010-11-20版Download

md5: 0c942c526716de62bf268f4d04cc4fd0

ファイルサイズ:441M

更新日:2010-11-19 20:18

※この仮想イメージの動作などについては無保証ですのでご自身の責任で適切に扱ってください。

※ダウンロードが終わったらmd5の値があっているか確認しましょう。


VirtualBoxのインストール

VirtualBoxのインストールを行ないます。基本的にクリックしまくりでOKですが、分かりづらい方はVirtualBoxのインストール - VirtualBoxでWindows 7 インストールを参考にしてみてください。


Symfony2のイメージの解凍

ダウンロードしたSymfony2.zipを好きな場所に解凍しましょう。MyDocumentsや新しくVM専用のディレクトリに置いておくのが良いかと思います。


続いてVirtualBoxでダウンロードした仮想イメージを登録して使えるようにしてみましょう。


VirtualBox での仮想イメージの設定

VirtualBoxを起動すると下記のような画面が表示されます。まずは左上の「新規(N)」ボタンを押してVMの新規追加を行ないます。




f:id:chobi_e:20101110220609j:image




新規仮想マシンの作成のウィザードが表示されるので「次へ(N)」を押します。




f:id:chobi_e:20101110220610j:image




仮想マシンの名前はSymfony2、オペレーティングシステムはLinux,バージョンはUbuntuを選びます。




f:id:chobi_e:20101110220611j:image





メモリの割り当てを行ないます。自分のマシンと相談しつつ適度な値を設定してください。大体512Mあればまぁ、動くかなというところです。




f:id:chobi_e:20101110220612j:image




仮想ハードディスクは起動ディスクにチェックを入れ、既存のハードディスクを使用をセレクトし、右のフォルダアイコンをクリックします。




f:id:chobi_e:20101110220613j:image




仮想メディアマネージャーのダイアログが表示されるので、左上にある「追加(A)」を押します。

先程解凍したSymfony2を指定し、Symfony2.vdiを選択して「選択(S)」を押します。




f:id:chobi_e:20101110220614j:image




これで登録はお終いなので「完了(F)」を押します。続いてネットワークの設定を行ないます。


VirtualBox でのネットワークの設定

そのままの状態だと色々と都合が悪いので今回はNAT+ホストオンリーネットワークで構築しました。詳細についてはそんなに詳しくないのですがVirtualBox を利用する際のネットワーク設定の話に詳しく記載されているので興味がある方は読んでみてください。




VirtualBoxの起動画面で先ほど作成したSymfony2のVMを選択し、「設定(S)」を押します。


今度はネットワークのタブに移動し、アダプタ1は「ネットワークアダプタを有効化」にチェックを付け、割り当ては「NAT」をセレクトします。


f:id:chobi_e:20101110220617j:image


アダプタ2は「ネットワークアダプタを有効化」にチェックを付け、割り当ては「ホストオンリーアダプタ」をセレクトしてOKを押します。


f:id:chobi_e:20101110220618j:image


これでVMの準備はすべて完了なのでSymfony2のVMを起動してみましょう。起動ボタンをぽちっとな!




起動が終わってログイン画面が表示されたらホストマシンのブラウザからhttp://192.168.56.10/を開いて見ましょう。今回はサーバーの設定をしているのでVMが起動していればすぐにアクセスできます。


f:id:chobi_e:20101110220616j:image


あら、Symfony2のSandbox環境が動いていますね(*´д`*)


設定お疲れ様でした!これでSymfony2のsandbox環境が用意できたので、続いて編集等が行えるように自分の好みの設定をしましょう。


Symfony2 Sandboxを編集するには?


今回の仮想マシンのイメージではUbuntu Server環境をインストールしてあり、Symfony2勉強会で必要な物が(きっと)全てセットアップされているかと思います。

あとはあなたのマシン上でFTP等の設定を行えばSymfony2のsandboxがさわれますよ!


  • ログインアカウント

ユーザーアカウント: symfony

パスワード: reloaded


Symfony2のキーワードですね。何度もタイプしてリローデッドォッ!と心の中で叫ぶとよいでしょう(*゜ー゜)このアカウントとパスワードで基本的に全てアクセスできるようになっています。


  • FTPの設定

FTPサーバー:192.168.56.10


ユーザーとパスワードはログインアカウントと一緒です。FTPで接続するとsymfony2のサンドボックスが編集できるようになっています。

無駄なファイルは見えないようになっているので、他の作業が必要な場合はsshを利用してください。


  • Windows共有の設定

WORKGROUPを設定しているのであればエクスプローラーに\\192.168.56.10\Symfony2と打ってログインアカウントとパスワードを入力すると共有できるようになっています。FTPと同様に/var/www以下を共有できるようになっていますのでエクスプローラーで開いてsandboxをガンガン編集していきましょう。


  • mysql,mongodbの設定

バインド先を0.0.0.0にしてあるのでホストOSから192.168.56.10に接続すれば接続することができます。mysqlはrootのパスワードがreloadedとなっていますのでお間違いなく。


  • sshの設定

192.168.56.10でsshでログインできるようになっています。rootで作業をしたい場合はsudo -i、www-dataで作業をしたい場合はsudo -u www-data -iを使うと良いでしょう。/var/www/以下はwww-data.www-dataでの権限ということにしたのでsshで/var/www以下をいじる場合はwww-dataにユーザーを変更してください。



今回は普段の開発で使われるであろうFTP,SSH,Sambaあたりでのアクセス手段を用意しておいたので、自分の好みにあった方法で作業を行うと良いと思います。


今回の仮想イメージの内部的なお話

ここから先はSymfony2勉強会や個人的な勉強で使ってもらおうと思って作成した仮想イメージの構成についてのお話です。主にスタッフやサーバー構築が出来て仮想イメージのフィードバックがしたいという型向け。


現状取り急ぎSymfony2勉強会に間に合わせるように作成したので細かい部分でポリシーの設定や、無駄なファイルや必要なパッケージの選定が現状行えておりません。

フィードバックして頂ければ出来る限り反映をしていきたいと思いますのでよろしくお願いいたします。


  • 主なインストール済みパッケージ一覧
# PHP周り
php5
php5-cli
php5-mysql
php-apc
php-pear
pecl_mongo

# サーバー周り
apache2.2-mpm-prefork
mongodb
mysql-server-5.1

# SCM
git
subversion

# その他
openssh-server
proftpd
samba

  • ネットワーク関連

eth0 NAT,eth1 host only.ゲストとホストとの通信はNATを経由して行われるようになっているみたいです。eth1はstaticで192.168.56.10を指定。

host onlyでNAT経由だから複数マシン間でバッティングしなかったよね?(´・ω・`)


  • apache周り

/var/www/symfony2をapache2のデフォルト指定(というかコレしか設定してないので)となっている状態なのでIPアドレスを打てばsymfony2のsandboxにアクセスできるようになっています。

あとは現状Ubuntuデフォルトの設定。


  • php5周り

mongo,mysqliが入っているくらいでデフォルトです。PHPUnit3周りとか入れといたほうが良いかな?


  • monogo , mysql周り

バインド先を0.0.0.0に変更しています。あとはmysqlのchraset変更した程度でデフォルトです


  • ユーザーアカウント周り

基本的にはsymfonyアカウント及びwww-dataアカウントを利用して作業を行ないます。


  • ftp周り

mod_auth_file.cを使用してサーバーのアカウントは別の設定をしています。これは/var/wwwの権限をwww-data.www-dataに保ちつつ、簡易に編集する為に設定しています。トリッキーではありますが、使う側からみればこれがシンプルかな、と。


  • なぜsamba?

ローカルのVMなんだし、ファイル共有で開発したいっていう人(主にワタシ)も中にいると思うので。


あとがき

もしサーバー設定の知識に長けている方がおりましたらtwitterのmentionもしくは日本symfonyユーザーグループでご指摘いただけると嬉しいです!


Changelog的なメモ

2010-11-19

* : Symfony2勉強会で扱うサンドボックスを追加

https://github.com/symfony-japan/Sandboxes/archives/2011-11-18_1からのファイルを追加

symfony-sandbox-modを/var/www/symfony2として置いてあるので勉強会の時はそのままお使いできます。

その他の勉強会用のファイルは/home/symfonyに展開してありますのでそちらからお使いください。

2010-11-11

* : Symfony2の開発ステータスについての注意書きを追記

* : mysqlの接続設定とか書いてなかったので追記

2010-11-08 Symfony2開発時のgit tips Bundle作成編

Symfony2開発時のgit tips Bundle作成編

git の特定ディレクトリをコミットログ等込みで別プロジェクトへ移動でなるほど、と思ったのでメモエントリ


Symfony2でBundle開発しててBundleのみでがっつり開発したい時に便利そうだったのでメモエントリ


※まだちゃんと調べて試してないので、実際のプロジェクトに使うときは自己責任でヨロシクね!


git clone your_symfony2_project new_bundle_project

# 新しいBundleのgitリポジトリを作成する
cd new_bundle_project
Bundle=src/Bundle/HaraheriBundle
git filter-branch -f --subdirectory-filter ${Bundle} HEAD
git rest --hard
git gc --aggressive
git prune

# 元プロジェクトからごっそり該当Bundleに関するコミットを消す(本当にサッパリ消えるので超注意)
cd ../your_symfony2_project
git filter-branch --index-filter "git rm -r -f --cached --ignore-unmatch ${Bundle}" --prune-empty HEAD
git submodule add <new_bundle_project.git>




話は変わるけどapp/consoleあたりにファイル作っとくと幸せになれるカモ?

cat > app/console <<EOF
#!/usr/bin/env php
<?php
require_once __DIR__ . '/SampleKernel.php';

use Symfony\Bundle\FrameworkBundle\Console\Application;

\$kernel = new SampleKernel('dev',true);
\$application = new Application($kernel);
\$application->run();
EOF
chmod +x app/console

#Application\HelloBundleの雛形を作る
./app/console init:bundle "Application\HelloBundle"



そうそう、2010年11月20日14時〜18時ジンガジャパンさん会場で行われるSymfony2勉強会で軽くLTさせて頂くことになりました。まだ進行関連の詳細は決まってなさそうなので何作ろうかなーと思っていますがご要望とかあればみなさんの意見聞いた上で作ろうかなーと思っています。なにかあればtwitterの@chobi_eまでMention頂ければ何かしら検討しまっする(自分はSymfony1系は全く触ってないのでソッチ系は無理ですが)


頂いた要望が自分じゃムリポ!なのだったらゴメンネ!w