#プログラミング言語
189 件の記事
SQLAlchemy 2.0 #7 Alembic と実戦構成 — マイグレーション、非同期、チーム規約
シリーズ最終回として運用フェーズのテーマを整理します。create_all がスキーマ変更を解決できない理由と Alembic の導入、autogenerate が検知できるものと見落とすもの、マイグレーションファイルのレビュー原則、create_async_engine と AsyncSession に移行する非同期構成と遅延ロードの制約、モデル・セッション・設定を配置するプロジェクト構造、チームで守る規約まで扱います。
Rust 基礎講座 #7 コレクションとイテレータ — Vec・String・HashMap、for の代わりにチェーン
実務コードの本体である 3 つのコレクションを扱います。可変長リストの Vec とインデックスの代わりに get を使う理由、なぜ String はインデックスでアクセスできないのか(UTF-8 とバイト・文字の違い)、HashMap と entry API、そして for 文を map・filter・collect のチェーンに置き換えるイテレータスタイルと遅延評価まで扱います。
SQLAlchemy 2.0 #6 クエリ応用 — 結合、集計、サブクエリ、大量処理
select() ひとつで実戦的なクエリを組み立てる方法を整理します。scalars と execute の戻り値の形の違い、複数条件と or_、結合と明示的な ON 句、group_by と集計関数にラベルを付けて読む方法、サブクエリと EXISTS、LIMIT・OFFSET ページネーションとその限界、ORM の単位作業を迂回する大量 INSERT・UPDATE まで、2.0 スタイルのクエリの実務レパートリーを扱います。
Rust 基礎講座 #6 エラー処理 — Result と ? 演算子、panic と unwrap の境界
例外(exception)のない Rust のエラー処理を扱います。失敗の可能性を戻り値の型に現す Result、match の入れ子を 1 文字に縮めてエラーを伝播する ? 演算子、main が Result を返す実用形、そして unwrap・expect・panic をいつ使ってよく、いつ使ってはいけないのかの判断基準まで扱います。
SQLAlchemy 2.0 #5 リレーション — 1:N、N:M、そして N+1 問題
ORM の花形であり罠でもある relationship を整理します。外部キーと relationship の役割分担、back_populates で双方向をつなぐ 1:N の宣言、secondary テーブルを使う N:M、親削除時の子の扱いを決める cascade と delete-orphan、遅延ロードが生む N+1 問題を echo ログで確認する方法、selectinload と joinedload で解決する基準まで扱います。
Rust 基礎講座 #5 構造体と列挙型 — match と Option、null がない言語の設計
データを構造化する 2 本の軸、構造体(struct)と列挙型(enum)を扱います。impl ブロックでメソッドを付ける方法、バリアントごとに異なるデータを持てる Rust 列挙型の表現力、すべてのケースを検査したかをコンパイラが強制する match、そして null の代わりに「値がないかもしれない」を型で表す Option まで、Rust コードの骨格になる道具を扱います。
SQLAlchemy 2.0 #4 セッション — 変更追跡、flush と commit、オブジェクトの 4 つの状態
ORM の心臓部である Session を整理します。セッションが単位作業(Unit of Work)として変更をため込み、まとめて SQL として送り出す仕組み、flush と commit の違い、transient・pending・persistent・detached というオブジェクトの 4 状態、同じ行には同じオブジェクトを返す identity map、commit 後の属性アクセスが再クエリを発行する理由、Web アプリケーションではリクエストごとにセッション 1 つというスコープ原則まで扱います。
Rust 基礎講座 #4 参照と借用 — & と &mut、借用規則のコンパイルエラーを解決する
所有権を移さずに値を使う参照(&)と可変参照(&mut)を扱います。「不変参照はいくつでも、可変参照は 1 つだけ」という借用規則が何を防ぐのか(反復中の変更、データ競合)、cannot borrow as mutable エラーの読み方と直し方、解放済みメモリを指すダングリング参照がコンパイル段階で遮断される構造、そして &str とスライスまで扱います。
SQLAlchemy 2.0 #3 ORM モデル定義 — DeclarativeBase、Mapped、mapped_column
テーブルを Python クラスとして宣言する 2.0 スタイルの ORM モデル定義を整理します。DeclarativeBase を継承する構造、Mapped 型ヒントと mapped_column の役割分担、Python の型が DB の型にマッピングされるルール、Optional と nullable の連動、デフォルト値・ユニーク制約・インデックスの宣言、制約名を自動で付ける命名規約まで扱います。
Rust 基礎講座 #3 所有権 — move が既定の言語、GC なしでメモリが解放される仕組み
Rust の心臓である所有権を正面から扱います。すべての値に所有者が 1 つだけという 3 つの規則、代入と関数呼び出しで値が移動(move)した後に元の変数が使えなくなる理由、スタックに収まる固定サイズ型だけが持つ Copy、コストがコードに現れる clone、そしてスコープの終わりで自動的に解放される drop まで、use-after-free がコンパイルエラーに変わる構造を扱います。
SQLAlchemy 2.0 #2 エンジンとトランザクション — コネクションプールと commit の 2 パターン
SQLAlchemy の土台であるエンジンとトランザクションを整理します。コネクションプールがなぜ必要でどう動くのか、pool_size と max_overflow が実際に制限しているもの、connect() と begin() で分かれる commit-as-you-go と begin-once のパターン、トランザクションが自動コミットされない理由、MetaData と Table でテーブルを定義し Core の式で CRUD を実行するところまで扱います。
Rust 基礎講座 #2 変数と型 — let と mut、シャドーイング、式で終わる関数
不変が既定の let と、明示的に付ける mut の意味から始めます。同じ名前を再宣言するシャドーイングがなぜ実務のイディオムなのか、整数・浮動小数点・bool・char のスカラー型とオーバーフローの挙動、タプルと配列、そしてセミコロン 1 つで文と式が分かれる Rust の関数の戻り値規則まで扱います。