4
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

処理は追えるのに「なぜそれをしているのか」が分からない人へ | コードから目的を読み解く考え方

4
Posted at

はじめに

・処理の流れは追える
・どこで何をしているかも分かる

でも、

👉 「なんでこの処理が必要なの?」

で止まる人へ

例えば、

if (stock <= 0)
{
    throw new BusinessException();
}

コードは読めます。

でも、

・なぜここでエラーにするのか
・なぜDB更新前にチェックするのか
・なぜ例外を投げる必要があるのか

👉 「処理の目的」が分からない

こんな経験はありませんか?

これは、

👉 コードが読めないのではなく

👉 “コードの背景”が見えていない

ことが原因である場合が多いです。


この記事の位置づけ(シリーズ)

この記事はシリーズの7回目です。

① 新人・初級PGが最初につまずくポイント5選
② なぜ仕様書とコードは繋がらないのか
③ 仕様書は読めるのにコードにできない人へ
④ ソースは読めるのに処理が追えないのはなぜ?
⑤ どのソースを見ればいいか分からない人へ
⑥ 処理は追えるのに 「中で何してるか」が分からない人へ

👉 今回は

👉 「なぜその処理をしているのか分からない」

という問題を扱います。


コードは読める。でも理由が分からない

例えば、

if (user.IsDeleted)
{
    return;
}

コード自体は読めます。

でも、

👉 なぜ削除済みユーザーを弾くのか

👉 なぜここで return するのか

👉 なぜ IsDeleted が必要なのか

は、コードだけでは分かりません。


ここで必要なのは「文法理解」ではない

ここで多くの人が、

👉 「まだ自分の実力不足だ」

と思ってしまいます。

でも実際には、

👉 コードの問題ではありません

必要なのは、

・業務ルール
・運用ルール
・過去不具合
・システム制約
・設計意図

です。


コードは「理由の結果」

ここが重要です。

コードは、

👉 “何かしらの理由”があって書かれています

例えば、

if (stock <= 0)
{
    throw new BusinessException();
}

これも、

・在庫マイナス防止
・二重購入防止
・運用事故防止

など、

👉 何かを守る目的

が背景にある可能性があります。

つまり、

👉 コードは「理由の結果」

です。


どうやって「理由」を推測するのか

重要なのは、

👉 「この処理は何を守ろうとしているのか?」

を見ることです。

例えば、

if (stock <= 0)
{
    throw new BusinessException();
}

これを見たときに、

初心者の頃は、

👉 「在庫0ならエラーなのね」

で終わりがちです。

でも実際には、

・なぜここで止める?
・なぜ更新前?
・なぜ例外?

を考えます。


仮説を立てる

例えば、

👉 「在庫マイナス防止では?」

👉 「同時購入対策では?」

👉 「在庫不整合を防ぎたいのでは?」

という形で、

👉 まず“仮説”を立てます

次にコードから根拠を探す

次に、

👉 その仮説が正しそうか

をコードから確認します。

例えば、

・在庫更新処理を見る
・他画面でも同じチェックがあるか見る
・エラー時の処理を見る
・例外メッセージを見る

すると、

👉 「あ、在庫不足防止っぽい」

と見えてきます。


実際の現場では「仮説+根拠」で考える

ここも重要です。

実際の現場では、

👉 最初から100%分かることは少ないです

そのため、

👉 仮説を立てる
👉 コードから根拠を集める

という形で調査します。

例えば、

・在庫更新前にチェックしている
・他画面でも同じ制御がある
・在庫0時は共通例外になっている

ここから、

👉 「在庫マイナス防止」のための処理

と推測できます。


報告・相談するときも同じ

実際に確認するときも、

👉 「分かりません」

だけではなく、

調査した限りでは、

・在庫更新前にチェックしている
・他画面でも同様の制御がある

ことから、

在庫マイナス防止目的と思われます。

ただし仕様書上の明記が見つからなかったため、
認識確認したいです。

のように、

👉 「仮説+根拠」

で話すことが重要です。


読む側だけでなく、書く側にも責任がある

ここまで読む側の視点で説明してきましたが、

👉 実はこれは、コードを書く側にも関係する話です

コードだけを見ても、

・なぜこの条件が必要なのか
・なぜここで return しているのか
・なぜこの順番で処理しているのか

が分からないことがあります。

特に、

・仕様書に書かれていない要件
・過去不具合への対策
・外部システム制約
・運用上必要な処理
・暫定対応

こういったものは、

👉 コードだけでは読み取れません

コメントで残すべきなのは「理由」

例えば、悪いコメントはこれです。

// 削除済みユーザーなら処理しない
if (user.IsDeleted)
{
    return;
}

これはコードを読めば分かります。

残すべきなのは、こういうコメントです。

// 退会済みユーザーに通知送信すると運用事故になるため除外
if (user.IsDeleted)
{
    return;
}

大切なのは、

👉 「何をしているか」ではなく

👉 「なぜ必要なのか」

を残すことです。

まとめ

処理は追えるのに、

👉 「なぜそれをしているのか」が分からない

原因は、

👉 コードの外側にある“理由”が見えていないこと

です。

そのため、

・何を防ぎたいのか
・何を保証したいのか
・何を守ろうとしているのか

を考えながら見ることが重要です。

そして実際の現場では、

👉 仮説を立てる
👉 コードから根拠を集める
👉 「仮説+根拠」で相談する

という形で調査を進めます。

また、コードを書く側も、

👉 「なぜ必要なのか」

をコメントや設計メモとして残しておくことが重要です。


✔ 1つだけ意識するなら

👉 「この処理は、何を守ろうとしているのか?」

これを考えるだけで、

👉 コードの見え方はかなり変わります


おわりに

コード理解は、

👉 文法
👉 処理の流れ
👉 データ

だけでは終わりません。

その先には、

👉 「なぜその処理が必要なのか」

という、

👉 要件・業務・運用・設計

の理解があります。

もし、

「ここで止まる」
「この処理の意味が分からない」

といったことがあれば、ぜひ教えてください。

今後の記事で取り上げていきます。


■ シリーズ記事

新人・初級PGが最初につまずくポイント5選
→ 初心者が現場で止まりやすいポイントを整理

なぜ仕様書とコードは繋がらないのか
→ なぜ「仕様」と「コード」が繋がらないのかを解説

仕様書は読めるのにコードにできない人へ
→ 「線で理解する」具体的な手順を解説

ソースは読めるのに処理が追えないのはなぜ?
→ 処理を追っていて迷子になる原因を解説

どのソースを見ればいいか分からない人へ
→ 起点からコードを追う方法を解説

処理は追えるのに 「中で何してるか」が分からない人へ
→ コードの意味を理解するための「データの見方」を解説

4
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?