{"componentChunkName":"component---src-modules-datocms-post-page-page-tsx","path":"/posts/23","result":{"data":{"post":{"title":"コードレビューをすると出戻りが発生する","author":{"name":"suin","images":{"r32":{"src":"https://www.datocms-assets.com/29850/1591833290-avatar512.jpg?auto=format&fm=png&h=32&mask=ellipse&w=32","srcSet":"https://www.datocms-assets.com/29850/1591833290-avatar512.jpg?auto=format&dpr=1&fm=png&h=32&mask=ellipse&w=32 1x,\nhttps://www.datocms-assets.com/29850/1591833290-avatar512.jpg?auto=format&dpr=1.5&fm=png&h=32&mask=ellipse&w=32 1.5x,\nhttps://www.datocms-assets.com/29850/1591833290-avatar512.jpg?auto=format&dpr=2&fm=png&h=32&mask=ellipse&w=32 2x,\nhttps://www.datocms-assets.com/29850/1591833290-avatar512.jpg?auto=format&dpr=3&fm=png&h=32&mask=ellipse&w=32 3x"},"r48":{"src":"https://www.datocms-assets.com/29850/1591833290-avatar512.jpg?auto=format&fm=png&h=48&mask=ellipse&w=48","srcSet":"https://www.datocms-assets.com/29850/1591833290-avatar512.jpg?auto=format&dpr=1&fm=png&h=48&mask=ellipse&w=48 1x,\nhttps://www.datocms-assets.com/29850/1591833290-avatar512.jpg?auto=format&dpr=1.5&fm=png&h=48&mask=ellipse&w=48 1.5x,\nhttps://www.datocms-assets.com/29850/1591833290-avatar512.jpg?auto=format&dpr=2&fm=png&h=48&mask=ellipse&w=48 2x,\nhttps://www.datocms-assets.com/29850/1591833290-avatar512.jpg?auto=format&dpr=3&fm=png&h=48&mask=ellipse&w=48 3x"}},"bio":"好き: TypeScript, DDD, OOP／#YYTypeScript の主催者／Qiita 4位／株式会社クラフトマンソフトウェア取締役／『実践ドメイン駆動設計』邦訳レビュア／#分報 考案者／Web自動テストShouldBeeを開発"},"date":"2015年3月22日","tags":["Inside-ShouldBee"],"category":"プロマネ","body":"<p data-sourcepos=\"1:1-1:54\">こんにちは！ShouldBee開発者の野澤です。</p>\n<p data-sourcepos=\"3:1-3:225\">今日は、ShouldBeeの開発チームでコードレビューを導入したら、どんな課題が見つかったか？それをどうやって解決しようと考えているかについて書きたいと思います。</p>\n<p data-sourcepos=\"5:1-5:435\">コードレビューを始めたきっかけは、コードや仕様の属人化を避けたいと思ったところにはじまります。ShouldBeeの開発では、たったふたりでコードを書いていても、作業を分担してやっていると、コードや仕様が作者にしか分からなくなるだけでなく、「いつの間にか追加されていた機能」もあって問題になっていました。</p>\n<p data-sourcepos=\"7:1-7:256\">この課題を解決するために、GitHub上でPull Requestを行い、必ず相手がコードレビューをしてからマージする運用を導入しました。コードレビューを取り入れてから2週間ほど経ったと思います。</p>\n<p data-sourcepos=\"9:1-9:553\">そこで新たに見つかった課題が、「コードレビューをすると出戻りが発生する」ことです。コードレビューがテストケースの追加やtypoの修正くらいの軽微なものならいいのですが、APIそのもの変更など、大改修が何度か必要になることもありました。コードレビューでコードの属人化が減り、コードやテストケースの品質は高まったと感じるものの、開発スピードが以前より犠牲になっているとも感じました。</p>\n<p data-sourcepos=\"11:1-11:419\">インターフェイスは外部に公開することが多く、コードが実装されてからインターフェイスが変わってしまうと、出戻りが大きくなってしまいます。そのインターフェイスに依存するコードは全て変更しないといけませんし、UIの場合ユーザマニュアルがあるとスクリーンショットはすべて差し替えになります。</p>\n<p data-sourcepos=\"13:1-13:178\">この課題を解消するには、実装する前にインターフェイスを固めることと考えました。具体的には、今2つのアイディアがあります。</p>\n<ol data-sourcepos=\"15:1-17:0\">\n<li data-sourcepos=\"15:1-15:45\">設計レビューをフローに加える</li>\n<li data-sourcepos=\"16:1-17:0\">ペア設計にする</li>\n</ol>\n<p data-sourcepos=\"18:1-18:496\">1つ目の設計レビューをフローに加えるとは、コードを完全に仕上げる前にレビューをすることです。と言っても設計図を評価するような堅苦しいものではなく、他のモジュールとの接合部になるAPIの名前や引数・ユーザインターフェイスのラフ図についてレビューします。コードレビューと似たフローで行えるので、僕らのチームとしては導入が容易だと考えました。</p>\n<p data-sourcepos=\"20:1-20:639\">2つ目のペア設計にする方法は、設計を2人がかりで行う方法です。非同期で行える設計レビューと比べると、ペア設計は2人が時間を合わせて作業しないとなりません。場合によっては、お互いの別の作業を止めてしまうデメリットがあります。逆にメリットとして、同じテーブルにつき、議論したり疑問を解決しながら行えるので意思疎通が早いという点があります。ペア設計の特徴を考えると、画面・モデル・インフラなど大枠の設計をするときに向いていると思います。</p>\n<p data-sourcepos=\"22:1-22:244\">今後、この2つのアイディアを試してみて、「コードレビューをすると出戻りが発生する」が軽減されるか試してみたいと思います。何か学びがあったらまた共有したいと思います。</p>\n"}},"pageContext":{"id":"DatoCmsPost-5142956-ja","description":"こんにちは！ShouldBee開発者の野澤です。 今日は、ShouldBeeの開発チームでコードレビューを導入したら、どんな課題が見つかったか？それをどうやって解決しようと考えているかについて書きたいと思います。 コードレビューを始めたきっかけは、コードや仕様の属人化を避けたいと思ったところにはじまります。ShouldBeeの開発では、たったふたりでコードを書いていても、作業を分担してやっていると、コードや仕様が作者にしか分からなくなるだけでなく、「いつの間にか追加されていた機能」もあって問題になっていました。 この課題を解決するために、GitHub上でPull Requestを行い、必ず相手","toc":[],"ogpImageUrl":"https://www.datocms-assets.com/29850/1593190022-pastedimage20200627146.png?fm=png&mark64=aHR0cHM6Ly93d3cuZGF0b2Ntcy1hc3NldHMuY29tLzI5ODUwLzE1OTMxNTQ2MzYtdHJhbnNwYXJlbnQtcGl4ZWwucG5nP3c9NDAwJmg9NjQmZml0PWNyb3AmYmxlbmQ2ND1hSFIwY0hNNkx5OTNkM2N1WkdGMGIyTnRjeTFoYzNObGRITXVZMjl0THpJNU9EVXdMekUxT1RFNE16TXlPVEF0WVhaaGRHRnlOVEV5TG1wd1p6OXRZWE5yUFdWc2JHbHdjMlVtWm0wOWNHNW5KbmM5TWpVMkptZzlNalUyJmJsZW5kLWg9NjQmYmxlbmQteD0wJmJsZW5kLXk9MCZibGVuZC1tb2RlPW5vcm1hbCZtYXJrNjQ9YUhSMGNITTZMeTloYzNObGRITXVhVzFuYVhndWJtVjBMMzUwWlhoMFAzUjRkQzFoYkdsbmJqMXRhV1JrYkdVbE1rTnNaV1owSm5SNGRDMW1iMjUwUFhOaGJuTXRjMlZ5YVdZbE1rTmliMnhrSm5SNGRDMWpiMnh2Y2oweU1qRTRNVFltZEhoME5qUTlZek5XY0dKbkpuUjRkQzF6YVhwbFBUTXdKbWc5TmpRJm1hcmsteD02NCZtYXJrLWFsaWduPW1pZGRsZSUyQ2xlZnQ&mark-align=bottom%2Cleft&mark-x=100&mark-y=496&blend64=aHR0cHM6Ly93d3cuZGF0b2Ntcy1hc3NldHMuY29tLzI5ODUwLzE1OTMxNTQ2MzYtdHJhbnNwYXJlbnQtcGl4ZWwucG5nP3c9MTIwMCZoPTYzMCZmaXQ9Y3JvcCZtYXJrNjQ9YUhSMGNITTZMeTkzZDNjdVpHRjBiMk50Y3kxaGMzTmxkSE11WTI5dEx6STVPRFV3THpFMU9UTXhOVEE1TkRBdFkzSmhablJ6YldGdUxUQXhMbkJ1WncmbWFyay1hbGlnbj10b3AlMkNjZW50ZXImbWFyay13PTI1MCZtYXJrLXk9ODAmYmxlbmQ2ND1hSFIwY0hNNkx5OWhjM05sZEhNdWFXMW5hWGd1Ym1WMEwzNTBaWGgwUDNSNGRDMWhiR2xuYmoxdGFXUmtiR1VsTWtOalpXNTBaWEltZEhoMExXWnZiblE5YzJGdWN5MXpaWEpwWmlVeVEySnZiR1FtZEhoMExYQmhaRDB4TURBbWRIaDBMV052Ykc5eVBUSXlNVGd4TmlaMGVIUTJORDAwTkV0Nk5EUlBPRFEwVDBvME5FOXpORFJQVkRRMFQydzBORTg0TkRSTFV6UTBSMW8wTkV0TU5EUkhielZaWlRZMWIyazNORFJMU3pRMFIwMDFOVzAyTlRWVFpqUTBSMW8wTkV0TUpuUjRkQzF6YVhwbFBUVTFKbmM5TVRJd01DWm9QVFl6TUEmYmxlbmQtbW9kZT1ub3JtYWw&blend-mode=normal","otherPost":{"type":"author","title":"コラボすると開発チームがストレス？issueの最適な粒度を模索してます","slug":"/posts/25"}}}}