spring boot + doma + angularjsで作るerp (line fukuoka meetup版)

42
Spring Boot + Doma + AngularJS で作る ERP(統合基幹業務システム) LINE Developer Meetup in Fukuoka #9 2014/12/20

Upload: -

Post on 13-Jul-2015

762 views

Category:

Internet


2 download

TRANSCRIPT

Page 1: Spring Boot + Doma + AngularJSで作るERP (LINE Fukuoka Meetup版)

Spring Boot +

Doma +

AngularJS で作る

ERP(統合基幹業務システム)LINE Developer Meetup in Fukuoka #9

2014/12/20

Page 2: Spring Boot + Doma + AngularJSで作るERP (LINE Fukuoka Meetup版)

自己紹介• 名前: 松崎 学

• Twitter: matsumana

• blog: http://matsumana.info

• 所属: 株式会社キャム http://cam-net.co.jp/

• 職業: ソフトウェアエンジニア (プログラマ、ITインフラエンジニア)

Page 3: Spring Boot + Doma + AngularJSで作るERP (LINE Fukuoka Meetup版)

JJUG CCC 2014 Fall で発表した内容を

かいつまんでお話します

元のスライドはこれです http://goo.gl/CGWzRG

Page 4: Spring Boot + Doma + AngularJSで作るERP (LINE Fukuoka Meetup版)

今日お話する事

• 弊社サービスを支える技術の概要 ・アーキテクチャの歴史 ・インフラ

• Spring Boot, Doma, AngularJSを選んだ理由と実際に使ってみた感想

Page 5: Spring Boot + Doma + AngularJSで作るERP (LINE Fukuoka Meetup版)

サービスの歴史 フレームワーク編

• 2007~ Seasar2 (Teeda + S2Dao) ※現在も稼働中

• 2012~ Java EE 6 (JSF + JPA) ※現在も稼働中

• 2014~ Spring Boot + Doma + AngularJS

Page 6: Spring Boot + Doma + AngularJSで作るERP (LINE Fukuoka Meetup版)

サービスの歴史 インフラ編

• 2007~ 国内データセンター

• 2013~ AWS

Page 7: Spring Boot + Doma + AngularJSで作るERP (LINE Fukuoka Meetup版)

インフラの 全体概要図

Page 8: Spring Boot + Doma + AngularJSで作るERP (LINE Fukuoka Meetup版)

http://goo.gl/cTexvM

Page 9: Spring Boot + Doma + AngularJSで作るERP (LINE Fukuoka Meetup版)

• サーバやミドルウェアは必ず障害が発生する前提で考えたインフラ構成とアーキテクチャ

• 一部に障害が発生してもサービスが止まらないように各レイヤーは冗長構成にする

• サービスが止まるような障害の場合でも出来るだけ早く復旧出来るようにする

ポイント

Page 10: Spring Boot + Doma + AngularJSで作るERP (LINE Fukuoka Meetup版)

使用しているソフトウェア• Webサーバ: Apache 2.2

• APサーバ: Seasar2 → Tomcat 6 Java EE 6 → GlassFish 3.1.2.2 Spring Boot → Jetty9.2.3.v20140905

• DBサーバ: PostgreSQL 9.3

• 監視: Zabbix 2.0EC2インスタンスのOSリソース監視APサーバをJMXで監視 (Zabbix Javaゲートウェイ)

• CI,デプロイ: Jenkins

Page 11: Spring Boot + Doma + AngularJSで作るERP (LINE Fukuoka Meetup版)

ログ収集はFluentd

Page 12: Spring Boot + Doma + AngularJSで作るERP (LINE Fukuoka Meetup版)

• AWS (EC2, S3, Route53, SES, RDS, VPC)

• GitHub

• レスポンスタイム可視化: New Relic

• ログ分析: Google BigQuery

• 通知: HipChat

使用しているサービス

Page 13: Spring Boot + Doma + AngularJSで作るERP (LINE Fukuoka Meetup版)

次はアプリのお話

Page 14: Spring Boot + Doma + AngularJSで作るERP (LINE Fukuoka Meetup版)

2007年の サービスローンチ時から 開発を続けてきた

Seasar2製のアプリですが 数年後には色んな問題が

出てきました

Page 15: Spring Boot + Doma + AngularJSで作るERP (LINE Fukuoka Meetup版)

• ローンチ当時は、IE6とIE7のみサポート (開発を開始した2007年にはChromeは存在してない)

• 2009年にリリースされたIE8で互換表示モード登場互換表示でしか動作しないアプリになってしまった・・・

_人人 人人 人人 人人_ > 突然のオワコン感 < ‾Y^Y^Y^Y^Y^Y^Y^Y‾

Page 16: Spring Boot + Doma + AngularJSで作るERP (LINE Fukuoka Meetup版)

互換モード以外にもいくつか 問題が出てきた

• 時代遅れ感が出てきたUIリッチなWebサイトが世の中に増えて顧客の目が肥えてきた

• 他社システムと連携するため、REST API提供を求められるようになった

Page 17: Spring Boot + Doma + AngularJSで作るERP (LINE Fukuoka Meetup版)

今のアプリを改修するべきか?それとも作りなおすべきか?

Page 18: Spring Boot + Doma + AngularJSで作るERP (LINE Fukuoka Meetup版)

この時点で画面数は 数百になっていた

改修するよりも 作りなおした方が良い という結論になる

Page 19: Spring Boot + Doma + AngularJSで作るERP (LINE Fukuoka Meetup版)

候補にあがったもの

• Java EE 6 (JSF)

• Spring

• Play Framework 1

Page 20: Spring Boot + Doma + AngularJSで作るERP (LINE Fukuoka Meetup版)

その時点で 一番良さそうだった Java EE 6を選択

サポートするブラウザはIE8以上とした (互換表示モードからの脱却)

Page 21: Spring Boot + Doma + AngularJSで作るERP (LINE Fukuoka Meetup版)

Java EE 6で開発と 運用をやってみたけど

• JPAでハマる事が多い

• CDIに@ViewScopedがない※Java EE7で改善されてます

• PrimeFacesではGridの列固定が出来なかった※現在のバージョンでは出来ます

• JSFで作った画面が重く感じる※画面項目数、サーバスペック、クライアントスペック等によるので あくまでも当社比です

Page 22: Spring Boot + Doma + AngularJSで作るERP (LINE Fukuoka Meetup版)

弊社にはJava EEは 合わないのでは?(́・ω・`)

という気持ちになってきた

Page 23: Spring Boot + Doma + AngularJSで作るERP (LINE Fukuoka Meetup版)

Java EE 6で2つの サブシステムを作ったが これ以上増やすのは

やめようという結論になり次の手を模索する事に

Page 24: Spring Boot + Doma + AngularJSで作るERP (LINE Fukuoka Meetup版)

そんなある日Spring Bootの存在を知る

• JJUG ナイトセミナー 2014/01/21@makingさんの「Spring4とSpring Bootで作る 次世代Springアプリケーション」http://www.slideshare.net/makingx/spring-4spring-boot-spring-jjug-jsug

Page 25: Spring Boot + Doma + AngularJSで作るERP (LINE Fukuoka Meetup版)

早速試してみた

• Springで大変だと聞いていたxml設定ファイルや依存関係の複雑さが解決されているし、組み込みAPサーバもいい感じ

• 元々、SpringとDropwizardに注目していたのでいいとこ取りな感じがとても良い

Page 26: Spring Boot + Doma + AngularJSで作るERP (LINE Fukuoka Meetup版)

いくつか候補をあげて 比較検討

Page 27: Spring Boot + Doma + AngularJSで作るERP (LINE Fukuoka Meetup版)

候補1

• Java EE 7(JSF) + Doma対応する商用アプリケーションサーバが未リリースなのでNG(リリース時期も未定だった)

Page 28: Spring Boot + Doma + AngularJSで作るERP (LINE Fukuoka Meetup版)

候補2

• Spring Boot (Spring MVC + Thymeleaf) + DomaJSFの複合コンポーネント的なものがない JSPだとカスタムタグがあるがSpring BootはJSPを推奨していないみたい

Page 29: Spring Boot + Doma + AngularJSで作るERP (LINE Fukuoka Meetup版)

候補3

• Spring Boot (Spring MVCでAPI) + Doma + Backbone.jsJSFの複合コンポーネント的なものがない Backbone.jsで構造化は出来るが生産性がもっと高いものが良い

Page 30: Spring Boot + Doma + AngularJSで作るERP (LINE Fukuoka Meetup版)

候補4

• Spring Boot (Spring MVCでAPI) + Doma + AngularJSDirectiveがカスタムタグの代替にはなりそうフロントフレームワークの中では遅い部類だと言われているが、試してみるとJSFよりサクサク動く※当社比

Page 31: Spring Boot + Doma + AngularJSで作るERP (LINE Fukuoka Meetup版)

Spring Boot, Doma,AngularJSを

使ってみた感想など

Page 32: Spring Boot + Doma + AngularJSで作るERP (LINE Fukuoka Meetup版)

Spring Boot / Spring• Seasar2とJava EE 6を使ってきたので、Springのコンテナ機能(DI, トランザクション, AOPなど)は理解しやすかった

• テストライブラリが充実していて良い感じ

• 起動が早く快適に開発できる※当社比

• サーバのリソース消費が少ない

Page 33: Spring Boot + Doma + AngularJSで作るERP (LINE Fukuoka Meetup版)

Doma• SQLでゴリゴリ書きたい派には、とてもオススメ

• 依存ライブラリが無いのも、とてもいい感じ

• 便利機能がいっぱい・Java8対応・コンパイル時チェック ・SQLファイル内の変数チェック ・SQLファイルの存在チェック・ページング (Limit, Offset, 総レコード件数)

他にも沢山あります。詳しくはドキュメントを http://doma.readthedocs.org/ja/latest/

Page 34: Spring Boot + Doma + AngularJSで作るERP (LINE Fukuoka Meetup版)

AngularJS• 学習コストは確かに高いが、現在は日本語の書籍もあるので、多少は改善されているのかも

• Directiveにてデザインと動作を共通化した部品が作成でき便利

• ライブラリはangular-bootstrapだけ使う事にした(その他で必要なものは自分たちで作る方針にした)

• バージョンアップで後方互換性が保たれない(弊社の場合はアプリを改修して、バージョンアップ に追従していく方針にした)

Page 35: Spring Boot + Doma + AngularJSで作るERP (LINE Fukuoka Meetup版)

弊社でのAngularJSの 使い方を少しだけご紹介

• Directiveに画面レイアウト情報とデータを与えて画面項目を動的に生成マルチテナントなアプリなので、顧客ごとのカスタマイズをマスタで行えるようにしています

Page 36: Spring Boot + Doma + AngularJSで作るERP (LINE Fukuoka Meetup版)

<hoge-form-grid layout-src="layout.formLayout" model-src="model" > </hoge-form-grid>

<hoge-table-grid-paging layout-src="layout.tableLayout" model-src="model" > </hoge-table-grid-paging>

<hoge-table-grid layout-src="layout.tableLayout" model-src=“model"> </hoge-table-grid>

Page 37: Spring Boot + Doma + AngularJSで作るERP (LINE Fukuoka Meetup版)

モジュール構成 (概要)

• Javaのビルドルーツ: Maven

• フロントエンドのタスクツール: Grunt maven-grunt-pluginを使ってMavenから起動される jshint, karma(Jasmine), concat, cssmin, uglifyを実行する

Page 38: Spring Boot + Doma + AngularJSで作るERP (LINE Fukuoka Meetup版)

Spring BootやDomaに 関するブログを いくつか書いてます

Page 39: Spring Boot + Doma + AngularJSで作るERP (LINE Fukuoka Meetup版)

• Spring BootでO/Rマッパーの比較

• Spring Bootのコネクションプーリングの比較

• Spring Bootのアプリケーションサーバの比較

• Spring BootでISUCON4予選のJava実装を作った

• Spring Bootで現在捌いているリクエスト数を取得する

• Spring + Domaで実装したアプリのユニットテスト

http://matsumana.info/blog/categories/spring/

Page 40: Spring Boot + Doma + AngularJSで作るERP (LINE Fukuoka Meetup版)

AngularJSは業務システムに 使えるのか?

• 品質的には業務で使っても問題ないと思う

• 画面モック(素のHTML)を元にアプリ作成可能

• AngularJSに限った事ではないが、現在流行っているフロントフレームワークが5年後、10年後も互換性を保った状態で流行っているとは考えにくい「動かなくなったらフロントだけ作りなおせば良い」という意見はあると思うが、フロントフレームワークを使わなければ、発生しない不要なコストなのかも

Page 41: Spring Boot + Doma + AngularJSで作るERP (LINE Fukuoka Meetup版)

弊社の今後

• Spring Boot + Doma + AngularJSは弊社にはあっているので今後も使い続けるつもり

Page 42: Spring Boot + Doma + AngularJSで作るERP (LINE Fukuoka Meetup版)

ご清聴 ありがとう ございました!