mainvisual

今日、スマホを見るとこんな記事が流れていました。

これを見た時、俺は「記術的負債かぁ〜。プログラムを経験した事ない人達は、表面上での動作しか見えてないわけだし、絶対理解しづらいだろうなぁ。」と、ふと思いました。

みなさんは、どう思いますか?

俺は何度となく個人開発中に技術的負債の壁に当たりました。1ヶ月後に開発を再開すると、 内容が全くわからない。何の処理をしているのか、理解できない…

泣く泣く、ボッシュートになりました。

そもそも技術的負債って何なの?

プログラマがわからみて、「開発しにくいなと思った要因」を技術的負債と言います。 この負債が貯まると、プログラム効率が著しく落ちます。 それは、そもそもコードが複雑すぎて理解できなかったり、 密結合しすぎていたり、原因不明のエラーが発生していたりと、 原因は様々です。これらを放置し過ぎると、開発効率が落ちたり、 致命的なバグが発生する原因にもなります。

例えば、ある目的の動作をさせるコードを書こうとすると、 プログラムは、表現力が高いので、 そのゴールを達成するコードはたくさんあるわけです。

大体は、「スラス書いて後で読みにくい」か「じっくり書いてスラスラ読める」かのどちらかです。

ほら、文を書くときって、ある程度概要を書いてしまってから、校正をしませんか?あれと一緒です。 最初は頭の中に浮かんだものをずらずら書いていきます。ここでやめてしまうと、技術的負債になる。 校正されていない、構成のメタメタな文章なんて見たくないでしょ?でも、実際に読むのはコンピュータだから、多少文章が乱れてようが、高速に処理をこなしてしまうんですがね。

技術的負債を貯めこむ過ぎると、何が問題になる?

技術的負債で一番困ることは、プログラムの改修です。技術的負債によって、コードが複雑化しすぎて、密結合で、コメントもまったくなくって、テストもされていないし、コーディング規約にも従ってない。

これを見た時、エンジニアはどう思いますかね?

  • どこに何が書かれているかわからない
  • コードを改修した時の動作を予測できない
  • やる気わかない

多分、この3つが一番おおきいのでは?と思います。 そして、これからもたらされるのは、

  • 開発コストの増加
  • プロジェクトへの後参加者の技術レベルの低下
  • 技術的負債が去らなる負債を生む悪循環
  • 時間がかかる。

です。

技術的負債を生まないのとは不可能。大事なのは初期から芽を摘むこと

必ず技術的負債は起こります。

  • メソッド名がコーディング規約に沿ってない
  • 密結合のモジュールを作って組み込んだ
  • パッケージ(フレームワーク)を1から作った
  • 遅いアルゴリズムを使っている

など、こんなことをすれば、すぐに負債が発生します。 そして、それをできるだけ発生させないためには、気がついた時に即修正。 これしか手はないと思います。

個人で開発している場合、こんなことに気をつけて開発をしていないのかもしれません。 それも、コードの内容を覚えきれているうちはいいと思います。 でも、コードの内容を忘れた時、コードは他人が書いたものとして扱うべきです。

技術的負債を防ぐことは可能!負債を生まないために。

技術的負債を防ぐためには3つのプロセスをこなす必要があります。

  1. 過去に起こった技術的負債を知る
  2. しっかりとテストを行なう
  3. 見つけた時に即修正を行なう

これをサイクルする。

1.過去に起こった技術的負債を知る

「彼を知り己を知れば百戦殆からず」。そういうことです。

まず、技術的負債を生まないようにするには、 今起こっている負債がどこでどういうプロセスで生まれたのかを知る必要があります。

そこで、gitを使います。適切にバージョン管理をすることによって、 殿で生まれたのかをトレース出来ます。詳しい操作方法は、ググって下さい。

gitのバージョン管理方法でオススメなのが、以下の記事です。

上記事の翻訳

2.しっかりとテストを行なう

モジュールごとにテストを行います。 テストする項目は開発時で様々です。

WebアプリケーションはHTMLや変数がちゃんと展開されているかもテストするといいと思います。 ただ、この場合、HTMLの構造などもチェックするなど、やり過ぎたテストも技術的負債になりかねないので、 ご注意を!(railsでやって、超めんどくさかった)

3.見つけた時に即修正を行なう

機能追加の段階で、小さなミスを見つけた時、必ずその時に修正します。バージョン管理はgitを使っている前提で話しますが、git stash -uとか、git checkout -b feature/01とか、コマンドを駆使して、修正をしましょう。

gitを使っていると、そんなに苦でなないはず!

参考資料