`レガシーコードからの脱却`をクリスマスプレゼントにしてみてはいかが？

# 逆 [フラゲ](https://ja.wikipedia.org/wiki/%E3%83%95%E3%83%A9%E3%82%A4%E3%83%B3%E3%82%B0%E3%82%B2%E3%83%83%E3%83%88) 申し訳ありません。 [フライング土下座](http://www.kamikazestyle.com/item/%E3%83%95%E3%83%A9%E3%82%A4%E3%83%B3%E3%82%B0%E5%9C%9F%E4%B8%8B%E5%BA%A7/)
## はじめに(まとめです)

`レガシーコードからの脱却` を [Google先生に訊いてみる](https://www.google.co.jp/search?q=%E3%83%AC%E3%82%AC%E3%82%B7%E3%83%BC%E3%82%B3%E3%83%BC%E3%83%89%E3%81%8B%E3%82%89%E3%81%AE%E8%84%B1%E5%8D%B4) と沢山の感想が在ります。

[『Qiitaユーザーが選ぶ、2019年に読んで良かった技術書』アンケート結果発表 - Qiita Zine](https://zine.qiita.com/original/2019-book-mailmagazine/) にも！

個人的にもオススメしたい一冊です。

特に、エライ人に読んでほしいです！

- [「レガシーコードからの脱却」でおもしろかった所の55分の1。 - Qiita](https://qiita.com/KKondou/items/03513513078c9c0dac53)
- [書籍「レガシーコードからの脱却」を読んでプロジェクトに適用すると良さそうな事 - Qiita](https://qiita.com/kojimadev/items/c2f5b4fea1992385c99a)

金銭的・時間的に余裕のない方も、上記をはじめ他の皆さんの感想を読んでみると良いと思います。

---

が、読了してみて思った事(あるある・納得感だけじゃなく、モヤモヤ感)が日々(の出来事を見聞きする度)どんどん積み上がって来ているため、お目汚しとは思いますが ~~[随筆？エッセイ？](http://inkyodanshi21.com/books/8874/)~~ チラ裏を書き捨てさせていだだきます。

ここから先は [そっ閉じ](https://dic.pixiv.net/a/%E3%81%9D%E3%81%A3%E9%96%89%E3%81%98) 推奨！

---

# そもそも
## レガシーコードとは
世の中的には様々な定義がありますが、`レガシーコードからの脱却`には

> レガシーコードとは、バグを多く含み、壊れやすく拡張が難しいコードを指します。

と書いてあります。

- バグを多く含み
- 壊れやすく
- 拡張が難しい

### バグを多く含んでいる
× 本番で(一見)正常に稼働しているソフトウェアは、十分な(手動)テストもしているのでバグは(あるかも知れないが多くは)ない"**はず**"

### 壊れやすい
× 本番で(一見)正常に稼働しているソフトウェアは、最善の設計・コーディングをしているので壊れやすくはない"**はず**"

### 拡張が難しい
× 本番で(一見)正常に稼働しているソフトウェアは、メジャーな言語・フレームワーク・設計を(利用)しているので拡張は難しくない"**はず**"

---

表現は異なるかも知れませんが、概ね『否定(NO)』的な認識が大多数ではないでしょうか。

いやいや、そんなことはない。私(我々)は常に危機感を持っているよって方が居たらごめんなさい。

個人的な印象としてはこんな感じなんです。

## 己を知る
- [孫子の兵法「彼を知り己を知り、天を知り地を知る」 | PRESIDENT Online（プレジデントオンライン）](https://president.jp/articles/-/1085)
    - [己を知ることの難しさ – 南充浩 オフィシャルブログ](https://minamimitsuhiro.info/archives/5161.html)

個人的にも苦手意識しかないのですが、やはり`己を知る`のは重要なのではないでしょうか。

自分への戒めも含めて・・・

## 技術的負債
### 蛇足
初っ端から蛇足なんですが、[技術的負債](https://ja.wikipedia.org/wiki/%E6%8A%80%E8%A1%93%E7%9A%84%E8%B2%A0%E5%82%B5) というキーワードが最近とみに見聞きするのではないでしょうか。バズワードってやつですかね。

改めて Wiki を見てみたところ、なぜか関連項目の方が気になってしまいました。自分は [Lisp](https://ja.wikipedia.org/wiki/LISP) に疎いからなのか、[大きな泥だんご](https://ja.wikipedia.org/wiki/%E5%A4%A7%E3%81%8D%E3%81%AA%E6%B3%A5%E3%81%A0%E3%82%93%E3%81%94) は初見でした。

パッと見、日本語訳も無さそうなので、その辺もあるのかな？

結構昔のキーワードなんですが、廃れるより寧ろ流行っているのでは？と思わせる内容です。

- [Big Ball of Mud](http://www.laputan.org/mud/mud.html)

原文(Google翻訳)でも大体の内容はわかりますので、お時間ありましたら是非ご一読をオススメいたします！

### 蛇足(つづき)
#### アジャイル・スクラム・XPと技術的負債、大きな泥だんご、メテオフォールまで
- 改めて英語力は大事だと痛感。日本に広まるまでのタイムラグが絶望的。
- 途中抜けてますがご容赦を・・・

---

1986 [The New New Product Development Game](https://blogs.itmedia.co.jp/hiranabe/2012/06/origin-of-scrum-reopened-1.html) (スクラム)

1992 [The WyCash Portfolio Management System](http://c2.com/doc/oopsla92.html) (技術的負債)

1995 [SCRUM Development Process](http://agilix.nl/resources/scrum_OOPSLA_95.pdf) (スクラム)

1997 [Big Ball of Mud](http://www.laputan.org/mud/mud.html) ( [大きな泥だんご](https://ja.wikipedia.org/wiki/%E5%A4%A7%E3%81%8D%E3%81%AA%E6%B3%A5%E3%81%A0%E3%82%93%E3%81%94) )

1999 Pattern Languages of Program Design 4 (大きな泥だんご)

1999 [エクストリーム・プログラミング](https://ja.wikipedia.org/wiki/%E3%82%A8%E3%82%AF%E3%82%B9%E3%83%88%E3%83%AA%E3%83%BC%E3%83%A0%E3%83%BB%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0) (XP)

2001 [アジャイルソフトウェア開発宣言](http://agilemanifesto.org/iso/ja/manifesto.html) (アジャイル)

2001 Agile Software Development with SCRUM (スクラム)

2003 [技術的負債](http://bliki-ja.github.io/TechnicalDebt/)

2004 エクストリーム・プログラミング(第2版) (XP)

2007 The Scrum Papers: Nuts, Bolts, and Origins of an Agile Method (スクラム)

:
:
:

2018 [メテオフォール型開発 - 実践ゲーム製作メモ帳2](http://eiki.hatenablog.jp/entry/meteo_fall)

2019 [スケールドメテオフォール開発 - hogepiyohoo’s blog](https://hogepiyohoo.hatenablog.com/entry/2019/07/07/003625)

#### アジャイル/スクラム、ウォーターフォール、メテオフォール

- [5分で分かるアジャイルムーブメントの歴史 拡大版](https://www.slideshare.net/fkino/brief-history-of-agile-movement)
    - [5分で分かるアジャイルムーブメントの歴史](http://fkino.net/20141014.html)

- [アジャイルソフトウェア開発 - 歴史 - Weblio辞書](https://www.weblio.jp/wkpja/content/%E3%82%A2%E3%82%B8%E3%83%A3%E3%82%A4%E3%83%AB%E3%82%BD%E3%83%95%E3%83%88%E3%82%A6%E3%82%A7%E3%82%A2%E9%96%8B%E7%99%BA_%E6%AD%B4%E5%8F%B2)

- [正しく理解しようアジャイルとスクラム　〜スクラムの概要を知ろう – PSYENCE:MEDIA](https://tech.recruit-mp.co.jp/scrum/about-agile-and-scrum/)
- [アジャイル開発とスクラム｜アイネット](http://www.e-ainet.com/Agile-Scrum.html)

- [アジャイル開発とウォーターフォール開発の違いは何？アジャイル開発の手法や意味も要チェック | Backlogブログ](https://backlog.com/ja/blog/what-is-agile-and-waterfall/)

- [「神様が来て全てを壊した」　繰り返される仕様変更、本当にあったAIプロジェクトの怖い話 (1/3) - ITmedia NEWS](https://www.itmedia.co.jp/news/articles/1903/20/news092.html)
- [【vsメテオフォール】エンジニアらしく組織を変える為のプログラミング・マネジメント - Qiita](https://qiita.com/0w0/items/49357b3ff91135893624)

### 本題
- [「技術的負債」とは何か。原典とその対応策を探る － Publickey](https://www.publickey1.jp/blog/13/post_232.html) ★☆☆
    - [技術的負債](http://bliki-ja.github.io/TechnicalDebt/) ★★☆
- [技術的負債の「会計的」性質 - Ryohei Tsuda - Medium](https://medium.com/@hqac/%E6%8A%80%E8%A1%93%E7%9A%84%E8%B2%A0%E5%82%B5%E3%81%AE-%E4%BC%9A%E8%A8%88%E7%9A%84-%E6%80%A7%E8%B3%AA-eb81c6df33fa) ★☆☆
- [技術的負債が紛らわしいので改善対象となる設計不備に名前をつけたい - Tbpgr Blog](http://tbpgr.hatenablog.com/entry/2019/11/03/014129) ★★★
    - [技術的負債の四象限](https://bliki-ja.github.io/TechnicalDebtQuadrant/) ★☆☆
    - [荒ぶる四天王と『完了』の定義 ―アジャイル開発と品質― | Qbook+](https://www.valtes.co.jp/qbookplus/1579) ★★☆
        - [プロジェクト目標マネジメント（ＱＣＤＳのＳ） / PMstyleコラム](https://pmstyle.biz/column/ppm/ppm6.htm) ★☆☆
            - [QCDとは？PMBOKで覚えておきたい生産管理の3評価指標(QCD)を分かりやすく解説！ | eploth](https://eploth.com/knowledge/what-is-qcd-pm) ★☆☆
                - [プロジェクトマネジメント - Wikibooks](https://ja.wikibooks.org/wiki/%E3%83%97%E3%83%AD%E3%82%B8%E3%82%A7%E3%82%AF%E3%83%88%E3%83%9E%E3%83%8D%E3%82%B8%E3%83%A1%E3%83%B3%E3%83%88) ★☆☆
                    - 弊社 @mako2kano 先生に聞けば詳しく教えてくれる(はず)
            - [プロジェクトの三角形 - Project](https://support.office.com/ja-jp/article/%E3%83%97%E3%83%AD%E3%82%B8%E3%82%A7%E3%82%AF%E3%83%88%E3%81%AE%E4%B8%89%E8%A7%92%E5%BD%A2-8c892e06-d761-4d40-8e1f-17b33fdcf810) ☆☆☆
                - [鉄のトライアングル](https://ja.wikipedia.org/wiki/%E9%89%84%E3%81%AE%E3%83%88%E3%83%A9%E3%82%A4%E3%82%A2%E3%83%B3%E3%82%B0%E3%83%AB) ☆☆☆
            - [プロジェクト・インテグレーション・マネジメントと「鉄の三角形」 : タイム・コンサルタントの日誌から](https://brevis.exblog.jp/27102305/) ★☆☆
                - [わたしはなぜ、「プロジェクト管理」という言葉を使わないのか : タイム・コンサルタントの日誌から](https://brevis.exblog.jp/26270824/)  ★★★
                    - マネジメント（management）
                    - コントロール（control）
                    - アドミニストレーション（administration）
                    - [新任リーダー学・超入門(2)　マネジメントとリーダーシップというコトバに気をつけよう！ : タイム・コンサルタントの日誌から](https://brevis.exblog.jp/14948266/) ★★★
                        - [Google re:Work - マネージャー](https://rework.withgoogle.com/jp/subjects/managers/) ★★★
            - [プロジェクトの制約条件とアジャイル – ライトパスのブログ](https://www.rightpath.co.jp/blog/?p=51) ★★☆
                - ['アジャイルの三角形'によるアジャイルのパフォーマンス測定](https://www.infoq.com/jp/news/2009/08/agile-triangle/) ★★☆
            - [Prince2 Agile プロジェクト六角形でアジャイル・トラレンスがわかる – プロダクト・マネジメントの要諦 The Rules of the Game of Product Management](https://rihoublog.com/2018/06/24/prince2-agile-%E3%82%A2%E3%82%B8%E3%83%A3%E3%82%A4%E3%83%AB%E3%81%AE%E3%83%88%E3%83%A9%E3%83%AC%E3%83%B3%E3%82%B9%E3%81%AE%E8%80%83%E3%81%88%E6%96%B9/) ★☆☆
- [技術的負債の中身｜wadap｜note](https://note.com/wadap/n/nf23042ccfee2) ★★★
- [技術的負債の上手な積み上げ方・返し方 - ログミーTech](https://logmi.jp/tech/articles/321990) ★★☆
- [技術的負債を調査する10のポイント（翻訳）](https://techracho.bpsinc.jp/hachi8833/2018_01_24/50875) ★☆☆
- [スピード優先の開発で溜まった技術的負債の返済計画（サーバーサイド編） - dely engineering blog](https://tech.dely.jp/entry/2019/12/05/160132) ★☆☆
- [技術的負債を抱えた状態で技術者がすべきこと - sandbox](http://tlync.hateblo.jp/entry/2014/09/28/025652) ★☆☆
- [技術的負債としての「オブジェクト指向」 — しっぽのさきっちょ | text.Baldanders.info](https://text.baldanders.info/remark/2019/07/object-oriented-as-a-technical-debt/) ★★☆

- [Webサービスが当たると、いずれ返済できない技術的負債に突入する由々しき構造について | F's Garage](https://f-shin.net/fsgarage/2042) ★★☆
    - [ロードマップ指向とエコシステム指向 - アンカテ](https://essa.hatenablog.com/entry/20140330/p1) ★☆☆

- [既存システムの運用・保守に割かれてしまう資金・人材 ーDXレポート | IoT NEWS](https://iotnews.jp/archives/bs_data/118014) ☆☆☆

- [デジタルガバナンス・コードと外部の客観的な評価制度 ～企業の格付において国内企業に求められること～ | NTTデータ経営研究所](https://www.nttdata-strategy.com/knowledge/reports/2019/1115/) ☆☆☆

---

キーワードをもとにGoogle先生に訊いてみた結果(の一部)。

星は個人的なオススメ度(の様なもの)。

個人的には本題から横道に逸れた`管理`についての気付きが思い掛けない成果でした。

やはり英語は難しい・・・。

皆さんはキチンと区別して`管理`を取り扱えていますか？

私は今の今までアヤフヤで勝手な解釈で使ってました。

マネージャーは本来マネジメントする人なんですよね。

我が身を振り返ってみると、コントロール主体になってしまっていたんじゃないかなぁと猛省。

(※現在、ボッチのため過去を振り返ってみました)


あと、`荒ぶる四天王`ってキーワードは上手いネーミングだなって思いました。

どの王が先鋒でしょうか・・・最弱。

メテオフォールの`神`とかもそうですが、単純な擬人化じゃないところがイイですよね。


アジャイルとウォーターフォールは`スコープ`の扱いが真逆ってところが面白いですよね〜

現実のウォーターフォールは殆どスコープ調整が発生するものだという認識(経験則)です。

予算(Cost)、納品(Delivery)の調整ってハードル高い事が多い気がしますが、とすると残るは・・・品質しかないですよね！


これが俗に言う`技術的負債`？？？


#### 技術的負債の認識と立ち向かい続ける覚悟

1. 現状を認識する
2. 関係者各位に認識してもらう
3. 計画する
4. 改善し続ける

##### 1. 現状を認識する
コード自体だけでなく、プロセスも大きく関係するのでしっかりと把握。

##### 2. 関係者各位に認識してもらう
このハードルが高い気がする。

これだけ世間に広まっていれば、すんなり通じる気がするのですが・・・

この辺から上記`己を知る`に繋がりました。

[質とスピード / Quality and Speed - Speaker Deck](https://speakerdeck.com/twada/quality-and-speed)

これくらい分かりやすくまとまった資料を作れてプレゼン出来れば、可能？

##### 3. 計画する
とりあえずやってみる事も大事。

ただし、闇雲に向き合っても↓に影響があるため、プランニングも大事。

##### 4. 改善し続ける
ここ重要。

昔の人はいいこと仰る。

『継続は力なり』ってね。


## 話は変わって
### [ピープルウェア](https://ja.wikipedia.org/wiki/%E3%83%94%E3%83%BC%E3%83%97%E3%83%AB%E3%82%A6%E3%82%A7%E3%82%A2)
- [トム・デマルコ『ピープルウェア(Peopleware)』の要約](http://soqdoq.com/demarco/)

1989年という私の業界デビューよりずっと昔に出版されたものですが、今更ながら読んでいます。(※読んでない方はまずは上記サイトがオススメ)

日本人の生産性が〜と言われる昨今ですが、弊社だけでなく多くのオフィス環境は様々な制約があって理想とは程遠い状況なのではないでしょうか。

そんな中、おそらく少なくはない方々が思い付いている事とは思いますが [AirPods Pro](https://www.apple.com/jp/airpods-pro/) 等アクティブノイズキャンセリングを導入するのが”**吉**”なのではないだろうか。

『話しかけにくい』『無視される』等の弊害が阻害要因として考えられますが、例えばチャットツールのステータスのように周りの人達がわかるような`サイン`を掲げておけばよい(帽子を被るでも良いと思う)し、チャットツールの通知はONにしておく等のルールを合わせて導入すれば、本に書いてあるような劇的な効果は上がらなくとも費用対効果はプラスになるのではないだろうか。

これはとりあえず個人的に検証してみたいと思っているが、先ずは先立つ・・・ゲフンゲフン


# 言い訳
Qiita Advent Calendarという事で、企業・学校・団体として投稿内容を吟味して・・・等いらぬ事を考え過ぎて書くことが全然決まらなかったんです。
自分で勝手にハードル上げすぎ。
初歩的なミスです。ごめんなさい。
結果も、このような駄文となってしまい申し訳もございません・・・


<details><summary></summary>
・個人的なメモ
[モノレポについての誤解 - Misconceptions about Monorepos: Monorepo != Monolith を翻訳しました - Graat（グラーツ）](https://www.graat.co.jp/blogs/ck1099bcoeud60830rf0ej0ix)
[DevOps 技術: トランクベース開発  |  DevOps  |  Google Cloud](https://cloud.google.com/solutions/devops/devops-tech-trunk-based-development?hl=ja)
[Pete HodgsonさんのFeature-togglesが面白かったので翻訳してみた - Qiita](https://qiita.com/TsuyoshiUshio@github/items/51c6662cd45bded95389)
　　[Feature Toggles (aka Feature Flags)](https://martinfowler.com/articles/feature-toggles.html)
　
[GE幹部を「ウン」と言わせる資料の作り方：日経ビジネス電子版](https://business.nikkei.com/atcl/report/15/260984/012700005/)
　
[SIerとWeb系の違いを知らずにエンジニアになると100％後悔します｜未経験から独学でエンジニアを目指す人のためのブログ](https://asosori.com/sier-web-difference/)
[【ＩＴ業界地図？】WebとかSIとか自社開発とかSESとか、言ってることわけわかんねえんだよ！ | BAMV-LLC-blog](https://www.wantedly.com/companies/trash-briefing/post_articles/160402)
　　[ＩＴ人材が不足というウソとSE35歳定年説の謎 | BAMV-LLC-blog](https://www.wantedly.com/companies/trash-briefing/post_articles/116545)
</details>