45
納品のない受託開発を支える レガシーコードを作らない仕組み SonicGarden Inc. 西見 公宏 2014/9/27 レガシーコード改善勉強会

納品のない受託開発を支える レガシーコードを作らない仕組み

Embed Size (px)

DESCRIPTION

2014/9/27 レガシーコード改善勉強会でお話をさせていただきました。 http://passmarket.yahoo.co.jp/event/show/detail/01pitgwzj67m.html

Citation preview

Page 1: 納品のない受託開発を支える レガシーコードを作らない仕組み

納品のない受託開発を支える レガシーコードを作らない仕組み

SonicGarden Inc. 西見 公宏

2014/9/27 レガシーコード改善勉強会

Page 2: 納品のない受託開発を支える レガシーコードを作らない仕組み

西見 公宏 Nishimi Masahiro As Business Programmer

2014/09/27 レガシーコード改善勉強会 2

Page 3: 納品のない受託開発を支える レガシーコードを作らない仕組み

自己紹介 西見 公宏 Masahiro Nishimi @mah_lab 昭和58年生まれ 東京育ち 2児(双子)の父親です

ブログ http://blog.mah-lab.com/(毎日更新中) 2014/09/27 レガシーコード改善勉強会 3

Page 4: 納品のない受託開発を支える レガシーコードを作らない仕組み

2008年

2011年

2014年

大手SIerに入社

SonicGardenにジョイン

今ここ

会計ERP(Oracle EBS)のアプリSEとして従事 Oracle EBS向けソリューション開発のためオフショア 開発も経験 要素技術はHP/UX、PL/SQL、Oracle Formsなど

新規事業の立ち上げで必要となるWebサービスの開発・ 運用を行うビジネスプログラマーとして従事 要素技術はLinux、iOS、Ruby、Railsなど

企業向けCMS、医療系システム、教育事業向けシステムを 開発したり、SonicGardenが展開するサービスの開発に従事しています

2014/09/27 レガシーコード改善勉強会 4

Page 5: 納品のない受託開発を支える レガシーコードを作らない仕組み

最近の活動

「コードレビュー」というテーマで お話をさせていただく機会が多いです (外部の社内勉強会にもお邪魔させていただいております)

2014/09/27 レガシーコード改善勉強会 5

Page 6: 納品のない受託開発を支える レガシーコードを作らない仕組み

今日お話する内容 1.  レガシーコードの何が問題か? •  そもそもレガシーコードとは何か •  レガシーコードがもたらす問題とは何か •  コードだけの問題なのか?

2.  納品のない受託開発を支える、レガシーコードを作らない仕組み

•  継続して開発するビジネスモデル •  技術の共通化でアップデートを容易に •  同じ基盤を使う人間による相互レビュー

2014/09/27 レガシーコード改善勉強会 6

Page 7: 納品のない受託開発を支える レガシーコードを作らない仕組み

1. レガシーコードの何が問題か?

2014/09/27 レガシーコード改善勉強会 7

Page 8: 納品のない受託開発を支える レガシーコードを作らない仕組み

そもそもレガシーコードとは何か?

h)ps://flic.kr/p/4GW2c2 2014/09/27 レガシーコード改善勉強会 8

Page 9: 納品のない受託開発を支える レガシーコードを作らない仕組み

そもそもレガシーコードとは何か?

• 誰かから引き継いだコード(つらい) • ぐっちゃぐちゃなコード(つらい) • 仕様が分からないコード(つらい)

レガシーコード改善ガイドによる定義

「レガシーコードとは、単にテストのないコードです」(はじめに、より抜粋)

2014/09/27 レガシーコード改善勉強会 9

Page 10: 納品のない受託開発を支える レガシーコードを作らない仕組み

そもそもレガシーコードとは何か?

何のためにテストコードが必要なのか?

ソフトウェアを変更するため

振る舞いの変更、不具合修正、非機能要件の改善 etc.

2014/09/27 レガシーコード改善勉強会 10

Page 11: 納品のない受託開発を支える レガシーコードを作らない仕組み

レガシーコードがもたらす問題とは何か?

h)ps://flic.kr/p/6oUuWj

2014/09/27 レガシーコード改善勉強会 11

Page 12: 納品のない受託開発を支える レガシーコードを作らない仕組み

レガシーコードがもたらす問題とは何か?

ソフトウェアが変更できない

機能追加・変更しづらい

不具合に対応しづらい

パッチをあてづらい

変更コストが 増大する

2014/09/27 レガシーコード改善勉強会 12

Page 13: 納品のない受託開発を支える レガシーコードを作らない仕組み

これって、コードだけの問題?

2014/09/27 レガシーコード改善勉強会 13

Page 14: 納品のない受託開発を支える レガシーコードを作らない仕組み

インフラも含めて、コード

Data Center

Server Operation System

Middleware

Production Code

Server Operation System

Middleware

Production Code DB Server Load Balancer

Infrastructure as Code 2014/09/27 レガシーコード改善勉強会 14

Page 15: 納品のない受託開発を支える レガシーコードを作らない仕組み

変更できないインフラがもたらす混沌

サーバ(インスタンス)

メールサーバ

DBサーバ

テスト環境のコード

本番環境のコード Webサーバ

振り分け

共用

ü OSのバージョンアップができない ü ミドルウェアにパッチを当てられない ü テスト環境での事故が本番環境に影響

まずインフラを 再構築しなければいけないけど、影響範囲が 分からない。。

2014/09/27 レガシーコード改善勉強会 15

Page 16: 納品のない受託開発を支える レガシーコードを作らない仕組み

インフラも含めて、コード ソフトウェアを変更できるように保つ

コードを変更できるように保つ

インフラを変更できるように保つ

ユーザーにとってはコードもインフラも 同じソフトウェアの話。区別はできない。

2014/09/27 レガシーコード改善勉強会 16

Page 17: 納品のない受託開発を支える レガシーコードを作らない仕組み

アプリもインフラもレガシーにしないために、 どんな工夫をすれば良いのだろう?

2014/09/27 レガシーコード改善勉強会 17

Page 18: 納品のない受託開発を支える レガシーコードを作らない仕組み

2. 納品のない受託開発を支える、   レガシーコードを作らない仕組み

2014/09/27 レガシーコード改善勉強会 18

Page 19: 納品のない受託開発を支える レガシーコードを作らない仕組み

納品のない受託開発とは

好評発売中!

• 要件を一度に決めない •  少しずつ決めて、少しずつ開発

• 継続して開発し続ける •  事業が終わるまでソフトウェアを 提供しつづける月額定額の契約

• 顧問としてお客様に関わる •  つくることが目的ではなく、事業にコミットするのが目的 (つくらずに実現できる方法も探す)

2014/09/27 レガシーコード改善勉強会 19

Page 20: 納品のない受託開発を支える レガシーコードを作らない仕組み

サービス型 (クラウド)

製造納品型 (自社運用)

プロデュース型

(汎用的パッケージ)

オーダーメイド型

納品のない 受託開発 クラウドベンダー

パッケージベンダー 大手システム インテグレーター

2014/09/27 レガシーコード改善勉強会 20

Page 21: 納品のない受託開発を支える レガシーコードを作らない仕組み

所有から利用へ Point of Sales Point of Use

品質

時間

品質

時間 製造業 サービス業

構築

償却

買った時点が最高品質

買った時点が最高で、 そこから陳腐化がはじまるもの

常に使っている時点で最高、 最新のものを利用できる

利用中が最高品質 (常にアップグレード)

すぐに利用開始 継続して利用

2014/09/27 レガシーコード改善勉強会 21

Page 22: 納品のない受託開発を支える レガシーコードを作らない仕組み

納品のない受託開発で提供する ソフトウェアの価値

「顧客のパートナーとして、 ビジネスの成長に必要なソフトウェアを

継続的に改善して提供する」

つまり、お客様にとっての価値は

「何で作られているか」ではなく、 「利用できるソフトウェアか」

2014/09/27 レガシーコード改善勉強会 22

Page 23: 納品のない受託開発を支える レガシーコードを作らない仕組み

「利用できるソフトウェア」であるためには、システムがレガシーなんてとんでもない

https://flic.kr/p/6LgsHA

2014/09/27 レガシーコード改善勉強会 23

Page 24: 納品のない受託開発を支える レガシーコードを作らない仕組み

利用中が最高品質を支える 3つのポイント 1. 継続して開発するビジネスモデル 2. 技術の共通化でアップデートを容易に 3. 同じ基盤を使う人間による相互レビュー

2014/09/27 レガシーコード改善勉強会 24

Page 25: 納品のない受託開発を支える レガシーコードを作らない仕組み

ポイントその1 継続して開発するビジネスモデル

2014/09/27 レガシーコード改善勉強会 25

Page 26: 納品のない受託開発を支える レガシーコードを作らない仕組み

継続して開発するビジネスモデル 変更しやすいコードでなければ

コストがかかる

変更しやすいコードが利益に貢献する

ビジネスモデル自体が レガシー化の抑止につながっている

2014/09/27 レガシーコード改善勉強会 26

Page 27: 納品のない受託開発を支える レガシーコードを作らない仕組み

ポイントその2 技術の共通化でアップデートを容易に

2014/09/27 レガシーコード改善勉強会 27

Page 28: 納品のない受託開発を支える レガシーコードを作らない仕組み

技術の共通化でアップデートを容易に

フレームワーク Ruby on Rails

言語(処理系) Ruby

インフラ Heroku /AWS

全てのサービスを共通の仕組みで構築する 2014/09/27 レガシーコード改善勉強会 28

Page 29: 納品のない受託開発を支える レガシーコードを作らない仕組み

レガシー化を加速させる大きな原因

C# / .net Windows Server

PHP / CakePHP CentOS

Ruby / Rails Amazon Linux

バラバラなシステム システムが増えれば増えるほど保守が複雑化

システムを知っている人が辞めると 誰も保守できなくなる

2014/09/27 レガシーコード改善勉強会 29

Page 30: 納品のない受託開発を支える レガシーコードを作らない仕組み

レガシー化を加速させる大きな原因

選択した技術が問題なのではなく、 複雑化によって保守コストが増大するのが問題

機能追加・変更しづらい

不具合に対応しづらい

パッチをあてづらい

変更コストが 増大する

2014/09/27 レガシーコード改善勉強会 30

Page 31: 納品のない受託開発を支える レガシーコードを作らない仕組み

費用対効果を高くするための技術戦略 LCC(ローコスト・キャリア)に学ぶコスト戦略

•  使用する飛行機の機種を統一することで整備費やパイロットの訓練費を削減

•  搭乗手続きのオンライン化などITを活用した自動化 •  乗務員が機内の清掃なども行い一人何役もこなすことによる人件費の削減

LCCのコスト戦略を 受託開発の技術戦略に応用

2014/09/27 レガシーコード改善勉強会 31

Page 32: 納品のない受託開発を支える レガシーコードを作らない仕組み

軽量言語の特性 バージョンアップが早く、 バージョンのライフサイクルが短い Ruby(最新2.1.2) Rails(最新4.1.6)

2008年6月 Ruby1.8.7リリース

2014年7月末 Ruby1.8.7、Ruby1.9.2 セキュリティメンテナンス終了

2010年8月 Ruby1.9.2リリース

2015年2月23日 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リリース

2014/09/27 レガシーコード改善勉強会 32

Page 33: 納品のない受託開発を支える レガシーコードを作らない仕組み

Ruby、Railsのバージョンアップには 追随しなくてはならない •  セキュリティメンテナンスが終わるとセキュリティパッチが提供されなくなる

•  放置しすぎるとバージョンアップが難しくなる(時間によりコスト増大)

少しずつバージョンを上げていくのが重要

開発を継続的に行うビジネスモデルともマッチ 2014/09/27 レガシーコード改善勉強会 33

Page 34: 納品のない受託開発を支える レガシーコードを作らない仕組み

もちろん利用しているOS、ミドルウェアも アップデートし続けなければならない •  OSのバージョンが古すぎることによって脆弱性対応パッチが当てられなくなる

•  OSが古くてミドルウェアがバージョンアップできない&ミドルウェアへのパッチも当てられなくなる

インフラも共通化することによって 対応コストを減らす

開発を継続的に行うビジネスモデルともマッチ 2014/09/27 レガシーコード改善勉強会 34

Page 35: 納品のない受託開発を支える レガシーコードを作らない仕組み

納品のない受託開発のインフラ

Heroku AWS(OpsWorks)

•  PaaSであるHerokuを利用 •  OS、ミドルウェアのバージョンアップはHerokuに任せる

•  特別なミドルウェアを利用しない/特別な非機能要件がない場合に利用

•  AWS OpsWorksによってプロビジョニング

•  全ての設定はChefレシピで管理 •  基本となるレシピを統一化することでコストを削減

監視システム群

•  死活監視にNagios、性能監視にNewRelic、障害監視にBugsnag、 プロセス監視にmunin、バックアップ監視に自社製ツールを使用。

•  自社製ツールにはサービスの標準的な設定を管理するチェックシートがあり、それを埋めてはじめてサービスを一般に向けて稼働させることができるようになる。

2014/09/27 レガシーコード改善勉強会 35

Page 36: 納品のない受託開発を支える レガシーコードを作らない仕組み

ポイントその3 同じ基盤を使う人間による相互レビュー

2014/09/27 レガシーコード改善勉強会 36

Page 37: 納品のない受託開発を支える レガシーコードを作らない仕組み

基盤を共通化したとしても残る問題

•  基盤を共通化しても、利用している決済システムなど、サービスによって異なる部分は存在する。特定の人しか保守できないものはレガシーだ。

•  いくらテストコードがあっても、人によって書き方がバラバラで、他の人が理解できないコードだと意思疎通の道具になりえない。

2014/09/27 レガシーコード改善勉強会 37

Page 38: 納品のない受託開発を支える レガシーコードを作らない仕組み

そのためにコードやドキュメントの レビューをしよう、とは思うものの・・・

2014/09/27 レガシーコード改善勉強会 38

Page 39: 納品のない受託開発を支える レガシーコードを作らない仕組み

システムの知識が共有されていないと レビューは成り立たない

共通の知識がゼロ 共通の知識がある

知らないこと

知らないこと

知ってること (共通の知識)

2014/09/27 レガシーコード改善勉強会 39

ここだけ 気にすれば良い

全く わからん どや!

Page 40: 納品のない受託開発を支える レガシーコードを作らない仕組み

コードレビューでレガシーにしない

•  テストは正しい動きを伝える手段だが、正しく伝わることまでは責任を持たない

•  読まれるまで読めるコードかどうかなんて分からない

•  人の目が入ることによって、より「読めるコード」になる

読めないコードがレガシー化を加速させる

2014/09/27 レガシーコード改善勉強会 40

Page 41: 納品のない受託開発を支える レガシーコードを作らない仕組み

今日お話した内容 1.  レガシーコードの何が問題か? •  そもそもレガシーコードとは何か •  レガシーコードがもたらす問題とは何か •  コードだけの問題なのか?

2.  納品のない受託開発を支える、レガシーコードを作らない仕組み

•  継続して開発するビジネスモデル •  技術の共通化でアップデートを容易に •  同じ基盤を使う人間による相互レビュー

2014/09/27 レガシーコード改善勉強会 41

Page 42: 納品のない受託開発を支える レガシーコードを作らない仕組み

まとめ •  レガシーコードの問題点は変更が困難になるために変更コストが増大すること。しかし、その問題の解決にはテストコードがあるだけでは不十分で、インフラも含めて変更可能になっている必要がある。

•  納品のない受託開発では以下の仕組みでレガシーコード化を防いでいる •  継続してい開発するビジネスモデル •  技術の共通化でアップデートを容易に •  同じ基盤を使う人間による相互レビュー

2014/09/27 レガシーコード改善勉強会 42

テクニックではなく、 仕組みでレガシーコードにしない

Page 43: 納品のない受託開発を支える レガシーコードを作らない仕組み

ソニックガーデンでは 一緒にはたらく仲間を募集しています!

http://www.sonicgarden.jp/jobs 転職を考えている方はコチラ!

2014/09/27 レガシーコード改善勉強会 43

Page 44: 納品のない受託開発を支える レガシーコードを作らない仕組み

あなたの会社で「納品のない受託開発」 という新規事業を立ち上げませんか?

http://www.sonicgarden.jp/guild 興味のある方は下記のURLにアクセス!

2014/09/27 レガシーコード改善勉強会 44

Page 45: 納品のない受託開発を支える レガシーコードを作らない仕組み

ご静聴ありがとうございました!

2014/09/27 レガシーコード改善勉強会 45