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
580
楽楽明細の開発を支える技術
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
120
短納期でローンチした新サービスをJavaで開発した話/launched new service using Java
eichisanden
6
3.7k
トラブルゼロで乗り切ったTypeScript移行/trouble-free TypeScript migration
eichisanden
3
3.1k
スクラム開発チームをLessでスケールさせた話/Scaling Scrum team with Less
eichisanden
0
5.2k
息の長いサービスのフロントエンドを少し改善する営み/frontend-improvement
eichisanden
3
2.6k
実はGitLabで使えるmermaid.js/gitlab-mermaid.js
eichisanden
1
500
既存 Web アプリケーションへの React.js 適用/react for web application
eichisanden
0
1.6k
楽楽明細でやってるChatOps/Development with ChatOps
eichisanden
0
1.1k
jshell概要
eichisanden
0
84
Other Decks in Programming
See All in Programming
offers_20241022_imakiire.pdf
imakurusu
2
360
Tuning GraphQL on Rails
pyama86
2
1k
ピラミッド、アイスクリームコーン、SMURF: 自動テストの最適バランスを求めて / Pyramid Ice-Cream-Cone and SMURF
twada
PRO
9
980
PagerDuty を軸にした On-Call 構築と運用課題の解決 / PagerDuty Japan Community Meetup 4
horimislime
1
110
レガシーな Android アプリのリアーキテクチャ戦略
oidy
1
170
飲食業界向けマルチプロダクトを実現させる開発体制とリアルな現状
hiroya0601
1
390
リリース8年目のサービスの1800個のERBファイルをViewComponentに移行した方法とその結果
katty0324
5
3.5k
のびしろを広げる巻き込まれ力:偶然を活かすキャリアの作り方/oso2024
takahashiikki
1
400
生成 AI を活用した toitta 切片分類機能の裏側 / Inside toitta's AI-Based Factoid Clustering
pokutuna
0
570
Server Driven Compose With Firebase
skydoves
0
390
PHP でアセンブリ言語のように書く技術
memory1994
PRO
1
150
Modern Angular: Renovation for Your Applications
manfredsteyer
PRO
0
200
Featured
See All Featured
Visualizing Your Data: Incorporating Mongo into Loggly Infrastructure
mongodb
42
9.2k
The Art of Delivering Value - GDevCon NA Keynote
reverentgeek
7
150
A designer walks into a library…
pauljervisheath
202
24k
No one is an island. Learnings from fostering a developers community.
thoeni
19
3k
It's Worth the Effort
3n
183
27k
Save Time (by Creating Custom Rails Generators)
garrettdimon
PRO
27
790
Teambox: Starting and Learning
jrom
132
8.7k
How to train your dragon (web standard)
notwaldorf
88
5.7k
Ruby is Unlike a Banana
tanoku
96
11k
個人開発の失敗を避けるイケてる考え方 / tips for indie hackers
panda_program
92
16k
The Power of CSS Pseudo Elements
geoffreycrofte
72
5.3k
Fashionably flexible responsive web design (full day workshop)
malarkey
404
65k
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
バイブル
ご清聴ありがとうございました