売上が落ちた原因を絞り、1 枚のレポートにする
注文の CSV 1 枚から、売上が落ちている場所を「全体 → 内訳 → 絞り込み」の順に特定します。pandas の集計だけで、結論・根拠・言えないこと・次の一歩を書いた 1 枚のレポートまで作りきります。
コースは順に読んで覚えるためのもの、プロジェクトはひとつのものを 作りきるためのものです。要件だけ渡して放り出すのではなく、手順と回答例、 つまずきやすいところまで置いてあります。
全 24 件
注文の CSV 1 枚から、売上が落ちている場所を「全体 → 内訳 → 絞り込み」の順に特定します。pandas の集計だけで、結論・根拠・言えないこと・次の一歩を書いた 1 枚のレポートまで作りきります。
3 つのプランを並べた料金表を、スマホの 360px から広い画面まで崩れない形で組みます。@media を 1 つも書かずに、中身の都合で折り返させるのが狙いです。
仕様どおりに動いていない関数を、いきなり直さずに「まず落ちるテストを書く」順で直します。境目の選び方と、直したあと何を残すかを身につけます。
型を書けばコンパイル時は守られますが、外から来た値は型注釈だけでは守れません。unknown から狭める型ガードで、想定外の行を数えながら弾く形を作ります。
古い応答が新しい応答を上書きする、連打で注文が二重に飛ぶ、失敗が黙って消える。エラーにならないまま画面だけがずれる不具合を、順番を記録して止めます。
どこが遅いかの勘はたいてい外れます。時間を出してから直し、直したら答えが変わっていないことを確かめます。効かなかった書き換えを 1 つ見つけるところまでやります。
検索欄に文字を入れるだけで全員分のメールアドレスが出る様子と、ファイル名で公開フォルダの外が見える様子を実際に再現し、そのうえで塞ぎます。
ラベル、エラーの伝え方、焦点の行き先。キーボードだけで最後まで送れる形にすると、目が見える人にとっても入力の速いフォームになります。
空白で割って番号で取ると、行の形が少し変わっただけで壊れます。正規表現で「形」から取り、読めなかった行を数えるところまで作ります。
止まっているタスクを動かす処理が E0502 で通りません。clone() や Rc で逃げず、読む段と書く段を分けて通します。Rc<RefCell<T>> が何を実行時に移すかも確かめます。
他の言語なら動いてしまい数が合わなくなるコードが、なぜ Rust では書けないのか。Send が何を言っているかを読み、通る形に直して 3 つの書き方を実測します。
split_at_mut を自分で書きます。安全な Rust では書けない理由を確かめ、unsafe を 6 行に絞り、なぜ安全と言えるかを文書で残すところまで。
async と書いてあっても await の無い処理はループを独り占めします。心拍が飛ぶ様子を見てから、gather と TaskGroup の違い、キャンセルの扱いまで直します。
tracemalloc で山の高さを出し、2 つの方向で減らします。1 件を小さくする(__slots__)のと、同時に持つ数を減らす(ジェネレータ)の。効くのは後者です。
決まりを __init__ の中だけで守っていると、作ったあとは素通りです。記述子で代入のたびに確かめ、計算で出る値は持たずに出すようにします。
Box<dyn Error> だと「失敗した」としか分かりません。起きうる失敗を enum に書き出し、種類を増やしたときコンパイラが呼ぶ側を止める形にします。thiserror と anyhow の境目まで。
画面より先に、どの値をどこに持つかを決めます。金額は Decimal、在庫はデータベースが守る、カートは ID だけ持って価格は毎回引き直す。N+1 はクエリ本数で見張ります。
在庫 1 個に 2 人が同時に来ると、ふつうに書いたコードは 2 人とも通します。PostgreSQL で再現させてから直し、決済の通知が 2 回来ても 1 回しか処理しない形にします。
1 文字打つたびに引っかかる検索画面を直します。memo を足す前に、部品ごとの描き直しの回数を数えます。数えると、最初に見つかるのは再レンダーではありません。
エラーも警告も出ないまま表示だけが止まるバグを直します。再描画の回数と watch の発火回数を数え、ref と reactive のどこで繋がりが切れたのかを 1 か所ずつ確かめます。
入れたはずのキーで引いたのに null が返ってくる。原因は 4 つあり、どれもコンパイルは通ります。取り出せなくなる様子を数で確かめ、record で消えるものと残るものを分け、キーを不変にするところまで直します。
go と書いた処理は、誰かが止めるまで終わりません。タイムアウトで諦めたあとに 100 個が居座るところを数で確かめ、どの行で止まっているかを出し、チャネルと context で止め、リークしないことをテストで縛ります。
ディスクが満杯で止まったサーバーを、使い捨てのディスクを 1 つ作って自分の手で再現し、元に戻します。df と du が食い違う 3 つの理由を、全部その場で起こして確かめます。
reset --hard、消したブランチ、取り違えた rebase、捨てた stash。4 つの事故をわざと起こして全部取り戻し、そのうえで「本当に戻らないもの」の境界を手を動かして確かめます。