Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
manage.py 深堀り
Search
shintaromatsudo
November 12, 2022
Technology
140
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
manage.py 深堀り
DjangoCongress JP 2022
shintaromatsudo
November 12, 2022
Other Decks in Technology
See All in Technology
スプシの手作業からの解脱 ~更新はClaude Codeに、見せ方と使い方はGASアプリに任せる~
kentarofujii
0
150
go-sqletch
moznion
0
140
ストレスなくAIと付き合いたい!こんなときどうしてる?
namiki64
3
540
SAENM ~Jupyterで残すPoCの試行錯誤、未来の自分と仲間を助ける記録!~
terapyon
0
110
DWH の限界突破! AI エージェント向け爆速リアルタイムデータ基盤 ClickHouse
jozono
1
480
Classmethod Company Deck
satoshi7
1
690
実践! SRE × AI - ABEMA における AIOps -
tetsuya28
8
3.1k
日本語に強いオープンな大規模言語モデル「LLM-jp」
odashi
4
1.1k
遠藤な_めぐろLT #38 「社内のAI活用推進」@麻布台_20261009
endonanana
0
130
JAWSUG TOHOKU 青森支部 「LoGoチャット」のAWS移行で 乗り越えたこと
taketakekaho
0
330
Active Record Connection Adaptersにおける長年の課題に再び取り組む
yahonda
0
150
1つのリクエストを追って理解する - llm-dのP/D分離
akhino
1
160
Featured
See All Featured
I Don’t Have Time: Getting Over the Fear to Launch Your Podcast
jcasabona
35
2.9k
Build your cross-platform service in a week with App Engine
jlugia
234
19k
Neural Spatial Audio Processing for Sound Field Analysis and Control
skoyamalab
0
570
Facilitating Awesome Meetings
lara
57
7.2k
What does AI have to do with Human Rights?
axbom
PRO
1
2.5k
Agile that works and the tools we love
rasmusluckow
331
22k
Performance Is Good for Brains [We Love Speed 2024]
tammyeverts
12
1.9k
Visualization
eitanlees
153
17k
Building a A Zero-Code AI SEO Workflow
portentint
PRO
0
780
Gemini Prompt Engineering: Practical Techniques for Tangible AI Outcomes
mfonobong
2
590
Discover your Explorer Soul
emna__ayadi
2
1.3k
The Hidden Cost of Media on the Web [PixelPalooza 2025]
tammyeverts
2
530
Transcript
Shintaro Matsudo manage.py 深堀り
質問
Djangoコマンドの内部を 見に行ったことがある人
Motivation - 動機 業務効率化のため • 単体テストの時間短縮 • DBマイグレーションの自動ロールバック を検討。
Motivation - 動機 • python manage.py test • python manage.py
migrate の実装を見に行った。
Motivation - 動機 奥が深い。
Motivation - 動機 ちゃんと調べて共有したい。
Shintaro Matsudo manage.py 深堀り
スライドは公開しています。
• Name: 松土 慎太郎 (@shintaromatsudo) • Work: 株式会社RevComm • Python:
PyCon JP 2022 Staff • Like: ◦ 子どもと遊ぶ ◦ 冒険、挑戦 ◦ アウトドア、スポーツ ◦ (水曜どうでしょう、ディズニー、ラーメン二郎 ) Who am I Who am I - おまえだれよ
• ターゲット ◦ Django を少し使ったことがある人 • 話さないこと ◦ コマンド網羅、ひとつひとつの説明 •
話すこと ◦ デフォルトコマンドいくつかの中身 ◦ カスタムコマンドの作り方と活用例 • 前提 ◦ バージョンは、3.2を基本に4系で新しく入る機能も少しご紹介。 Overview - 概要
• ターゲット ◦ Django を少し使ったことがある人 • 話さないこと ◦ コマンド網羅、ひとつひとつの説明 •
話すこと ◦ デフォルトコマンドいくつかの中身 ◦ カスタムコマンドの作り方と活用例 • 前提 ◦ バージョンは、3.2を基本に4系で新しく入る機能も少しご紹介。 Overview - 概要
• ターゲット ◦ Django を少し使ったことがある人 • 話さないこと ◦ コマンド網羅、ひとつひとつの説明 •
話すこと ◦ デフォルトコマンドいくつかの中身 ◦ カスタムコマンドの作り方と活用例 • 前提 ◦ バージョンは、3.2を基本に4系で新しく入る機能も少しご紹介。 Overview - 概要
• ターゲット ◦ Django を少し使ったことがある人 • 話さないこと ◦ コマンド網羅、ひとつひとつの説明 •
話すこと ◦ デフォルトコマンドいくつかの中身 ◦ カスタムコマンドの作り方と活用例 • 前提 ◦ バージョンは、3.2を基本に4系で新しく入る機能も少しご紹介。 Overview - 概要
Agenda 1. コマンド紹介 a. コマンドが実行されるまで b. shell c. test d.
migration関連 2. カスタムコマンド a. 概要 b. 作り方 c. 活用例 manage.py 深堀り
Agenda 1. コマンド紹介 a. コマンドが実行されるまで b. shell c. test d.
migration関連 2. カスタムコマンド a. 概要 b. 作り方 c. 活用例 manage.py 深堀り
エントリーポイントmanage.pyの中身を見てみよう。 コマンド紹介 - Djangoコマンドが実行されるまで
コマンド紹介 - Djangoコマンドが 実行されるまで manage.py ↓ django.core.management.__init__.py execute_from_command_line() ↓ django.core.management.__init__.py
ManagementUtility クラス execute() ↓ django.core.management.base.py BaseCommand クラス run_from_argv() ↓ self.execute() ↓ self.handle
コマンド紹介 - Djangoコマンドが 実行されるまで manage.py ↓ django.core.management.__init__.py execute_from_command_line() ↓ django.core.management.__init__.py
ManagementUtility クラス execute() ↓ django.core.management.base.py BaseCommand クラス run_from_argv() ↓ self.execute() ↓ self.handle
manage.py ↓ django.core.management.__init__.py execute_from_command_line() ↓ django.core.management.__init__.py ManagementUtility クラス execute() ↓
django.core.management.base.py BaseCommand クラス run_from_argv() ↓ self.execute() ↓ self.handle コマンド紹介 - Djangoコマンドが 実行されるまで
manage.py ↓ django.core.management.__init__.py execute_from_command_line() ↓ django.core.management.__init__.py ManagementUtility クラス execute() ↓
django.core.management.base.py BaseCommand クラス run_from_argv() ↓ self.execute() ↓ self.handle コマンド紹介 - Djangoコマンドが 実行されるまで 長いので抜粋 https://github.com/django/django/blob/stab le/3.2.x/django/core/management/__init__.p y#L334
manage.py ↓ django.core.management.__init__.py execute_from_command_line() ↓ django.core.management.__init__.py ManagementUtility クラス execute() ↓
django.core.management.base.py BaseCommand クラス run_from_argv() ↓ self.execute() ↓ self.handle コマンド紹介 - Djangoコマンドが 実行されるまで 長いので抜粋 https://github.com/django/django/blob/stab le/3.2.x/django/core/management/base.py# L337
manage.py ↓ django.core.management.__init__.py execute_from_command_line() ↓ django.core.management.__init__.py ManagementUtility クラス execute() ↓
django.core.management.base.py BaseCommand クラス run_from_argv() ↓ self.execute() ↓ self.handle() コマンド紹介 - Djangoコマンドが 実行されるまで 長いので抜粋 https://github.com/django/django/blob/stab le/3.2.x/django/core/management/base.py# L373
manage.py ↓ django.core.management.__init__.py execute_from_command_line() ↓ django.core.management.__init__.py ManagementUtility クラス execute() ↓
django.core.management.base.py BaseCommand クラス run_from_argv() ↓ self.execute() ↓ self.handle() コマンド紹介 - Djangoコマンドが 実行されるまで
コマンド紹介 - Djangoコマンドが実行されるまで 各コマンドは、BaseCommandを継承して、 handle()をオーバーライドして実行している。
Agenda 1. コマンド紹介 a. コマンドが実行されるまで b. shell c. test d.
migration関連 2. カスタムコマンド a. 概要 b. 作り方 c. 活用例 manage.py 深堀り
django.core.management.commands.shell.pyの handle()の中身を見ていこう。 コマンド紹介 - shell
コマンド紹介 - shell https://github.com/django/django/bl ob/stable/3.2.x/django/core/manage ment/commands/shell.py#L84
コマンド紹介 - shell https://github.com/django/django/bl ob/stable/3.2.x/django/core/manage ment/commands/shell.py#L84 ['ipython', 'bpython', 'python']
コマンド紹介 - shell https://github.com/django/django/bl ob/stable/3.2.x/django/core/manage ment/commands/shell.py#L84 ['ipython', 'bpython', 'python']
なぜ、pythonコマンドと違い、 python manage.py shellは、作成したアプリケーション内で定義したクラ ス、関数をインポートできるのか。 コマンド紹介 - shell
1. DJANGO_SETTINGS_MODULEを設定 コマンド紹介 - shell manage.py
コマンド紹介 - shell 2. django.setup() ManagementUtility クラス execute() https://github.com/django/django/bl ob/stable/3.2.x/django/core/manage
ment/commands/shell.py#L84
つまり、 1. DJANGO_SETTINGS_MODULEを環境変数に設定 して、 2. django.setup() すれば、pythonコマンドでも同じことができる。 コマンド紹介 - shell
Agenda 1. コマンド紹介 a. コマンドが実行されるまで b. shell c. test d.
migration関連 2. カスタムコマンド a. 概要 b. 作り方 c. 活用例 manage.py 深堀り
用語説明: test_case: テストの一単位 test_suite: test_case, test_suiteをグループにしたもの test_runner: テストの実行を管理し結果を提供するもの discover: 自動でテストコードを探索する仕組み
https://docs.python.org/ja/3/library/unittest.html コマンド紹介 - test
django.core.management.commands.test.pyの handle()の中身を見ていこう。 コマンド紹介 - test
django.core.management.commands.test.py handle() コマンド紹介 - test handle()
django.core.management.commands.test.py handle() ↓ get_runner() 引数 --test_runner、または、settingsのTEST_RUNNERで 使用するtest_runnerを指定することができる。 デフォルトは、django.test.runner.DiscoverRunner コマンド紹介 -
test handle()
django.test.runner.DiscoverRunner DiscoverRunnerを継承して、 任意のtest_suiteやtest_runnerなどを指定することも可能 コマンド紹介 - test DiscoverRunner クラス
django.core.management.commands.test.py handle() ↓ test_runner.run_tests() ← get_runner() コマンド紹介 - test handle()
django.core.management.commands.test.py handle() ↓ test_runner.run_tests() ← get_runner() ↓ django.test.runner.py DiscoverRunner run_tests()
discoverで対象のtest_caseをまとめ、 test_suiteを作成。 コマンド紹介 - test DiscoverRunner クラス run_tests()
django.core.management.commands.test.py handle() ↓ test_runner.run_tests() ← get_runner() ↓ django.test.runner.py DiscoverRunner run_tests()
↓ build_suite() コマンド紹介 - test DiscoverRunner クラス build_suite() https://github.com/django/django/bl ob/stable/3.2.x/django/test/runner.p y#L559
django.test.runner.DiscoverRunner test_suiteのデフォルトはunittest.TestSuite コマンド紹介 - test DiscoverRunner クラス
django.core.management.commands.test.py handle() ↓ test_runner.run_tests() ← get_runner() ↓ django.test.runner.py DiscoverRunner run_tests()
↓ run_suite(suite) ← build_suite() 作成したtest_suiteを引数に渡し、 run_suite()を実行。 コマンド紹介 - test DiscoverRunner クラス run_tests() django.test.runner.DiscoverRunner unittest.TestSuite
django.core.management.commands.test.py handle() ↓ test_runner.run_tests() ← get_runner() ↓ django.test.runner.py DiscoverRunner
run_tests() ↓ run_suite(suite) ← build_suite() コマンド紹介 - test DiscoverRunner クラス run_suite()
django.core.management.commands.test.py handle() ↓ test_runner.run_tests() ← get_runner() ↓ django.test.runner.py DiscoverRunner
run_tests() ↓ run_suite(suite) ← build_suite() ↓ self.test_runner() コマンド紹介 - test DiscoverRunner クラス run_suite()
django.test.runner.DiscoverRunner test_runnerのデフォルトはunittest.TextTestRunner コマンド紹介 - test DiscoverRunner クラス
django.core.management.commands.test.py handle() ↓ test_runner.run_tests() ← get_runner() ↓ django.test.runner.py DiscoverRunner
run_tests() ↓ run_suite(suite) ← build_suite() ↓ run(suite) ← self.test_runner() コマンド紹介 - test DiscoverRunner クラス run_suite() unittest.TextTestRunner django.test.runner.DiscoverRunner unittest.TestSuite
django.core.management.commands.test.py handle() ↓ test_runner.run_tests() ← get_runner() ↓ django.test.runner.py DiscoverRunner
run_tests() ↓ run_suite(suite) ← build_suite() ↓ run(suite) ← self.test_runner() ↓ cpython.Lib.unittest.runner.py TextTestRunner run(self, test) コマンド紹介 - test unittest.TextTestRunner クラス run() https://github.com/python/cpython/ blob/3.11/Lib/unittest/runner.py#L192
django.core.management.commands.test.py handle() ↓ test_runner.run_tests() ← get_runner() ↓ django.test.runner.py DiscoverRunner
run_tests() ↓ run_suite(suite) ← build_suite() ↓ run(suite) ← self.test_runner() ↓ cpython.Lib.unittest.runner.py TextTestRunner run(self, test) コマンド紹介 - test unittest.TextTestRunner クラス run() testはunittest.TestSuite unittest.TestSuite.__call__を見てみよ う。
django.core.management.commands.test.py handle() ↓ test_runner.run_tests() ← get_runner() ↓ django.test.runner.py DiscoverRunner
run_tests() ↓ run_suite(suite) ← build_suite() ↓ run(suite) ← self.test_runner() ↓ cpython.Lib.unittest.runner.py TextTestRunner run(self, test) ↓ cpython.Lib.unittest.suite.py TestSuite test() == TestSuite.__call__() == TestSuite.run() コマンド紹介 - test unittest.TestSuite クラス https://github.com/python/cpython/ blob/3.11/Lib/unittest/suite.py#L83 unittest.TestSuite.runを実行している。
django.core.management.commands.test.py handle() ↓ test_runner.run_tests() ← get_runner() ↓ django.test.runner.py DiscoverRunner
run_tests() ↓ run_suite(suite) ← build_suite() ↓ run(suite) ← self.test_runner() ↓ cpython.Lib.unittest.runner.py TextTestRunner run(self, test) ↓ cpython.Lib.unittest.suite.py TestSuite test() == TestSuite.__call__() == TestSuite.run() コマンド紹介 - test unittest.TestSuite クラス run() https://github.com/python/cpython/ blob/3.11/Lib/unittest/suite.py#L102
django.core.management.commands.test.py handle() ↓ test_runner.run_tests() ← get_runner() ↓ django.test.runner.py DiscoverRunner
run_tests() ↓ run_suite(suite) ← build_suite() ↓ run(suite) ← self.test_runner() ↓ cpython.Lib.unittest.runner.py TextTestRunner run(self, test) ↓ cpython.Lib.unittest.suite.py TestSuite test() == TestSuite.__call__() == TestSuite.run() コマンド紹介 - test unittest.TestSuite クラス run() 自身をforループで回している。 TestSuiteの一つ一つは、 TestSuiteまたはTestCase。 forループでTestCaseを一つ一つ実行。
django.core.management.commands.test.py handle() ↓ test_runner.run_tests() ← get_runner() ↓ django.test.runner.py DiscoverRunner run_tests()
↓ run_suite(suite) ← build_suite() ↓ run(suite) ← self.test_runner() ↓ cpython.Lib.unittest.runner.py TextTestRunner run(self, test) ↓ cpython.Lib.unittest.suite.py TestSuite test() == TestSuite.__call__() == TestSuite.run() ↓ django.test.testcase.py TestCase run() コマンド紹介 - test DiscoverRunnerが処理の中心 Pythonのunittestを実行 unittest.TextTestRunner django.test.runner.DiscoverRunner unittest.TestSuite
引数: コマンド紹介 - test
引数: • --parallel [N] • -b コマンド紹介 - test
引数: • --parallel [N] ◦ 並列処理 ◦ multiprocessingを使用 ◦ test_suite
が、 ParallelTestSuite になる。 https://github.com/django/django/blob/stable/3.2.x/django/test/runner.py#L351 コマンド紹介 - test
引数: • -b ◦ 成功したテストからログの出力をしない。 ◦ unittestの一機能 ◦ 標準出力・標準エラー出力を、一時的にio.StringIO()に保 持する。
https://github.com/python/cpython/blob/main/Lib/unittest/result.py#L24 コマンド紹介 - test
引数: • --parallel と -b はテストの高速化に一役買うことができる。 コマンド紹介 - test
引数: • --parallel と -b はテストの高速化に一役買うことができる。 • しかし、--parallel と -b
は同時に使うことができない。 コマンド紹介 - test
引数: • --parallel と -b はテストの高速化に一役買うことができる。 • しかし、--parallel と -b
は同時に使うことができない。 • ただし、それは3系までの話。 コマンド紹介 - test
引数: • --parallel と -b はテストの高速化に一役買うことができる。 • しかし、--parallel と -b
は同時に使うことができない。 • ただし、それは3系までの話。 • 4.0から同時実行可能になる。 https://docs.djangoproject.com/en/4.0/releases/4.0/#tests コマンド紹介 - test
Agenda 1. コマンド紹介 a. コマンドが実行されるまで b. shell c. test d.
migration関連 2. カスタムコマンド a. 概要 b. 作り方 c. 活用例 manage.py 深堀り
概要: Django でモデルに対して行った変更 (フィールドの追加やモデルの削除 など) をデータベーススキーマに反映させる方法です。 https://docs.djangoproject.com/ja/3.2/topics/migrations/ コマンド紹介 - migration関連
• migrate • makemigrations • showmigrations • sqlmigrate • squashmigrations
• 🆕 optimizemigration コマンド紹介 - migration関連
• migrate • makemigrations • showmigrations • sqlmigrate • squashmigrations
• 🆕 optimizemigration コマンド紹介 - migration関連
• migrate ◦ (makemigrationsコマンドで作成した) マイグレーションファイルを データベースに適用、またはロールバックする。 コマンド紹介 - migration関連
• migrate • migrate <app_label> <migration_name> ◦ <app_label> ▪ 指定したappのみ実行
◦ <app_label> <migration_name> ▪ 指定したappの指定したmigrationまで実行 ▪ 0001などprefixで指定できる。zeroは全て未実行の状態に戻す。 コマンド紹介 - migration関連
• migrate • --fake a. 実際にはデータベースへの変更はせず、 b. django_migrationsテーブルへの追記のみ行い、 c. マイグレーションファイルは適用したことにする。
コマンド紹介 - migration関連
• migrate • 🆕 --prune ◦ 存在しないマイグレーションを django_migrations テーブルから削 除する。
◦ (squashmigrationコマンドで) 削除されたマイグレーションファイル をデータベースに反映するときに使用する。 コマンド紹介 - migration関連
• 🆕 optimizemigration • optimizemigration <app_label> <migration_name> ◦ 指定されたmigrationを最適化する コマンド紹介
- migration関連
コマンド紹介 - migration関連 optimizemigration
コマンド紹介 - migration関連 python manage.py optimizemigration asa 0001 optimizemigration
コマンド紹介 - migration関連 optimizemigration
コマンド紹介 - migration関連 • 自動ロールバックスクリプト紹介 ◦ 使いどき ▪ 本番環境と開発環境に紐づいたブランチで、migrationに差分が 出たとき
コマンド紹介 - migration関連
コマンド紹介 - migration関連
コマンド紹介 - migration関連
Agenda 1. コマンド紹介 a. コマンドが実行されるまで b. shell c. test d.
migration関連 2. カスタムコマンド a. 概要 b. 作り方 c. 活用例 manage.py 深堀り
Djangoではコマンドを作ることが出来ます。 自作したコマンドは元々用意されているコマンドと同様にmanage.pyから実行 することができます。 Writing custom django-admin commands カスタムコマンド - 概要
Agenda 1. コマンド紹介 a. コマンドが実行されるまで b. shell c. test d.
migration関連 2. カスタムコマンド a. 概要 b. 作り方 c. 活用例 manage.py 深堀り
カスタムコマンド - 作り方 カスタムコマンド - 作り方 プロジェクト作成
カスタムコマンド - 作り方 カスタムコマンド - 作り方 アプリケーション作成
カスタムコマンド - 作り方 カスタムコマンド - 作り方 setting -> settings
カスタムコマンド - 作り方 カスタムコマンド - 作り方 コマンドの置き場所を作成
カスタムコマンド - 作り方 カスタムコマンド - 作り方 ohayo.py作成
カスタムコマンド - 作り方 カスタムコマンド - 作り方 BaseCommandを継承
カスタムコマンド - 作り方 カスタムコマンド - 作り方 引数を設定
カスタムコマンド - 作り方 カスタムコマンド - 作り方 処理内容を記述
Agenda 1. コマンド紹介 a. コマンドが実行されるまで b. shell c. test d.
migration関連 2. カスタムコマンド a. 概要 b. 作り方 c. 活用例 manage.py 深堀り
• モデルを参照する必要がある処理 • 非同期で実行したい、時間がかかる処理 • 定期的なバッチ処理 カスタムコマンド - 活用例
• モデルを参照する必要がある処理 • 非同期で実行したい、時間がかかる処理 → ユーザが活動データをCSVでダウンロードする。 カスタムコマンド - 活用例
カスタムコマンド - 活用例 • ユーザが活動データをCSVでダウンロードする User ECS (Django) S3 RDS
User 昼寝でも してよう
カスタムコマンド - 活用例 • ユーザが活動データをCSVでダウンロードする User ECS (Django) SQS Lambda
ECS (Django 別タスク) S3 RDS User 1. CSV作成リクエスト 2. キューに登録 4. ECS実行 3. リクエスト 成功 5. DBからデータを取得し、 CSVを作成 S3にアップロード (重い処理) 6. CSV取得
カスタムコマンド - 活用例 • ユーザが活動データをCSVでダウンロードする User ECS (Django) SQS Lambda
ECS (Django 別タスク) S3 RDS User 1. CSV作成リクエスト 2. キューに登録 4. ECS実行 3. リクエスト 成功 5. DBからデータを取得し、 CSVを作成 S3にアップロード (重い処理) 6. CSV取得
カスタムコマンド - 活用例 • ユーザが活動データをCSVでダウンロードする User ECS (Django) SQS Lambda
ECS (Django 別タスク) S3 RDS User 1. CSV作成リクエスト 2. キューに登録 4. ECS実行 3. リクエスト 成功 5. DBからデータを取得し、 CSVを作成 S3にアップロード (重い処理) 6. CSV取得
カスタムコマンド - 活用例 • ユーザが活動データをCSVでダウンロードする User ECS (Django) SQS Lambda
ECS (Django 別タスク) S3 RDS User 1. CSV作成リクエスト 2. キューに登録 4. ECS実行 3. リクエスト 成功 5. DBからデータを取得し、 CSVを作成 S3にアップロード (重い処理) 6. CSV取得
カスタムコマンド - 活用例 • ユーザが活動データをCSVでダウンロードする User ECS (Django) SQS Lambda
ECS (Django 別タスク) S3 RDS User 1. CSV作成リクエスト 2. キューに登録 4. ECS実行 3. リクエスト 成功 5. DBからデータを取得し、 CSVを作成 S3にアップロード (重い処理) 6. CSV取得 ecs = boto3.client("ecs") ecs.run_task( overrides={ "containerOverrides": [ { "command": ["python", "manage.py", "ohayo"] } ] } )
カスタムコマンド - 活用例 • ユーザが活動データをCSVでダウンロードする User ECS (Django) SQS Lambda
ECS (Django 別タスク) S3 RDS User 1. CSV作成リクエスト 2. キューに登録 4. ECS実行 3. リクエスト 成功 5. DBからデータを取得し、 CSVを作成 S3にアップロード (時間がかかる処理 ) 6. CSV取得
カスタムコマンド - 活用例 • ユーザが活動データをCSVでダウンロードする User ECS (Django) SQS Lambda
ECS (Django 別タスク) S3 RDS User 1. CSV作成リクエスト 2. キューに登録 4. ECS実行 3. リクエスト 成功 5. DBからデータを取得し、 CSVを作成 S3にアップロード (時間がかかる処理 ) 6. CSV取得
• コマンド紹介 ◦ shell ▪ appにアクセスできるpythonインタラクティブモード ◦ test ▪ 4系から--parallelと-bを同時実行できる。
◦ migration関連 ▪ 自動ロールバックスクリプトはDB操作なので慎重に • カスタムコマンド ◦ 非同期処理に使える。 Wrap up - まとめ
お聞きくださりありがとうございました! Thank you - 感謝
DjangoCongress JP 2022 スタッフのみなさま オフラインでのイベント運営ありがとうございます。 同僚・会社 登壇にあたり、サポート・アドバイスありがとうございました。 Thank you -
感謝
Copyright © 2022 RevComm Inc. コミュニケーションを再発明し 人が人を想う社会を創る
Copyright © 2022 RevComm Inc. 電話営業や顧客応対を自動録音、AIが文字 起こし、解析・可視化することにより、顧 客と担当者が「何を」「どのように」話し ているか分からない、というブラックボッ クス問題を解消し、商談獲得率・成約率の
向上やセルフコーチングを後押しします。 Service ビジネス向けスマート電話
Copyright © 2022 RevComm Inc. Culture フルリモート フルフレックス プロフェッショナル 自由と責任を
尊重する文化
Copyright © 2022 RevComm Inc. Language and tools 言語/ フレームワーク
インフラ/運用管理 コミュニケーション
Copyright © 2022 RevComm Inc. www.revcomm.co.jp/careers/ ただいまRevCommでは エンジニアを絶賛大募集中です。