Open3
[WIP] pipx を使って、diagramsのclassを自由に持ち歩きたい
布教
diagramsの布教です。
これ、直感的にアーキテクチャ書けます。
PlantUMLとかMermaidももちろん便利。
なんですけど「アーキテクチャ図を書く」ことに関しては、クラス図とかフローチャートを間借りして何とかやってる感がすごい。
その点、diagramsはそれに特化している。
またdiagramsで強いのは、思いっきりPython言語なのでclassが使えること。
例えば「コンテナは六角形で表現したい」って理想が出てきたときに、
class Container(Node):
def __init__(self, *args, **kwargs):
kwargs["shape"] = "octagon"
super().__init__(*args, **kwargs)
こうしとけば 統一できる。すっきり。
diagramsのハードル
monorepoが脚光を浴びてきた昨今、アーキテクチャ図は1リポジトリごとに書くことが多い or 多くなっていくと思います。
diagramsで図を出力するには Pythonの実行環境が必要で、もし自分用のclassを複数作ったとしたら、それを持ちこむ必要がある。
TypeScriptベースのリポジトリを例に、構成パターンをいくつか見ていきます。
パターン「ガッツリ持ち込む」
▼ リポジトリ
- package.json
- tsconfig.json
- pnpm-workspace.yaml
- .eslintrc
- packages
- nextjs
- src
- components
- Table.tsx
- pages
- index.tsx
- 404.tsx
- db
- config
- README.md
- doc
- pyproject.toml
- poetry.lock
- architecture.py
- architecture.svg
- util.py
- tox.ini
- Pythonのプロジェクトじゃないのに、Pythonの設定ファイル + Utilクラスとかが幅を利かせてる。。。
- 本当に見せたいものはどれ?
- python側の設定をいじるだけで pull/mergeしないといけないとか。。。
パターン「リポジトリ分割」
▼ メインリポジトリ
- package.json
- tsconfig.json
- pnpm-workspace.yaml
- .eslintrc
- packages
- nextjs
- src
- components
- Table.tsx
- pages
- index.tsx
- 404.tsx
- db
- config
▼ docリポジトリ
- README.md
- pyproject.toml
- poetry.lock
- architecture.py
- architecture.svg
- util.py
- tox.ini
- 実行環境の分け方としては理想的。
- ただしメインリポジトリの修正と同期的にdocに何かをする、ということに関して工夫が必要。
- docに光があたらず置いてけぼりを食らう可能性が高い。
- issueも分かれるので、プロジェクトを通したり、メンションとかでいい感じにしないといけない。
- utilの更新があった場合、それに追従する必要がある。
パターン「理想」
▼ メインリポジトリ
- package.json
- tsconfig.json
- pnpm-workspace.yaml
- .eslintrc
- packages
- nextjs
- src
- components
- Table.tsx
- pages
- index.tsx
- 404.tsx
- db
- config
- README.md
- doc
- architecture.py -> (common-diagrams 利用)
- architecture.svg
▼ common-diagramsリポジトリ
- pyproject.toml
- poetry.lock
- util.py
- tox.ini
- メインリポジトリの浸食は最低限。
- 全社でアーキテクチャの書き方を統一する~とかも出来る(変更も容易)
動機
前述の「理想」パターンを実現するためには、Node.js 環境における "npx" コマンドを Python環境で実現する必要があるんです。