2017/4/21 合同ビアバッシュ発表資料
楽楽明細の開発を⽀支える技術株式会社ラクスファイナンシャルクラウド開発3課Eiichi Mita2017/4/21
View Slide
⾃自⼰己紹介• Eiichi Mita• Twitter/Qiita/Github/mstdn.jp: @eichisanden• 2014年6⽉月⼊入社(Ops=> SIer => ラクス)• ⼊入社以来、楽楽明細を担当• ポケモンおじさんWANTED!!
楽楽明細• 2013年にサービスイン• Java 8/Tomcat/Apache/PostgreSQL• 現在、開発者は3名• ⼀一番多い時でメンバー8名
現在は、マンパワーはないが⼩小回りが利くので、⼩小さな改善はしやすいタイミングYYY͠Α͏ͥ:FBI
ただ、やることが多く開発や改善に時間を取れない։ൃӡ༻ׂΓࠐΈλεΫόάରԠվળಋೖࢧԉαϙʔτ
ӡ༻ ׂΓࠐΈλεΫαϙʔτ όάରԠվળಋೖࢧԉ։ൃこうしたい
銀の弾丸はないので地道に改善していっている
開発フロー
Subversion + Redmineでのコードレビューが⾟辛い(結構前の話ですが)課題チケットに「xxxクラスの何⾏行⺫⽬目の…」と書いたり、該当箇所のコード貼りつけたり、とにかく⾟辛かった(ましてオフショア相⼿手なら尚更…)
GitLab導⼊入解決マージリクエストベースでの開発レビュアーもレビュイーも⼤大幅に負担軽減
Gitのブランチ運⽤用解決Gitフローを多少アレンジした感じでやっています。
NBTUFSWEFWGFBUVSFGFBUVSFGFBUVSFこんな感じ
Gitだとコミットの単位を調整しやすい解決git add -p や git rebase -i などを駆使してレビューしやすい単位でコミットを分割。リファクタリングと業務要件の実装は分けてコミット。
テスト
テストがない!!!課題※実際は、ない訳ではなく、過去に作成したJUnitのテストをメンテできずにビルドからも外され塩漬けになったいた。テストコードのメンテはそれなりに⼯工数が掛るので、致し⽅方ない⾯面も。。
テストを復活させた解決殆どのテストコードはそのまま使えたただし、少しの修正で蘇⽣生できないテストは捨てた㱺ݹ͍ͷݻࣥ͢ΔΑΓ早くテストがある状態に戻すことが先決だった!!
Mockito導⼊入解決以前は依存するクラスを動かすために、テストごとにDIコンテナを起動していた㱺͍͘͢͝͠ɺґଘ͢ΔΫϥεΛಈ͔ͨ͢Ίͷsetupも⼤大変。 本質的じゃないところで疲弊してテストがメンテできなかたのかも(想像)Mockを活⽤用してテストしたいコードに集中できるようになった
JUnitを3から4へバージョンアップ解決テストの階層化やパラメータ化が可能になり、より分かりやすくテストが書けるようになった㱺ϊϋΛษڧձΛ։࠵ͯ͠νʔϜʹڞ༗した
コミット時のテスト⾃自動実⾏行とカバレッジも⾒見えるようにした解決
テストが失敗するとすぐ分かるように解決リアルなおっさんが怒って詰め寄ってきます
E2Eテスト
リリース前のリグレッションテストが⾟辛い課題でも、デグレが怖いのでやらない訳にもいかない
Seleniumテストを導⼊入(準備中)解決SeleniumラッパーはSelenideを使⽤用しています。去年のSeleniumアドベントカレンダーに記事を書きました。http://qiita.com/EichiSanden/items/ea857b46cbf5435b0c3b
リリース時の疎通確認が⾟辛い課題サーバも増えてきたし、もはや⼿手動でやるレベルじゃなくなってきた
Selenideでテストを作成解決次回のリリースから本格的に使⽤用予定
DBマイグレーション
元々、DDLは差分パッチSQLで管理していたが、どの環境にどこまで当てたか分かりにくかった課題CFHJOBMUFSUBCMFIPHFBEEDPMVNODPMUFYUDPNNJUCFHJOJOTFSUJOUPIVHB JE WBMWBMVFT BBB CCCDPNNJUCFHJOESPQUBCMFHPNJDPNNJU20170419_1.sql 20170420_1.sql 20170420_2.sql
Flywayを導⼊入した• flyway info でどこまで当っているか確認できる• flyway migrate を実⾏行すれば、まだ適⽤用していないパッチだけを当ててくれる• 本番環境はどこまで当っているか⾃自明なので、検証環境でのみ利⽤用• Flywayはバージョンダウンには対応していないが、そこは割り切った(たまに欲しい時があるが、バージョンダウンのSQLを常に書くのは割に合わないため)解決
運⽤用
アプリからのエラー通知がメールで来るが⼤大量すぎて⼤大事なものが埋もれてしまう課題
無駄なアラートを減らす取り組み解決⽅方法ɾηογϣϯ͕Εͨޙͷૢ࡞ɾbotからのアクセスɾμϯϩʔυதʹΩϟϯηϧ͞ΕͨɾϥΠϒϥϦ͕ग़ྗ͢ΔແବͳΤϥʔなど内部エラーを減らす取り組みを地道に⾏行っているあるサーバーからの通知数が1年前 1127通 -> 今年 377通に激減メールをチェックする時間短縮と重要なアラートを⾒見逃すリスクが減った!
DevOps(的な)
開発担当とインフラ担当が分かれており、すごく典型的なDevOpsの問題がある課題
• 組織的な問題まで踏み込めないので、出来ることをやるのみ解決できていないが…
依頼した作業の背景をきちんと説明する㱺తഎܠΛ理解してもらうことで同じゴールを⺫⽬目指せる考え⽅方の違うことを理解する㱺͓ޓ͍ओு͕͋ΔͷͰาΈدΔ͜ͱ͕⼤大事運⽤用系のシェルなど、GitLab上で共同メンテしようと準備中㱺࠷ॳগ͠ରҙݟ͕͋ͬͨɺϝϦοτΛઆ໌ͯͬͯ͠ΈΔ͜ͱʹɻOpsにもGitLabを使ってもらって相互レビューし合うのが理想やっていること
Infrastructure as Codeɾखॱॻϕʔεͷڥߏஙਏ͍ͷͰɺAnsibleなど、オーケストレーションツールを使っていきたい。ɾサーバーが増えるたびに動作確認するのも⾟辛いので、そろそろコード化しないとキツイ㱺ͱΓ͋͑ͣϩʔΧϧ։ൃڥͷߏஙͰAnsibleやServerSpecを使って広めようとしている。(⼩小さく始めて実績を作ると広めやすいと思っている)やりたい
今後やりたいことは沢⼭山...フレームワーク乗り換えマイクロサービスDockerAWSアジャイル/スクラムデザインガイドReact/AngularJS/VueSass/Less/StylusEsLintGradleで依存関係解決PostCSSローカル開発環境の⾃自動構築Elastic Search/Kibana/EmbulkCI/CDJenkins2/GitLab CISwaggerGoBabelWebpack
バイブル
ご清聴ありがとうございました