Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
楽楽明細の開発を支える技術
Search
A1
April 24, 2017
Programming
0
620
楽楽明細の開発を支える技術
2017/4/21 合同ビアバッシュ発表資料
A1
April 24, 2017
Tweet
Share
More Decks by A1
See All by A1
Kotlin2でdataクラスの copyメソッドを禁止する/Data class copy function to have the same visibility as constructor
eichisanden
1
590
短納期でローンチした新サービスをJavaで開発した話/launched new service using Java
eichisanden
6
3.9k
トラブルゼロで乗り切ったTypeScript移行/trouble-free TypeScript migration
eichisanden
3
3.4k
スクラム開発チームをLessでスケールさせた話/Scaling Scrum team with Less
eichisanden
0
5.6k
息の長いサービスのフロントエンドを少し改善する営み/frontend-improvement
eichisanden
3
2.8k
実はGitLabで使えるmermaid.js/gitlab-mermaid.js
eichisanden
1
660
既存 Web アプリケーションへの React.js 適用/react for web application
eichisanden
0
1.7k
楽楽明細でやってるChatOps/Development with ChatOps
eichisanden
0
1.2k
jshell概要
eichisanden
0
92
Other Decks in Programming
See All in Programming
Zennの運営完全に理解した #完全に理解したTalk
wadayusuke
1
130
イベントソーシングとAIの親和性ー物語とLLMに理解できるデータ
tomohisa
1
160
TypeScript製IaCツールのAWS CDKが様々な言語で実装できる理由 ~他言語変換の仕組み~ / cdk-language-transformation
gotok365
7
370
TypeScript だけを書いて Tauri でデスクトップアプリを作ろう / Tauri with only TypeScript
tris5572
2
520
Doma で目指す ORM 最適解
nakamura_to
1
160
primeNumberでのRBS導入の現在 && RBS::Traceでinline RBSを拡充してみた
mnmandahalf
0
250
バリデーションライブラリ徹底比較
nayuta999999
1
400
ワイがおすすめする新潟の食 / 20250530phpconf-niigata-eve
kasacchiful
0
180
Practical Domain-Driven Design - Workshop at NDC 2025
mufrid
0
130
#QiitaBash TDDでAIに設計イメージを伝える
ryosukedtomita
2
1.6k
技術的負債と戦略的に戦わざるを得ない場合のオブザーバビリティ活用術 / Leveraging Observability When Strategically Dealing with Technical Debt
yoshiyoshifujii
0
160
知識0からカンファレンスやってみたらこうなった!
syossan27
5
320
Featured
See All Featured
A designer walks into a library…
pauljervisheath
205
24k
Designing Dashboards & Data Visualisations in Web Apps
destraynor
231
53k
VelocityConf: Rendering Performance Case Studies
addyosmani
329
24k
個人開発の失敗を避けるイケてる考え方 / tips for indie hackers
panda_program
105
19k
Product Roadmaps are Hard
iamctodd
PRO
53
11k
Building an army of robots
kneath
306
45k
"I'm Feeling Lucky" - Building Great Search Experiences for Today's Users (#IAC19)
danielanewman
228
22k
GitHub's CSS Performance
jonrohan
1031
460k
Fontdeck: Realign not Redesign
paulrobertlloyd
84
5.5k
Code Reviewing Like a Champion
maltzj
523
40k
Building Adaptive Systems
keathley
41
2.6k
The Pragmatic Product Professional
lauravandoore
35
6.7k
Transcript
楽楽明細の開発を⽀支える 技術 株式会社ラクス ファイナンシャルクラウド開発3課 Eiichi Mita 2017/4/21
⾃自⼰己紹介 • Eiichi Mita • Twitter/Qiita/Github/mstdn.jp: @eichisanden • 2014年6⽉月⼊入社(Ops=> SIer
=> ラクス) • ⼊入社以来、楽楽明細を担当 • ポケモンおじさん WANTED!!
None
楽楽明細 • 2013年にサービスイン • Java 8/Tomcat/Apache/PostgreSQL • 現在、開発者は3名 • ⼀一番多い時でメンバー8名
現在は、マンパワーはないが ⼩小回りが利くので、⼩小さな改善はし やすいタイミング YYY ͠Α͏ͥ :FBI
ただ、やることが多く開発や改善に時間を取れ ない ։ൃ ӡ༻ ׂΓࠐ ΈλεΫ όάର Ԡ վળ ಋೖࢧԉ
αϙʔτ
ӡ༻ ׂΓࠐΈ λεΫ αϙʔτ όάରԠ վળ ಋೖ ࢧԉ ։ൃ こうしたい
銀の弾丸はないので地道に改善して いっている
開発フロー
Subversion + Redmineでの コードレビューが⾟辛い(結構前の話 ですが) 課題 チケットに「xxxクラスの何⾏行⺫⽬目の…」と書いた り、該当箇所のコード貼りつけたり、とにかく⾟辛 かった(ましてオフショア相⼿手なら尚更…)
GitLab導⼊入 解決 マージリクエストベースでの開発 レビュアーもレビュイーも⼤大幅に負担軽減
Gitのブランチ運⽤用 解決 Gitフローを多少アレンジした感じでやって います。
NBTUFS WEFW GFBUVSF GFBUVSF GFBUVSF こんな感じ
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で管理していたが、ど の環境にどこまで当てたか分かりにくかった 課題 CFHJO BMUFSUBCMFIPHFBEE DPMVNODPMUFYU DPNNJU CFHJO JOTFSUJOUPIVHB JE
WBM WBMVFT BBB CCC DPNNJU CFHJO ESPQUBCMFHPNJ DPNNJU 20170419_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を使って広めようとしている。 (⼩小さく始めて実績を作ると広めやすいと思っている)
やりたい
今後やりたいことは沢⼭山... フレームワーク乗り換え マイクロサービス Docker AWS アジャイル/スクラム デザインガ イド React/AngularJS/Vue Sass/Less/Stylus
EsLint Gradleで依存関係解決 PostCSS ローカル開発環境の⾃自動構築 Elastic Search/Kibana/Embulk CI/CD Jenkins2/GitLab CI Swagger Go Babel Webpack
バイブル
ご清聴ありがとうございました