#CLI
10 件の記事
Rust 実践講座 #7 リリース最適化とクロスコンパイル — 小さく速いバイナリをどこでも
配布準備の前半です。[profile.release] で締める最適化(lto、codegen-units、strip)とそれぞれの代償、panic = "abort" を安易に有効にしてはいけない理由、バイナリサイズが縮む過程、そして rustup target で行うクロスコンパイル — 特に glibc 依存をなくして古いサーバーでも動く musl 静的リンクビルドと、リンカ問題を Docker で迂回する cross ツールまで扱います。
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 ログまで受け付ける拡張を扱います。
Rust 実践講座 #2 エラー設計 — anyhow と thiserror、死に方を設計する
CLI ツールにおいてエラーメッセージはユーザーインターフェースの一部です。アプリケーション層の既定値である anyhow(main が anyhow::Result を返し、context で文脈を積む)と、呼び出し側が種類で分岐できる具体的なエラー型を作るライブラリ層の thiserror の役割分担、2 つのクレートを選ぶ判断基準、そして終了コードまで、loglens のエラー経路を設計します。
Rust 実践講座 #1 プロジェクト設計と clap — サブコマンド CLI の骨組みを立てる
基礎講座で学んだ文法で実際のツールを作る実践 8 回を始めます。作るのはアクセスログ分析 CLI の loglens です。なぜ CLI ツールが Rust の代表的な舞台なのか(単一バイナリ、起動速度)、clap の derive 方式でサブコマンド(stats・top・errors)を列挙型 1 つで宣言する方法、自動生成される --help、そして全 8 回の設計地図まで扱います。
Python自動化 #7 自分だけのコマンドを作る — typerとrichでCLI化
シリーズで作った自動化スクリプトたちを typer で 1 つの CLI ツールにまとめ、rich で出力を整えた後、uv tool install でどこからでも呼べるコマンドとしてインストールする過程まで整理して、シリーズを締めくくります。
Docker 基礎 #3 イメージとコンテナ — build, run, ps, logs, exec
Docker CLI の日常コマンド群を一箇所に整理します。build のオプション、run のよく使うフラグ (-d, --name, --rm, -e)、そして ps・logs・exec・stop・rm に続くコンテナのライフサイクルまで。