プログラミング言語
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 の関数の戻り値規則まで扱います。
SQLAlchemy 2.0 #1 全体像 — Core と ORM、そして 2.0 スタイル
Python の DB ライブラリの事実上の標準である SQLAlchemy を基礎から整理するシリーズの第 1 回です。Core と ORM という 2 層の構造、1.x 時代のコードと 2.0 スタイルが違う理由、select() を中心に統一されたクエリの書き方と型ヒント対応、インストールと最初の接続、text() で SQL を直接実行するところまで扱います。
Python パッケージング #7 チームの規約と道具の選択 — uv、poetry、pip
シリーズ最終回として、道具の選択とチームの規約を整理します。uv、poetry、pip+venv を 1 つの表に載せて分ける基準、マイグレーションの実際のコスト、CI でキャッシュと frozen 検証を掛ける方法、Docker イメージで uv を使う標準パターン、新しいメンバーが来ても崩れないチーム規約のチェックリストまで扱い、シリーズ全体を振り返ります。
Rust 基礎講座 #1 Rust とは — 学ぶ理由、rustup のインストールと cargo の最初の一歩
カーネルから CLI ツールまで Rust が急速に広がった理由である「GC なしのメモリ安全」が何を意味するのかから始めます。安全と性能がトレードオフだった既存言語との違い、rustup の 1 行インストール、cargo でプロジェクトを作って実行する基本サイクル、最初のコンパイルエラーメッセージの読み方、そして講座全体の地図まで扱います。
Python パッケージング #6 公開 — wheel のビルドと PyPI へのアップロード
受け取る側から作る側へ方向を変え、自分のコードをインストール可能なパッケージにして公開するワークフローを整理します。src レイアウトとビルドバックエンドの役割、sdist と wheel の違い、uv build でビルドして TestPyPI でリハーサルしてから PyPI に上げる手順、GitHub Actions の Trusted Publishing でトークンなしにデプロイする現代の標準、社内専用の配布の選択肢まで扱います。
Python パッケージング #5 依存関係のロック — ロックファイルと再現性
宣言とロックがなぜ分離されるのかから始めて、uv.lock の中身を直接読みます。推移的依存まですべて固定する解決の結果、ハッシュ検証が防ぐサプライチェーンのリスク、CI で --frozen によりロックのとおりに再現する方法、アップグレードを日常の仕事にする戦略、道具の間の移動を開く標準 pylock.toml(PEP 751)まで扱います。
Python パッケージング #4 uv — 2026 年の標準ワークフロー
仮想環境、依存関係のインストール、ロック、Python バージョン管理を 1 つの道具にまとめた uv の日常ワークフローを整理します。init・add・sync・run の 4 コマンドが前回までの手作業を置き換える過程、Python インタープリター自体を uv がインストールする構造、uvx と uv tool でグローバルツールを分離インストールする方法、既存の requirements.txt プロジェクトを吸収するマイグレーションまで扱います。
Python パッケージング #3 pyproject.toml — プロジェクト設定の標準
setup.py と散らばった設定ファイルの時代が pyproject.toml という 1 つのファイルに収束した過程を整理します。project テーブルのメタデータと依存関係の宣言、extras と dependency-groups で選択的な依存と開発用の依存を分ける方法、build-system の役割、ruff や pytest の設定まで tool テーブルに集める実践的な構成を扱います。
Python パッケージング #2 pip と requirements.txt — 伝統的ワークフローの限界
pip の動作原理と requirements.txt のワークフローを整理し、この方式がどこで崩れるのかを押さえます。バージョン指定子の読み方、pip freeze が直接依存と推移的依存を区別できない問題、バージョンを固定しないとインストールする日によって結果が変わる再現性の穴、constraints ファイルまで扱い、次世代ツールが生まれた理由につなげます。
Python のサーバーが遅いとき — py-spy で 5 分以内にボトルネックを探す
稼働中の Python プロセスに、コードの修正・再起動なしで取り付くサンプリングプロファイラ py-spy の使い方を整理します。dump で止まったプロセスの正体の確認、top でリアルタイムのボトルネック観察、record とフレームグラフ、--idle で見る off-CPU の待ち、GIL 観点の解釈、コンテナでの使い方まで扱います。