Slide 1

Slide 1 text

© Findy Inc. 1 コード品質向上で得られる効果と 実践的取り組み 2025.03.25 コード品質向上のノウハウ 浜⽥ 直⼈ Naoto Hamada (ham)

Slide 2

Slide 2 text

© Findy Inc. 2 開発⽣産性が向上する⽅法を探求しているエンジニア! Ruby / Rails / React / TypeScript / AWS Agile / DevOps / Developer Productivity / DevEx Stock Investment 浜⽥ 直⼈ Naoto Hamada (ham) @hamchance0215

Slide 3

Slide 3 text

挑戦するエンジニアの プラットフォームをつくる。 テクノロジーによる社会変革の時代に最も必要なことは、エンジニアの可能性を拡げることです。 Findyは、アルゴリズムとヒューマニティの融合によって、 すべてのエンジニアが不安なく挑戦できる世界共通のプラットフォームをつくります。 個人のチャンスを生み出し、組織の生産性を向上させ、社会の人材資産を好循環させる。 エンジニアプラットフォームが、デジタル社会の発展を加速していきます。 ビジョン © Findy Inc. 3

Slide 4

Slide 4 text

No content

Slide 5

Slide 5 text

© Findy Inc. 5 Agenda - ソフトウェアの品質特性 - 保守性について - 保守性を向上させる取り組み - まとめ

Slide 6

Slide 6 text

© Findy Inc. ソフトウェアの品質特性 6

Slide 7

Slide 7 text

© Findy Inc. 7 ソフトウェアの品質特性とは? - ISO/IEC 25010では、システム及びソフトウェア製品の品質 特性を8つの特性とそれぞれの副特性で定義しています - ISO/IEC 25010 ○ 国際標準化機構(ISO)と国際電気標準会議(IEC)が共 同で発⾏した国際規格 - JIS X 25010 ○ ISO/IEC 25010を基に、⽇本産業標準調査会(JISC)が ⽇本の国家規格(JIS規格)として発⾏したもの

Slide 8

Slide 8 text

© Findy Inc. 8 ソフトウェアの品質特性とは? - システム及びソフトウェアの品質測定量とその測定⽅法 https://www.ipa.go.jp/archive/files/000065866.pdf

Slide 9

Slide 9 text

© Findy Inc. 9 ソフトウェアの品質特性とは? - システム及びソフトウェアの品質測定量とその測定⽅法 https://www.ipa.go.jp/archive/files/000065866.pdf

Slide 10

Slide 10 text

© Findy Inc. 保守性について 10

Slide 11

Slide 11 text

© Findy Inc. 11 保守性とは? - ソフトウェアの変更が容易かつ効率的に⾏える度合いを⽰ す品質特性 - 保守性が⾼いとは、ソフトウェアの機能追加、バグ修正、 パフォーマンス改善などが容易に⾏えることを意味する

Slide 12

Slide 12 text

© Findy Inc. 12 保守性とは? - 保守性に含まれる5つの品質副特性 ○ モジュール性 ○ 再利⽤性 ○ 解析容易性 ○ 修正容易性 ○ 試験容易性

Slide 13

Slide 13 text

© Findy Inc. 13 モジュール性 - ソフトウェアが、独⽴したコンポーネントに分割されてい る度合い。これにより、特定のコンポーネントのみを変更 することが容易になり、他の部分への影響を最⼩限に抑え られます。 全然関係ないところが 壊れたー

Slide 14

Slide 14 text

© Findy Inc. 14 再利⽤性 - ソフトウェアのコンポーネントが、他のソフトウェアやシ ステムで再利⽤できる度合い。再利⽤性が⾼いほど、開発 効率が向上し、保守コストを削減できます。 同じことをしている コードがたくさんある... 全部対応せねば...

Slide 15

Slide 15 text

© Findy Inc. 15 解析容易性 - ソフトウェアの障害や変更の影響を、容易に分析できる度 合い。解析容易性が⾼いほど、問題の特定や修正が迅速に ⾏えます。 ビッグバンリリースすぎて 変更の影響がわからん...

Slide 16

Slide 16 text

© Findy Inc. 16 修正容易性 - ソフトウェアの変更を、容易かつ効率的に⾏える度合い。 修正容易性が⾼いほど、変化する要求に柔軟に対応できま す。 コードが🍝 機能追加するには、どこを 触わればいいんだ...

Slide 17

Slide 17 text

© Findy Inc. 17 試験容易性 - ソフトウェアのテストを、容易かつ効率的に⾏える度合 い。試験容易性が⾼いほど、品質の⾼いソフトウェアを維 持できます。 テストがないので既存の 振る舞いを守れない...

Slide 18

Slide 18 text

© Findy Inc. 保守性を向上させる取り組み 18

Slide 19

Slide 19 text

© Findy Inc. 19 モジュール性 - 関⼼事の分離 - 結合度と凝集度 ○ 内部結合、共通結合、外部結合、制御結合、制御結合、スタンプ結合、データ結合 ○ 偶発的凝集、論理的凝集、時間的凝集、⼿続き的凝集、通信的凝集、情報的凝集、機能的凝集 良いコードとは何か - エンジニア新卒研修 スライド公開 CyberZ Developer https://note.com/cyberz_cto/n/n26f535d6c575#E0aBe

Slide 20

Slide 20 text

© Findy Inc. 20 再利⽤性 - 汎⽤コンポーネントの作成 - 共通機能の集約 ○ UIコンポーネント / Utils ... ○ ※過度な共通化は結合度が⾼くなるので注意 ■ 2,3箇所で使われるようになってから共通化を考える - 設計パターンとフレームワークの活⽤ ○ Next.js / Rails / Clean Architecture / デザインパターン...

Slide 21

Slide 21 text

© Findy Inc. 21 解析容易性 - 明確なコーディング規約 - 適切なコメントとドキュメント - ログ出⼒の活⽤ - ⼩さなパッチ単位でデプロイ

Slide 22

Slide 22 text

© Findy Inc. 22 解析容易性 - 「⼩さなパッチ単位でデプロイ」を中⼼にファインディの 事例をNoteで公開しています https://note.com/hamchance/n/n6a30971763e4 https://note.com/hamchance/n/n97c551bab985 https://note.com/hamchance/n/nc2333dd10083

Slide 23

Slide 23 text

© Findy Inc. 23 修正容易性 - シンプルなコード - テスト容易性を考慮した設計 - バージョン管理システムの利⽤

Slide 24

Slide 24 text

© Findy Inc. 24 修正容易性 - 過度な共通化を排除し、低結合にすることで、可読性が⾼ く変更に強いコードへリファクタリング https://speakerdeck.com/ham0215/izikarasinpuruhe-purodakutonocheng-chang-nihe-wasetaakitekutiyanobian-geng

Slide 25

Slide 25 text

© Findy Inc. 25 試験容易性 - テストケースの⾃動⽣成 - テスト環境の整備 - 単体テストの実施

Slide 26

Slide 26 text

© Findy Inc. 26 試験容易性 - システムを守るテストコード - PRごとに実⾏できるように、 ⼿間なく実⾏できる環境を構 築するだけではなく、実⾏時 間にこだわる https://tech.findy.co.jp/entry/2024/06/13/111106 https://speakerdeck.com/ham0215/ciha5fen-yi-nei-su-zao-ikai-fa-saikuruwozhi-eruci

Slide 27

Slide 27 text

© Findy Inc. まとめ 27

Slide 28

Slide 28 text

© Findy Inc. 28 まとめ - 「コード品質」という⾔葉は曖昧なので、最初に認識を合 わせる ○ ISO/IEC 25010は体系的にまとめられていて使いやすい ○ 品質特性などに分解していくと、コード品質の伸びしろ や改善点が⾒つかりやすい - コード品質を向上させていくには⼩さな積み重ねと継続的 な活動が⼤事です!!

Slide 29

Slide 29 text

© Findy Inc. 29 まとめ - ⽣成AIの活⽤⽂脈でもコード品質は重要になってきそう! - [⽬次] - 既存コードの最適化 ○ 不要なコードの削除 ○ 統⼀されたコーディング規約 ○ コードの設計の⼀意性 - ドキュメンテーションの充実 ○ docコメントやAPIドキュメント ○ カスタムインストラクション ○ プロンプトを記録 - 継続的な改善を可能にする開発⽂化 ○ テストコードとCI/CDの整備 ○ Pull requestの粒度 https://tech.findy.co.jp/entry/2025/03/17/070000