名もなき未知

エンジニアリングとか、日常とかそういうのをまとめる場所。アクセス解析のためGAを利用、Googleに情報を送信しています。商品紹介のためAmazonアフィリエイトを利用、Amazonに情報を送信しています。記事に関しては私が書いていない引用文を除いて自由にご利用ください。

DjangoCongress JP 2023 に参加しました

寝付けず午後のセッションからの参加となりました。新旧のユーザーがたくさんいて楽しかったように思います。

ページ

DjangoCongress JP 2023

https://djangocongress.jp/

ハッシュタグは #djangocongress でした。

https://twitter.com/hashtag/djangocongress?src=hashtag_click&f=live

発表メモ

ちゃんとメモをとっていないのでなんともですが、適当に…

というかパソコン忘れてしまって積んでいたので悲しかった(明日はPHPカンファレンスに行くので今晩はしっかりと充電します)

Djangoアプリに作り込んで学ぶ脆弱性SQLインジェクションXSS篇)

資料公開されてました。

https://ftnext.github.io/2023-slides/djangocongressjp/learn-vulnerabilities.html

途中からしか聞けてないのですが、対策としてエスケープがしっかりと求められるなという印象でした。 確かに laravel のときも blade ではいい感じにやれますが、多少エスケープを意識するケースがあったので Web の基礎として身につけておきたい知識だなと思っています。 ORM の話はなかなか難しい部分もありそうな気がしますね、パフォーマンスチューニングが厳しそうなところでは生のクエリを書かざるを得ない気がするので(クエリが複雑なケースなど)、使える場所については ORM が有効だと思いますが、ORMでないケースの場合に対しても備えが必要なのかな? と思っています。 (とはいえ、現在は ORM もかなり賢く動く感じにはなっているので、どれくらい当てはまるケースがあるのかはわかりませんが…)

Banditは知らなかったので後で関連スライドとか読んで調べようと思いました。 私は Django Rest Framework 使ってますが、そういえば関連ツールについて知らないので周辺知識つけないとな〜という意識が生まれました。

Web に関しては PHP での実例が結構ありそうなので、PHP 関係で Python + Django, FastAPI, Flask... などで言えそうなものも概念的に抑えられるといいのかなとちょっと思いました。 一方で Python ユーザー向けに Django で実例を紹介していくというのはそういえば見たことがなかったので学びでした。 他の言語の場合でも MVC ライクなフレームワークがある場合、一回問題があるケースを再現してみたり作ってみるの勉強になりそうだなという発見がありました。

django migrationで学ぶデータベース設計

資料公開されてました

https://github.com/aodag/djangocongress2023/blob/main/djangocongress2023-database-migration.pdf

一番印象が強かったのが、複数アプリケーションでモデルを持った場合のマイグレーション戦略が気になりました。 同じモデルを複数のアプリケーションで持った場合、どこからマイグレーションすべきなのかは悩ましい問題ではあります。

これに対してモノリシックにモデルを共有しながらやるのか、それとも境界をうまく設けてマイクロサービスにして同じモデルはHTTP通信などでうまく取るのか、みたいな戦略がありそうだなと思いながら聞いていました。 どちらに関してもワークするような気がしているのですが、どっちも試してみて良し悪し…みたいなのは気になります。

また発表の中にあったテーブルロックがかかるケースについては注意しとこうかなーと思います。 RDBMS によってもクセがありそうな部分なので色々検証してみなければなあと思いました。検証すると小さいLTとか、トークにはできそうなので、ネタが発見されたのかも。 (ただ RDBMS ごとのクエリ操作とかは今だと1つ知ってれば AI がある程度等価変換できないかな、とは期待しています。現代の世の中だとまだ覚えないといけなさそうですが…)

それと各DBの主要なバージョンアップくらいは追わないとなぁと思いました。Webでやっている以上データストレージに対しての意識を失えない状況だと思うので、サマリだけでいいので情報収集しないとなーという気持ちです…(たまに気が向いたときに見ているけど、おそらく定期的に情報収集するタイミングを設けたほうが良い)

GraphQLライブラリStrawberryのDjangoプロジェクトへの適用事例: 実践から学ぶヒントと戦略

資料公開されてました。

https://docs.google.com/presentation/d/e/2PACX-1vS9SlFgPdZgdo4kcrGnHb7JJ88u2s1P7Pfgi4E0_zbKv6nfDtZ1MUzme6q9lHJ7Gl4DolvzQaBxaJZq/pub#slide=id.g27d4d80d005_0_338

PythonのGraphQLライブラリ周りの現状をそもそも知らなかったので、そこから勉強になったなあと思っています。 Django に対応しているっていうのもなんか意外でした。Django = REST みたいな発想をそもそも捨てないとなぁ…。

しっかりと GraphQL 実装したことがなかったので、実装方針やディレクトリ構成についても参考になりました。 業務で使う機会はいつになるのやら、と思っていますが自分用のアプリのPoCとかで試せないかなーと思っています。使っていかないと覚えられないので…。 またセキュリティ対策みたいな部分もたしかに無限に深く取りそうな予感はしていて、回避策として色々あるんだなと思いました。問題があるケースと回避策については理解深めたいなぁ。N+1 問題はやっぱり起こるんだなと思った反面、応答性能に対しても少し考えをめぐらされました。

Strawberry も良さそうでしたが Ariadne も面白そうな感じで、アプローチが異なるのでこちらも使ってみてアプローチのとり方の違いによる指針の違いなども理解できないかなーと思っています。

とにかく、触って覚えたい…。

LT

箇条書きで…

  • カンファレンスにどうしてこれないかはかなり考えさせられる
    • 自分の周りだとライフステージの変化的な側面で来れない人が増えつつある
    • そういう意味で行けるうちに行っておいて知り合いをしっかりと作るのが大事なのかも
    • 研修とかに組み込んでしまうのも一つの手である
  • 大規模案件のDjangoの考え方すごかった
    • setting.py の徹底活用
  • 自分が必要なものを作る DIY
    • そういえば自分は久しくしていないなという気持ちになった
    • 文字を画像にしてしまった、とあったが iPhone などは読み取り性能が凄まじいので別にそっちに頑張らせるでもいいのかなと思った
      • windows でも OCR できるので大丈夫かなーとか(これは何度か試してる感じ、どうも精度がちょっと微妙なところはある)

公開された資料を読んだ感想

ザクザクっと読んだ感じです。

ここに追加されていっています。 https://django.connpass.com/event/295303/presentation/

Djangoテンプレートエンジンを使いこなそう!

  • Django のテンプレートエンジンは変更できるが、組み込みの機能はDjangoテンプレートに依存している
    • 併用もできる
  • フィルター便利そう
    • jinja2 でかなり使ってたけど、Djangoのテンプレート機能との差異は知らないので知っておきたい
  • jinja2 に似たよううな機能がかなり使えそうな感じ
    • 文章生成とかで役立てたいかも

Djangoを仕事で使っていくために学んだこと

  • 公式資料読むべし
  • jaでの検索とenでの検索が異なるので、困ったらenで調べる
  • dbshell を確認してみる
  • QuerySet の性質とか知らなかったので勉強になった
  • select_related も知らなかったので勉強になった

Djangoのパスワードハッシュについて

  • 総当りでのパスワード施行の速度が相当上がっている
    • 数年前と比べて計算性能が上がっているため
  • OWASP Cheat Sheet 便利そう
  • Django 4.2 で使えるハッシュ関数が変更されている
  • パスワード形式によって色々ありそうな感じ
    • メモリの消費量など
    • Argon2idを覚えておけば良さそう
    • 各種選定基準はしっかりと抑えておきたい

Djangoを活用した酪農牛の遺伝子検査結果システムの開発と知見について

  • ドメイン知識、ドメイン分析の大切さを改めて実感
    • それによってデータの持ち方も変わってしまう
  • ドメインわからない、テクノロジーわからないの2つのわからない問題は作らない
    • どちらかはわかる状態にしておく

Djangoアプリケーション運用のリアル:問題発生から可視化、最適化への道

  • 問題が起きたときにアプリケーションをまず観測できる状態にしておく
  • ログは 5W1H
  • ruffというフォーマットツール
  • 問題が合った時にすぐ通知してほしい → Sentry を導入する
    • APM も Sentry にはある
  • カスタムメトリクスは DataDog で

データ分析者にとってのDjango: StreamlitやDashとの比較

  • 職業訓練校でも Python, Django が教えられる(学べる)時代になっている
    • 一昔前の職業訓練校の状況とはかなり変わってきていることがわかる
  • Djangoが大規模向きでファイル数も多くてハードルが高いと感じる問題
  • Streamlitはいつの間にかSnowflakeが買収していたらしい
  • DashからReactへ、みたいな道もありそうな気がするという提案
  • 実現できているものを考えると小規模やプロトタイプの場合、StreamlitやDashの機能で十分作り込める
  • 一方である程度の規模を超えてきてカスタマイズが増えてくるとDjangoの優位性が上がってきそう

感想

実は Neo4j の話聞きたかったんですが、ちょっと眠れなかったのが原因で家から出れず聞けませんでした…。 しかし、全体的にはもう少し周辺分野とか ruff などの新しいツールとか抑えなければいけないもの、知識を改めるものもあるなぁと思いました。

また発表を聞く中でこれやってみるの面白そう!みたいなのもいくつか見つかったのも良かったです。 実践していこう…