Lock in $30 Savings on PRO—Offer Ends Soon! ⏳
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.9k
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
Evolving NEWT’s TypeScript Backend for the AI-Driven Era
xpromx
0
270
Microservices Platforms: When Team Topologies Meets Microservices Patterns
cer
PRO
1
930
dnx で実行できるコマンド、作ってみました
tomohisa
0
140
非同期処理の迷宮を抜ける: 初学者がつまづく構造的な原因
pd1xx
1
610
著者と進める!『AIと個人開発したくなったらまずCursorで要件定義だ!』
yasunacoffee
0
120
TypeScript 5.9 で使えるようになった import defer でパフォーマンス最適化を実現する
bicstone
1
1.1k
NUMA環境とコンテナランタイム ― youki における Linux Memory Policy 実装
n4mlz
1
110
TUIライブラリつくってみた / i-just-make-TUI-library
kazto
1
320
Reactive Thinking with Signals and the new Resource API
manfredsteyer
PRO
0
160
AIコーディングエージェント(skywork)
kondai24
0
120
S3 VectorsとStrands Agentsを利用したAgentic RAGシステムの構築
tosuri13
5
270
CSC509 Lecture 14
javiergs
PRO
0
220
Featured
See All Featured
Let's Do A Bunch of Simple Stuff to Make Websites Faster
chriscoyier
508
140k
個人開発の失敗を避けるイケてる考え方 / tips for indie hackers
panda_program
120
20k
Building an army of robots
kneath
306
46k
The MySQL Ecosystem @ GitHub 2015
samlambert
251
13k
How to train your dragon (web standard)
notwaldorf
97
6.4k
Facilitating Awesome Meetings
lara
57
6.7k
Responsive Adventures: Dirty Tricks From The Dark Corners of Front-End
smashingmag
253
22k
Designing for humans not robots
tammielis
254
26k
Save Time (by Creating Custom Rails Generators)
garrettdimon
PRO
32
1.8k
I Don’t Have Time: Getting Over the Fear to Launch Your Podcast
jcasabona
34
2.5k
RailsConf 2023
tenderlove
30
1.3k
Design and Strategy: How to Deal with People Who Don’t "Get" Design
morganepeng
132
19k
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 を用いて仕組みにすることで、 開発者が常に意識をしなくても 一貫性が維持されるようになった。
皆さんが普段使っている リンター / フォーマッター や 開発環境の工夫を教えてください!