広島Ruby勉強会#35プレゼン

30
Rails と AWS とととととととと とととととと 2013/11/02 とと Ruby ととと #035

Transcript of 広島Ruby勉強会#35プレゼン

Page 1: 広島Ruby勉強会#35プレゼン

Railsと AWSで業務システムを構築してみた

2013/11/02

広島 Ruby勉強会 #035

Page 2: 広島Ruby勉強会#35プレゼン

目次• 目的

• 対象

• 自己紹介

• プロジェクト構成

• システム構成

• 設計面の問題

• 実装面の問題

• 今後の予定

• 質疑応答

Page 3: 広島Ruby勉強会#35プレゼン

目的•Railsと AWSで業務システムを構築した際にはまったところを設計・実装の観点から解説します。

Page 4: 広島Ruby勉強会#35プレゼン

対象•業務アプリケーションに興味がある• AWS(Amazon Web Service)に興味がある

•アジャイル開発に興味がある

Page 5: 広島Ruby勉強会#35プレゼン

自己紹介•名前 カキギ カツユキ•仕事 インターネット通販事業  ( ECコンサルティング企画室) 

•趣味 山登り・ランニング

Page 6: 広島Ruby勉強会#35プレゼン

プロジェクト構成•期間•コスト•スコープ•組織体制•開発手法

Page 7: 広島Ruby勉強会#35プレゼン

プロジェクト構成•期間•6ヶ月•現在ステージング環境で運営•11月から本番環境でサービスイン

Page 8: 広島Ruby勉強会#35プレゼン

プロジェクト構成•コスト•100万円•クラウドの年間保守費用込み•担当者の人件費は計上していない

Page 9: 広島Ruby勉強会#35プレゼン

プロジェクト構成• スコープ

• 業務

• 販売業務

• システム

• 問い合わせ

• 受注

• 出荷指示

• 出荷

• 売上

Page 10: 広島Ruby勉強会#35プレゼン

スコープ(業務)

販売業務

在庫業務調達業務

会計業務

受注台帳

在庫台帳

注文台帳

売上台帳商品台帳

Page 11: 広島Ruby勉強会#35プレゼン

スコープ(システム)問い合わせ

問い合わせデータ

問い合わせ管理表

受注

受注データ

注文承諾メール

出荷指示

出荷指示データ

出荷指示書

出荷

出荷データ

売上

売上データ

売上伝票

請求締

債権データ

請求書

入金

入金データ

入金伝票

ピッキングリスト

納品書

送り状

出荷案内メール

発注

発注データ

注文書

入荷

入荷データ

入荷伝票

在庫データ

仕入

仕入データ

仕入伝票

支払締

債務データ

支払書

支払

支払データ

支払伝票

販売業務

調達業務在庫業務

会計業務

Page 12: 広島Ruby勉強会#35プレゼン

プロジェクト構成•組織体制•ネット通販事業部門・・・設計・開発•協力会社・・・開発・保守

コアチーム

協力会社

ネット通販事業部門

Page 13: 広島Ruby勉強会#35プレゼン

プロジェクト構成• 開発手法

• アジャイル開発

• プロジェクトマネジメント (SCRUM)

• Redmine

• 継続的インテグレーション

• Git

• Jenkins

• テスト駆動開発 (BDD)

• Rspec

• Cucumber

Page 14: 広島Ruby勉強会#35プレゼン

システム構成•移行前•移行後

Page 15: 広島Ruby勉強会#35プレゼン

システム構成•移行前•オンプレミス•パッケージソフト•自社システム

受注管理パッケージソフト

自社システム(MS Access)

Page 16: 広島Ruby勉強会#35プレゼン

システム構成•移行後•オンプレミス•パッケージソフト

•クラウド•自社システム

受注管理パッケージソフ

自社システム(Ruby on

Rails)

DBサーバ(MySQL)

Page 17: 広島Ruby勉強会#35プレゼン

設計での問題•業務ロジック実装方式による問題•データ処理方式による問題

Page 18: 広島Ruby勉強会#35プレゼン

設計での問題•業務ロジック実装方式による問題

処理が遅い

処理が遅い

オンプレ

クラウド

Page 19: 広島Ruby勉強会#35プレゼン

設計での問題•業務ロジック実装方式による問題

処理が遅い

処理が遅い

処理タイミングを分離

Page 20: 広島Ruby勉強会#35プレゼン

設計での問題•データ処理方式による問題

受注管理パッケージソフト

自社システム(MS Access)

受注管理パッケージソフトからインターフェースしたデータはアップロード時にDBを全部削除してから登

録する

Page 21: 広島Ruby勉強会#35プレゼン

設計での問題•データ処理方式による問題

受注管理パッケージソフ

自社システム(Ruby on

Rails)

DBサーバ(MySQL)

受注管理パッケージソフトからインターフェースしたデータはアップロード時に上書き更新登録する

Page 22: 広島Ruby勉強会#35プレゼン

設計での問題•データ処理方式による問題

受注管理パッケージソフ

自社システム(Ruby on

Rails)

DBサーバ(MySQL)

インタフェース元データを削除した場合、そのデータを既に登録しているならば手作業で削除しなければな

らない。

Page 23: 広島Ruby勉強会#35プレゼン

設計での問題•データ処理方式による問題

受注管理パッケージソフ

自社システム(Ruby on

Rails)

DBサーバ(MySQL)

データ内訳件数を明示して不整合を見つけやすくする

ことで対応

Page 24: 広島Ruby勉強会#35プレゼン

実装での問題•RDMSのパフォーマンスの問題

•リテラル値の使い方

Page 25: 広島Ruby勉強会#35プレゼン

実装での問題•RDMSのパフォーマンスの問題

• ステータスごとにデータを管理するのでOrder.where(status: [‘新規’ ,’出荷’ ,’確定’ ])というクエリを多用しているがMySQL5.5ではIN句を使ったクエリは遅い。

• 過去3年分の注文・売上データを保持するようになったので Order.allなどを実行するとえらいことになる。

Page 26: 広島Ruby勉強会#35プレゼン

実装での問題•RDMSのパフォーマンスの問題

• IN句の問題はMySQL5.6から改善されているのでRDSのバージョンをMySQL5.6にアップグレード

• インデックスを作成してチューニング (add_index :order, :order_number)

• データを確定と未確定に分けて通常の処理対象は未確定データのみとするようにする。Order.summaryなど検索対象を未確定データのみとするメッソドに変更

Page 27: 広島Ruby勉強会#35プレゼン

実装での問題•リテラル値の使い方def check_hoge

@order = Order.allif @order.ec_site = ‘楽天’

if @order.payment = ‘クレジット’case @order.sales_divisionwhen ‘1’

hoge1when ‘2’

hoge2end

endend

end

今後変化するかもしれない文字列を直接つかっている

区分情報が1とか2で業務的にわからな

Page 28: 広島Ruby勉強会#35プレゼン

実装での問題•リテラル値の使い方def set_name

@ec_site_name = {rakuten: ‘楽天’ ,

yahoos: ‘ヤフーショッピング’ ,amazon: ‘amazon’

} end

def check_hoge@order = Order.allif @order.ec_site = @ec_site_name[:rakuten]・・・

case @order.sale_divisionwhene Division.find_by_type(‘SALES’,’1’)

hoge1

名称はハッシュとしてモデルで一元的に管理できるようにす

区分情報を管理するマスタから取得するようにする

Page 29: 広島Ruby勉強会#35プレゼン

今後の予定• インフラの自動化

• vagerant(http://www.vagrantup.com/)

• chef(http://www.opscode.com/chef/)

• セキュリティの強化

• Amazon VPC(http://aws.amazon.com/jp/vpc/)

• 基盤技術の理解

• Ruby

• Rails

• 会計業務対応

• 財務会計

• 管理会計

Page 30: 広島Ruby勉強会#35プレゼン

質疑応答