ざっくりと
- コードの重複を避ける
- バグを減らす
- 修正や改修が簡単

OAOO原則とは、同じ処理のコードを一箇所にまとめる原則です。
概要説明
OAOO原則とは、同じ処理のコードを一箇所にまとめる原則である。 なぜならば、コードの重複を避けることで、バグの発生を減らし、修正や改修が簡単になるから。
例えば、ログイン処理が複数の場所で使われる場合、一箇所にまとめると修正が楽になる。そして、作業時間も短縮される。つまり、効率的なプログラミングが可能である。だから、多くのプログラマが使用する。
OAOO原則に沿ってないコード例
# 4を二乗する
result1 = 4 * 4
# 5を二乗する
result2 = 5 * 5
# 6を二乗する
result3 = 6 * 6
print(result1) # 出力: 16
print(result2) # 出力: 25
print(result3) # 出力: 36
この例では、同じ処理(数値を二乗する)がそれぞれの場所で繰り返されている。このようなコードは、修正が必要な場合に各箇所を個別に修正する必要があり、効率が悪い。
OAOO原則に沿ったコード例
def square_number(num):
return num * num
# この関数を使って数値を二乗する
result1 = square_number(4)
result2 = square_number(5)
result3 = square_number(6)
print(result1) # 出力: 16
print(result2) # 出力: 25
print(result3) # 出力: 36
この例では、同じ処理(数値を二乗する)を一つの関数にまとめている。この関数を呼び出すことで、同じ処理を何度でも再利用できる。
OAOO原則に沿ったコードは、修正や改修が必要な場合にも一箇所を変更するだけで済むため、効率が良く、バグの発生も少なくなる。
職業職種

OAOO原則は、名前の由来は英語の”Once And Only Once”から来ています。これは「一度だけ、そして一箇所だけ」という意味で、その原則の核心を表しています。
代表例
- Cybozu, Inc.
Cybozuは、OAOO原則で有名である。なぜなら、同社のソフトウェア開発プロセスがこの原則に基づいて効率化されているからだ。例えば、Cybozuの開発チームはコードの重複を避け、メンテナンスが容易なソフトウェアを作成している。 - Rakuten, Inc.
Rakutenは、OAOO原則で名高い存在である。なぜなら、多くのサービスを持つ大企業でありながら、一貫したコードベースを維持しているからだ。例えば、新しい機能を追加する際も、OAOO原則に基づいて効率的に開発を行っている。 - DeNA Co., Ltd.
DeNAは、OAOO原則で世間に知られている。なぜなら、ゲーム開発においてこの原則を活用し、バグの少ない製品を提供しているからだ。例えば、ゲーム内の似たような動作は共通のコードにまとめている。
手順例
以下は、OAOO原則を実践する手順です。- コードの分析
最初に、コード内で似たような処理が何度も行われているか確認する。なぜなら、重複を見つけることが第一歩だからだ。例えば、同じ計算が何度も出てくる場合。 - 関数やメソッドの作成
似た処理を一つの関数やメソッドにまとめる。なぜなら、これがOAOO原則の核心だからだ。例えば、数値を二乗する処理を一つの関数にする。 - テスト
新しく作成した関数やメソッドが正しく動作するかテストする。なぜなら、バグを未然に防ぐためだからだ。例えば、単体テストを行う。 - ドキュメント
作成した関数やメソッドにコメントをつける。なぜなら、他の人が理解しやすくするためだからだ。例えば、関数の目的や使い方を説明する。 - レビュー
他の人にコードを見てもらい、フィードバックを受ける。なぜなら、より良いコードにするためだからだ。例えば、コードレビューを行う。
類似語
- DRY原則
DRY(Don’t Repeat Yourself)原則は、OAOO原則の類似語である。なぜなら、両方ともコードの重複を避けることを目的としているからだ。例えば、同じ処理を一箇所にまとめる。 - 単一責任の原則
単一責任の原則は、OAOO原則の類似語である。なぜなら、一つの関数やクラスが一つのことだけを行うべきだという考えが共通しているからだ。例えば、計算と表示を分ける。 - コードの再利用
コードの再利用は、OAOO原則の類似語である。なぜなら、既存のコードを効率よく使い回す考え方が似ているからだ。例えば、ライブラリやモジュールを使う。
反対語
- コピーアンドペーストプログラミング
コピーアンドペーストプログラミングは、OAOO原則の反対語である。なぜなら、同じようなコードを何度も繰り返し書くからだ。例えば、同じ計算処理を複数の場所で使っている。 - 冗長性
冗長性は、OAOO原則の反対語である。なぜなら、同じ処理が複数の場所で行われ、コードが長くなるからだ。例えば、同じエラーメッセージを何度も書く。 - スパゲッティコード
スパゲッティコードは、OAOO原則の反対語である。なぜなら、コードが複雑で読みにくく、修正が難しいからだ。例えば、同じ処理が散らばっていて、どこを修正すればいいかわからない。
会話例
- プログラミングチームの会議中
「このプロジェクトでOAOO原則をどう活用する?」
「同じ処理は関数にまとめて、コードの重複を避けるよ。」 - コードレビューの時間
「この部分、OAOO原則に沿ってないけど?」
「確かに、この処理は関数にまとめられるね。修正するよ。」 - 新人研修中
「OAOO原則って何?」
「同じ処理を何度も書かずに、一箇所にまとめる考え方だよ。」
注意点
OAOO原則を使用する時の注意点は、過度な抽象化である。なぜならば、あまりにも多くの処理を一つにまとめすぎると、コードが複雑になりがちだからだ。例えば、一つの関数が多くのことをしている場合。そして、その関数が何をしているのか理解しづらくなる。だから、適度なまとめ方を心掛ける。

OAOO原則とDRY原則は、間違えやすいので注意しましょう。
OAOO原則は、同じ処理を一箇所にまとめることです。

一方、DRY原則は、全体的にコードの重複を避けることです。
コメント