Comments
Description
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