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
160
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
受け取る人から提供する人になるということ
little_rubyist
0
250
イベント駆動で成長して委員会
happymana
1
340
みんなでプロポーザルを書いてみた
yuriko1211
0
280
アジャイルを支えるテストアーキテクチャ設計/Test Architecting for Agile
goyoki
9
3.3k
flutterkaigi_2024.pdf
kyoheig3
0
160
Quine, Polyglot, 良いコード
qnighy
4
650
Hotwire or React? ~アフタートーク・本編に含めなかった話~ / Hotwire or React? after talk
harunatsujita
1
120
Better Code Design in PHP
afilina
PRO
0
130
NSOutlineView何もわからん:( 前編 / I Don't Understand About NSOutlineView :( Pt. 1
usagimaru
0
350
광고 소재 심사 과정에 AI를 도입하여 광고 서비스 생산성 향상시키기
kakao
PRO
0
170
AI時代におけるSRE、 あるいはエンジニアの生存戦略
pyama86
6
1.2k
DevTools extensions で 独自の DevTool を開発する | FlutterKaigi 2024
kokiyoshida
0
110
Featured
See All Featured
実際に使うSQLの書き方 徹底解説 / pgcon21j-tutorial
soudai
169
50k
The Myth of the Modular Monolith - Day 2 Keynote - Rails World 2024
eileencodes
16
2.1k
Gamification - CAS2011
davidbonilla
80
5k
Designing for humans not robots
tammielis
250
25k
Building Applications with DynamoDB
mza
90
6.1k
Fireside Chat
paigeccino
34
3k
BBQ
matthewcrist
85
9.3k
Templates, Plugins, & Blocks: Oh My! Creating the theme that thinks of everything
marktimemedia
26
2.1k
Exploring the Power of Turbo Streams & Action Cable | RailsConf2023
kevinliebholz
27
4.3k
Fashionably flexible responsive web design (full day workshop)
malarkey
405
65k
ReactJS: Keep Simple. Everything can be a component!
pedronauck
665
120k
Raft: Consensus for Rubyists
vanstee
136
6.6k
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 を用いて仕組みにすることで、 開発者が常に意識をしなくても 一貫性が維持されるようになった。
皆さんが普段使っている リンター / フォーマッター や 開発環境の工夫を教えてください!