プロへの道 » バックエンドコース » ユニット2

バックエンドコース ユニット2 | 目安: 120時間 (約1.5ヶ月)

実務ツールづくり ― 誰かの30分を、3秒にする

プログラムが本当に役立つのは、ファイルやデータという「実物」を相手にしたときです。このユニットでは、ファイルの読み書き・CSV処理・転ばない工夫 (例外処理) を学び、最後は「売上レポートの自動生成ツール」という、胸を張れる実務の道具を作ります。

このユニットのゴール CSVファイルを読んで集計し、結果をレポートファイルとして書き出すツールを、エラーに強い形で作れるようになる。

進め方の地図

やること 仕上がるもの
1週目 授業1: ファイルの読み書き 学習記録ツール
2週目 授業2: CSVを料理する 売上CSVの集計プログラム
3週目 授業3: 例外処理 ― 転ばないツール 壊れない入力処理
4週目 授業4: ライブラリとpip 道具箱の拡張体験
5週目 授業5: GitとGitHub 管理された自分のコード置き場
6週目 月末制作 売上レポート自動生成ツール

授業1: ファイルの読み書き

ファイルが扱えると、プログラムは「閉じたら忘れる計算機」から「記録が残る道具」に進化します。開け方の型は1つだけ、with open( ) です。

例題 (リードつき) | 学習記録ツールを作る
  1. 書き込む (追記)
    from datetime import date
    
    memo = input("今日学んだことは? ")
    with open("kiroku.txt", "a", encoding="utf-8") as f:
        f.write(f"{date.today()} {memo}\n")
    print("記録しました!")
    "a" は追記モード (末尾に足す)、"w" だと上書き (前の内容が消える) です。この違いは事故のもとなので、最初に体で覚えます。
  2. 読み出す
    with open("kiroku.txt", encoding="utf-8") as f:
        for line in f:
            print(line.strip())
    strip( ) は前後の改行・空白を落とすおまじないです。
  3. 毎日使ってみるこのツールに、今日から本当に学習記録をつけましょう。自作の道具を自分で使う体験 (ドッグフーディングと呼びます) が、改善のアイデアを連れてきます。
  4. 「w」の事故を安全に体験する練習用の別ファイルで、"a""w" に変えて2回実行し、消える様子を確認します。知識でなく体験にしておくと、本番で事故りません。
演習 1-A (ヒントだけ) | 記録ツールの機能追加

お題: 学習記録ツールに「①記録の全表示 ②件数の表示 ③キーワード検索 (含む行だけ表示)」のメニューをつけます (ユニット1の while True: メニューの型で)。

ヒント: 検索は if keyword in line: だけでできます。たった1行で検索機能 ― これがPythonの気持ちよさです。

授業2: CSVを料理する

CSVは「カンマ区切りの表」で、実務データの世界共通語です。Excelからも書き出せます。Pythonの csv モジュールで読むと、1行が辞書になります ― つまり、ユニット1で鍛えた「辞書のリスト」がそのまま登場します。

例題 (リードつき) | パンの森の売上CSVを集計する
  1. 素材を保存する練習素材 pan-uriage.csv (パンの森の5月の売上100行) を右クリック →「名前を付けてリンク先を保存」で、作業フォルダに置きます。
  2. まず中身を見るVS Codeで開きます。1行目が見出し (日付・商品名・たんか・こすう・うりあげ)、2行目からがデータです。料理の前に素材を見る ― データ処理の鉄則です。
  3. 読み込む
    import csv
    
    with open("pan-uriage.csv", encoding="utf-8") as f:
        rows = list(csv.DictReader(f))
    
    print(len(rows))      # 何行ある?
    print(rows[0])        # 1行目はどんな辞書?
  4. 合計を出す集計パターンの出番です。
    total = 0
    for row in rows:
        total += int(row["うりあげ"])
    print(f"5月の売上合計: {total}円")
    CSVの中身は全部文字列なので、計算前の int( ) を忘れずに。
  5. 商品別に数える「数える辞書」(ユニット1のおみくじ統計) で、商品ごとの売上合計を出します。
    by_item = {}
    for row in rows:
        name = row["商品名"]
        by_item[name] = by_item.get(name, 0) + int(row["うりあげ"])
    print(by_item)
    get(name, 0) は「まだ無ければ0から始める」という、集計の定番技です。
演習 2-A (ヒントだけ) | 質問に答えるプログラム3本

お題: 同じCSVから、①一番売れた商品 (合計額ベース) はどれ? ②日別の売上合計で、一番良かった日は? ③メロンパンの合計販売個数は?、の3つに答えるプログラムを書きます。

ヒント: ①と②は「数える辞書 → 記録更新パターンで最大を探す」の2段です。部品はすべてユニット1で作りました。組み合わせるだけです。

授業3: 例外処理 ― 転ばない道具にする

自分しか使わないプログラムは、転んでも平気です。でも「人に渡す道具」は、変な入力やファイルの欠品で止まってはいけません。try / except は、転びそうな処理に張るセーフティーネットです。

例題 (リードつき) | 2大転倒ポイントを守る
  1. 数値変換を守る
    try:
        kosuu = int(input("何個買いますか? "))
    except ValueError:
        print("数字で入力してください (例: 3)")
        kosuu = 0
    「abc」と入力されても、もう止まりません。
  2. ファイルの欠品を守る
    try:
        with open("pan-uriage.csv", encoding="utf-8") as f:
            rows = list(csv.DictReader(f))
    except FileNotFoundError:
        print("pan-uriage.csv が見つかりません。同じフォルダに置いてください。")
        rows = []
    エラーメッセージに直し方まで書くのが、道具職人の優しさです。
  3. 守りすぎないexcept Exception: で何でも握り潰すと、本当の故障に気づけなくなります。「予想できる転び方だけ、名前を指定して受け止める」が原則です。
演習 3-A (リードなし) | 過去ツールの防御工事

お題: 授業1の学習記録ツールと、演習2-Aの集計プログラムに、「変な入力」「ファイルがない」への防御を入れます。完成したら、意地悪な操作 (空入力・記号・ファイル退避) を5回やって、全部生き残るか検査します。

授業4: ライブラリとpip ― 巨人の肩に乗る

Pythonの強さの正体は、世界中の人が作った部品 (ライブラリ) を借りられることです。標準装備 (import するだけ) と、取り寄せ (pip install) の2段階があります。

例題 (リードつき) | 標準装備と取り寄せを1つずつ
  1. 標準装備を試すimport datetime で日付、import random で乱数はもう使いました。今日は import collections を試します。
    from collections import Counter
    
    colors = ["赤", "青", "赤", "緑", "赤", "青"]
    print(Counter(colors))  # Counter({'赤': 3, '青': 2, '緑': 1})
    「数える辞書」を自分で書いた人だけが、この1行のありがたみを本当に理解できます。
  2. 取り寄せてみるターミナルで pip install tabulate を実行し、表をきれいに整形するライブラリを取り寄せます。
    from tabulate import tabulate
    
    data = [["メロンパン", 64200], ["食パン", 119000]]
    print(tabulate(data, headers=["商品", "売上"]))
  3. 調べ方を覚える「Python CSV 集計 ライブラリ」のように検索し、出てきたライブラリの名前をAIに「初心者向けに説明して」と聞く ― これが新しい部品との出会い方です。
取り寄せの注意: pipで入れるライブラリは「他人の書いたプログラム」です。有名で利用者が多いもの (検索でたくさん記事が出るもの) を選ぶのが安全の基本です。聞いたことのない名前を入れる前には、スタッフかAIに相談しましょう。

授業5: GitとGitHub ― 道具にも履歴を

ツールは育てるものなので、変更の履歴 (セーブポイント) が必要です。その道具がGitです。覚えるコマンドは、まず4つで足ります。

例題 (リードつき) | ツールフォルダをGit管理にする
  1. Gitを入れるgit-scm.com からインストールします (設定は全部そのまま「Next」でOKです)。ターミナルで git --version が出れば成功です。
  2. 名乗る (最初の1回だけ)
    git config --global user.name "yamada"
    git config --global user.email "自分のメールアドレス"
  3. セーブするツールのフォルダで、
    git init
    git add .
    git commit -m "学習記録ツールと売上集計を作成"
    以後、区切りごとに add → commit を繰り返します。メッセージは「何をしたか」を短く ―「修正」ではなく「空入力の防御を追加」のように書きます。
  4. GitHubへgithub.com でアカウントとリポジトリ (公開設定はPublic) を作り、画面に表示される git remote add origin …git push -u origin main の2行を貼って実行します。あなたのコードが、世界から見える場所に置かれました。
バックエンドこそGitが効く理由: 道具は「動いていた昨日の版」に戻せることが命綱です。「動く → コミット → 改造」のリズムを守れば、改造の失敗が怖くなくなり、挑戦の回数が増えます。

月末制作: 売上レポート自動生成ツール

月末制作

「店長が毎月手作業で30分かけている集計を、3秒にする」― そんな想定の道具を作ります。このユニットの全部品の総結集です。

  1. 仕様: python report.py と実行すると、pan-uriage.csv を読んで、①総売上 ②商品別売上 (多い順) ③日別売上のベスト3 を計算し、report.txt に日付つきで書き出します。
  2. 作る順番: まず画面表示だけで3つの集計を完成 → 次にファイル書き出し → 最後に防御 (ファイルなし・空CSV) の順で進めます。動くものを少しずつ育てるのは、卒業制作まで続く基本姿勢です。
  3. 仕上げの検査: CSVを退避させて実行 → 優しいエラーで止まるか。CSVの1行をわざと壊して (うりあげ欄を「abc」に) → 生き残るか。
  4. 納品ごっこ: スタッフを店長役に、使い方を1分で説明して実行してもらいます。「説明1分で使えた」が合格ラインです。コードはGitHubにpushして完了です。
見本 (答え) の場所: Step 4の uriage-mihon.py が、この道具の小さな原型です。詰まったら原型を読み、自分の版がどれだけ進化しているかも味わいましょう。

つまずきやすいポイント

文字化けが出たら: 日本語ファイルの読み書きには encoding="utf-8" を必ずつけます。Windowsでは、つけ忘れると別の文字コードで開こうとして化けたり転んだりします。「openには必ずencoding」を合言葉にしましょう。
パスで迷子になったら: 「ファイルが見つからない」の半分は、ターミナルの現在地が違うだけです。VS Codeで「フォルダを開く」から作業フォルダを開き直すと、現在地がそろって解決します。

発展チャレンジ (余力のある方へ)

発展チャレンジ
  • レポートに「前週比」(1週目と2週目の比較) を足してみましょう。日付の文字列から週を割り出す工夫が必要になります。
  • ファイル整理ツールに挑戦しましょう。seiri-mihon.py を発展させ、「実際に動かす前に、何をどこへ移すか一覧表示だけする確認モード」をつけます。実務の自動化ツールに必須の安全装置です。
  • openpyxl というライブラリを調べてみましょう。CSVでなくExcelファイルを直接読み書きできます。事務仕事の自動化の主戦場です。

できたチェック