岩手からこんにちは ☆彡 perl とかウェブ系なブログ

はてなダイアリーからひっこしましたよ http://d.hatena.ne.jp/rosiro

Amon2の俺おれディレクトリ事情

Webアプリのディレクトリ事情 http://yusukebe.com/archives/20130130/183800.html
って記事を見てmojoじゃなくてamon2だけど以下のようになってる。

Amon2にはアプリ作成時にテンプレート的なひな形を作るflavorがあるけど、つくるのめんどいのでsedで置換してる

find . -type f | xargs sed -i 's/hoge/fuga/g' 

ディレクトリとファイル

.
├── Build.PL
├── app.psgi
├── config
│   ├── deployment.pl
│   ├── development.pl
│   └── test.pl
├── lib
│   ├── MyApp
│   │   ├── DB
│   │   │   └── Schema.pm
│   │   ├── Model
│   │   │   └── User.pm
│   │   ├── Web
│   │   │   ├── C
│   │   │   │   ├── Etc.pm
│   │   │   │   └── Root.pm
│   │   │   ├── Dispatcher.pm
│   │   │   └── View.pm
│   │   └── Web.pm
│   └── MyApp.pm
├── log
│   └── development_2013_02_01.log
├── script
│   ├── make_db_schema.pl
│   └── sed_replace_myapp.sh
├── sql
│   ├── MyApp.sql
│   ├── mysql.sql
│   └── sqlite.sql
├── t
│   ├── 00_compile.t
│   ├── 01_root.t
│   ├── 02_mech.t
│   ├── 03_assets.t
│   ├── 06_jslint.t
│   └── Util.pm
├── template
│   ├── index_garak.tt
│   ├── index_pc.tt
│   ├── index_smart.tt
│   └── static
│       ├── css
│       ├── image
│       └── javascript
└── xt
    ├── 01_pod.t
    └── 02_perlcritic.t

大体同じようになるんじゃないかんとか思うんだけど、templateディレクトリにはText::Xslateテンプレートファイル群とテンプレ内で使う画像やcss,javascriptファイルが置いてある。 /template/index_pc.ttとか_pcはWeb.pmでユーザエージェント見て$c->{terminal}とかに入れて、コントローラで

$c->render('index_'.$c->{terminaml}.'.tt' => {
...
}

みたいにしてる。

公開用ディレクトリ?ってのはこのディレクトリには置かない、公開するサーバ、アプリによって変わるので/config/development.pl /config/deployment.plにディレクトリのパスをかを書いてある。

├── lib
│   ├── MyApp
│   │   ├── DB
│   │   │   └── Schema.pm
│   │   ├── Model
│   │   │   └── User.pm
│   │   ├── Web
│   │   │   ├── C
│   │   │   │   ├── Etc.pm
│   │   │   │   └── Root.pm
│   │   │   ├── Dispatcher.pm
│   │   │   └── View.pm
│   │   └── Web.pm
│   └── MyApp.pm

アプリ本体のlib内では大まかにDB、Schema.pmとかが入る(script/make_db_schema.plが書き出す)、Modelは肝心な部分、Webはウェブ用、dispatcher.pmでrouter::simpleでWeb/Cのコントローラに割り振る。

Web,pmではコントローラに渡す前の処理(セッションだとか、ユーザの処理とか、user_agentで振り分けるとか)と、渡した後の処理(headerとかいじるとか、stickqueryつけるとか)を行う。 

MyApp.pmには$c->dbでdb使えるようにとか、$c->timepieceとかでtime::piece使えるようにとか、共有して使うような処理。 PLACK_ENVにてconfig/development.pl、config/deployment.pl、config/test.plを間違えないように現在のモードを表示する処理などがあり。


sqlディレクトリにはmysqlテーブルのsqlだとか

何がいいたいかというと、こうして書いてみるとすっきりするものですね。

追記:やっぱり端末毎に.psgi、コントローラ分けた方がすっきりするし、バグも減ると思う。 おなじアプリに携帯用stickquery付けたり結構めんどかったので、すっきりします。