【PHP】フレームワーク CakePHP 17ホール目【v2.4】
■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん
2014/03/01(土) 17:03:24.57ID:8AJ9GD6ECakePHPから派生したLithium(li3)も専スレできるまではここでどうぞ
質問するときはCakePHPのバージョンを書きましょう
※他フレームワークとの比較等はスレ違いです
■本家
http://www.cakephp.org/
APIドキュメント
http://api.cakephp.org/
github - cakephp
http://github.com/cakephp
the Bakery
http://bakery.cakephp.org/
Issue
http://cakephp.lighthouseapp.com/dashboard
CheatSheet[1.2] (PDF)
http://cakephp.org/files/Resources/CakePHP-1.2-Cheatsheet.pdf
■日本語公式
http://cakephp.jp/
フォーラム
http://cakephp.jp/modules/newbb/
cookbook(マニュアル)
[2.x] http://book.cakephp.org/2.0/ja/index.html
[1.3] http://book.cakephp.org/ja
※前スレ
http://kohada.2ch.net/test/read.cgi/php/1378659370/
0174nobodyさん
2014/03/31(月) 19:49:24.29ID:???その本に命名規則について書いてあるんでしょうか?
正直、プログラミングよりも命名や設計で物凄く時間がかかっています。
後からやり直したくなることも何度かあるし。
やっぱり同じコード・同じ設計を何度も書くというのは避けたいので、
汎用性の高い、カスタマイズ性のある設計を考えるのですが、
そうすると時間ばかりかかって先に進めません
0175nobodyさん
2014/03/31(月) 21:19:58.42ID:???クラス名やメソッド名をBusinessLogicとかexecuteとかにしてあとあと泣くのは自分。
0176nobodyさん
2014/03/31(月) 21:29:42.21ID:???規則については書いてないかな。
もっといえば、命名についてだけ書いてあるわけじゃない。
けど、読みやすいコードに、よく考えられた変数名は重要だし、
4部のうちの1部は命名に関してだよ。
http://kadoppe.com/archives/2013/01/book-readable-code.html
自分は読み途中だからてきとうに見つけた感想文でもはっとく。
自分が読んだとこまでの感想としては、
読んだところで悩まずに書けるようにはならないかな。
けど、納期に追われておざなりになるところだし、
読めばちょっと自分で気を使っただけだと、
気を配りきれない要素を拾えるんじゃないかなと思っている。
あくまでリーダブルコード。設計については書いてないよ。
0177nobodyさん
2014/03/31(月) 23:45:02.75ID:???0178nobodyさん
2014/04/01(火) 00:05:45.77ID:???Cakeの場合、ある程度の決まり事があるのでだいぶ楽なのですが、
やはり、自分で納得行かないコードのまま進むことがあります。
かといって、他人のコード見ても分かりやすいとは思わないし。
(有名所のOSSのソースしか見てませんが
とりあえず質問した件は、inquiry_repliesにしてみます。
0180nobodyさん
2014/04/01(火) 00:50:20.63ID:lnxBtai1ドリュルリュルウリュリィブブブブブブッッ!!!!あへあへうんこまん!!!ぶりっちょ!!!
ケツの穴からドババババババババッバwwwwwwwwwwwwWWWW
wwwwwwwwwwww
WWWwwwwwwwwwww??? ? ? ? ? ? ? ????? ????????wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww
なお、まにあわんもよう
0181nobodyさん
2014/04/01(火) 07:10:33.33ID:???それをちゃんと理解しているなら浪人生活なり語学留学なり存分に楽しんだらいい
0182nobodyさん
2014/04/01(火) 09:58:54.32ID:???0183nobodyさん
2014/04/02(水) 05:14:01.71ID:???public function hoge() {
$this->loadModel('Hoge');
$Users = $this->Hoge->find('all');
}
このようなエラーが表示されてしまいます。
Missing Datasource
Error: Datasource class Mysql could not be found.
Datasource is not found in Model/Datasource package.
↓の中には"empty"というファイルしか入っていないのですが、
cakephp\app\Model\Datasource
やはり何かファイルが足りないのでしょうか?
0184nobodyさん
2014/04/02(水) 06:25:25.12ID:???cakephp/lib/Cake/Model/Datasourceにあるっしょ。
Missing Datasourceになる理由は、情報不足でよくわからんけど。
0185nobodyさん
2014/04/02(水) 11:09:44.80ID:???data[Post][test1]
のラジオボタンがあるとします。
idが、PostTest10、PostTest11、PostTest12となってしまうのですが、
これをPostTest1_0、PostTest1_1、PostTest1_2
みたいにする事って出来ないのでしょうか?
0186nobodyさん
2014/04/02(水) 13:11:18.07ID:???0187nobodyさん
2014/04/02(水) 13:32:26.95ID:???自分でも作れるけど、車輪の再発明みたいな感じで面倒だし。
0188nobodyさん
2014/04/02(水) 13:53:48.92ID:???1人でも3人でもCakePHP使うよ。
3人のうち2人がほかのフレームワークに慣れてるなら、それに合わせるけど。
0189nobodyさん
2014/04/02(水) 15:43:50.23ID:???色んなもの開発して行くうちにそれなりにライブラリは出来て行くから再発明にはならないでしょ
自分で同コストで出来ることをフレームワーク習得にさらに時間費やすならその理由が無いと
少人数小規模すぎると効率化のメリットよりも、処理の重さや習得の手間、細かい所に手を入れ出すと途端にコストが増す、無駄にシステムが大きくなるとかのデメリットのが目立つよね
0190nobodyさん
2014/04/02(水) 16:12:41.55ID:???自動で振られるIDは制御不可能です。
FormHelper をオーバーライドしてカスタマイズするしか無い。
個別に指定するなら第二引数のidキーで指定できます。
0191nobodyさん
2014/04/02(水) 16:16:36.30ID:???Zendみたいなライブラリの寄せ集め的なFWだと
他のプロダクトでも流用できたりするけど、
CakePHPとかはFWに拘束されてしまうからな。
もっと結合度の低い構成にしてほしいとは思う。
0193nobodyさん
2014/04/02(水) 17:26:18.77ID:???後半2行はCakeだろうとオレオレだろうと一緒じゃね?
開発人数や規模が変われば冗長化するのは当然じゃん。
なら、みんなで共有・共通事項で合わせられる、
Cakeのような既存のFW使うほうが、よっぽど効率がいい
0194nobodyさん
2014/04/02(水) 17:33:22.17ID:???0195nobodyさん
2014/04/02(水) 18:00:04.95ID:???経験者ならFW使う前に自作ライブラリ作ってるだろうし、
ファイル数個で済む程度のアプリなら、それ使えば良いと思うが。
0196nobodyさん
2014/04/02(水) 21:01:45.37ID:???CakePHPは完璧でもないし、すこし合わないプロジェクトな事もあるけど、
CakePHPであると言うだけで、それに慣れてる人を探すことができるよ。
オレオレに慣れてる人は、今いるメンバーだけだよ。
本当にちょっとしたものなら、自作ライブラリでもいいけど、
今ならComposerでライブラリとってきて、必要なとこだけ自分で書くのがいいと思うよ。
0197nobodyさん
2014/04/02(水) 21:31:51.71ID:???あれなんなの仕様?
0198nobodyさん
2014/04/02(水) 21:37:35.82ID:???0199nobodyさん
2014/04/02(水) 22:21:06.03ID:???あ、そっちにおいてあるんですね。
Datasource class Mysql could not be found.
って書いてあるから、てっきりファイルが何か足りないのでは?と思っていました。
もう少しソースを見なおしてみます。
>>186
1人だけど使ってます。MVCを楽にやりたかったから。
0203nobodyさん
2014/04/03(木) 02:21:11.20ID:???サーバー安いしねぇ。
運用コストも含めて、要求以内だよ。
チューニングの余地は、アプリケーションのコードにもインフラ構成にも、普通に残ってると思うけど。
サーバー代が1割2割減ったところでたいした額じゃない。
それより、開発・保守開発が効率よくできるほうが、開発費がかからなくてありがたいね。
0204nobodyさん
2014/04/03(木) 08:59:09.29ID:???前も上がってたけど、ソーシャル系は厳しいな。用途次第ってことだ。
ボトルネックの経験がないところには発注するのは怖いな。ネックになった時に投げ出される可能性が高いってことだろ?
0205nobodyさん
2014/04/03(木) 10:11:20.11ID:???0206nobodyさん
2014/04/03(木) 14:48:37.49ID:???パフォーマンスとかうるさく言うんなら、FWやORMはおろか動的言語使うこと自体が要件に合ってないだろ。
0208nobodyさん
2014/04/03(木) 15:28:38.04ID:???0211nobodyさん
2014/04/03(木) 20:11:13.79ID:???2ch乗っとられたってマジらしいな
2chドットsc に移行するらしいが、
'2ch' . '.sc' ってのをNGワードにしているらしい
0213nobodyさん
2014/04/03(木) 23:41:04.71ID:???ERROR:さくらが咲いてますよ。
ってなって書き込みできんかった。
どうでもよかったけど、サーバー側でNGワードとかされると引くわ・・・
0215nobodyさん
2014/04/04(金) 19:02:20.90ID:???0216nobodyさん
2014/04/05(土) 00:43:47.97ID:???人件費は入ってないよ。
インフラが得意でインフラ方面のタスクをよくやってる人はいるけど、
インフラだけやってるって人はいないからね。
ただ、自分たちで何でもやらないとなものもあれば、
ある程度は作業を依頼できるインフラ屋さんに頼んでるのもあったから、
そういう場合は一部入ってると言えるかもしれない。
0218nobodyさん
2014/04/05(土) 23:26:04.89ID:???込みじゃないと比較できんな
0219nobodyさん
2014/04/06(日) 01:43:29.71ID:Iec7CVL5さっきちょっと見てみたんだけどさ、Model の扱いがぜんぜん違うんだな。
これ Cake2 から移行するのって最初から作るのと同じぐらい大変かもしれないな。
というか、それ以上に苦労するかもしれないな。
0221nobodyさん
2014/04/06(日) 04:05:49.26ID:???> さっきちょっと見てみたんだけどさ、Model の扱いがぜんぜん違うんだな。
やっとあるべき姿になったという感じだよね
元々Railsにインスパイアされてできたはずなのに、配列で返ってくるところは絶対変だったよな
まぁ、PHP4に引きずられたんだろうけど…
0222nobodyさん
2014/04/06(日) 10:13:55.10ID:???一人月超えてくると
開発費との比較が必要になってくるな
それまではcakephpで悩まんな
0223nobodyさん
2014/04/06(日) 20:45:00.75ID:???まだストーブが要るとは思わんかった、灯油がもうないよ…
0224nobodyさん
2014/04/07(月) 10:47:00.11ID:???test_hogeというnameならTestHogeにするみたいな
0225nobodyさん
2014/04/07(月) 18:57:19.67ID:LGjnvRjrFormHelper::domId()
0227nobodyさん
2014/04/08(火) 11:37:39.61ID:???ルールを以下のようにしているのですが、
'rule' => array('multiple')
チェックボックの値に0がある場合、1つ選択しただけではfalseになります。
0という値を許可するには、独自バリデーションを作る必要があるのでしょうか?
0228nobodyさん
2014/04/08(火) 14:29:13.60ID:DFrq8PhrValidation::multiple() を見たら、
$check = array_filter((array)$check);
if (empty($check)) { return false; }
ってなってるから、ここで弾かれちゃうんだね。
フィールドの値を変更するか、自作するしか無いね。
コールバック渡せるように作ってくれれば良いのになぁ。
Cakeは、この辺の中途半端な不自由さが結構あるんだよな。
0229nobodyさん
2014/04/08(火) 14:55:21.04ID:???わかりました。自作します。
半角英数字のチェックを配列対応してなかったり、
確かに不自由さは多いですね。
0230nobodyさん
2014/04/08(火) 22:23:04.86ID:???checkboxは他のtypeと違って1個もチェックしないと、空文字列すら送らないんだよね。
なのでFormHelperでチェックボックスを生成した場合、hidden value="0"がチェックボックスと一緒に用意される。
だからバリデーションもそれにあわせて、0は真偽でいうと偽の値になってるんだ。
オレオレフレームワークからCakePHPに乗り換えたときは、そういうところに押し付けがましさを感じていたけど、
慣れてしまえばまぁ合理的かなと思うよ。
チェックボックスをDBにあるマスターテーブルから生成するような場合(割とよくあると思う)、
valueはそのテーブルのidにするのが自然だし、idは1から始まるのが基本的だからね。
なので、CakePHPで開発していくなら、バリデーションを自作するより、
チェックボックスのvalue="0"は未選択とするように、変更するのをお勧めするよ。
0231nobodyさん
2014/04/09(水) 10:48:16.40ID:???名前の姓・名のように、1つの項目で2つの入力箇所がある場合、
バリデーションはどうすればいいのでしょうか?
フォームのnameが
姓:data[User][name][sei]
名:data[User][name][,mei]
として、これ自体のバリデーションは独自関数を作れば出来ますが、
個別にエラーを出力することって出来ませんよね?
例えば「姓が未入力です」「名を日本語で入力してください」
とか出力したいのですが、validateのルール指定では
名前(name)に対する指定で、その下の連想配列に対する
姓(sei)や名(mei)には指定できないです。
0232nobodyさん
2014/04/09(水) 11:56:22.61ID:???f5連打でセッション切れ起こしませんか?
ググって調べてでてきた情報で
Config/core.php最下部に
Configure::write('Security.cookie', 'cakephpfdebackend');
Configure::write('Session.checkAgent', false);
Configure::write('Security.level', 'low');
を追記してますが効果無し。
IE、FireFox、Chrome全てでセッション切れます。
2.3時代からcomposerでアップデートして現在最新ですが
2.3時代でも起きていたように思います。
開発途上段階でaclを入れようと、
alaxos/aclプラグインを導入しましたが、
設定画面で全てのアクションに対するRoleごとの権限をajaxで取りにいく部分があって、
既存のアクションが50はあるので、Role3つ*50で150回のajaxリクエストが走りますが
この途中で確実にセッション切れを起こしてしまい、困ってます。
セッション切れが起こるタイミングはまちまちで、リクエスト回数によるものではなさそうです。
$this->Auth->allow()を置いて認証を使わないようにしないと設定できない状況です。
何か手がかりになりそうな情報はないでしょうか?
0233nobodyさん
2014/04/09(水) 12:49:01.33ID:???バリデーションもだけど、その構造だとsave()できなくないか?
姓:data[User][sei]
名:data[User][mei]
どういうテーブルスキーマか知らんけど、普通にこれでいいんじゃないの?
0234nobodyさん
2014/04/09(水) 13:22:45.53ID:???beforeSaveで1つのnameにするので大丈夫かと思います。
単純にsei、meiを分ける方法が一番簡単だと思うのですが、
日付のフォームとか、Cakeは連想配列で管理しているので
同じように[name][sei]と出来れば良いなと思っています。
0235nobodyさん
2014/04/09(水) 21:52:21.95ID:???どう?
http://www.matomater.com/9769/
0236nobodyさん
2014/04/10(木) 06:44:41.50ID:???でも日付って、年月日で別個にバリデーションできたっけ?
日付としてひとまとまりだったような気がしたけど。
日付はそのままsave()出来るような気がしたけど、これって特殊だよね。
日付で出来る事だからといっても、その辺CakePHP内であまり汎化されてないような気がする。
まぁdata[User][name][sei] でポストするのはうまくいくとしたとしても、
バリデーションはすっきりとは行かないんじゃないか?
0237nobodyさん
2014/04/10(木) 09:24:25.58ID:???確かにそうですね。
それに年月日の場合、個別にバリデーションする必要無い気もします。
単に「日付が正しくありません」というメッセージを出せば
年が抜けてるのか月が抜けているのか関係無いような。
でも、この辺がもう少し柔軟性あればいいですよね
やっぱりフォーム側を[name_sei]のように変えるしか無いんですかね・・・
0238nobodyさん
2014/04/10(木) 10:57:39.51ID:ekNccxsFバリデーションしてから beforeSave 出来るわけだから、
スキーマを name にして、ルールを sei, mei の2つにする。
んで、 beforeSave で値を結合すれば良いんじゃない?
ただ、バーチャルフィールドを使わない理由は?
name を1フィールドにしなくてはならない要件があるの?
0239nobodyさん
2014/04/10(木) 11:10:48.64ID:ekNccxsF>>236 の言うように date や datetime は
Model で各要素を個別に扱えるようには作られてない。
0240nobodyさん
2014/04/10(木) 11:12:27.99ID:???0241nobodyさん
2014/04/10(木) 12:41:05.32ID:???情報ありがとうございます。
if(!isset($_SESSION)) session_start();
を試したところ、セッションは切れないのですが
CAKEのセッション機構の設定が全部死んでしまいました。
これで解決させるとまずそうです。
最初からやっとけという話ですが、
CakeSessionを追ってみたところ、Session.autoRegenerateがtrueの場合
ある一定数のリクエストがあるごとにセッションIDを変更しており、
その変更のタイミングで同時リクエストが走ると
そこからセッション切れが発生する事がわかり、
autoRegenerateをfalseにして解決しました。
0242nobodyさん
2014/04/10(木) 14:11:17.70ID:???詳細は忘れてしまったけど、要注意だ
0243nobodyさん
2014/04/10(木) 14:21:07.20ID:???Strutsみたいのだとまた違うけれど
0244nobodyさん
2014/04/10(木) 14:33:01.94ID:???FormHelperのコードを見るとわかるけど、バリデーションのエラーメッセージの表示は、
Modelname.fieldname という構成を想定してるよ。
バリデートルールはModelに書くから、Controllerが保持する$validationErrorsも、
[Modelname][fieldname]という2次元配列で格納されている。
$this->Form->input('Modelname.fieldname') で、その$validationErrorsの中身と対になるようになってる。
例外でモデル名を省略できるケースはいくつかある。
$this->Form->create('Modelname');
$this->Form->input('fieldname');
Controllerのusesが1個の場合と、複数ある場合1個目のモデル、usesを書かずコントローラー名からモデル名がわかる場合は、
$this->Form->create();
$this->Form->input('fieldname');
でもいけたような気がする。たぶん
0246nobodyさん
2014/04/10(木) 15:58:45.85ID:???ほんとにそんなバグあるの?
0247nobodyさん
2014/04/10(木) 16:11:15.52ID:???Cake2.3.5で、Windowsのコマンドプロンプトからbakeしてます
cake bake view テーブル名 を実行しても
Welcome to CakePHP v2.3.5 Console
---------------------------------------------------------------
App : app
Path: appのパス
---------------------------------------------------------------
と出るだけで終了して何も起きない
インタラクティブでやると
Would you like to create the views for admin routing? (y/n)
[n] >
の後で終了して、何も起きない
0248nobodyさん
2014/04/10(木) 16:11:16.67ID:???詳細を書いてほしいものだ
レスがなければ嘘だと判断していいと思う
0249nobodyさん
2014/04/10(木) 16:13:07.05ID:???WHERE 1=1 でDELETE発行するバグが1.3.4まであった
http://web.archive.org/web/20110803234417/http://cakephp.lighthouseapp.com/projects/42648/tickets/250-model-delete-bug
ググれば過去スレも出てくるよ、12ホール目
0250nobodyさん
2014/04/10(木) 18:03:59.14ID:???以下のコードをコントローラのアクションに入れて実行
$this->テーブル->delete();
バージョン 1.3.2 1.2.8 1.2.0 のいずれも発生しなかった
>>249の提示した記事は英語なのであまり深くは読めていないが
ライブラリのmodel.phpを修正して$model->exists()をコメントアウトしてみたところ、
一応再現はできた
まとめると
�@モデルのexistsメソッドをidが指定されていなくてもtrueを返すように上書き
�Aモデルのdeleteメソッドを引数なしで実行
したときに DELETE FROM `テーブル` WHERE 1 = 1
が実行される(もちろん全テーブルじゃなくて1テーブルだけだが)
まあほとんどの人には縁のない現象といえるかな
もっと単純に再現できるコードがあるのなら提示してほしい
0251nobodyさん
2014/04/10(木) 18:47:46.61ID:???0252nobodyさん
2014/04/10(木) 19:06:10.92ID:???古いことなので今更調べる気にはなれない。
0253nobodyさん
2014/04/10(木) 20:45:55.49ID:???オラクルとかのトリガーでも自テーブルへの処理は参照すらできないから
記事のbeforeDeleteのような実装は単なるコーディングミスと判断していたよ
普通の処理とみなす人もいるってことね
0254nobodyさん
2014/04/10(木) 20:58:33.13ID:???その原因を突き止めるのに苦慮することが多いよね
0255nobodyさん
2014/04/10(木) 21:09:13.27ID:???0256nobodyさん
2014/04/10(木) 21:58:13.10ID:???0257nobodyさん
2014/04/11(金) 21:38:10.95ID:???どうして「01」と「1」に分かれているんですかね?
値はどちらも0が入っているのに
0258nobodyさん
2014/04/15(火) 08:59:05.93ID:eAedbEAoそういうもんなの?使えねーじゃん
0259nobodyさん
2014/04/15(火) 12:13:57.73ID:???2系(たぶん2.3〜)でCookieコンポーネントを使って
ユーザーデータ等を保存する場合、
$this->Cookie->write('Auth.User', $this->request->data['User']);
みたいにすると、
$this->Cookie->delete('Auth.User');
で削除できません。ログアウトの時にこれを入れても削除されません。
$this->Cookie->write('AuthUser'); で保存して
$this->Cookie->delete('AuthUser'); で削除はOKでした。
どうやらドット記法が原因のようです。
ログインフォームの自動ログインで上記のような書き方を
推奨しているサイトがちらほらあったので、注意してください。
ログインフォーム以外も何かしらCookieコンポーネントを
使うケースがあるかと思いますが、
出来るだけCookie名にドットを入れないほうが良いみたいです。
0261nobodyさん
2014/04/15(火) 15:56:03.67ID:???ためしてみたけど普通に使えたよ
使ったバージョンは2.4.6
App::uses('Validation', 'Utility');
debug(Validation::url('http://ほげ.com/漢字.htm'));
結果はtrue
0262nobodyさん
2014/04/15(火) 17:25:40.94ID:eAedbEAoバージョン上げてみようかな
0263nobodyさん
2014/04/15(火) 18:29:39.18ID:???$user = $this->User->read();
みたいな書き方って、あんまりやらない方が良いみたいだね。
この後にsave(更新)したら、request->dataに無いカラムも更新しようとして
空更新されて焦ったわ
0265nobodyさん
2014/04/16(水) 13:37:09.77ID:???いちいちサーバにアップしてSSHからコマンド実行して〜
というのが面倒に感じまして。簡単に実行確認出来る方法があれば教えて下さい。
0266nobodyさん
2014/04/16(水) 15:23:58.68ID:???できるけど、結構大変だろうなと予測。
というかそもそも設計がおかしんじゃない?
Shellでもブラウザでも呼び出せるタスクを切り離すべきだと思う。
0267nobodyさん
2014/04/16(水) 15:28:42.31ID:???Shell内でコントローラを読み込んでアクションを実行できるんですね。
それならブラウザ上でも確認できるので問題なさそうです。
0270nobodyさん
2014/04/16(水) 19:41:36.54ID:???書いているうえに肝心の実現方法を書いていないので不適切な回答だと思うが
>>267の結論はもっと意味不明で全く>>266と噛み合っていないので
>>268で呆れられてしまったということだろう
たぶん>>266が「できる」と書いたのは
execやpopenでcake.shやcake.batを呼び出すことじゃないかと予想してみる
OS依存なので個人的にはお勧めできないが
Shellとコントローラの両方から「標準で」使えるものはモデルだけだと思うよ
コントローラやコンポーネントやヘルパーなどをnewして使うようなやり方は
動作はするかもしれないが正しいやり方とは思えないな
0271nobodyさん
2014/04/16(水) 20:07:27.22ID:???「正しい書き方ではないけど動作する」なら、それでいいんじゃないか?
こんな事言うといつも「複数で開発する場合は迷惑だ」とか言う奴いるけど、
目的は「動作する」事であり、綺麗なソースを書くことじゃない。
それに複数人で開発するなら
「良い書き方がわからなかったから、この方法にした」
って説明すればいいだけだろ。情報共有しろよ。
0272nobodyさん
2014/04/16(水) 20:14:11.37ID:???Shell で呼び出す処理を別の Model だか Lib のクラスに移して、
ShellからもControllerからも実行できるようにすれば良い
0273nobodyさん
2014/04/16(水) 20:39:15.00ID:???よくあるメール一斉送信とかShellで作るけど、
その時の条件分岐やらModelに対する指示なんかはControllerに書くわけで。
メールの送信自体はライブラリ化しても良いと思うけど。
0274nobodyさん
2014/04/16(水) 22:05:21.32ID:???それができるとテストが便利で実装が楽でバグが減るんだっていうんだから
設計だとか綺麗かどうかとか関係ないだろ
■ このスレッドは過去ログ倉庫に格納されています