202306のブックマーク
202306付近のブラウザタブをサルベージ。
202305のブックマークは 202305のブックマーク にあります。
202307のブックマークは 202307のブックマーク にあります。
Reactにおける再利用とテストを容易にする疎結合なUIを目指す3つのTips - zenn.dev
みてねの動画再生にHLSを導入した話. こんにちは、みてねプロダクト開発部 基盤開発グループ SREチームの尾関です。 | by fanglang | May, 2023 | mitene / FamilyAlbum Team
人工衛星の軌道をPythonでアニメーションにしてみよう - Qiita
Dockerfile自信持って書けてますか?おすすめlintツール 「hadolint」について紹介 - Qiita
【React】useEffect解体新書 - Qiita
これ、 useEffect(() => { ... }, []) ってかんじの呼び出し方にしか言及がなくて、変数の監視について言及してないから片手落ち感はあったなあ
stateでもpropsでもよいんだけど、再度レンダリングが必要になる値の変更が走った場合に副作用(effect)をかけるよ〜〜ってのがuseEffectの正しい説明なのでは?と思ったりはしている(けど周囲に触れ回るほど自信はできてない)
useEffect(() => { someStore.subscribe(); return () => someStore.unsubscribe() }, [someStore.state]) みたいな監視は上記ケースにハマる(けどReact v18だと useSyncExternalStore() にしてくれ〜〜って方向になってるけど)
useEffect(async () => { const bookmarks = await fetch('/bookmarks'); setBookmarks(bookmarks); }, []) みたいにmount時にデータを取得するだけ、みたいな初期化処理もそうね
たとえば検索クエリによってeffectの結果が変わるならstateないしpropsを監視して再レンダリング時に読み直すけど、そうじゃなければ不要でしょ?みたいなお話
一方でcomponent内にあるUIパーツとかで発生し得るeventは各々想定した上でhandlerを立てて処理する、みたいな区分け感
そういった整理が https://react.dev/learn/synchronizing-with-effects#what-are-effects-and-how-are-they-different-from-events に書いてある印象だった(まあ上記の記事より後にできたリファレンスエントリなので、後出しジャンケンですけどね)
(これ、ほぼ #初稿 なのでページに書き直したいわね......😇)
ぜんぜん関係ないお話だけど、 https://react.dev/learn/synchronizing-with-effects#step-1-declare-an-effect を読むとReactのrefの理解も深まるわね......みたいなお気持ちになった(たとえば useRef でrefを作って操作だけhandlerとかに書かせておいて、JSX内のタグに <video ref={ref} /> みたいに渡せば操作できるんだ〜〜的なね)
Scrum Guide Reordered(日本語版) | Ryuzee.com
フワちゃん「中1の私が書いた反省ゼロの反省文を披露するよ」 | かがみよかがみ
Hooks時代のReactライフサイクル完全理解への道 - zenn.dev
Functional Componentは関数として冪等に評価された後にレンダリングされるものなので、propsとかstateとかeffectとかの依存が変化して再評価が必要なときにunmountされてmountされ直す的な感覚なのよねおそらく
厳密な振る舞いはこれ書いた20230614時点では知らないんだけど、感覚としてはそんなかんじで再評価をするコンテンツをmount時にsubscribeしている的な実装コンセプトかな?と思ったりしてる(hooksなどの概念も含めて考えると)
Next.jsから学ぶWebレンダリング ~React誕生以前からApp Router with RSCまでの流れ~ - zenn.dev
bholmesdev/simple-rsc: A simple React Server Components implementation that you can build yourself 🙌
読みたいけどなんか読みにくいな......
You Might Not Need an Effect – React
Synchronizing with Effects – React
スマホサイズしか考慮しない怠惰な開発を実現する【Next.js + Tailwind CSS】 - zenn.dev
正しく使う ReactContext - zenn.dev
Next.js + styled-componentsで発生したFOUCの対処方法 + α - zenn.dev
Referencing Values with Refs – React
React.ComponentProps 型を積極的に使おう - zenn.dev
これ覚えておこう......
コメントでされているrefを受け付けるか否かのお話、コンポーネントライブラリみたいに公開する場合はそうかもしれないけど、refを注入されたくないケースとかあるのかな......?(refを注入されることを想定しちゃダメなケースがあまり思い浮かばなかった)
VSCode で 定義へ移動などしたあとに 戻る には Ctrl + - (Mac) だ - zenn.dev
いま最もほしい情報だったこれ
【Next.js】みんな next.confing.js にどんなプラグイン入れてる? - zenn.dev
package.json から依存部分の key だけを抜き出す jq ワンライナー | blog.ojisan.io
毎回忘れるのよね〜〜 cat package.json | jq -r ".dependencies | keys[]" | tr '\d' ' ' でdependency packagesをspace繋ぎで拾うやつ
エリート DevOps チームであることを Four Keys プロジェクトで確認する | Google Cloud 公式ブログ
【React】matchMedia で理解する useSyncExternalStore - zenn.dev
これは window.matchMedia(mediaQuery) のようにmediaQueryという引数をもらう話なので、 window.innerWidth のような変化する値を観測する場合は何かしらのstoreをwrapしたいのだけど......
jotaiとかに window.innerWidth を打ち込めば実現できるかもなあ
useLayoutEffect – React
あんまり使うシーンがイメージできてない......どっかで理解したい
なぜReactは標準でComponentをmemo化しないのか? - zenn.dev
Reactのmemo機能って不用意に常用するとメモリ効率悪そう......みたいに思ったけど、多くの場合では再レンダリングする方がコスパよいかも的なお話になってたのは納得感あった
まあそもそも再利用して効率よいケースって限られるからオプトインするくらいがちょうどよさそう
サーバーサイドにおけるデータキャッシュでも闇雲に使うと危うく、正しい用法・用量が必要なので
React の新しい概念「トランジション」で React アプリの応答性を改善する - 30歳からのプログラミング
リアクティブプログラミングへの理解がイマイチだったのでまとめてみた - UUUMエンジニアブログ
リアクティブプログラミングとは何だったのか - Qiita
何だったのか?というか現在(2016年ないし2019年当時)に存在するフレームワークで表現するにはRxですら煩雑じゃん?ってお話なのかなあこれ
Rxってめちゃ汎用的でObservableな構造に当てはめられる値ならなんでも監視可能である、ってかんじだと思うけど、そのためにリクエストをObservableにしてレスポンスをObservableにして双方をそれぞれsubscribeして〜〜っての流れは双方向性はあれど面倒なのかもねえ、みたいな気持ちはわかる
そう考えるとReactのFunctional Componentとかは基本的に単方向(props/stateからレンダリングするだけ)なのでシンプルだし、逆方向は自分でeventでもstreamでもよいから監視してくれ〜〜ってなる程度なので全ての構成要素が監視し合う構造じゃなくたってよくなったし、それ普及してくれれば余計な複雑さに出会う機会は減るかもな......と思ってくださるかもしれないな、なんて思ったりはした
まあでもpropsが変わったことをどう検知するの?となると、Functional Componentも何かしらの依存している値が監視された結果によって再レンダリングが走りますねえ
ReactのFunctional Componentはhooksを用いてstateに依存させてね!ってかんじなので、それに則ってサクッと監視し合う構造が作れるようにしておけば楽だとは思いますよね(たぶんReact向けにリアクティブさを実現するパッケージだと整備されてそうだし、そういう再利用で楽はできそう)
ちなみにpropsはFunctional Componentの外から渡される引数でしかないので、決まった値が渡ってくるだけで監視する責務はないね〜〜みたいな前提だと思っています
あと、Rxのようにstateを一元化してpublishしておき各所でそれをsubscribeする構造にすることが、データの不整合さを取り除く(というかstateを管理する側で不整合になる更新にも適切に振る舞うことで正しく保つ)という意味でも重要さはあるんだけど、そこまでしなくてもよい場合も多々あるのでね......
そう考えるとuseState(というかReact hooks)は非常にカジュアルに扱えて便利よ......
【翻訳】あなたが求めていたリアクティブプログラミング入門 - ninjinkun's diary
元ネタも一応読まなくては......と思って読んでた
すべてをStreamにすると一貫して扱える、みたいなお話はわかる( 202306のブックマーク#648f604405f7280000850500 で言及してる感覚)
あと「Elmすごいね」って言及してるくらいだし、こういうパラダイムをシュッと書くためのプログラミング言語の適性ってのはたしかにあるよね〜〜そうよね〜〜〜みたいなことよねたぶん
未定義についてもう少し -- 部分関数、三値論理、超越者 - 檜山正幸のキマイラ飼育記 (はてなBlog)
FRP(関数型リアクティブプログラミング)について理解したくて、 Q. (関数型)リアクティブプログラミングとは何ですか? | POSTD を読んでたときに差し込まれた Haskell/Denotational semantics - Wikibooks を読んでたときに登場した$ \bot(undefined, 未定義)の感覚を理解したくて検索してたらヒットした
$ \botに関しては、ある意味Promiseをawaitしてる感覚なのかもしれないな......
前提として関数というものは、たとえば$ f(x) = yのような式($ f:x \rightarrow yという写像とも言える)に$ x \in Xのような集合$ Xに含まれる値が入力されれば$ y \in Yのような集合$ Yに含まれる一意の値が返るように対応している(=全域関数である)場合もあるし、そうならない(=部分関数である)場合もある
cf. /mrsekut-p/部分関数
つまり、部分関数は集合$ Xの中でも返せない域(=未定域)が存在している状態にある関数である、ということ
じゃあ未定域を確定させるためにはどうすれば??というと、そんな術はなくて確定しないから関数の処理は停止しないんですよね(不停止性)
まあ不停止性/停止性の細かいお話はほぼ何も読んでないので割愛しますが、Promiseを待つ状態がなんとなく未定域な$ x(つまり$ f(x) = \botになってしまってる状態)っぽかったな......という感覚のお話でした
部分関数というか、副作用で確定する$ f(x)みたいな関数だね!みたいな感覚
FRPライブラリを作ってわかった、FRPの意味と意義 - Qiita
FRPという概念の存在意義を理解する上で、以下がよい言及だった
RPにおいて副作用を持つ関数は依存関係を見た上で、特別扱いしなければならないのです。理想を言えば、外に追い出せばいいですよね、と言う訳で、副作用と作用を厳密に切り分けられる、FPの出番になります。
Q. (関数型)リアクティブプログラミングとは何ですか? | POSTD
これ翻訳記事なのもあって表現も含めわかりづらいんですけど、最後にあるbehaviorに関する言及は少し参考になるかもしれないな......と思ったけど、やっぱよくわからん
表示的意味論を使って、改めてbehaviorとは何か考えてみたところ、すぐに次のように理解することができました。 すなわち、命令型で計算すると時間的に離散するというbehaviorの性質とは、 behaviorそのものを表すというよりむしろ、あるスタイルをもった 機械(machine) に対する調和を意味する、ということです。 私は、“(連続した)時間を表す機能”という表現がもっともシンプルで正確にbehaviorを言い表していると思います。
まあbehaviorを手続き的に各所に書くと連続的に書けない(=離散的になる)ので、リアクティブプログラミングという概念を用いれば連続して書けるし、それが連続した時間のようなものである本来のbehaviorの姿を表現したプログラムになる、みたいなことなのかな
で、副作用を排除してある関数プログラミングと組み合わせれば、時間とともに変化する値を購読したままに関数に流して利用できて便利〜〜ってことなんだろうなあ
そう考えると2023年現在に存在する各種ライブラリは、当時に比べれば格段に扱いやすくなっていってるからありがてえ〜〜となるねえ
Result型とESLintでエラーハンドリング漏れを検出する - zenn.dev
「なるほどな〜〜」と思いつつ、これがベストなのか......?と思うと微妙な表情になるのだけど、少なくとも現時点におけるベターな選択肢のひとつではある気はした
Result型の中身を見ると「200 OKで応答して処理結果をdata内に含めるAPIレスポンスっぽい」感覚になったので、UsecaseというAPIを書いてるわね〜〜とは思った
となると二度手間的ではあるんだけど、そもそもクライアントとサーバーを分けてる構成なら各々で構えておくのは当然やんな......その考え方モノリシックやで......!というセルフツッコミが発生した
フロントエンドアーキテクチャの話: Resource Setの紹介 - zenn.dev
これも「なるほどな〜〜」と思ってて、サーバーもクライアントもこういうModel層の構造がさほど変わらずに大事やんな......と思わさせる内容だった
となると共通化できへんのかな......と思うのは怠惰なエンジニアの性であるのだけど、型の定義くらい共通したものを読みたくはなるよね〜〜みたいな気持ちだった
yarn と npm の栄枯盛衰 - Nullable<T>
PnP(Plug'nPlayというrequireするファイルをひとつにまとめつつダウンロードしたzipファイルのまま参照できるようにしてデプロイ高速化を狙うやつ)とかZero-Installs(プロジェクトのrepoにnode_modulesをcommitして保持しておいちゃえ!ってやつ)が最近のyarnの目玉だけど、そこまで魅力的かは微妙......
@yarnpkg/shellもnpxでできるって考えるとそこまででも......
yarnもpnpmも速度的には魅力的だけど、CI/CDにおいてそこまで効率的になるのか?みたいな気持ちはある
それこそPnPやZero-Installsは効くかもしれないけど、昨今は適度にキャッシュするし、Edgeに撒くとしてもDeployが都度されるわけでもないからなあ......みたいな
サーバーレスアプリだと効くのだろうか......でもこれもいわゆるイメージに起こしておいて実行時に起動する構成のはずよね......
corepack is 何? - zenn.dev
便利そうだけど、結局npmなのかyarnなのかpnpmなのかを意識しなくちゃいけないなら必要なのか......?の気持ちが残る
wantedly.com を Next.js に移行した話 - 背景・移行でやったこと | Wantedly Engineer Blog
【Next.js】みんな next.confing.js にどんなプラグイン入れてる?
#あとで読む
React Hooksでテストをゴリゴリ書きたい - react-reduxやaxiosが使われているような場合もゴリゴリテストを書きたい - zenn.dev
React + TypeScriptでpropsと型を便利に扱うTips集 - zenn.dev
諸々参考にすべきで、特にReact.ComponentPropsとFunctional Componentで定義する最後の引数にスプレッド演算子(...props)をつけて残りのpropsを受け取ってから return <button {...props} /> みたいに流すのは便利
ComponentProps<ArticleList>でpropsの型を解決できるので、わざわざコンポーネント側でpropsの型を公開しなくても済むしね
安心してフリーランスを続けるために「各種組合」を知ろう! | フリーランスの道しるべ
そういえば以前、「組合もそうだけど商工会議所とか入るといいよ」と勧めてくれたことを思い出して調べてた
いわゆる積み立てとか横の繋がりとか様々〜〜みたいなね
GitHub - kamataryo/bbox2svg: A demonstration to export SVG from MapboxGL/MapLibreGL Map
標準のマップ(ここではGeolonia Mapsというソフトウェアを使ってレンダリングされたやつ)から指定した領域の画像を切り出すデモ
これを参考に何か作りたいな〜〜と思ったけど、何をつくるかな......🤔
とりあえず倣いながらMapbox GLとかMapLibre GLとかのマップ描画エンジンを使うように書いてみてもよいかもめ
MapLibre GLを使用した TileServer GL(地図タイルサーバー)を立ててみた - Qiita
https://github.com/maptiler/tileserver-gl がMapLibre GLに対応したらしく、それを使って自前でhostするためのサーバーを立てる流れ
https://tile.openstreetmap.jp/
openstreammap.jpがとりあえずサンプルとして使えるTileServer GLで立てたテスト用サーバーだと思われる
どこかに利用規約が書いてあるwikiがあったはずだけど、見失った......
これだ JA:タイル利用規約 - OpenStreetMap Wiki
JA:OpenStreetMapの利用 - OpenStreetMap Wiki も読んでおきたい
Signalって何?jotai-signalからのjotai-uncontrolled、これすごいです - zenn.dev
あ〜〜リアクティブプログラミングで出てくるSignalって概念がめちゃわかった〜〜〜ってかんじ(別の効能があった感)
値の変化だけ書き変わるので他の部分のレンダリングに影響しないのこれ......?????
とはいえ、ReactでSignalを扱いたいならjotai-signalよさそうだし、そもそもjotaiってよさそうですね https://jotai.org/
jotai-uncontrolledもすごいすね......仮想DOMをすっ飛ばすってのをReactに混ぜ込む発想とかあるんだ......みたいな感覚だった
その後が書かれていた
jotai-signalのその後 - zenn.dev
jotaiに関しては Reactを最上位から常に再レンダリングする、できちゃうんですそんなことも、Jotaiならね - zenn.dev もおもろい
えっ comp() ってのでFunctional ComponentをAtomにしてるの......何これ......
というかpropsすらAtomで追い出してるようなものなので、Signalに包まれたAtomが埋め込まれたJSX(実際に当てられてる型はReactNode)でしかない
簡略化してるけど、以下のような comp() を宣言してAtomにcallbackを埋め込んでメタプログラミングしてるかんじ(デモでの実装は、推論させるために type Signal って指してる部分が詳細だったり any で取り急ぎ回避してる部分があったり、もう少し厳密に型をパズルする必要はあるけど)
code:tsx
const comp = ( fn: ($: Signal) => ReactNode ) => atom(
(get, { setSelf }) => fn((a, ...args) => args.lenght ? setSelf(...args) : get(a)),
(_, set, a, ...args) => set(a, ...args)
)
まあ正直、このへんってReactのパラダイムをあんまり利用してないので、ざっくりReactと言えるけど本質的にReactと言えてるのか......?とは思ってしまった
あくまでjotaiというstoreとReactで拡張されたJSXを返すFunctional Componentという構成要素になってて、その薄さだったらFunctional Componentの部分を代替するものが生まれてもおかしくはない気もする
でも、JSXを返すFunctional Componentがそもそも現在のReactが主導してるパラダイムだと思うので、まあReactではあるのか......という自己解決もしてる
まあFunctional Componentがstateを直接は持たなくなったように、そういった独立性とAPIでの連携が普通になると、別にhooksみたいな公式APIじゃなくても副作用は持たせられる方向になってるやんな?と理解しておく
そう考えると、こういうstoreがReactとどう自然に連携しているかを学んでおくのは非常によいのかもしれないねえ......どっかで
Add a third party vector tile source | Mapbox GL JS | Mapbox
Mapillaryとか気になる https://www.mapillary.com/
React hooksを基礎から理解する (useCallback編+ React.memo) - Qiita
React Context APIをState、Dispatch専用に分けて使う方法 - zenn.dev
ReactのContextは上手く使いこなせなくて苦手だったんだけど、Dispatchと組み合わせるこれなら覚えられそう
いままではContextで値を渡すだけしかできないと思ってて、場合によってはuseStateをそのまま渡してなんとかしたりしてたんだけど、Dispatchを一緒に流して扱う構造にすれば便利なのね
Markdown(マークダウン)をVSCodeの拡張機能とスニペットで効率良く書く - Qiita
リストの改行時補完とかは Markdown All in One で実現できる(他にもショートカットがあれこれあるっぽい)
[Django REST Framework] Serializer の 使い方 をまとめてみた - くろのて
Serializer便利だけど、あくまでDjango REST FrameworkのやつだからSerializer上でカスタムしすぎないほうがよいわね多分
フロントエンドに秩序を取り戻す方法 - Speaker Deck
たまたまアーティファクトみたいなテキストを見返してて、読み返したけど思ったよりも陳腐化してない内容だった
使ってるOSSは2015年当時のトレンド感あるけど
アーキテクチャとか勘所とか心得みたいなものとかは2023年現在でも通用しそう
CloudflareでもFastlyでもVercelでもDenoでもBunでもService Workerでも動く - zenn.dev
Honoよさそうよね〜〜Web標準に準拠してるってのがすてき
OpenAPIとかでAPI仕様書作って一通りテンプレート生成してもらって、それぞれ中身を実装して各種実行環境でサクッと動くみたいな世界線になるのかなあ
小型のアプリなら今のアセットでもできそうだけど、どのようにModel/Domainを組織化していくかね〜〜とかは思いつつも、DenoみたいにES相当のランタイムで動く想定にしておけば流動性も担保できそうよね(えっどうだろ)
まだ他のLLとかGoとかの方が汎用的かなあ......うーん
[Python入門]多重継承:Python入門(1/2 ページ) - @IT
これ〜〜この多重継承に引っかかったんだよね最近 😇
class APIClient(APIRequestFactory, Client) で class APIRequestFactory(RequestFactory) と class Client(RequestFactory) があるようなかんじで、参照される順序が APIClient -> APIRequestFactory -> RequestFactory -> Client だと思ってたんだけど、 RequestFactory と Client が逆だったんだよね
C3線型化 ってアルゴリズムだと、共通して基底に持たれる場合は優先順位が変わるっぽい
cf. https://www.python.org/download/releases/2.3/mro/
この構造でどのバージョンのDjangoを触っているかわかるわね...... 😇😇😇
Python クラス __call__とは - AI Academy Media
def __call__() をもったクラスのインスタンスは関数みたいに扱えるみたいだけど、それclassとして定義するんだ......みたいな気分
でもPHPでもあるよねそういうのたしか(と思ったけどマジックメソッドの function __call() と勘違いしてたから違うわね)
test --- Python 用回帰テストパッケージ — Python 3.11.4 ドキュメント
Pythonランタイムにビルトインされてるテストランナーみたいなものなのかな
このへんの unittest.TestRunner とかに渡ってるのかな
cf. https://github.com/python/cpython/blob/v3.11.4/Lib/unittest/loader.py#L66
このあたり で class SomeTestCase(unittest.TestCase) みたいなTestCaseクラスのインスタンスにテストメソッドの名前を渡して unittest.TestSuite を作ってる
このへんのお話は整理して何かしらのエントリに書くとよさそうよね 👀
Pythonのunittestはどんなかんじにテストケースを走らせてるのか?を追ってみる というページだけ置いといてみる
DjangoのテストClientが返すレスポンスを調べてみる - A.blog
Django 4.0 でのお話
【Django】RequestFactoryでrequestを生成 - ITCブログ
こうやってrequestオブジェクトが作れることを知ってると便利よね
request.request() で WSGIRequest インスタンスも
Python type Class
なんかとあるクラスインスタンスを if isinstance(instance, type) って検査されてたのを見て、初見だとよくわかんなかった
結論、 type(instance) でそのインスタンスのクラスが返るんだけど、この type() って関数っぽいやつが実は class type(object) みたいな定義で object 型を継承しているらしい
そもそも type(name, bases, dict) という形式でクラス定義を読み込むビルトイン関数みたい(定義はcpythonリポジトリにC言語で書いてある)
https://github.com/python/cpython/blob/v3.11.4/Objects/typeobject.c#L3295 のあたりでparseする処理してた
で isinstance(instance, type) を渡すと全てのクラス定義は type() で呼び出されてるから、何かしらのクラスインスタンスか否か(=プリミティブ型ではないかどうか)がわかる、みたいな仕組みらしい
duck-typing | 用語集 — Python 3.11.4 ドキュメント
あーduck-typingってそういう意味なのね
あるオブジェクトが正しいインターフェースを持っているかを決定するのにオブジェクトの型を見ないプログラミングスタイルです。代わりに、単純にオブジェクトのメソッドや属性が呼ばれたり使われたりします。(「アヒルのように見えて、アヒルのように鳴けば、それはアヒルである。」)
そうよね型の方がstrictよね
cf. https://docs.python.org/ja/3/glossary.html#term-abstract-base-class
python-coincidence/tox-envlist: Allows selection of a different tox envlist.
toxの設定に渡せる envlist に指定できる値が定義されてるっぽい(ってのがrepoのdescに書いてあるわね)
29.13. site --- サイト固有の設定フック — Python 3.6.15 ドキュメント
.pthって拡張子のファイルでpath通せるらしい......?
Development Mode (a.k.a. “Editable Installs”) - setuptools 68.0.0.post20230619 documentation
便利そ( pip install --editable ./path/to/module でlocalにある開発中のモジュールを読める)
src layout vs flat layout — Python Packaging User Guide
Pythonはモジュールの読み込みをする都合上 src/ ディレクトリを使わないレイアウトが通例だったけど、上記のようにsetuptoolsにDevelopment Modeが追加されたことで src/ ディレクトリをカジュアルに使えそうなかんじっぽいね
cf. https://github.com/pypa/setuptools
Integration with DRF — django-filter 23.2 documentation
django-fliterのよさがあんまりわからんけど、Django REST Frameworkにだいぶ密なモジュールなのね......と思った
Middleware | Django documentation | Django
DjangoのMiddlewareとかはCakePHPのMiddlewareを知ってたらなんとなくわかるし、これも何かしらの標準なんだろうね
Middleware群を設定しているリストを下から上に読んでいって重ねていって連鎖的にMiddleware内で次の get_response() を実行していくかんじ
なので各Middlewareに定義されてる def __call__(self, request) のなかで response = get_response(request) をする前と後でViewを呼ぶ前の処理とViewを呼ぶ後の処理とを行えるようになってる
get_response() の前でMiddleware群の定義されたリストの上から下へ実行されていって、 get_response() の後でリストの下から上へ実行されていくかんじ
Django 1.10のときに class MiddlewareMixin を廃止して process_request() と process_response() を書くんじゃないスタイルになったのね
もともとは request = get_response(request) の前後を明示的に process_request() と process_response() に分けてたけど止めたっぽい
class CsrfViewMiddleware とかも csrf_exempt() みたいなデコレータを使ってskipできたりとか便利ね〜〜みたいな気持ち
cf. How to use Django’s CSRF protection | Django documentation | Django
あと process_view() はViewが呼び出される前に呼ばれるのね〜〜(そういうhookみたいなのがいくつかある)
cf. https://github.com/django/django/blob/4.2.2/django/core/handlers/base.py#L183-L189
あとDjangoのView Genericsが便利ね〜〜みたいなかんじ
実装はDjangoが一通りメタにしといてくれてるから、各種設定を書いてくかんじになるよね
あれこれ使いこなせば、Viewはスリムに保てる感があってさすが〜〜みたいな
その一環がdjango-filterみたいな思想なんだろうね〜〜使いこなせればシュッと定義できそうだし再利用も効きそうなのよね
5.3.1. モジュールキャッシュ | 5. インポートシステム — Python 3.7.17 ドキュメント
#あとで読む (理解したい)
djangoは誰が動かしているのか?(デプロイのための俯瞰) - Qiita
WSGIをちゃんと理解するきっかけになった
けどWSGIはPythonくらいでしか使わないのか......
cf. Web Server Gateway Interface - Wikipedia
他の言語はだいたいApache httpdモジュールのモジュールとか、それぞれの言語向けにサーバーソフトウェアあるもんね
Goはnet/httpでマルチスレッドなHTTPサーバー立てれるし、これにリバースプロキシ立てれば十分なのか......?すげえなあ
Apache httpdにはmod_wsgiがあるから、直接WSGI経由でハンドラをApache httpdから叩いてもらってるけど、nginxだと別途WSGIサーバーを立てる必要があるのか
Apache httpdでもよいけど、軽量サーバーの選択肢は他にもある
uWSGIとかgunicornとかあるっぽいけど、これリバースプロキシをわざわざ立てる必要性......?(普通にリバプロの機能が欲しい場合とかサーバーの中でスケーラビリティ持たせたいならまだしも、Dockerコンテナとかならコンテナを並列させてロードバランサーで対応してもよさそうに思えた)
#ブックマーク #links