Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Djangoの開発環境で工夫したこと - pre-commit / DevContainer
Search
Hiroki Yoda
November 22, 2024
Programming
1
1.5k
Djangoの開発環境で工夫したこと - pre-commit / DevContainer
2024年11月22日の「Djangoオンラインミートアップ #4」で発表させていただいた際のスライドです。
https://django.connpass.com/event/336744/
Hiroki Yoda
November 22, 2024
Tweet
Share
Other Decks in Programming
See All in Programming
ruby.wasmで多人数リアルタイム通信ゲームを作ろう
lnit
2
270
『自分のデータだけ見せたい!』を叶える──Laravel × Casbin で複雑権限をスッキリ解きほぐす 25 分
akitotsukahara
1
540
LINEヤフー データグループ紹介
lycorp_recruit_jp
0
890
Team topologies and the microservice architecture: a synergistic relationship
cer
PRO
0
1k
すべてのコンテキストを、 ユーザー価値に変える
applism118
2
790
童醫院敏捷轉型的實踐經驗
cclai999
0
190
来たるべき 8.0 に備えて React 19 新機能と React Router 固有機能の取捨選択とすり合わせを考える
oukayuka
2
860
VS Code Update for GitHub Copilot
74th
1
380
アンドパッドの Go 勉強会「 gopher 会」とその内容の紹介
andpad
0
260
エンジニア向け採用ピッチ資料
inusan
0
160
技術同人誌をMCP Serverにしてみた
74th
1
350
Beyond Portability: Live Migration for Evolving WebAssembly Workloads
chikuwait
0
390
Featured
See All Featured
Fantastic passwords and where to find them - at NoRuKo
philnash
51
3.3k
Writing Fast Ruby
sferik
628
61k
GraphQLとの向き合い方2022年版
quramy
48
14k
Balancing Empowerment & Direction
lara
1
370
4 Signs Your Business is Dying
shpigford
184
22k
Producing Creativity
orderedlist
PRO
346
40k
Gamification - CAS2011
davidbonilla
81
5.3k
Principles of Awesome APIs and How to Build Them.
keavy
126
17k
The Illustrated Children's Guide to Kubernetes
chrisshort
48
50k
Why You Should Never Use an ORM
jnunemaker
PRO
57
9.4k
Intergalactic Javascript Robots from Outer Space
tanoku
271
27k
We Have a Design System, Now What?
morganepeng
53
7.7k
Transcript
Djangoの開発環境で 工夫したこと pre-commit / DevContainer Djangoオンラインミートアップ #4 2024年11月22日 余田大輝
自己紹介 名前:余田大輝(@Hiroki_Yoda) 所属:株式会社スカラコミュニケーションズ 学生時代に初めて触ったFWはDjangoです。 現在の業務でもDjangoを使用しています。 明後日、福島県葛尾村に移住します。 たまにカレー屋さんになります。
1. Linter / Formatter / Type Checker
型の整合性を検証する ⇩ mypy 03. 型チェッカー コードを整形する ⇩ isort / yapf
02. フォーマッター コードの品質を検証する ⇩ Flake8 01. リンター Djangoのプロジェクトで 下記のツールを導入しました
導入と設定 パッケージ管理ツ ールでインストー ルした上で、 各ツールの設定を pyproject.toml に 記載している。 ただし、Flake8を除く
実行方法 下記のコマンドを実行することで、 Flake8 は規約違反を指摘し、 isort & yapf は自動整形してくれる。 ただし、次の部分は手動で変更しました ・コメントアウトに記載している内容
・import json の削除
手動実行で 生じる問題 コードベースにフォーマットがかけられ ていないコードがマージされた場合、 他の人の作業の中で予期しないフォーマ ットが実行されてしまう。 予期せぬフォーマット 01 Flake8 や
mypy に規約違反を指摘されて も無視することが可能であるため、 対応が開発者それぞれに委ねられる。 規約違反の放置 02
2. pre-commit の導入
自動実行を いつする? 最初に試してみたが、保存の度にフォー マットの実行が走るのが鬱陶しかったた め、チームの総意でこちらは却下。 保存時に自動実行 01 フォーマットの他に、規約違反の検証も 含めて、git commit
のタイミングで自動 実行することをチームで合意した。 コミット時に自動実行 02
pre-commit の導入 pre-commit は、Git フックを利用して、 コミット前に自動的に各種チェックやフォ ーマットを実行するためのフレームワーク である。設定ファイルを使用して、実行す るツールやそのオプションを指定する。
導入と設定 パッケージ管理ツールで インストールした上で、 .pre-commit-config.yaml に 各ツールの設定を記載する。 右図は isort / yapf
/ flake8 / mypy の4つを導入した例。
実行方法 普段通りに git commit を 実行すると、右図のように 先ほど手動実行した検証が それぞれ自動実行される。 isort /
yapf は自動でフォーマ ットされ、flake8 / mypy は 規約違反を指摘してくれる。 すべて pass するまで、 commit は完了できない。
3. DevContainer の導入
関連する別の問題 エディターに導入する拡張機能など、 メンバーの開発環境を統一させたい。 私を含めて、経験の浅いメンバーが 多いチームであるため、特に重要。 開発環境の一貫性 01 Docker等を開発に利用する場合、 右図のように、ホスト側からコンテナ内 のPythonパッケージを認識できない
(今回のテーマとの関連は薄い) パッケージの解決 02
DevContainerの導入 DevContainer は、コンテナを開発環境として利用し、ローカルのファイルを マウントしながら、VSCode の全機能を活用できる仕組みである。 出典: "Developing inside a Container",
Visual Studio Code URL: https://code.visualstudio.com/docs/devc ontainers/containers 参照: 2024-11-21
DevContainerの使い方 devcontainer.json に必要な設定(共有で使用したい拡張機能を含む)を 記載して、メニューから「コンテナで再度開く」を選択する。 「コンテナで再度開く」を選択
まとめ
コードのフォーマットや 拡張機能のインストールなど、 開発者で共通の対応をしたいが 手動で各々対応していた部分を pre-commit や DevContainer を用いて仕組みにすることで、 開発者が常に意識をしなくても 一貫性が維持されるようになった。
皆さんが普段使っている リンター / フォーマッター や 開発環境の工夫を教えてください!