SlideShare ist ein Scribd-Unternehmen logo
1 von 20
Downloaden Sie, um offline zu lesen
コードレビューの
アンチパターンについて
考えてみた
@who_you_me
2018/01/19
Code Review Meetup #1
Code Review Meetup #1
2018/01/19
2
自己紹介
●
祖山 寿雄
– @who_you_me
●
社会学修士
●
株式会社サイカ
– 開発室長
●
Python / JavaScript / AWS / Statistics
Code Review Meetup #1
2018/01/19
3
SideCI使ってます
コードレビュー
だいたいどこでもやってる
たまに聞く
コードレビューつらい
アンチパターンを考えてみた
Code Review Meetup #1
2018/01/19
8
アンチパターン
●
1: HRTの欠如
●
2: 目的が曖昧
●
3: 技術力格差
●
4: 属人的コード
Code Review Meetup #1
2018/01/19
9
アンチパターン1: HRTの欠如
●
HRT
– Humility (謙虚)
– Respect (尊敬)
– Trust (信頼)
●
初めて聞いた人はTeam Geekを読もう
Code Review Meetup #1
2018/01/19
10
アンチパターン1: HRTの欠如
●
こんな人がいるとさすがに厳しい
– 「正しい」ことならどんな表現で何を言ってもいいと
思っている人
●
そういう奴に限ってだいたい正しくない
– 「(経験に差がある場合は特に)純粋なコードへの指
摘であっても人格否定と受け取られやすいので表現に
気をつけましょう」と説いても分かってくれない人
Code Review Meetup #1
2018/01/19
11
アンチパターン2: 目的が曖昧
●
コードレビューの利点は主に2つ
– ソースコードの質を保つ
– メンバーの成長、教育
●
私見では教育効果は副次的なものなので、ソース
コードの質担保に振ったほうがよい
Code Review Meetup #1
2018/01/19
12
アンチパターン3: 技術力格差
●
格差がありすぎると袋叩きになりがち
– 「目的が曖昧」な場合は特に
●
指摘する側もされる側も辛い
– 同じことを何回も言っている(と思っている)のに治
らない
●
HRTにも限界がある
– 萎縮
Code Review Meetup #1
2018/01/19
13
アンチパターン4: 属人的コード
●
鶏が先か卵が先か難しいが…
– 「属性化を解消するためのコードレビュー」という側
面も当然あるので
●
とはいえ時間がないと「ここ触ってるのあの人だ
けだからよく分からんけど通しちゃえ」となりが
ち
– レビューやる意味が薄れてしまう
処方箋
Code Review Meetup #1
2018/01/19
15
前提: 銀の弾丸など存在しない
●
コードレビューだけで全ての問題を解決すること
はできない(当たり前)
●
他の施策と組み合わせてこそ真価を発揮する
– 技術力も上がる
– 属人化が解消される
Code Review Meetup #1
2018/01/19
16
アンチパターン1: HRTの欠如
●
チームが大切にする価値観を明確にしよう
– HRT
●
明文化するだけじゃなくて日々気を付けよう
– 文化は日々の行動によってのみ作られる
●
困った時は会話しよう
– テキストベースだけだと荒れがち
Code Review Meetup #1
2018/01/19
17
アンチパターン2: 曖昧な目的
●
「よいコード」の基準を共有しよう
●
目的を明確にしよう
– 1つである必要はないが、欲張りもよくない
●
typo、コーディング規約
●
設計の良し悪し
●
人のコードを読む
Code Review Meetup #1
2018/01/19
18
アンチパターン3: 技術力格差
●
未熟なメンバーがいる場合はちゃんと教育しよう
– コードレビュー「だけ」では成長できないし、そもそ
もテキストベースでのやり取りには限界がある
– ペアプロ/モブプロ
– 「リーダブルコードは基礎教養」とマサカリを投げる
のではなく、本当に基礎教養なら業務時間に読ませよ
う
Code Review Meetup #1
2018/01/19
19
アンチパターン4: 属人的コード
●
属人化解消したいならちゃんと時間を取る/やり
方を工夫しよう
– ペアレビュー(?)とか
●
レビュワーとレビュイーが隣りに座って、レビュイーがレ
ビュワーに説明しながら進めるやり方
●
チーム全員でやってもよさそう
– 社内勉強会とか
●
「○○のコードを△△先生に解説してもらう会」
Happy Reviewing!

Weitere ähnliche Inhalte

Was ist angesagt?

メタプログラミングって何だろう
メタプログラミングって何だろうメタプログラミングって何だろう
メタプログラミングって何だろう
Kota Mizushima
 

Was ist angesagt? (20)

例外設計における大罪
例外設計における大罪例外設計における大罪
例外設計における大罪
 
ゲームエンジニアのためのデータベース設計
ゲームエンジニアのためのデータベース設計ゲームエンジニアのためのデータベース設計
ゲームエンジニアのためのデータベース設計
 
DockerコンテナでGitを使う
DockerコンテナでGitを使うDockerコンテナでGitを使う
DockerコンテナでGitを使う
 
マイクロサービスにおける 非同期アーキテクチャ
マイクロサービスにおける非同期アーキテクチャマイクロサービスにおける非同期アーキテクチャ
マイクロサービスにおける 非同期アーキテクチャ
 
C#とILとネイティブと
C#とILとネイティブとC#とILとネイティブと
C#とILとネイティブと
 
最適化超入門
最適化超入門最適化超入門
最適化超入門
 
先端技術とメディア表現1 #FTMA15
先端技術とメディア表現1 #FTMA15先端技術とメディア表現1 #FTMA15
先端技術とメディア表現1 #FTMA15
 
大規模フロントエンドのクリーンアーキテクチャ化 ~ 年間売上1,000億円企業モノタロウの取組み ~
大規模フロントエンドのクリーンアーキテクチャ化 ~ 年間売上1,000億円企業モノタロウの取組み ~大規模フロントエンドのクリーンアーキテクチャ化 ~ 年間売上1,000億円企業モノタロウの取組み ~
大規模フロントエンドのクリーンアーキテクチャ化 ~ 年間売上1,000億円企業モノタロウの取組み ~
 
DXとかDevOpsとかのなんかいい感じのやつ 富士通TechLive
DXとかDevOpsとかのなんかいい感じのやつ 富士通TechLiveDXとかDevOpsとかのなんかいい感じのやつ 富士通TechLive
DXとかDevOpsとかのなんかいい感じのやつ 富士通TechLive
 
ゼロから始める転移学習
ゼロから始める転移学習ゼロから始める転移学習
ゼロから始める転移学習
 
MagicOnion~C#でゲームサーバを開発しよう~
MagicOnion~C#でゲームサーバを開発しよう~MagicOnion~C#でゲームサーバを開発しよう~
MagicOnion~C#でゲームサーバを開発しよう~
 
機械学習で泣かないためのコード設計
機械学習で泣かないためのコード設計機械学習で泣かないためのコード設計
機械学習で泣かないためのコード設計
 
CEDEC2019 大規模モバイルゲーム運用におけるマスタデータ管理事例
CEDEC2019 大規模モバイルゲーム運用におけるマスタデータ管理事例CEDEC2019 大規模モバイルゲーム運用におけるマスタデータ管理事例
CEDEC2019 大規模モバイルゲーム運用におけるマスタデータ管理事例
 
ChatGPT 人間のフィードバックから強化学習した対話AI
ChatGPT 人間のフィードバックから強化学習した対話AIChatGPT 人間のフィードバックから強化学習した対話AI
ChatGPT 人間のフィードバックから強化学習した対話AI
 
情報共有は、なぜGoogle Docsじゃなく、 Confluenceなのか。
情報共有は、なぜGoogle Docsじゃなく、 Confluenceなのか。情報共有は、なぜGoogle Docsじゃなく、 Confluenceなのか。
情報共有は、なぜGoogle Docsじゃなく、 Confluenceなのか。
 
中3女子でもわかる constexpr
中3女子でもわかる constexpr中3女子でもわかる constexpr
中3女子でもわかる constexpr
 
目grep入門 +解説
目grep入門 +解説目grep入門 +解説
目grep入門 +解説
 
いまさら聞けないarmを使ったNEONの基礎と活用事例
いまさら聞けないarmを使ったNEONの基礎と活用事例いまさら聞けないarmを使ったNEONの基礎と活用事例
いまさら聞けないarmを使ったNEONの基礎と活用事例
 
メタプログラミングって何だろう
メタプログラミングって何だろうメタプログラミングって何だろう
メタプログラミングって何だろう
 
深層学習による自然言語処理入門: word2vecからBERT, GPT-3まで
深層学習による自然言語処理入門: word2vecからBERT, GPT-3まで深層学習による自然言語処理入門: word2vecからBERT, GPT-3まで
深層学習による自然言語処理入門: word2vecからBERT, GPT-3まで
 

Mehr von Hisao Soyama

『アジャイルデータサイエンス』2章 データ
『アジャイルデータサイエンス』2章 データ『アジャイルデータサイエンス』2章 データ
『アジャイルデータサイエンス』2章 データ
Hisao Soyama
 
『アジャイルデータサイエンス』1章 理論
『アジャイルデータサイエンス』1章 理論 『アジャイルデータサイエンス』1章 理論
『アジャイルデータサイエンス』1章 理論
Hisao Soyama
 
グラフデータベース「Neo4j」の 導入の導入(続き)-Cypherの基本のキ-
 グラフデータベース「Neo4j」の 導入の導入(続き)-Cypherの基本のキ- グラフデータベース「Neo4j」の 導入の導入(続き)-Cypherの基本のキ-
グラフデータベース「Neo4j」の 導入の導入(続き)-Cypherの基本のキ-
Hisao Soyama
 
グラフデータベース「Neo4j」の 導入の導入
グラフデータベース「Neo4j」の 導入の導入グラフデータベース「Neo4j」の 導入の導入
グラフデータベース「Neo4j」の 導入の導入
Hisao Soyama
 
大学生のTwitter利用に関する定量分析―利用目的とサービス設計の関係―
大学生のTwitter利用に関する定量分析―利用目的とサービス設計の関係―大学生のTwitter利用に関する定量分析―利用目的とサービス設計の関係―
大学生のTwitter利用に関する定量分析―利用目的とサービス設計の関係―
Hisao Soyama
 
Pythonによるソーシャルデータ分析―わたしはこうやって修士号を取得しました―
Pythonによるソーシャルデータ分析―わたしはこうやって修士号を取得しました―Pythonによるソーシャルデータ分析―わたしはこうやって修士号を取得しました―
Pythonによるソーシャルデータ分析―わたしはこうやって修士号を取得しました―
Hisao Soyama
 
『オープンソースで学ぶ社会ネットワーク分析』1章 イントロダクション
『オープンソースで学ぶ社会ネットワーク分析』1章 イントロダクション『オープンソースで学ぶ社会ネットワーク分析』1章 イントロダクション
『オープンソースで学ぶ社会ネットワーク分析』1章 イントロダクション
Hisao Soyama
 

Mehr von Hisao Soyama (12)

People analyticsと社会ネットワーク分析
People analyticsと社会ネットワーク分析People analyticsと社会ネットワーク分析
People analyticsと社会ネットワーク分析
 
本当に知ってる!? リアルなデータ分析の世界~サイカのエンジニアが語る、話題の技術の「いま」と「未来」~
本当に知ってる!? リアルなデータ分析の世界~サイカのエンジニアが語る、話題の技術の「いま」と「未来」~本当に知ってる!? リアルなデータ分析の世界~サイカのエンジニアが語る、話題の技術の「いま」と「未来」~
本当に知ってる!? リアルなデータ分析の世界~サイカのエンジニアが語る、話題の技術の「いま」と「未来」~
 
階層ベイズでプロ野球各球団の「本当の強さ」を推定してみる
階層ベイズでプロ野球各球団の「本当の強さ」を推定してみる階層ベイズでプロ野球各球団の「本当の強さ」を推定してみる
階層ベイズでプロ野球各球団の「本当の強さ」を推定してみる
 
『アジャイルデータサイエンス』2章 データ
『アジャイルデータサイエンス』2章 データ『アジャイルデータサイエンス』2章 データ
『アジャイルデータサイエンス』2章 データ
 
『アジャイルデータサイエンス』1章 理論
『アジャイルデータサイエンス』1章 理論 『アジャイルデータサイエンス』1章 理論
『アジャイルデータサイエンス』1章 理論
 
10分でわかるPythonの開発環境
10分でわかるPythonの開発環境10分でわかるPythonの開発環境
10分でわかるPythonの開発環境
 
グラフデータベース「Neo4j」の 導入の導入(続き)-Cypherの基本のキ-
 グラフデータベース「Neo4j」の 導入の導入(続き)-Cypherの基本のキ- グラフデータベース「Neo4j」の 導入の導入(続き)-Cypherの基本のキ-
グラフデータベース「Neo4j」の 導入の導入(続き)-Cypherの基本のキ-
 
グラフデータベース「Neo4j」の 導入の導入
グラフデータベース「Neo4j」の 導入の導入グラフデータベース「Neo4j」の 導入の導入
グラフデータベース「Neo4j」の 導入の導入
 
Matrix
MatrixMatrix
Matrix
 
大学生のTwitter利用に関する定量分析―利用目的とサービス設計の関係―
大学生のTwitter利用に関する定量分析―利用目的とサービス設計の関係―大学生のTwitter利用に関する定量分析―利用目的とサービス設計の関係―
大学生のTwitter利用に関する定量分析―利用目的とサービス設計の関係―
 
Pythonによるソーシャルデータ分析―わたしはこうやって修士号を取得しました―
Pythonによるソーシャルデータ分析―わたしはこうやって修士号を取得しました―Pythonによるソーシャルデータ分析―わたしはこうやって修士号を取得しました―
Pythonによるソーシャルデータ分析―わたしはこうやって修士号を取得しました―
 
『オープンソースで学ぶ社会ネットワーク分析』1章 イントロダクション
『オープンソースで学ぶ社会ネットワーク分析』1章 イントロダクション『オープンソースで学ぶ社会ネットワーク分析』1章 イントロダクション
『オープンソースで学ぶ社会ネットワーク分析』1章 イントロダクション
 

Kürzlich hochgeladen

Kürzlich hochgeladen (12)

知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
 
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
 
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルLoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
 
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
 
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイスLoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
 
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
 
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半        2024/04/26の勉強会で発表されたものです。新人研修 後半        2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。
 
Utilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native IntegrationsUtilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native Integrations
 
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
 
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
 
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
 
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
 

コードレビューのアンチパターンについて考えてみた

  • 2. Code Review Meetup #1 2018/01/19 2 自己紹介 ● 祖山 寿雄 – @who_you_me ● 社会学修士 ● 株式会社サイカ – 開発室長 ● Python / JavaScript / AWS / Statistics
  • 3. Code Review Meetup #1 2018/01/19 3 SideCI使ってます
  • 8. Code Review Meetup #1 2018/01/19 8 アンチパターン ● 1: HRTの欠如 ● 2: 目的が曖昧 ● 3: 技術力格差 ● 4: 属人的コード
  • 9. Code Review Meetup #1 2018/01/19 9 アンチパターン1: HRTの欠如 ● HRT – Humility (謙虚) – Respect (尊敬) – Trust (信頼) ● 初めて聞いた人はTeam Geekを読もう
  • 10. Code Review Meetup #1 2018/01/19 10 アンチパターン1: HRTの欠如 ● こんな人がいるとさすがに厳しい – 「正しい」ことならどんな表現で何を言ってもいいと 思っている人 ● そういう奴に限ってだいたい正しくない – 「(経験に差がある場合は特に)純粋なコードへの指 摘であっても人格否定と受け取られやすいので表現に 気をつけましょう」と説いても分かってくれない人
  • 11. Code Review Meetup #1 2018/01/19 11 アンチパターン2: 目的が曖昧 ● コードレビューの利点は主に2つ – ソースコードの質を保つ – メンバーの成長、教育 ● 私見では教育効果は副次的なものなので、ソース コードの質担保に振ったほうがよい
  • 12. Code Review Meetup #1 2018/01/19 12 アンチパターン3: 技術力格差 ● 格差がありすぎると袋叩きになりがち – 「目的が曖昧」な場合は特に ● 指摘する側もされる側も辛い – 同じことを何回も言っている(と思っている)のに治 らない ● HRTにも限界がある – 萎縮
  • 13. Code Review Meetup #1 2018/01/19 13 アンチパターン4: 属人的コード ● 鶏が先か卵が先か難しいが… – 「属性化を解消するためのコードレビュー」という側 面も当然あるので ● とはいえ時間がないと「ここ触ってるのあの人だ けだからよく分からんけど通しちゃえ」となりが ち – レビューやる意味が薄れてしまう
  • 15. Code Review Meetup #1 2018/01/19 15 前提: 銀の弾丸など存在しない ● コードレビューだけで全ての問題を解決すること はできない(当たり前) ● 他の施策と組み合わせてこそ真価を発揮する – 技術力も上がる – 属人化が解消される
  • 16. Code Review Meetup #1 2018/01/19 16 アンチパターン1: HRTの欠如 ● チームが大切にする価値観を明確にしよう – HRT ● 明文化するだけじゃなくて日々気を付けよう – 文化は日々の行動によってのみ作られる ● 困った時は会話しよう – テキストベースだけだと荒れがち
  • 17. Code Review Meetup #1 2018/01/19 17 アンチパターン2: 曖昧な目的 ● 「よいコード」の基準を共有しよう ● 目的を明確にしよう – 1つである必要はないが、欲張りもよくない ● typo、コーディング規約 ● 設計の良し悪し ● 人のコードを読む
  • 18. Code Review Meetup #1 2018/01/19 18 アンチパターン3: 技術力格差 ● 未熟なメンバーがいる場合はちゃんと教育しよう – コードレビュー「だけ」では成長できないし、そもそ もテキストベースでのやり取りには限界がある – ペアプロ/モブプロ – 「リーダブルコードは基礎教養」とマサカリを投げる のではなく、本当に基礎教養なら業務時間に読ませよ う
  • 19. Code Review Meetup #1 2018/01/19 19 アンチパターン4: 属人的コード ● 属人化解消したいならちゃんと時間を取る/やり 方を工夫しよう – ペアレビュー(?)とか ● レビュワーとレビュイーが隣りに座って、レビュイーがレ ビュワーに説明しながら進めるやり方 ● チーム全員でやってもよさそう – 社内勉強会とか ● 「○○のコードを△△先生に解説してもらう会」