kagamihogeの日記

kagamihogeの日記です。

Seasar Conference 2009 Spring のレポート

Seasar Conference 2009 Spring - トップページ に行ってきました。

セッション一覧 を見ればわかるんですが、今回は事例発表のコマ主体でした。勿論技術者向けの濃いセッションもありました。ただ、俺は今回事例発表をメインにやってる部屋にずっと居ました。なのでレポートもあんまし技術的な色が無く、いつもにも増して個人的なメモ色が強いです。事例発表の部屋にずっといたのは、布教の仕方というか何故 Seasar2 を使うに至ったのかというか、そういう点にすごく興味あったりするから。Seasar2 のプロダクトって魅力的なものがすごい多いと思うだんけど、俺自身は仕事ではまだ全然使ったことがない―使いたいんだけれども。

ただ、ひがさんの BigTable の話は部屋から人あふれるぐらい盛況だったのでちょっと聞きたかったなぁ……とw ライトニングトークスの後にアンコールでもう一度話してたらしいんだけど、私用のためそちらも聞けず。他の人のレポートを楽しみにしよう。

というわけでレポート本編。

Slim3 on Google App Engine / Java

今日はひがさんカジュアルな服装だなぁ……とか余計なことを思いつつ GAE 動くのはじめて見るのでwktkしながら聞き始めたセッション。言い訳がましいですが、俺はまだ GAE 動かした事すらないというクソ野郎なので、なんか変なこと書いてる可能性あります。変なこと書いてるようだったら容赦なく dis ってやってください。

最初にひがさんから会場に質問。App Engine 使ったことある人……会場の 3/1 からちょっと大目に見て 1/2 ぐらい? BigTable にちょっと違和感持った人……若干名。

app engine は、サンドボックスなどや BigTableRDBMS と違って JOIN が無いことなど、各種制限があり、これが結構きついらしい。つまり、既存のやり方が通じない場合がある、とのこと。ただ、既存のやり方が使えないケースがあるからといって、それをもってして app engine は使えない、と断定してしまうのは危険でないか? と。それらの制限によって生じたトレードオフで得られるメリットがあるのでは? と考えることが重要ではないか? と話していた。たとえばスケーラビリティの恩恵とか。

Slim3 の話。GAE/Java 用のフルスタックの MVC フレームワーク。app engine 上では、今までの Web アプリのフレームワークとかやり方とかが結構動かなかったりするらしい。そのため、Slim3 は google が出してるホワイトリスト(app engine ではこういう API しか使えません and 使うことを推奨のようなことが書いてあるもの)を基に、今までの Slim3 にちょっと手を入れなおして作り直したもの。

Slim3 のコンセプトはシンプル、less is more(本質的に必要なものだけを提供する) app engine 上で Web アプリケーションを作るために最小限必要なことだけを提供、というのが基本コンセプトのようだ。ちょっと便利な機能とかは Slim3 では提供しない。

Slim3の提供する機能は大きく三つ。TDD Support - テストをやりやすくするためのもの。HOT reloading - HOT Deploy に近いような感じのものかな? TDD の回転数を上げるためにも重要、と話していたのが印象的だった。Type safe query - 文字列ベース(ソースに SQL 直書きとか)みたいなのでなく、モデルとなるクラスのプロパティでアクセスできる。思想的というかソースコードとしては S2JDBC に近い感じの印象かな? それと、メタデータ担当のクラスを変更すると、コンパイル時にモデル側のキー名も同期して変更してくれる。BigTableRDBMS とは違いスキーマレスなので、こういうのがやりやすいらしい。

Slim3 からは関連しつつもちょっと脇道に反れて TDD とモチベーションの話を少ししていた。TDD の利点は、良い設計を保つとかそういうのも大事だけど、red-green のリズムをとることで、プログラマのモチベーション向上に寄与してるのも大きい利点なのではないか、と。

Slim3 で足し算を作るデモ。URL に対応したコントローラーとテストケースのスケルトンコードの Ant で自動生成、TDD 的に一度に一つのことを上手くできるよ的なデモ。設定ファイルレス、HOT Reloading でさくさく開発できるよ的なところの紹介。

事例発表1

ここからずっと事例発表のターン。発表のスライドから気になった点などをメモ的に書いているだけなので、正確性・網羅性に欠ける記述になっています。ので、気になった場所については講演資料を直接参照することを推奨します。タブンそのうち全部見れるようになる……のかな? どうなんだろ。

Seasar の利用状況について あらため初めての S2 入門(非技術編)

Seasar と一口にいっても三種類ある。ソフトウェアとして、プロジェクトとして、組織として。ソフトウェアとしては、OSS,Javaの国産DIコンテナ。プロジェクトとしては、Web アプリのフワームワーク、Java と S2Container を中心に展開。 組織としては、Seasar ファウンデーションNPO法人。

Seasarの歴史。大まかに大きな出来事としては…… 2004 年開発開始・Seasar2/s2Daoリリース。2005 年 S2JSF, Seasar カンファレンスの開始 NPO法人設立、2006年 Teedaリリース、2007 年 S2系プロダクトが増え始める、S2Struts、 2008 年 理事会体制強化、他コミュニティと連携開始、2009 年 Seasar 基金設立

S2Containar の説明、構成などの解説。今は SAStruts + S2JDBC がいちおしか。

Seasar2 の入手方法、サイトから DL、Maven2Dolteng の使用など。

Seasar2のライセンス。Apache Software Lisence 2.0

OSS のデメリットであるサポート。OSSコミュニティからのバックアップ、電通さんの商用サポート事業。

seasarの利用状況。月間(だったっけ?)DL 数 1000(maven2,dolteng からは除外) Web サイトの PV は総計 3700 万、先月は 120 万。

Seasar は DI コンテナとして紹介されることも多いが、魅力的なプロダクトも豊富であり、導入障壁も下がってきて成熟してきているのではないか、というシメでした。

電通国際情報サービスISID)における事例 seasar 普及への取り組み事例

全体としては、seasar のエンタープライズ利用をもっと推進したい! ってノリでした。これは俺も知りたいとこです。話聞いてる限りだと電通すごいのう、今まで良くしらなんだけど……

ISIDseasar の取り組み。大まかには……黎明期 - 2003/6(マネースクエアジャパンの外貨取引システムに採用。日経システム構築 2003/6 など)、助走期 - 2005 デブサミやNPO設立、この年、ISIDとして、開発案件に初の適用、商用サポートの開始。2006-2007 本格的に適用、協業化 三菱東京UFJの案件に採用など。
 
商用サポートの紹介。ISID のホームページに詳しいことは書いてる、とのこと。サポートの大まかな内容としては…… 1.最新版向けの開発時の課題解決。ホットフィックスの提供など。2.バージョン固定の特定バージョンを安心して使用するためのもの。固定バージョンを ISID に保持、など。3.コンサルティングサービス。お客様固有の課題解決のためのも。

商用サポートの想定と実際。意外?と大規模案件にも使われてるし、そこそこの数・期間の利用がされている、とのこと。

適用事例。外向けにも多く出てるのはやはり三菱東京UFJ。規模は数 100 人月、外注数社、オフショアもあり。大きいのだと開発 2 年弱,1000人月とか、いずれ 10 年利用も視野に入れてる事例もあり、など。

なぜ S2 が注目を浴びたのか? Java が世に出て10年、コンポーネントの再利用はスローガンとして語られたが、中々難しく、Sun は EJB を推進したが、思想そのものは良かったがなかなか色々とむつかしかった。OSS の利用が急速に広まり、ロッドジョンソンののアンチ EJB 論などetc,etc……

お客様にどう提案したか。DIコンテナ、依存関係の逆転、POJO,AOPなど。それらの技術的な利点でどうお客様に利点があるかを説明。生産性向上、保守拡張性、テスト効率、学習コストの低減などを、なぜ、DI などの技術でそれが可能になるか? を丹念に説明してるようだ。

もっと Seasar - オープンソースの事例を公開|オープンソースビジネス推進協議会 - 企業におけるオープンソースの活用事例をどんどん公開していきますオープンスタンダード化支援コンソーシアム の紹介。

事例紹介パート2 - 今、面白くない(?)Seasar が面白い

  • 案件の概要。RTGS - 金融機関の資金および国債の決済を日銀ネット経由でリアルタイムに実施し、流動性管理を行うもの。
  • 画面、データモデル、他システム連携を図を交えて解説など。
  • クライアントは Flex、サーバサイド JavaS2Flex2で連携)、一部サーバプッシュもアリ。そっからミドル(S2JMS で MQ)連携。S2Daoで既存SQL、プロシージャの利用。核はsesar2.4 利用。
  • コメントとしては SmartDeploy 初期のトリッキーさ(cool,hotの差など)に戸惑った話。他システム連携がポイントだったので、S2Flex2,S2JMS がキーになった、などの話。
  • 講演者の私観。Seasar2 の成熟度は Struts に似てきたかも? 提案時の強み―なので、現実的なアプローチとして理解されやすくなってきた。

タイトルの「面白くない」ってのは成熟してきたという意味合い。これからは、Seasar2 をどううまく使うか? って部分が面白くなってくる時期かな、みたいな。

事例紹介2

S2Click をはじめとする Seasar ファミリーを活用したアジャイルシステム

紹介する事例としては、100 画面程度の比較的小規模な Web アプリケーション。

導入のきっかけ。納期が短く、要件が箇条書きのものしかなくて中々決められず(作りながら決めざるを得なかった、とのこと)、なるべく生産性の高いものを使う必要があった(言語は Java というオーダー)。結論としては、Seasar2 のプロダクトは小規模なプロジェクトほど効果がある。小規模 PJ だと専任の基盤チーム(電通さんのように)を置けないので、設定ファイルレスとか、そういうところがじわじわと利いてくる、とのこと。

Click Framework とは。イベント駆動、コンポーネント指向の Web アプリケーションフレームワーク。イメージ的には JSF に近い感じ? ただ、シンプル・高速・教育コストは低い。ドキュメントはかなりある(日本語翻訳もあり)。スライドで出てたソースをみた感じでは、WicketJSF(か Teeda) を足して二で割ったというか……

S2Click - Click Framework と S2 の連携。HOT deploy 対応などなど。

S2JDBC は現状アジャイルに最も向いている O/Rマッパー、とのこと。メリットはタイプセーフ(テーブル設計変更してもすぐコンパイルエラーになる) デメリット:細かい・複雑なSQLが書けない。

S2Chronos - cron というかスケジューラというか。アノテーションでバッチ実行みたいな。war に含められる。小規模アプリのバッチに最適。

アジャイル開発のための工夫。リスクヘッジ - 仕様が決まらないに対抗するため、仕様フリーズのチェックポイントをどこかで設ける。結合試験は従来どおり、ある程度期間とって、品質を担保。

AmaterasERD - ER 図から DDL やテーブル定義書を生成、DBに反映、エンティティクラス生成。

今後の課題。開発の部分は効率化されてるが、テストの効率の悪さが目立っている。DB周り(データ生成)、UIのテスト(手動) Selenium とかでもちょっとテストできない部分をどうするか、とか。

Seasar 入門から始めた 300 機能のシステム開発

Seasar プロダクトとの出会い - 2005 年。帳票出力系のシステム、画面 120、投票・CSV 160。で、2006 年、これだけの量をフルスクラッチはムリということで、Strtus と Seasar の話が持ち上がってきた。講演者によると、seasar conference 2006 を聞きにいって構想が現実味を帯びた、とのこと。

意外な発見と反省 - dicon で DB 切り替え、SQL実行時ログ、S2Dao の 2waySQL、VersionNO による排他制御・よくあるマスメン系は90%自動生成、などいろいろな機能に驚いた。反省としては、リリース情報はまめにチェックする必要があったなぁ、と。

300 機能を作った人たち。プロト作成・調査担当、実際に開発を行うプログラマ間の情報共有などの体制を整備して、フィードバックを行える体制補完。

たられば - これから Seasar プロダクトを使用している方への Tips

  • 外出し SQL を使うなら専用のドキュメントを用意。
  • S2Daoトランザクション処理はやや手間 -> スケジュール少し多めにとっておく
  • プロトタイプ。雛形は多めにつくっておくと後々の人が参考にするのがラクになる。
  • 複数拠点での開発は、SQLファイルの衝突に注意。命名規則の徹底など
  • 外出し SQL の過信は禁物。複雑・IF つかいすぎはメンテ性を悪化
  • S2Dao の過信も禁物。大量データ受信とかやっちゃうと(コードからではDBアクセスしてるのが見えなくなりがちなので)レスポンス性の悪化を招くなど
  • 今なら Dolteng がある(2006 年にあったら……と言ってました)のですごい便利。
アジャイルseasar とケータイと私

モバイルWeb業界の特徴。公式サイト 1 つの開発に1,2ヶ月。課金の仕組みなど独自ノウハウが必要。広告打ったりすると秒間 2000 とかいきなりアクセスがきたりする。

Seasar 導入のきっかけ。品質の低下にクラス間の依存関係が問題だと考えていて、IoC コンテナが有効ではないか、と考えたのがきっかけ。導入期は S2Dao, S2Unit でのユニットテストの取り組みを強化。テスト品質や、設計品質の改善はされたものの、まだまだ手探り状態で残業は減らすのが中々難しかった。次の段階で、目に見えて開発効率がよくなった。S2Struts,S2Dao でサイト構築コード量削減、UnitTest 量の削減。

しかし、S2を使える人、使えない人でギャップが発生。S2 そのものは良いが、一部の人のものになってしまっていた。この状況の打破は、アジャイルなプラクティスの実践を試みた。ペアプロ、コードの共同所有、KPTでチームビルディングで浸透突破を図った。効果は覿面で、どんどん浸透していった。共通の認識や Tips が浸透。

seasarアジャイルの親和性。ペアプロやりやすかった(ドキュメント日本語で調査理解がスムーズ、など)、S2 ファミリー使えば自然とシンプルな設計になるのも利点。テストがやりやすい。MockInterceptor -> EasyMock へ進化。計画しやすい、コンポーネント単位で考えればいいので、見積もりやすい。

現在、アジャイルな開発が全員に定着、全員 S2 を使えるので開発者の再配置も容易に。maven2 も強力な味方。S2 のバージョンアップ・依存関係開発にカンタンに追従してくれる。ただ、新規に新人いれるときに教えることがたくさんあるので、人員の初期導入コストはちょっと高くなったようだ。

事例発表3

Seasar2 みんなでやればこわくない

Adwords API, Overture API を利用した AD EBiS Autobid の開発事例。

PHP から Java へ移行した事例も兼ねた発表。Java ってなに? フレームワークって? ってところから始めた事例でもある。

AD EBiS Autobid とは、広告自動入札システム。google 検索の右っかわに出てくるアレに出す広告を自動で入札とか登録とかやってくれるものらしい。入札ルールに応じて、自動で広告出すかどうかを勝手にやってくれるもののようだ(すいません良くわかってません)

Web は SAStruts, Mayaa, バッチとかは S2Chronosgoogle API なんかの Web サービス連携は S2Axis, DB 連携は S2JDBC で。mayaa の HTML テンプレートはデザイナーさんとの協働があってデザイン分離に役立ってくれたが、ドキュメントが少なく、苦労した面があったようだ。

はまったところ。Linkage Error - Hot deploy のところ。このあたりの情報がまとまっていればなぁ、と思ったようだ。事例発表では、Hot deploy にハマったって人多かった印象。hot-cool-warm モード間の挙動の違いとか。どっかにまとめサイトみたいなのあるのかな?

Seasar2 はどうやって勉強したらいい? 本、blog、ML。seasar-user-ml のレスポンスは早く、かなりお世話になったようだ。

JavaSeasar2 を使ってよかったこと。プログラミングがたのしくなった! PHP のようにロジックと html が混在することがなくなりコードがシンプルに、ユニットテスト green-red でリズム感。Java は決して生産性の低い言語ではない、と感じたとのこと。

Web サービスの育て方 - チョイスタディの場合 -

チョイスタディとは。e-learning のシステム。無料のインターネット学習サービス、無料で使える学習システム | Choistudy。一問一答でエンジニアのスキルアップ、特に基礎向上を目的に。利用シーンとしては、新人研修や基本情報処理技術者試験対策に使われている。

歴史。2005/9 に TECHSCORE サイト内サービスとしてスタート、2009/6 では累積300万解答突破、ケータイ版αリリース。

システム構成。フロント側,APIサーバは S2Dao,Cubby,Mayaa, 管理は GAE/P で。まぁこのへんの図はプレゼンの資料見てもらったほうがいいよね……

アーキテクチャ刷新のねらい。Spring,Struts,Hibernate から乗り換えた。パフォーマンス向上、開発速度向上、Ajax など RIA 系技術導入が主な目的。

サービスの育て方。定期的に機能やコンテンツの追加があること、品質も大事(永遠のベータとはいっても) このバランスをとってサービス展開していくのが大事なのではないか、と。

リリースには魔物が潜む。その場でコンパイルしたコードを紛れ込ます、とかなるたけやりたくない。maven-release-debug で完全自動化。機能・コンテンツ追加で AP サーバ再起動が必要かどうかの切り分け、Selenium によるテスト自動化(全画面閲覧だけをするテスト、とか)テスト→最低限の品質担保。

バージョン管理によるいつでも戻れる安心感での作業。定型化できるものはスクリプトやツールを手間を惜しまずどんどん作る。

品質確保にテスト重要。このテのサービスだと一気呵成に作り上げるのも重要だが、サービスを育てるという観点ではテストを書くのは重要になる、と話していた。テスト道具としては、S2Unit,Selenium,CIも有効。

ここまでできる TeedaDBFlute

anesta - 塾経営のノウハウを共有するためのサービス。anesta 塾経営統合マネジメントシステム 〜アネスタ〜

検討したプロダクト
Sprint + Struts + iBatis - XML 地獄経験済みで×。
Spring + Click + iBatis - 日本語ドキュメントがネックで却下。
S2Container + Teeda + HOT Deploy - 規約ベース、HTML テンプレートを期待して導入。やっぱり HOT Deploy まわりではまったり、規約ベースは調査・学習コストがあったり、HTML テンプレートまわりは特性を理解する必要があったり、など。苦労する点はあるにはあった。

学習コスト低減のヒント。専任のアーキテクトを設置、アーキテクトの作成したプロトタイプや調査した技術・知識を基にチームへ展開・情報共有。このサイクルが重要。

Teeda 利用するうえでのヒントをいくつか紹介。Page はシンプルに、Teeda の Scope の理解が重要などの話。

DBFlute の話。話聞いてるとなかなかすごい。S2JDBC と比べるとどうなんだろ? 聞き入ってメモすんの放棄。

データソースの切り替えとか、サラッといってたけど結構すごいことやってるなぁ、という印象でした。

ライトニングトークス

OSS コミュニティと権利問題

NPO とは? 特定非営利活動とは、法に定められた活動分野(14種:ボランティアとして意味のあると定められているもの)、非課税。法人とは権利義務の主体となりうる。死亡しない(生の人間と比べて) の二つの要素で構成されている。

saesar としては 14 種のうち 3 種が該当。国際貢献、IT産業への貢献、経済発展の三種。

情報開示義務がある。社員権利特性。透明性が要求される。また、法人なので個人の事情に左右されない継続性もまた要求される。

NPO 社員の権利特性。seasar の場合は著作権などの権利主体者となる。年限権利かつ入会拒否されない。年会費納入者が NPO 社員になる。法律で入会拒否できないことになっている。資本主義でないので、年会費の納入口数に限らず議決権の大きさは等しい。

あるソフトウェアに対して、特定の個人が権利を要求したり、何か特定の人たちに帰属してしまうようなことがないように、Seasar ファンデショーンは NPO 法人化した、という経緯があるようだ。

なので、NPOの社員が少ないと趣旨のとおりにならないんで、NPOに入会してくださいっって言ってました。一口 1000 円。また、企業単位では一口 50000 円。



以上。S2 系のプロダクトは仕事でマッタク使ったことがないけど今年こそは……! と思っている人がお送りするレポートでした。