プログラミング言語
Rust vs Go — サーバー、CLI、システムプログラミングで何を選ぶかの基準
どちらも静的型付けで単一バイナリを作るコンパイル言語ですが、設計哲学は正反対に近いです。メモリ管理(GC vs 所有権)、並行処理(組み込みのゴルーチン vs async エコシステム)、学習曲線とチームのオンボーディング、レイテンシ特性、そして Web API、CLI ツール、インフラソフトウェア、組み込みまで、用途別にどちらが有利かの判断基準を整理します。
Rust 借用エラー総まとめ — value moved、cannot borrow、does not live long enough
Rust 入門者が最もよく出会う借用チェッカーのエラーをコード別に整理します。E0382(移動後の使用)、E0502(不変・可変借用の衝突)、E0499(可変借用の重複)、E0506(借用中の値への代入)、E0597(ライフタイム不足)、E0596(クロージャのキャプチャ)まで、各エラーの原因と代表的な対処を、診断→原因→解決の順で扱います。
Rust 実践講座 #8 配布 — crates.io への公開と GitHub Releases の自動化で完結
実践講座の最終回です。crates.io への公開に必要なメタデータと cargo publish の手順(dry-run、公開の永続性と yank)、利用者が cargo install の 1 行でインストールする体験、Rust を持たない利用者のための GitHub Releases でのバイナリ配布、そしてタグのプッシュに反応して 3 つの OS でビルド・アップロードする GitHub Actions のマトリックスワークフローまで作り、シリーズを締めくくります。
Rust 実践講座 #7 リリース最適化とクロスコンパイル — 小さく速いバイナリをどこでも
配布準備の前半です。[profile.release] で締める最適化(lto、codegen-units、strip)とそれぞれの代償、panic = "abort" を安易に有効にしてはいけない理由、バイナリサイズが縮む過程、そして rustup target で行うクロスコンパイル — 特に glibc 依存をなくして古いサーバーでも動く musl 静的リンクビルドと、リンカ問題を Docker で迂回する cross ツールまで扱います。
Rust 実践講座 #6 テスト — パーサーの単体テストから CLI の統合テストまで
loglens に安全網を張ります。同じファイルに置く #[cfg(test)] の単体テスト(パーサーの正常・境界・失敗ケース)、tests/ ディレクトリの統合テスト、assert_cmd と predicates でビルド済みバイナリを実際に実行して出力と終了コードを検証する CLI テスト、tempfile で作る一時ログファイル、そして cargo test がテストを並列実行するという事実が持つ意味まで扱います。
Rust 実践講座 #5 rayon 並列化 — データ競合のない map-reduce
集計を複数コアに分けます。並列化が得になる条件(CPU バウンド)とストリーミングから丸ごと読みへ戦略を変える理由、rayon の par_lines と fold・reduce で作るスレッドごとの部分集計と統合、Mutex で 1 つの HashMap を共有すると遅くなる理由(ロック競合)、そして共有可変状態のミスをコンパイラが捕まえる場面まで扱います。
Rust 実践講座 #4 イテレータ実践 — 集計と top-N、そしてリリースビルドの差
パーサーの上に分析を載せます。パース失敗を数えながら成功だけを流す集計構造、HashMap の entry で作るステータスコード分布、ソートで取り出す top-N、コマンド 2 つ(stats・top)の完成、そして Instant で実測する debug と release ビルドの性能差(なぜ数十倍になるのか、なぜ release が既定値ではないのか)まで扱います。
Rust 実践講座 #3 ファイル IO とパース — BufReader で読み、ログ 1 行を構造体へ
大きなファイルを扱う 2 つの基本を固めます。全体をメモリに載せる read_to_string と行単位で流す BufReader の選択基準、システムコールとバッファリングの関係、アクセスログ 1 行を LogEntry 構造体に変えるパーサー(引用符の処理、ステータスコードの変換、第 2 回 ParseError の実戦投入)、そして serde で JSON Lines ログまで受け付ける拡張を扱います。
Python 3.14 の新機能整理 — t-string、遅延アノテーション、フリースレッディング公式サポート
2025 年 10 月にリリースされた Python 3.14 の実務目線での変化を整理します。f-string に似ているがテンプレートオブジェクトを作る t-string、デフォルト動作になったアノテーションの遅延評価、実験扱いを卒業したフリースレッディング(GIL 除去)ビルドの意味、標準ライブラリに入ったマルチインタープリターと Zstandard 圧縮、括弧なしの except 構文、リモートデバッグインターフェースまで、アップグレード前に知っておくべきことを扱います。
Rust 実践講座 #2 エラー設計 — anyhow と thiserror、死に方を設計する
CLI ツールにおいてエラーメッセージはユーザーインターフェースの一部です。アプリケーション層の既定値である anyhow(main が anyhow::Result を返し、context で文脈を積む)と、呼び出し側が種類で分岐できる具体的なエラー型を作るライブラリ層の thiserror の役割分担、2 つのクレートを選ぶ判断基準、そして終了コードまで、loglens のエラー経路を設計します。
Python Web アプリの本番デプロイ — gunicorn、uvicorn、systemd、Docker
開発サーバーをそのまま本番に使ってはいけない理由から、本番デプロイの標準構成を整理します。WSGI と ASGI の区別、gunicorn と uvicorn ワーカーの組み合わせ、ワーカー数を決める基準、systemd サービスでプロセスを管理する方法、nginx リバースプロキシが担う仕事、Docker イメージでデプロイするときの基本形、ログとヘルスチェック、graceful shutdown までチェックリストとして扱います。
Rust 実践講座 #1 プロジェクト設計と clap — サブコマンド CLI の骨組みを立てる
基礎講座で学んだ文法で実際のツールを作る実践 8 回を始めます。作るのはアクセスログ分析 CLI の loglens です。なぜ CLI ツールが Rust の代表的な舞台なのか(単一バイナリ、起動速度)、clap の derive 方式でサブコマンド(stats・top・errors)を列挙型 1 つで宣言する方法、自動生成される --help、そして全 8 回の設計地図まで扱います。