PyCon JP 2021 カンファレンスレポート

1日目:「将棋×Python」がもたらしたものとこれから

この記事を読むのに必要な時間:およそ 2.5 分

セッション「Python x DDD!! - Python で学ぶ実践的なドメイン駆動設計とレイヤード・アーキテクチャ」―池内孝啓氏

(高倉佑輔⁠

池内氏は,株式会社HakaliのCTOを務め,メンタルウェルネスアプリ・Awarefyの事業・開発における責任者として活動しているエンジニアで,PythonのほかにDart(Flutter)やGo,TypeScriptを使いこなしています。

このセッションでは,FastAPIを使ったPythonにおけるドメイン駆動設計とレイヤード・アーキテクチャ,とりわけオニオン・アーキテクチャの実践に焦点を当てて紹介しています。ドメイン駆動設計とは,事業やサービスが取り扱う世界の知識をコードに落とし込む開発手法です。ドメイン駆動設計に取り組む意義は,チームが共通言語を獲得し,ドメインが解決しようとしている現実の課題に関心事を向けることにあると池内氏は述べています。

オニオン・アーキテクチャは以下のレイヤーからなり,レイヤーには内側・外側があります(池内氏のスライドの20ページ目も合わせてご覧ください⁠⁠。

  • 一番内側のレイヤー:ドメイン層
  • その外側のレイヤー:ユースケース層
  • さらに外側のレイヤー
    • UI層
    • テスト層
    • インフラ層(ドメインオブジェクトの永続化を担当)

重要なことは,一番内側のドメイン層は,外側にあるユースケース層やさらに外側の各層に依存しないように設計することです。

Pythonはダックタイピングができる言語なのですが,インターフェースを定義することにより他の言語のコードとアーキテクチャをそろえることができます。これには型を明示して型ヒントやIDE,静的解析ツールなどのプログラミングツールの支援を受けやすくできるというメリットがあるわけです。さらにはオニオン・アーキテクチャにおいてはレイヤーの依存方向を整理し疎結合を維持することが求められますが,インターフェースを効果的に使うことによってモック化しやすく,実装を差し替えやすくなるというメリットもあります。この,モック化のメリットはテストをしやすくするというメリットも付いてきます。

その上で,インフラ層にはリポジトリパターンを採用し,ドメインオブジェクトの永続化処理をインターフェースと実装に分けています。リポジトリパターンを用いることは冗長であるという批判や,RDBMSなどの変更がめったにないため抽象化するメリットがないという批判もありますが,これにはレイヤーの責務を明確にし,ドメインオブジェクトの隔離とテスタビリティの向上を目的とすることによって結果的にRDBMSの変更にも強くなるということを説いています。

この発想の源には,他の言語も開発に用いているという池内氏の経験が活きていると思います。池内氏はDartやGo,TypeScriptも開発に使っていて,インターフェースの仕様に関してはDartのような,インターフェースと実装の関連性を明示する仕様が一番好きと述べています。なお,Pythonでもabcモジュールを使うことによりインターフェースを書きやすくできるそうです。

業務でPythonを書いたことがない筆者(高倉)がAdvancedレベルのトークについて行けるのかと最初身構えてしまいましたが,実際にトークを聞いてみると設計が重要であるということ,特に現実の課題に関心を向けた明快な設計がコードを,そしてアプリケーションを理解しやすくするということを改めて考えさせられるよいトークでした。実際に池内氏が今回の講演のために用意したサンプルコードをご覧いただければ,理解はいっそう深まると思われます。

動画アーカイブや発表資料はこちらからご覧ください。

ライトニングトーク

PyCon JP 2021ではクロージングの前にライトニングトークを行いました。以下の発表があり,オンサイト会場・オンライン共にかなり盛り上がりました。

オンサイト会場
  • assertの独自ライブラリを作ったという話
  • Python 3.10の新機能の話
オンライン
  • CAEをPythonで行った話
  • 初学者向けDjango教材を作成したという話

次回は

カンファレンス1日目のレポートは以上です。今回紹介できなかったセッションも多数あるのですが,それらは下記のリンクから見ることができます。みなさまの気になるセッションやトークは見つかりましたか?

カンファレンス2日目のレポートも楽しみにしていてください!

著者プロフィール

吉田健太(よしだけんた)

PyConJPには2018年からスタッフとして参加。2019年までは会場NOCを主に担当していた。株式会社エブリーに所属。SREとして主にインフラ領域の整備に従事している。

Twitter:@yoshiken_tut


高倉佑輔(たかくらゆうすけ)

株式会社サザビーリーグの特例子会社,株式会社サザビーリーグHRにて,グループ内のシステム開発,とりわけバックエンド系システムを担当しているエンジニア。

PyCon JP 2021においてトーク,オンライン会場を担当。PyCon JPには2017年からスタッフ参加しているが,実は業務では主にC#を使用しており,まだPythonを使ったことがなかったりする。

プライベートではAnshitsuという写真の色調を調整するためのコマンドラインアプリを開発中。多趣味で,文章系の創作や写真,プログラミングなどさまざまなことに興味を持つ雑食系。

GitHub:huideyeren
Twitter:@huideyeren
Facebook:高倉 佑輔(ヨーシャ)
Blog:恢徳堂のヨーシャさんのブログ


nikkie(にっきー)

2019年よりPyCon JPスタッフ活動を始め,2021年は座長としてがんばりました。

株式会社ユーザベース所属のデータサイエンティスト。自然言語処理の研究開発に従事している。PyCon JPスタッフの他に,毎月開かれる「みんなのPython勉強会」のスタッフもしている。

Pythonが好き❤な上に怠惰なので,退屈と感じた作業はPythonにやってもらっている。それをPyConなどの場でアウトプットしている。また,アニメも好き🤗で,解放された現在は『アイの歌声を聴かせて』という作品をPythonの力を借りて応援している。

Twitter:@ftnext


神田佳積(かんだかづみ)

グッズ及びTalk進行を担当。今回初めてPyCon JPにスタッフとして参加。

普段は福岡のシステム会社にて受託開発及び常駐での開発に従事。Pythonは現職になって触れ始める。

他にもJAWS-UG 横浜支部の運営スタッフでもある。

Twitter:@kazumiks

バックナンバー

PyCon JP 2021 カンファレンスレポート