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
tparseでgo testの出力を見やすくする
utgwkk
2
250
AIエージェントの設計で注意するべきポイント6選
har1101
5
920
S3 VectorsとStrands Agentsを利用したAgentic RAGシステムの構築
tosuri13
6
350
ゲームの物理 剛体編
fadis
0
350
ローターアクトEクラブ アメリカンナイト:川端 柚菜 氏(Japan O.K. ローターアクトEクラブ 会長):2720 Japan O.K. ロータリーEクラブ2025年12月1日卓話
2720japanoke
0
740
バックエンドエンジニアによる Amebaブログ K8s 基盤への CronJobの導入・運用経験
sunabig
0
160
FluorTracer / RayTracingCamp11
kugimasa
0
240
複数人でのCLI/Infrastructure as Codeの暮らしを良くする
shmokmt
5
2.3k
AIエージェントを活かすPM術 AI駆動開発の現場から
gyuta
0
440
令和最新版Android Studioで化石デバイス向けアプリを作る
arkw
0
410
TerraformとStrands AgentsでAmazon Bedrock AgentCoreのSSO認証付きエージェントを量産しよう!
neruneruo
3
550
モデル駆動設計をやってみようワークショップ開催報告(Modeling Forum2025) / model driven design workshop report
haru860
0
270
Featured
See All Featured
Responsive Adventures: Dirty Tricks From The Dark Corners of Front-End
smashingmag
254
22k
Groundhog Day: Seeking Process in Gaming for Health
codingconduct
0
60
Keith and Marios Guide to Fast Websites
keithpitt
413
23k
エンジニアに許された特別な時間の終わり
watany
105
220k
It's Worth the Effort
3n
187
29k
jQuery: Nuts, Bolts and Bling
dougneiner
65
8.3k
How to optimise 3,500 product descriptions for ecommerce in one day using ChatGPT
katarinadahlin
PRO
0
3.3k
Getting science done with accelerated Python computing platforms
jacobtomlinson
0
72
Joys of Absence: A Defence of Solitary Play
codingconduct
1
250
GraphQLの誤解/rethinking-graphql
sonatard
73
11k
Building Better People: How to give real-time feedback that sticks.
wjessup
370
20k
AI Search: Where Are We & What Can We Do About It?
aleyda
0
6.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 を用いて仕組みにすることで、 開発者が常に意識をしなくても 一貫性が維持されるようになった。
皆さんが普段使っている リンター / フォーマッター や 開発環境の工夫を教えてください!