【備忘録】OPENPNE3.6.Xのwidget準拠でbuttonを作る方法【志摩嶋エイジ】 コンピュータ・インターネット

どーもえ~です、生きてます。
やっと帰れる目処がたったのと、備忘録ついでにTwitterでギャーギャー言ってたにっくきSymfonyの話をちょいちょい。
残念ながらPHP&Perl,せめてSymfony・Doctrineの動作を知ってる前提での話になりますんであんまりオススメしません。
読み飛ばし推奨でよろしくです。
ここ2ヶ月未満は家にも帰れず原稿も進まず、サークルの告知もろくろく出来てない体たらくっぷりで皆さんには大変ご心配をお掛けしました。
今日は難しいでしょうが、明日からはちゃんと帰れるかと思いますので、この高揚感が抜けない間にやるべきをやってしまおうと、そういう趣旨のもとで書いてます。
ただ、傾向が東方系ではないというか、え~ちゃんぶろぐねっとわ~くらしからぬ内容なんで全部追記に回してます。
技術的な話なんて興味ないとトコトンつまらないし、そもそもそういう人がここに来るのは色々と間違ってる気がしないでもないですので。
変なお気遣いをさせて申し訳ないです。
こんなところでもガス抜きしとかんと私の気分が収まらない、という我儘のためではありますが、特定の方にはきっと無駄にはならんですよ。
こんなのがあるんだなぁ、っていう意味で見てみるのも面白いやも分かりません(技術者向け)
今回、一番してやられた部分を真っ先に載せておきます。皆さんが欲しい情報はきっとここですから。
$this->setwidgetSchema('なんとか') = new sfWidgetFormInput(array('type'=>'button', 'label'=>'Click here'), array('onclick'=>'dosomething()', 'value'=>'click'))
お好みの場所にきちんと合わせて使ってみて下さい。
引用元:PHPフォーラム
では、以降毒吐きというか、ダラダラと耳寄り情報(?)をば。
ぐっちーなのでソースが欲しい人は回れ右!

私、冗談抜きで遊びでも仕事でもPHPを3年も触ってないわけですが、今回の件があってPHPで大掛かりなシステムを作ると炎上すると身を持って理解したので
(チーム入りして残日数が既に炎上していたり、チームの誰一人として今回の問題の解決方法を知らなかったり、そもそもSymfonyって何?っていう。PHPのスペシャリストも一人いたけど、チームじゃないので戦力でもなかったと)
大掛かりなものはPHPでは組もうとも思わないですね。
しかし、そこはさすがのフレームワークです。
他のと比べるとかなり良心的な設計をしています。
入力チェックに強力な機能があらかじめ用意されていたり、何度もユーザーが使いそうな機能は予め用意されていたり、そもそもプログラマとデザイナが分離して作業をするのに特化していると謳っている通り、分業にはこの上ないと思います。
チーム全体の開発速度が大幅に上がる設計になっているのはPHPらしからぬ特長と言えるでしょう。
Symfonyは確かに便利なんだけど、目に見えない俺ルールが多すぎる。しかも誰も教えてくれない!
actions.class.phpのexecute○○(ここの引数も固定みたいなもんです。実際はちゃんと意味があります)だとか、○○Success or Error.phpの命名だとか、そもそもRoutingの設定をYMLって独自規格でやったり、ちゃんと設定をしないと新規ファイルが表示出来なかったり、キャッシュが溜まるので消さないと更新が反映されなかったり。
そういう細かい俺ルールを、普通なら多くの言語サイトは教えてくれます。PHPも含めたC系列やJavaといった初心者の入門言語は然ることながら、XtalとかUnityにしてもちゃんと解説サイトはあります。
ただ、こいつは違いました。
Symfony1.4によるWebアプリケーション開発 (ISBN978-4-7980-2934-4)とかSymfony徹底攻略(ISBN978-4-7973-4305-2)を以てしても(というか役に立たなかった)全く参考にならない上に、まぁ使えてもせいぜいJoBeetとかその辺の資料を漁るぐらい。これでも逆引きリファレンスみたいなのは見当たらないし、サイト内検索も分かったような分からんようなものしかない。
ぶっちゃけ、今回は技術力より検索力の方がはるかに重要な問題でした。
過激なのを書くとアレなので詳細は書けませんが、良くも悪くもSymfonyはあんまり情報がありません。
びっくりするぐらい多くの俺ルールと、言われないと気づかないような隠しメニューが満載です。
どこにもそんな事は書いてないし、リファレンスなんてあってないようなもの。
Symfony自体も開発途上な部分があり、問題はまだまだ山積みです。
開発チームの素早い対応と努力は評価しますが、とてもカスタマイズ性が高いとは言い難い。
ちょっと申し訳ないが、そこはきちんと明確に言っておきます。
致命的なのを一点挙げると、どこの解説サイトを見てもSQLの発行の仕方を理解できる人はいないんじゃないでしょうか。
闇雲にガチャガチャやるしか方法はない。コネクションを得るために何か適当に踏み台にして、なんて言われなければ気付かないんじゃないですかね?
逆に言うと、そこはSymfonyじゃなくてDoctrineの問題なのでここで取り上げるのはお門違いなんでしょうが、DB周りがあまりにも弱すぎる。
OPENPNEってシステム自体が大掛かりなのにこれは幾らなんでもないだろう、と。

まぁ、私レベルでもここまでは何とか分かるもんです。
笑って許したと思います。システムは全知全能、万人受けするものじゃないですからね。
しかし、ここからはどうしても許せなかった。
・既存でincludeして使用出来る機能のカスタマイズを許さないop(Plugin)Form
非常に使いにくいです。もうそのためにしか用意されてないとしか思えないinclude群には目眩を覚えました。
もうここに直接書けばよくね?っていうものばかりです(そのおかげで、こういう部分を弄っても他に影響がなかったわけですが)
理屈や動作は理解しても、こちとらパーシャルガ-とかコンポーネントガ-とかどうでもいいわけで。
問題は如何に工数を減らすか、という点に於いてこれらは障害にしかなりませんでした。
むしろ理解するのに時間が掛かりました。
・DBで制御している表示項目とYMLで制御している表示項目がある
これはどういう事か、ちょっとだけ説明します。
Symfonyの面白い機能の1つとして、簡単に国外へ対応できるi18nという機能がありまして、こいつの中に国内・国外の設定情報が埋め込まれています。
基本的に国外(en)対応なので、そいつを日本語(ja-JP)に対応してくれているのも大体はこれが動いているからです。
さて、困ったことに、その設定ファイルがmassage.XMLとDB.transrationテーブルに存在します。ことXMLについてはそれぞれのプラグイン毎にあるので、今自分がどこにいるのか迷子になります。
とても専用のエディタを使わない限りは開発出来る気がしません。
それを抜きにしても、この情報はあっち、その情報はこっちと、右往左往する事が多かったのですが、それに拍車を掛けてます。
phpという特性上、難しいのは承知してますけど、似た分類のファイルは一元管理して欲しかったなぁ。
おかげで、同じ名前のファイルから複数個の名前が見つかったり、開発者間で同じファイル名を別々の場所で管理した所為でメンテナンスに遅れが生じたり。
Search禁止・Grep令まで出してました。
・あまりにも不親切なバリデータ
一番上で痒いところに手が届くと言いました。これはシステムに準拠した場合の話です。
カスタマイズを試みた際はこれらのシステムを全て使わないつもりでやらないと、思わぬところでエラーになります。
何故なら、バリデータ側から見ればそこにデータがセットされている前提で動くわけですから、一箇所を弄るともう1つチェックの部分を弄る事になります。
ウィジェットは取り除けば見た目に変化が現れますが、バリデータは当然といえばそうなんですが、見た目に現れません。
基本的に対にセットしているので気付きますが、何かしらの拍子でうっかり漏らすと該当のフォームは動かなくなります。
折角開発の手間を省こうとしているのに、思わぬところで二度手間が発生する設計は感心出来ません。
・Optionって何?
最後の最後までわかりませんでした。至る所に出てくるので超重要な存在なのは分かりますが、説明がごく僅かでしかないので結局こいつが何なのか分からず終いに。
どこにでも出てくるし、消したらエラーになるし、よく分からないし、まるでよく分からんし、そもそも望んでもいないスマートフォンを「安くなるから」と唆されて無理矢理持たされた時の気分でした。
誰か教えてください。

XAMPPもIISも共存した状態というのもあり、無意味に開発規模だけを大きく膨らまされた案件でした。
全てがこいつの所為で原稿できなかったとは言いませんが、せめて現実として家に帰って原稿出来るぐらいの余裕が欲しかったですね。
私の能力不足の部分はありますが、それを差し引いても普通の案件と比べて異常性が高すぎる案件だったのとシステムの特異性、誰もこの特異性に気付かなかったこと……数え上げたらキリがありません。
まぁ、無事に案件も終わりが見えてきたので、コミケは初日から参加出来そうな気がします。
こんな火の車になったのは自業自得なのに偉そうな事を書いてる人間の顔は12月30日は東京国際展示場、有明ビッグサイトにてカー18a「え~ちゃんねっとわ~く」で見れると思います。
あまりにもヒゲがヤバいのと、わりとマジで風呂に入りたいのと、寒いけど髪が伸びすぎているので散髪に行きたいのとで、当日までにはスッキリ清潔にして行きたいと思ってます。
Anetsの詳細についてはまだ情報が出せない(まだ帰ってない)ですが、まぁ小出し程度であれば、下記にてご覧いただければと思います。
技術情報系は気づいたらぼちぼち。今回みたいに怒りに任せて書き殴るような事はない……と思いたい。
C83コミックマーケットの新刊・委託情報
え~ちゃんねっとわ~く代表 志摩嶋エイジでした!

http://shimajimanet.blog96.fc2.com/blog-entry-970.html