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
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
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
【NRUG vol.18】なぜ多くのオブザーバビリティ導入は失敗するのか
nrug_member
0
130
NAB Show 2026 動画技術関連レポート / NAB Show 2026 Report
cyberagentdevelopers
PRO
0
200
あなたの知らないPDFのアクセシビリティ
lycorptech_jp
PRO
0
190
【Cyber-sec+】経営層を"動かす"ための考え方
hssh2_bin
0
190
白金鉱業Meetup_Vol.24_「AIエージェントは分けるほど良い」は本当か? / Is it true that “the more you divide AI agents, the better”?
brainpadpr
1
380
Claude Codeをどのように キャッチアップしているか
oikon48
12
8.1k
気づかぬうちにセキュリティ負債を生むAPIキー運用
sgwrmctk
0
130
エンジニアリング戦略の作り方 / Crafting Engineering Strategy
iwashi86
21
6.9k
Android の公式 Skill / Android skills
yanzm
0
150
AIの性能が向上しても未解決な組織の重大問題は何か?/An Unsolved Organizational Problem in the Age of AI
moriyuya
4
680
日本 Fintech 未来予測レポート 2027〜2028年(オリジナル版)
8maki
0
2.2k
AIのReact習熟度を測る
uhyo
2
570
Featured
See All Featured
Ruling the World: When Life Gets Gamed
codingconduct
0
250
Leadership Guide Workshop - DevTernity 2021
reverentgeek
1
300
Money Talks: Using Revenue to Get Sh*t Done
nikkihalliwell
0
250
Connecting the Dots Between Site Speed, User Experience & Your Business [WebExpo 2025]
tammyeverts
11
940
Building a Modern Day E-commerce SEO Strategy
aleyda
45
9.1k
<Decoding/> the Language of Devs - We Love SEO 2024
nikkihalliwell
1
240
How to train your dragon (web standard)
notwaldorf
97
6.7k
HU Berlin: Industrial-Strength Natural Language Processing with spaCy and Prodigy
inesmontani
PRO
0
410
JAMstack: Web Apps at Ludicrous Speed - All Things Open 2022
reverentgeek
1
470
Tips & Tricks on How to Get Your First Job In Tech
honzajavorek
1
540
Dominate Local Search Results - an insider guide to GBP, reviews, and Local SEO
greggifford
PRO
0
190
Digital Projects Gone Horribly Wrong (And the UX Pros Who Still Save the Day) - Dean Schuster
uxyall
1
1.7k
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 最後に • とにかく小さな改善の積み重ねが大切 • 改善はモチベーションアップにもつながる ◦ 作業を楽にしたり、新しい技術にチャレンジしてみたりすることで、開発者 のモチベーションアップにもつながっていく