はちゅにっき

こっちのブログはまったり更新

endeworks での WebApp の作り方

エンド ワークス
ではなくて
エン「デ」ワークスです。
ENgineer DEsign works
エンジニア募集中です。

事前に

特別なことをやっているわけではない。
あぁ、標準サイズなんだなぁと実感してもらえれば幸いです。

endeworks での開発

開発サーバは特に用意していない。
エンジニアのMacBookの中に全部収まっている。

テスト

t/* 以下にテストコードがある。
Test::FITesque が最近のはやり。

Deploy

git のマスターリポジトリから git pull するだけ。
特にツールは使っていない。

設置

Apache + FastCGI

mod_perl + Lighty という時代もあったけれど今はこれで落ち着いている

FCGI

daemontools でプロセス管理

  • プロセス監視機能が入っている svscan
    • 気づかずサービス停止という危険性が少ない
  • コマンドでのプロセス管理がかんたん
    • たとえば
  • 複数のプロセスを同時に再起動できる

svc -t /etc/services/*

Model

Catalyst のモデルは使わずに API Model を使っている。
Catalyst 依存になるのは困る
CUI で使いたいことも多い
かわりに Model 相当するクラスを作る

キャッシング

ORM では行わない
API で行う
人間が明示的に保存削除できるようにしている
pk を key として、行の内容を Value とした kv strage にキャッシング
複数行をキャッシュしたい場合は、pk の配列だけキャッシュする

DI コンテナ

App 全体で共有するインスタンスは Registry というモジュールに格納しておく
DBIC のコネクションとか。

Registry モジュール

key-val store するだけの singleton モジュール
MooseX::Singleton 使ってたきがするなー。

そのた

  • Result 定義をもとにテーブル生成
    • DBIC の deploy 機能を使っている
  • Form の作成は HTML::FormFu を利用
    • all-in-one 過ぎて生成される HTMLL に融通がきかない
      • Validator だけ使うのが今のハヤリ

具体的な実装

pixis
CatalystSNS
Catalyt 5.8 に依存

Pixis::API::*

Model を抽象化してアプリケーションロジックを加えたもの
必ず共通で
Pixis::API::Base::DBIC
を extends している
DB のキャッシュを橋渡しする

MooseX::WithCache

キャッシングのバックエンドを指定すればキャッシュが取り扱うことができるようになる

P::A::B::DBIC

find / update / delete / search
WithCache しているので find では pk に対して Cache を探したりする

Pixis::Registry

PixisRegistry->set(schema => master => $schema);
pixisRegistry->get(schema => 'master);
本体自体はカンタンな構造

Pixis

最新版は
branch roller で開発中
master は今は古いよ