Skip to Content
Pythonによるアーキテクチャパターン
book

Pythonによるアーキテクチャパターン

by Harry Percival, Bob Gregory
March 2025
Intermediate to advanced
304 pages
4h 33m
Japanese
O'Reilly Media, Inc.
Content preview from Pythonによるアーキテクチャパターン

はじめに

この作品はAIを使って翻訳されている。ご意見、ご感想をお待ちしている:translation-feedback@oreilly.com

なぜデザインは失敗するのか?

カオスと聞いて何を思い浮かべるだろうか?おそらく騒々しい証券取引所や、朝の台所など、すべてが混乱してごちゃごちゃしている様子を思い浮かべるだろう。秩序という言葉を思い浮かべるとき、おそらく何もない静謐な部屋を思い浮かべるだろう。しかし、科学者にとっては、カオスは均質性(同一性)を特徴とし、秩序は複雑性(差異)を特徴とする。

例えば、よく手入れされた庭は高度に秩序だったシステムである。庭師はパスやフェンスで境界を定義し、花壇や野菜畑に印をつける。しかし、意図的な努力がなければ、庭は荒れ果ててしまう。雑草や草が他の植物を駆逐し、パスが覆い尽くされ、最終的にはどの場所も同じように見えるようになる。

ソフトウェア・システムもまた、混沌に向かう傾向がある。新しいシステムを作り始めた当初は、コードはきれいで整然としたものになるだろうと大それたことを考えるものだが、時間が経つにつれて、コードがごちゃごちゃとエッジケースを集め、マネージャークラスやutilモジュールの混乱した泥沼に陥ってしまうことに発見する。賢明な階層化アーキテクチャが、ぐちゃぐちゃのゴミのように崩れてしまっていることを発見するのだ。混沌としたソフトウェアシステムは、機能が同じであることを特徴とする:ドメイン知識を持ち、メールを送ったりロギングを実行するAPIハンドラー、計算はしないがI/Oを実行する「ビジネスロジック」クラス、そしてシステムのどの部分を変更しても危険と隣り合わせになるように、すべてが他のすべてに結合している。このようなことはよくあることで、ソフトウェア・エンジニアリングは、カオスを表す独自の言葉「泥の大玉アンチパターン」を持っている(図P-1)。

apwp 0001
図 P-1. 実際の依存関係ダイアグラム(出典:Alex Papadimoulis著「Enterprise Dependency: Big Ball of Yarn)
チップ

荒野が庭の自然な状態であるのと同じように、大きな泥の玉がソフトウェアの自然な状態なのだ。崩壊を防ぐには、エネルギーと方向性が必要だ。

幸いなことに、泥の大玉を作成しないためのテクニックは複雑ではない。

カプセル化と抽象化

カプセル化と抽象化は、プログラマとして誰もが本能的に手を伸ばすツールである。 この本の背景テーマとして繰り返されていることなので、少し考えてみよう。

カプセル化という言葉には、振る舞いの単純化とデータの隠蔽という、密接に関連する2つの考え方が含まれている。この議論では、最初の意味で使っている。コードの中で行う必要のあるタスクを定義し、そのタスクを明確に定義されたオブジェクトや関数に与えることで、振る舞いをカプセル化する。私たちはそのオブジェクトや関数を抽象化と呼んでいる。

次の2つのPythonコードの断片を見てみよう:

urllibで検索する。

import json
from urllib.request import urlopen
from urllib.parse import urlencode

params = dict(q='Sausages'
Become an O’Reilly member and get unlimited access to this title plus top books and audiobooks from O’Reilly and nearly 200 top publishers, thousands of courses curated by job role, 150+ live events each month,
and much more.

Read now

Unlock full access

More than 5,000 organizations count on O’Reilly

AirBnbBlueOriginElectronic ArtsHomeDepotNasdaqRakutenTata Consultancy Services

QuotationMarkO’Reilly covers everything we've got, with content to help us build a world-class technology community, upgrade the capabilities and competencies of our teams, and improve overall team performance as well as their engagement.
Julian F.
Head of Cybersecurity
QuotationMarkI wanted to learn C and C++, but it didn't click for me until I picked up an O'Reilly book. When I went on the O’Reilly platform, I was astonished to find all the books there, plus live events and sandboxes so you could play around with the technology.
Addison B.
Field Engineer
QuotationMarkI’ve been on the O’Reilly platform for more than eight years. I use a couple of learning platforms, but I'm on O'Reilly more than anybody else. When you're there, you start learning. I'm never disappointed.
Amir M.
Data Platform Tech Lead
QuotationMarkI'm always learning. So when I got on to O'Reilly, I was like a kid in a candy store. There are playlists. There are answers. There's on-demand training. It's worth its weight in gold, in terms of what it allows me to do.
Mark W.
Embedded Software Engineer

You might also like

技術リーダーシップのための14のヒント

技術リーダーシップのための14のヒント

島田 浩二
Kubernetesで実践するクラウドネイティブDevOps

Kubernetesで実践するクラウドネイティブDevOps

John Arundel, Justin Domingus, 須田 一輝, 渡邉 了介
AWS上のシステム設計

AWS上のシステム設計

Jayanth Kumar, Mandeep Singh

Publisher Resources

ISBN: 9798341624863