...

コード量削減、再利用 (推測3割)

by user

on
Category: Documents
15

views

Report

Comments

Transcript

コード量削減、再利用 (推測3割)
AccelPlatformのつくりかた
Season2
株式会社 NTTデータイントラマート
開発本部
2015/10/09
1
はじめに
※ EWS 2015当日限定
2
2年前 (EWS 2013)
3
今年は…
• アジャイルのレフトウィング
intra-martにおける「開発環境」
~Commit, Build, Test, Deployを
支える技術~
弊社開発本部における開発の自動化への取り
組みを2年間の変遷と共にご紹介します。
4
アジェンダ
1. 概要
2. 開発
• 開発環境
• CI概要
• 開発、テスト、ビルド、リリース
3. 運用
• バックアップ/リカバリ
• 監視
4. 開発手法
5. 今後の取組
• 分析
• チャレンジ
5
概要
期間
2010/09 ~ 2015/10
開発者
40~80名程度
(現在 約50名)
チーム
4~10チーム
(現在 7チーム)
モジュール数
251モジュール
(2年前 80モジュール)
モジュール数
(全バージョン)
1794 モジュール
ビルドジョブ
1163ジョブ
(2年前 420ジョブ)
6
自動化前 (半自動化時代)
1. CVS / Subversionを利用したソースコード管理
2. リモートデスクトップでサーバへログイン
3. ビルド用スクリプト(build.bat)の実行
ビルド時間1時間~
4. 成果物を元に手動でインストールし確認
問題があれば1へ戻る
手戻りが発生した場合のコストが非常に高い
7
自動化前 (半自動化時代
• 属人性
• ビルドスクリプトが複雑になり職人以外触れない。
• 特定の端末でしかビルドできないスクリプトも存在
• ビルド環境へは一部の人のみがアクセス可能
• ビルド環境がスケールしない/直列化されている
• リリースが重なると待ち時間がとられる
• リリース作業が複雑
• リリース職人以外リリース作業が行えない
8
概要
9
開発サイクル
年4回から年3回のリリースに変更
3~4ヶ月単位のリリース
4月1日 Spring
7月1日 Summer
X月X日 Autumun
12月1日 Winter
リリース
テスト
開発
10
開発サイクル内訳
• 1ヶ月目 計画、設計等 + 実装
• タスクの洗い出し
• プランニングポーカー等
• 2ヶ月目 実装
• 翻訳
• 3ヶ月目 試験
• 結合試験
• 総合試験
• セキュリティ検証
実際には数シーズンかけて開発を行う機能も存在します。
11
開発
12
開発環境
• Windows7
• Widnows10
• Mac OSX
CentOS
• Ubuntu Linux
• Cent OS
• RedHat
Enterprise Linux
Mac OS
X
Windows
Ubuntu
Linux
RHEL
2年前と比べてLinux系OSが減少、Mac OSXが増加
13
CI環境: 概要
14
CI環境: クライアント
15
CI環境: クライアント
• 開発環境の構築は1クリックで実現完了
– 内製の環境構築スクリプト
– 初期導入コスト削減
– 環境の差異による品質のブレを防止
16
CI環境: クライアント
• e-Builder / Eclipse
• 静的解析プラグイン (Findbugs, Checkstyle)
• Sphinx(ドキュメント)用プラグイン各種
• 業務スケルトン
• ツール
• Apache Maven
• Apache Ant
• Sphinx
• Middleware
• Java SDK
• Python
• 内製ツール / プラグイン等
17
CI環境: 開発
18
CI環境: 開発
ソースコードはGit及びSubversionで管理
Subversionのリビジョン番号は
106739 (2015/09/16時点)
1日辺りのコミット数は50回以上
目的
• 新規開発
• 機能拡張/改善
• 改修
• ドキュメント
• テスト
19
CI環境: ビルド
20
CI環境: テスト、ビルド
ソースコードがコミットされる事により、Jenkins上でコンパイル、テス
ト、パッケージング等のビルドジョブが動作します。
ビルドジョブ: 約1200
ビルドサーバ: 3台
テストケース: 6万以上
Jenkins: 9インスタンス
21
CI環境: テスト、ビルド
• 1600ビルドジョブ / 週
• 93時間 / 週 (稼働率55.3%)
• 4DB環境のテスト
(Oracle, PostgreSQL, DB2,
SQLServer)
• Seleniumを利用したブラウザテスト
• Coverityを利用したコード静的解析
• 不具合密度 0.5以下
22
CI環境: テスト、ビルド
• Selenuim / WebDriver
• Webアプリケーションのテストを自動化
• 実際のブラウザを動かしながらテストします。
• Coverity
• Java向けの静的コード解析ツール (有償)
• 単一のクラス内のコード解析だけではなく、クラス
を跨った解析を行います。
23
CI環境: 独自のテスト
• リンク切れチェック
• メッセージファイルチェック
• 翻訳漏れが存在しないこと (日英中対応が行われているか?)
• モジュールを跨ってキーが重複していないこと
• ドキュメントチェック
• リンク切れ検出
• 版、日付が更新されていること
• スペルチェック (e.g. tenatId -> tenantId)
• 文言チェック です、ます調等の確認、略称の使用の検出
• コードチェック
• Javadocコメント
• 不要なprintStackStrace
全て内製ツール
24
CI環境: デプロイ
25
CI環境: デプロイ
• プログラムの成果物は全てMavenリポジトリへ格納されます。
• 社内検証用IM-Juggling用リポジトリが更新されます。
• 成果物を元に、Dockerイメージを作成し、Dockerレジストリに登録さ
れます。
26
CI環境: デプロイ
• Mavenリポジトリ
• ビルドされた成果物を管理するリポジトリ
• Sonatype Nexus
• Apache Archiva
• IM-Jugglingリポジトリ
• Accel Platformを構成するモジュールファイルを管
理するリポジトリ
• IM-Jugglingから参照
27
CI環境: デプロイ
• Dockerレジストリ
• コンテナ型仮想化環境 Docker で利用イメージ
ファイルを管理するためのレジストリ
• 開発本部では、ビルドが成功した後、Dockerで利
用可能なイメージファイルの作成を行っています。
28
CI環境: デプロイ
• デプロイされた成果物は、各開発環境から参照される為、最新の成果物
が共有されます。
• Dockerイメージが有るため、そのまま起動する事が可能です。
• Vagrant → Dockerへ移行しました
docker run –t –i –p 8080:8080 –p 5432:5432 –p 2222:22 ¥ registry.intra.intramart.jp/xxx/iap_latest_standalone_postgres
29
CI環境: リリース
30
CI環境: リリース
リリース作業の自動化
公開サーバへのアップロード、資材配置等のリリース作業の自動化を
行いました。
結果、半日かかっていた作業が1時間へ
また、手作業によるミスが無くなりました。
31
自動化外のテスト
• 打鍵試験
• 脆弱性診断
• IBM Security AppScan
• 負荷試験
• Oracle Load Testing
• Apache JMeter
32
運用
33
運用: 概要
サーバ数
7サーバ
(2年前 5サーバ)
モジュール数
251モジュール
(2年前 80モジュール)
ビルドジョブ
1163ジョブ
(2年前 420ジョブ)
34
運用: バックアップ/リカバリ
• 日時でAmazon S3にバックアップ
• ビルドサーバはビルドサーバ間でバックアップ
を保持
• 障害発生時に即時復旧出来るように
• ディスク、リソースは常にある程度余裕がある状態
を維持
• 5年間の運用中障害が発生したのは2件
• ディスク障害
• 電源が壊れた
共に短時間で復旧
35
運用: 監視
内製ツール / 名称: manabot
ビルドジョブ/サーバ死活監視
36
運用: 監視
監視內容はフロア上部に設置されている
ディスプレイに常時表示されます。
ビルドの状況、サーバ死活監視で何か問題
が発生した場合には社内irc, IMBoxに通知
が行われます。
→ IM-Noticeによりスマホにpush配信
37
開発手法
38
開発手法
• Java7対応
• Java8はJavaEE7, JavaEE8対応後検討予定
• lombokの導入
• @Data, val等を利用しコード量削減を実施
• コード解析ツール、javadocと相性難あり
• DDD(Domain-Driven Design)
• ドメイン駆動設計
• ユビキタス言語の使用
• モデルへの反映
→ モデリングが綺麗でわかりやすく
→ 品質の向上
39
開発手法
• フロントエンドのビルドシステム
• WebPackの導入
• JavaScriptのモジュール化
• ビルド時に結合 (圧縮、最適化)
• ES6(Babel)は今後検討
• SPA (MV*)アプローチ
• Single Page Application
• Vue.js + page.js + α…
• カスタマイズしない(と想定される)画面に適用
→ 生産性向上、コード量削減、再利用 (推測3割)
画面描画のパフォーマンス向上
• 他言語化、認可連携等で一部課題あり
40
今後の取組
41
今後の取組
• 開発改善に取り組んで5年以上
• 感覚ベースでの最適化は難しい段階
• データ収集と可視化の実施
• ELKスタックを利用したデータ分析
(Logstash + ElasticSearch + Kibana)
• Jenkinsのジョブ結果をElasticSearchへ登録するプ
ラグインを作成
• https://github.com/junsandesuka/jenkinselasticsearch-plugin.git
→ 様々な傾向が可視化出来た → 改善へ
42
今後の取組: 分析画面
43
今後の取組: チャレンジ
• 予防保全的なアプローチへの取り組み/研究
• リリースサイクルを通しての統計データの分析
• 機械学習を利用した予測
• 開発に関する様々なデータの収集
• 社内メンバーが気軽に可視化、分析を行える環境
44
今後の取組: チャレンジ
• これまでのノウハウを元にした外部への展開
• ミニマムな構成をVMイメージ化し配布等
• パートナー様、エンドユーザ様等へ展開サポート
• 導入支援コンサルティングを行っております。
• お問い合わせ下さい。
• 詳細、実物をご覧になりたい方は弊社まで!
45
ご清聴ありがとうございました。
46
Fly UP