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
事業戦略を理解してソフトウェアを設計する
masuda220
PRO
22
6.1k
Cline指示通りに動かない? AI小説エージェントで学ぶ指示書の書き方と自動アップデートの仕組み
kamomeashizawa
1
520
Java on Azure で LangGraph!
kohei3110
0
140
Perlで痩せる
yuukis
1
680
機械学習って何? 5分で解説頑張ってみる
kuroneko2828
0
210
カクヨムAndroidアプリのリブート
numeroanddev
0
430
無関心の谷
kanayannet
0
170
DroidKnights 2025 - 다양한 스크롤 뷰에서의 영상 재생
gaeun5744
3
270
Parallel::Pipesの紹介
skaji
2
910
複数アプリケーションを育てていくための共通化戦略
irof
10
3.9k
2度もゼロから書き直して、やっとブラウザでぬるぬる動くAIに辿り着いた話
tomoino
0
160
型付きアクターモデルがもたらす分散シミュレーションの未来
piyo7
0
780
Featured
See All Featured
StorybookのUI Testing Handbookを読んだ
zakiyama
30
5.8k
Mobile First: as difficult as doing things right
swwweet
223
9.7k
Helping Users Find Their Own Way: Creating Modern Search Experiences
danielanewman
29
2.7k
A better future with KSS
kneath
239
17k
Measuring & Analyzing Core Web Vitals
bluesmoon
7
480
Adopting Sorbet at Scale
ufuk
77
9.4k
Code Reviewing Like a Champion
maltzj
524
40k
Docker and Python
trallard
44
3.4k
How STYLIGHT went responsive
nonsquared
100
5.6k
Let's Do A Bunch of Simple Stuff to Make Websites Faster
chriscoyier
507
140k
XXLCSS - How to scale CSS and keep your sanity
sugarenia
248
1.3M
The Pragmatic Product Professional
lauravandoore
35
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 を用いて仕組みにすることで、 開発者が常に意識をしなくても 一貫性が維持されるようになった。
皆さんが普段使っている リンター / フォーマッター や 開発環境の工夫を教えてください!