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
楽楽精算の開発課題から学ぶ、改善取り組み / rakus-meetup-20221109
Search
Hikaru Sakata
November 10, 2022
Technology
1.4k
1
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
楽楽精算の開発課題から学ぶ、改善取り組み / rakus-meetup-20221109
Hikaru Sakata
November 10, 2022
More Decks by Hikaru Sakata
See All by Hikaru Sakata
ロバストネス分析を用いた設計と工数見積もり / rakus-meetup-20210217
hikaru_sakata
0
2.3k
Other Decks in Technology
See All in Technology
AI驚き屋発見器
yama3133
2
400
Amazon Bedrock Managed Knowledge BaseDive Deep
ren8k
0
340
変化の早いClaude Codeを 書籍に落とし込む
oikon48
4
410
QAと開発の両側から進める AI活用 -QAプロセスAI支援ツールキットと Inner Loop / Outer Loopの取り組み-
legalontechnologies
PRO
2
410
クラウドを使う側から、作る側へ / 大吉祥寺.pm 2026前夜祭
fujiwara3
8
2k
Master Dataグループ紹介資料
sansan33
PRO
1
4.8k
なぜ、あなたのエージェントは言うことを聞かないのか
segavvy
1
620
PLaMo 3.0 Primeの構造化出力サポート
pfn
PRO
0
170
クラウドセキュリティ入門 ~安全なクラウド利用のための基礎知識~
lhazy
8
6.8k
PLaMo 3.0 Primeの事後学習
pfn
PRO
0
260
信頼できるテスティングAIをどう育てるか?
odan611
0
180
AIQAのナレッジ構築について
qatonchan
1
140
Featured
See All Featured
The Language of Interfaces
destraynor
162
27k
Beyond borders and beyond the search box: How to win the global "messy middle" with AI-driven SEO
davidcarrasco
3
200
From π to Pie charts
rasagy
0
240
Testing 201, or: Great Expectations
jmmastey
46
8.2k
Typedesign – Prime Four
hannesfritz
42
3.1k
Color Theory Basics | Prateek | Gurzu
gurzu
0
400
Building AI with AI
inesmontani
PRO
1
1.1k
Noah Learner - AI + Me: how we built a GSC Bulk Export data pipeline
techseoconnect
PRO
0
340
jQuery: Nuts, Bolts and Bling
dougneiner
66
8.5k
Connecting the Dots Between Site Speed, User Experience & Your Business [WebExpo 2025]
tammyeverts
11
980
Building Adaptive Systems
keathley
44
3.2k
SEO for Brand Visibility & Recognition
aleyda
0
4.6k
Transcript
#RAKUSMeetup ©2022 RAKUS Co., Ltd. 楽楽精算の開発課題から学ぶ、 改善取り組み 株式会社ラクス 坂田光
#RAKUSMeetup 自己紹介 • 坂田 光 • 2020年入社 • 楽楽精算開発チーム シニアエンジニア
• メインはバックエンド(Java)
#RAKUSMeetup お話ししたいこと • 楽楽精算開発チームの改善取り組み ◦ 日々開発に取り組む中で積み重ねてきた事例を紹介 ◦ 小さな改善の積み重ねが品質向上につながる ◦ 少しでも改善できそうなところがあれば、とりあえず
やってみる
#RAKUSMeetup 事例① テスト項目書 • 課題 テスト項目の組み合わせ改善 ◦ 設定値や状態の組み合わせが多く、毎回テスト項目を作るのが大変 ◦ 毎回似たような組み合わせになるので、同じことをやるのが苦痛 因子1 因子2
因子3 水準1 水準1 水準1 水準2 水準2 水準1 水準2
#RAKUSMeetup 事例① テスト項目書 • 改善 組み合わせのテンプレートを作成 ◦ 予めテンプレを用意しておくことで、都度作成する工数を削減 ◦ テンプレはバージョンごとにメンテし、常に最新の状態に
#RAKUSMeetup 事例② リファクタリング • 課題 条件分岐の改善 ◦ 業務要件が複雑で分岐が多い ◦ ロジックが複数画面で共通化されているため、遷移元画面ごとの分岐があ る ◦
設定値ごとの分岐もあり、画面ごとの分岐と相まってネストが深くなってい く ◦ よく見たら重複した分岐がちらほら
#RAKUSMeetup 事例② リファクタリング if (screen == “screenA”) { if (setting ==
“settingA”) { return “A”; // 重複 } else if (setting == “settingB”) { if (registerDate <= “20221031”) { return “B”; } else { return “C”; } } } else if (screen == “screenB”) { if (setting == “settingA”) { return “A”; // 重複 } else { return “D”; } }
#RAKUSMeetup 事例② リファクタリング • 改善 早期リターン ◦ 重複した分岐を冒頭に持ってくることで、可読性を向上
#RAKUSMeetup 事例② リファクタリング if (setting == “settingA”) { return “A” //
重複 } if (screen == “screenA”) { if (setting == “settingB”) { if (registerDate <= “20221031”) { return “B”; } else { return “C”; } } } else if (screen == “screenB”) { return “D”; } if (screen == “screenA”) { if (setting == “settingA”) { return “A”; // 重複 } else if (setting == “settingB”) { if (registerDate <= “20221031”) { return “B”; } else { return “C”; } } } else if (screen == “screenB”) { if (setting == “settingA”) { return “A”; // 重複 } else { return “D”; }
#RAKUSMeetup 事例② リファクタリング • この他、若手を中心に様々なアプローチのリファクタリング を計画中 ◦ 若手エンジニアがリファクタリングに関する社内勉強会で持ち帰った知識が 活かされている
#RAKUSMeetup 事例③ 性能劣化との戦い • 課題 肥大化する環境への対応 ◦ 提供開始から10年以上が経過 ◦ 累計導入社数1万社、利用者数延べ100万人を突破 ◦ 蓄積されるデータもどんどん膨大になる
◦ 中にはこの環境に適応できず、性能劣化する機能もちらほら
#RAKUSMeetup 事例③ 性能劣化との戦い • 改善 非効率なコードの見直し void execute(Enum enumType, String name) {
for (i = 0, i < 100, i++) { Enum value = this.valueOf(enumType, name); // do something } } Enum valueOf(Enum enumType, String name) { try { Enum.valueOf(enumType, name); } catch (IllegalArgumentException e) { return null; } } 例外クラスの生成というコスト の高い処理を行った上で、処 理を続行している ループ回数が少なければいい が、増えれば増えるほど処理 時間もどんどん増える
#RAKUSMeetup 事例③ 性能劣化との戦い • 改善 非効率なコードの見直し ◦ 今回の例では、Enumの取得で例外をスローしない別の処理に置き換える ことで対応 ◦ このような非効率なコードが、そこかしこに隠れていると思われる ▪
まだまだ改善の余地あり
#RAKUSMeetup 事例③ 性能劣化との戦い • 改善 非効率なコードの見直し ◦ 闇雲に全てのコードを洗い出していてはキリがない ◦ 現状は劣化の発生ベースで、都度問題箇所を確認している ▪ 週次の性能検証
▪ 本番での検知 ◦ 問題が特定出来たら、横展開で確認して同様の問題を潰す ▪ これの積み重ねで、全体の処理を効率化
#RAKUSMeetup 事例④ モブプロの実践 • 課題 コードレビューの効率化 ◦ GitLabのマージリクエストでレビューするスタイル ◦ テキストでやり取りしているとレビュアの意図がうまく伝わらなかったり、ま たその逆もある ◦
やり取りの回数が増えて時間がかかる
#RAKUSMeetup 事例④ モブプロの実践 • 改善 モブプロをやってみた ◦ メンバーが一堂に会してコードを作り上げるスタイル ◦ 何かあったら直接会話しながら修正できるので、マージリクエストでやり取 りするより早い ◦
複数人でチェックしあうことで品質を向上 ◦ 歴の浅いメンバーの訓練にもなる ▪ 歴の長いメンバーから直接レクチャーを受けることができる
#RAKUSMeetup 事例④ モブプロの実践 • 改善 モブプロをやってみた ◦ 複数人の時間をいっぺんに使うので、場合によってはいつもより工数がか かるかも ▪ 自分たちの場合はそんなに変わらなかった ◦
人によって向き不向きもありそう ▪ 黙々と進めたい人には向かないかも ◦ やってみると結構疲れる ▪ 小まめな休憩は必須
#RAKUSMeetup 事例④ モブプロの実践 • 改善 モブプロをやってみた ◦ リモートワークでも全然いける ▪ リモート環境におけるエディタ共有等、リモート・モブプロを支援する ツールを使うと快適 ▪
楽楽精算チームではJetBrainsのCode With Meを活用中
#RAKUSMeetup 事例⑤ 老朽化したシステムの更新 • 課題 システム内部の老朽化改善 ◦ 息の長いサービスの宿命 ▪ レガシーコード ▪ 古いフレームワーク(伝統的なServlet-JSP)
▪ EOL間近のミドルウェア、ライブラリ
#RAKUSMeetup 事例⑤ 老朽化したシステムの更新 • 改善 ミドルウェア・ライブラリの更新 ◦ Java、DB、APサーバ etc… ◦ リリースノートの調査やアップデート後の検証が大変 ▪
オフショアのリソースも借りつつ進行中 ◦ 機能改修を止めるわけにはいかない ▪ 合間を縫ってコツコツやる精神が大事
#RAKUSMeetup 事例⑤ 老朽化したシステムの更新 • 改善 アーキテクチャの刷新 ◦ フロントエンド/バックエンドの分離を計画中 ◦ 現開発チームはバックエンド開発に集中できる体制を構築し、開発効率化を 目指す
#RAKUSMeetup 最後に • とにかく小さな改善の積み重ねが大切 • 改善はモチベーションアップにもつながる ◦ 作業を楽にしたり、新しい技術にチャレンジしてみたりすることで、開発者 のモチベーションアップにもつながっていく