Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

「納品のない受託開発」を支えるコードレビューの取り組み

「納品のない受託開発」と共に、その現場で行われている開発の進め方と、ソースコードレビューの取り組みについてご紹介します。

Related Books

Free with a 30 day trial from Scribd

See all

Related Audiobooks

Free with a 30 day trial from Scribd

See all
  • Be the first to comment

「納品のない受託開発」を支えるコードレビューの取り組み

  1. 1. 「納品のない受託開発」を⽀支える コードレビューの取り組み 倉貫義⼈人・⻄西⾒見見公宏 #jasst ライブコードレビューで学ぶ!
  2. 2. http://www.sonicgarden.jp/ 倉貫義⼈人 「⼼心はプログラマ、仕事は経営者」 Amazon2部⾨門で1位!発売3週間で重版!
  3. 3. http://www.sonicgarden.jp/ 株式会社ソニックガーデン 2009年年社内ベンチャー創業    2011年年MBOで独⽴立立 全員プログラマ  職⼈人集団社員12名  
  4. 4. http://www.sonicgarden.jp/ 「Remotty」  〜~リモートチームのためのツール まるでオフィスにいるようなコミュニケーション リモートワークにチームワークを https://remotty.net
  5. 5. http://www.sonicgarden.jp/ 納品のない受託開発
  6. 6. http://www.sonicgarden.jp/ 「納品のない受託開発」とは •  ⽉月額定額で、開発と運⽤用を続ける •  顧問として全ての⼯工程を担当する •  働く時間でなく、成果を提供する •  ビジネスの成⻑⾧長をITで⽀支えていく 「納品」をなくせばうまくいく
  7. 7. http://www.sonicgarden.jp/ 「納品のない受託開発」で得られる顧客の価値 •  要件定義をしなくてもよい •  仕様変更更はいつでも出来る •  直接エンジニアに相談できる •  作らない提案をしてもらえる プロフェッショナルの仕事
  8. 8. http://www.sonicgarden.jp/ 「納品のない受託開発」でやっていないこと •  ドキュメントは⼀一切切、作りません •  お客様のところには訪問しません •  なんでもする営業担当はいません •  納期を死守する約束はできません 圧倒的な費⽤用対効果を実現
  9. 9. http://www.sonicgarden.jp/ 納品をなくした理理由
  10. 10. http://www.sonicgarden.jp/ 「納品のない受託開発」をなぜするのか? •  発注者と受注者でのゴールの違い •  後で直せないから、詰め込む要求 •  ⽣生産性が低いほど、⾼高くなる⾒見見積 •  使う価値よりも、要件定義に従う ビジネスモデルの構造的⽋欠陥
  11. 11. http://www.sonicgarden.jp/ インターネット以降降に変わった顧客のニーズ •  ⼩小さく始めてから⼤大きく育てたい •  事業の成⻑⾧長にあわせて改修したい •  内製はエンジニアの⾒見見極めが困難 •  SIerは要件定義が必要で⾦金金額⾼高い 新規事業に向いた開発がない
  12. 12. http://www.sonicgarden.jp/ 「納品のない受託開発」に求められること •  要件の予測は困難で⽇日々変化する •  ユーザが使い始めてからスタート •  システムの完成は⽬目指していない •  ⻑⾧長期的視野と経営視点を持つこと 事業の成⻑⾧長を⽀支えるパートナー
  13. 13. http://www.sonicgarden.jp/ プロセス
  14. 14. http://www.sonicgarden.jp/ ⻄西⾒見見  公宏(にしみ  まさひろ) 「⼼心はプログラマ、仕事もプログラマ」
  15. 15. http://www.sonicgarden.jp/ 「納品のない受託開発」を始める前に •  ビジネスモデルとビジョンの共有 •  何のために作るのか?を追求する •  コストと期間を固定し機能を調整 •  3ヶ⽉月で出来るものにフォーカス 作らなくて済むなら作らない
  16. 16. http://www.sonicgarden.jp/ 「納品のない受託開発」の進め⽅方 •  毎週定例例MTGを⾏行行って開発が進む •  定例例MTGの中で確認と設計をする •  常に動くソフトウェアで確認する •  正しい仕様は現在動いているモノ 完成させることを⽬目指さない
  17. 17. http://www.sonicgarden.jp/ 「納品のない受託開発」のエンジニアリング 本番環境 (ユーザ向け) テスト環境 (クライアント向け) エンジニア コードの共有 エンジニア コードレビュー 継続的デリバリー 同⼀一環境エンジニア ペアオペ テスト 駆動開発 ペアプロ (たまに)
  18. 18. http://www.sonicgarden.jp/ コードレビュー
  19. 19. http://www.sonicgarden.jp/ 「納品のない受託開発」の進め⽅方(再) •  毎週定例例MTGを⾏行行って開発が進む •  定例例MTGの中で確認と設計をする •  常に動くソフトウェアで確認する •  正しい仕様は現在動いているモノ 完成させることを⽬目指さない
  20. 20. http://www.sonicgarden.jp/ ソフトウェアに求められる特性は何か? •  常に仕様を追加/変更更できること •  常に本番リリース可能であること •  スピード感をもち開発できること •  不不具合はすぐ修正可能であること 持続して変化できること
  21. 21. http://www.sonicgarden.jp/ 外的環境からも変化は求められる Ruby(最新2.2.2) Rails(最新4.2.1) 2008年6月 Ruby1.8.7リリース 2014年7月末 Ruby1.8.7、Ruby1.9.2 セキュリティメンテナンス終了 2010年8月 Ruby1.9.2リリース 2015年2月末 Ruby1.9.3 セキュリティメンテナンス終了 2011年10月 Ruby1.9.3リリース 2013年6月27日 4.0リリース 3.1メンテナンス停止 Ruby1.9.3以上必須 2010年8月29日 3.0リリース 2011年8月31日 3.1リリース アセットパイプラインの登場により バージョンアップのハードル上がる 2012年1月20日 3.2リリース 2014年4月8日 4.1リリース 2013年2月 Ruby2.0.0リリース 2015年4月 Ruby2.2.2リリース 2015年3月19日 4.2.1リリース
  22. 22. http://www.sonicgarden.jp/ 特性を満たすための技術的な戦略略 •  ソフトウェアはクラウドで運⽤用 •  ⾔言語/フレームワークの統⼀一 •  全ての設定をソースコードで表現 •  技術要素共通化による知⾒見見の共有 ソースコードで全てを回す
  23. 23. http://www.sonicgarden.jp/ ソースコードの品質を⾼高めるために何をするか? •  過去はペアプロでコードを共有。 ただ時間がとてもかかる •  レベルの⾼高い⼈人同⼠士だとコードレ ビューで理理解し合えることがわ かった。効率率率化された コードレビュー中⼼心への変化
  24. 24. http://www.sonicgarden.jp/ ソースコードレビューで守りたい品質は何か? •  ずっと開発/運⽤用を続けていける •  速いスピードで改修を加えられる 保守性 ⽣生産性 保守性と⽣生産性の両⽴立立
  25. 25. http://www.sonicgarden.jp/ レビューされないソースコード・・・ https://flic.kr/p/4GW2c2
  26. 26. http://www.sonicgarden.jp/ レビューされないソースコード・・・ https://flic.kr/p/6oUuWj
  27. 27. http://www.sonicgarden.jp/ 誰がコードレビューをするのか •  「⼀一⼈人前」がコードレビュー •  コードの善し悪しはそれなりのレ ベルにある⼈人間にしか分からない •  ⼀一⼈人前は「良良いコード」とは何か の共通認識識を持っている ⾃自分たちの思う、良良いコードへ
  28. 28. http://www.sonicgarden.jp/ ランチタイムディスカッション 共通認識識の醸成
  29. 29. http://www.sonicgarden.jp/ 具体的なプロセス •  Githubでリリース対象のコードを プルリクエスト/レビュー依頼 •  レビュワーが共通のレビュー観点 に基いてコードレビュー •  指摘箇所を修正しマージする プルリクエストベース
  30. 30. http://www.sonicgarden.jp/ コードレビューのタイミング •  ローンチ前の全体レビュー •  本番リリース前レビュー •  リリース前レビューは毎回実施。 週1回〜~が⽬目安 レビュー時間は1時間が⽬目安
  31. 31. http://www.sonicgarden.jp/ レビューの観点 •  意図をくみとれるソースコードか •  テストコードは書かれているか •  リリース時に問題が起こらないか •  障害時リカバリは考えているか •  環境まわりの変更更はないか 「読みにくい」と正直に⾔言う
  32. 32. http://www.sonicgarden.jp/ 良良いコードの共通認識識 •  DRY  (Don't  Repeat  Yourself) •  YAGNI(シンプルに実装) •  意図の伝わるコード •  フレームワークWAYである 価値観をあわせる
  33. 33. http://www.sonicgarden.jp/ コードレビュー7つの秘訣 1.  レビューの観点を明確にすること 2.  我が⾝身に返ることを恐れずに指摘すること 3.  何故悪いコードなのかを論論理理的に説明すること 4.  良良いコードについて共通認識識を持つこと 5.  ⼩小さい単位でレビューを繰り返すこと 6.  指摘は素直な気持ちで受け⼊入れること 7.  指摘は⼈人格否定でないことを理理解すること
  34. 34. http://www.sonicgarden.jp/ どのようにコードレビューするのか? •  今回はソニックガーデンで⾔言う 「良良いコード」についてライブ コードレビューでご説明します
  35. 35. http://www.sonicgarden.jp/ ライブコードレビュー •  株式会社ラビックス  ⾼高橋洋平さん •  株式会社メンバーズ  早坂貴⼤大さん •  根本さんの後輩(2名) •  ソニックガーデン2年年⽬目(⽥田上) ご協⼒力力ありがとうございます!
  36. 36. http://www.sonicgarden.jp/ サンプルコードのお題 券売機問題  ver.1 とある鉄道会社の券売機をつくることになりました。 券売機では200円、250円、300円の切切符を購⼊入することができます。 駅員の⽅方と仕様を整理理したところ、以下のような機能が必要であることが分かりました。 ・10円⽟玉、50円⽟玉、100円⽟玉、500円⽟玉、1000円札を1つずつ投⼊入できる ・投⼊入は複数回できる ・投⼊入⾦金金額の総計を取得できる ・払い戻しを⾏行行うことができる   ・払い戻しを⾏行行うと投⼊入⾦金金額の総計が釣り銭として出⼒力力される ・200円/250円/300円の切切符を購⼊入することができる   ・投⼊入⾦金金額が⾜足りない場合は何もしない   ・購⼊入⾦金金額を差し引いた釣り銭を出⼒力力する ・現在の売上⾦金金額を取得できる 動作のシミュレーションのため、Rubyで上記の機能を実装し、 それぞれの機能が確認できるようなプログラムを作成してください。
  37. 37. http://www.sonicgarden.jp/ コードレビュー実践のために⼤大事なこと •  ⾃自分たちの開発プロセスに適した レビュー観点を設定する •  レビュー観点に基づく良良いコード の共通認識識をチームで持つ •  レビューは⼩小⼝口化し継続的にする ⼈人の⽬目を⼊入れて腐らせない
  38. 38. http://www.sonicgarden.jp/ 本当にうまくいくのか?
  39. 39. http://www.sonicgarden.jp/ 「納品のない受託開発」の事例例
  40. 40. http://www.sonicgarden.jp/ ⼦子育てシェアサービス
  41. 41. http://www.sonicgarden.jp/ お客さまの声 世の中の多くのシステム会社は、受注したシステム を作ることが⽬目的だけど、「納品のない受託開発」 の場合は⽂文字通り「納品がない」ので、システムを 作ることが⽬目的ではなくて、AsMamaが実現した い世界を成り⽴立立つようにする、そのための仕組みを 作ることが⽬目的だ、ということです。ソフトウェア を作って終わりではない。 「納品のない受託開発」のいいところは、こちらの ビジョンを⼤大切切にしてくれること。普通の開発会社 は、そんなことはどうでもよいとまでは⾔言いません が、軽視しているんじゃないでしょうか。ソニック ガーデンは、そういうことこそが本当に⼤大事だと ⾔言ってくれます。別の表現をすれば、経営⽬目線があ るんです。いわば社外取締役みたいな存在です。 本当にわが社にもCTOができた、と思っています。 古臭い⾔言葉葉で⾔言えば、同志のような存在です。 書籍”「納品」をなくせばうまくいく”より抜粋
  42. 42. http://www.sonicgarden.jp/ プログラマの本当の仕事とは
  43. 43. http://www.sonicgarden.jp/ ソフトウェア開発とは何ではないか? •  同⼀一品種の「⼤大量量⽣生産」ではない •  「ルーチンワーク」ではない •  そもそも⽣生産でも⼯工業でもない •  よって「製造業」ではない モノづくりではなかった
  44. 44. http://www.sonicgarden.jp/ ソフトウェア開発とは何か? •  再現性のない「問題解決」の仕事 •  それすなわち「ナレッジワーク」 •  「コンサルティング」こそ本質 •  「プロフェッショナルサービス」 「顧問プログラマ」という職業
  45. 45. http://www.sonicgarden.jp/ 「顧問プログラマ」とは何か •  プログラミングのスキルを使って、 顧客の問題解決をする職業のこと •  ビジネスの理理解と提案、ソフト ウェアの設計、プログラミング、 運⽤用までの全てに責任をもつ仕事 難しいからこそ価値がある
  46. 46. http://www.sonicgarden.jp/ 顧問としてのプログラマ
  47. 47. http://www.sonicgarden.jp/ 技術から事業の成⻑⾧長を⽀支える 顧問プログラマの果たす役割と責任 •  問題を把握して解決案を提案する •  ソフトウェアの設計と実装をする •  安定して動くように運⽤用し続ける •  プロジェクトをマネジメントする
  48. 48. http://www.sonicgarden.jp/ 顧問プログラマの⽣生き⽅方:職⼈人の世界 •  弟⼦子・⼀一⼈人前・師匠・巨匠・親⽅方 •  将来は、のれん分けで独⽴立立を⽀支援 •  定年年はなく、⼀一⽣生の仕事にできる •  技術を極め、⾃自分の⼒力力で⽣生きる! ⽣生涯をかけるに値する仕事
  49. 49. http://www.sonicgarden.jp/ エンジニアの働きかたの未来 ⼀一⽣生の仕事としてのプログラマ 新規創造 問題解決 ハイリスク ローリスク 起業家 フリー 顧問趣味
  50. 50. http://www.sonicgarden.jp/ 皆さんの選ぶ未来は?
  51. 51. http://www.sonicgarden.jp/ ソニックガーデンと共に働く意味 •  年年俸制による安定した報酬の確保 •  リモートワークでどこでも働ける •  ⾃自分の為に使える時間が得られる •  共に切切磋琢磨しあえる仲間の存在 エンジニアとして⾼高みを⽬目指す
  52. 52. http://www.sonicgarden.jp/ 幸せなエンジニアとお客さまを増やすビジョン •  「納品のない受託開発」を広げる •  志のあるエンジニアを応援したい •  雇⽤用と働きかたの選択肢を増やす •  プログラマが輝ける場所をつくる ⼈人⽣生を賭けるに値する使命
  53. 53. http://www.sonicgarden.jp/ ソニックガーデンのビジョン、私のミッション 顧客企業の真のパートナーとして   価値を提供し続ける プログラマを⼀一⽣生の仕事にする、   ⾼高みを⽬目指し続ける いつまでも、いつからでも   夢に挑戦できる社会にする プログラマを憧れの職業にする
  54. 54. http://www.sonicgarden.jp/ ありがとうございました http://kuranuki.sonicgarden.jp

×