メインコンテンツへスキップ
レッスン 7 / 12推定時間: 35

繰り返し処理:大量のデータも怖くない

100件のデータを1つずつ手作業で処理...もううんざりですよね。繰り返し処理を使えば、1件でも1万件でも同じ労力で処理できます。このレッスンでは、繰り返しの基本から実践的な使い方まで、じっくり学びます。

はじめに

前回は条件分岐で「賢い判断」ができる自動化を学びました。

今回は、自動化の真骨頂ともいえる繰り返し処理について学びます。

想像してみてください:

  • 100人の顧客に個別メールを送る
  • 1000個のファイル名を変更する
  • 毎月の売上データを12ヶ月分集計する

手作業なら気が遠くなりますが、繰り返し処理なら一瞬です!

繰り返しは日常にあふれている

日常生活の繰り返し

私たちの生活は繰り返しだらけです:

歯磨き

歯ブラシに歯磨き粉をつける
↓
すべての歯に対して繰り返し:
    上下に10回磨く
    次の歯へ移動
↓
口をゆすぐ

買い物

買い物リストを見る
↓
リストの商品すべてに対して繰り返し:
    商品を探す
    カートに入れる
    リストにチェック
↓
レジで会計

皿洗い

シンクの皿すべてに対して繰り返し:
    スポンジで洗う
    水で流す
    水切りかごに置く
↓
シンクを片付ける

繰り返しの特徴

  • 同じ動作を何度も実行
  • 対象が複数ある
  • 終了条件がある
  • 効率化の余地が大きい

繰り返し処理の基本形

1. 回数指定の繰り返し

「○回繰り返す」という最もシンプルな形:

10回繰り返す:
    メッセージを送信する

実例:リマインダー送信

3回繰り返す:
    リマインドメールを送信
    24時間待つ

実例:データバックアップ

5回繰り返す:
    バックアップを作成
    古いバックアップを削除
    次の日まで待つ

2. リスト型の繰り返し

「すべての項目に対して繰り返す」:

顧客リストのそれぞれに対して:
    メールを送信する

実例:メール一斉送信

メールアドレスリスト:
- tanaka@example.com
- suzuki@example.com  
- sato@example.com

それぞれのアドレスに対して:
    宛名を差し込む
    本文を作成
    メールを送信
    送信ログを記録

3. 条件型の繰り返し

「○○になるまで繰り返す」:

在庫がなくなるまで繰り返す:
    注文を処理する
    在庫を1減らす

実例:ファイル処理

フォルダが空になるまで繰り返す:
    最初のファイルを取得
    ファイルを処理
    処理済みフォルダへ移動

繰り返し処理の実践パターン

パターン1:一括データ処理

CSVファイルの処理

CSVファイルを開く
↓
各行に対して繰り返す:
    データを読み込む
    必要な計算を実行
    結果を新しい列に追加
↓
処理済みファイルを保存

具体例:売上データの処理

売上CSV(1000行)の各行に対して:
    商品名を取得
    単価 × 数量 = 売上額を計算
    消費税を計算
    合計額を追加
    カテゴリーを判定
    新しい行として保存

パターン2:ファイル一括処理

画像ファイルのリサイズ

画像フォルダ内のすべてのファイルに対して:
    もし拡張子が.jpgまたは.pngなら:
        画像を開く
        幅800pxにリサイズ
        圧縮率80%で保存
        元ファイルをバックアップ

ファイル名の一括変更

対象フォルダのすべてのファイルに対して:
    現在のファイル名を取得
    日付を先頭に追加(例:20240115_)
    連番を付与(例:001, 002, 003)
    新しいファイル名に変更
    変更ログを記録

パターン3:定期的な監視と処理

在庫チェック

すべての商品に対して毎日1回:
    現在の在庫数を確認
    もし在庫が10個以下なら:
        発注リストに追加
        担当者に通知
    もし在庫が0なら:
        緊急発注フラグを立てる
        Webサイトで「在庫切れ」表示

システム監視

監視対象サーバーリストに対して5分ごとに:
    応答確認(ping)を送信
    もし応答がなければ:
        3回リトライ
        それでも応答がなければ:
            アラートメール送信
            担当者に電話通知
    応答時間を記録
    統計情報を更新

パターン4:データ収集と集計

複数サイトからの情報収集

ニュースサイトリストの各サイトに対して:
    最新記事を取得
    タイトルと概要を抽出
    カテゴリーを判定
    重要度を評価
    データベースに保存
↓
すべて収集後:
    カテゴリー別に整理
    重要度順にソート
    日報として配信

繰り返しと条件分岐の組み合わせ

基本的な組み合わせ

顧客リストの各顧客に対して:
    もし誕生月なら:
        バースデークーポンを送信
    そうでなければ:
        通常のお知らせを送信

実践例1:成績処理

学生リスト(100人)の各学生に対して:
    テストの点数を取得
    
    もし90点以上なら:
        評価 = "A"
        特別表彰リストに追加
    そうでなければ、もし80点以上なら:
        評価 = "B"
    そうでなければ、もし70点以上なら:
        評価 = "C"
    そうでなければ、もし60点以上なら:
        評価 = "D"
    そうでなければ:
        評価 = "F"
        補習対象リストに追加
    
    成績表に記録
    保護者へ通知メール

実践例2:請求書の一括作成

顧客リストの各顧客に対して:
    今月の利用明細を取得
    
    もし利用がゼロなら:
        次の顧客へスキップ
    
    請求額を計算
    
    もしVIP顧客なら:
        10%割引を適用
    そうでなければ、もし利用額が10万円以上なら:
        5%割引を適用
    
    請求書PDFを作成
    
    もしメール送付希望なら:
        PDFをメール送信
    そうでなければ:
        印刷リストに追加

組み合わせのコツ

  • 繰り返しの中で条件判断
  • 条件によって処理をスキップ(continue)
  • 条件によって繰り返しを終了(break)
  • カウンターを使った制御

ネストした繰り返し(繰り返しの中の繰り返し)

二重ループの例

部署リストの各部署に対して:
    その部署の社員リストの各社員に対して:
        給与明細を作成
        メールで送信

実践例:売上集計表の作成

月リスト(1月〜12月)の各月に対して:
    月次レポートを開始
    
    店舗リスト(東京、大阪、名古屋)の各店舗に対して:
        その月の売上データを取得
        商品カテゴリー別に集計
        店舗別小計を計算
    
    全店舗の合計を計算
    前年同月比を計算
    月次レポートに追加

年間サマリーレポートを作成

実践例:在庫棚卸し

倉庫リスト(A棟、B棟、C棟)の各倉庫に対して:
    棚リスト(1〜50)の各棚に対して:
        商品リストの各商品に対して:
            実在庫を確認
            システム在庫と比較
            差異があれば記録
        棚ごとの集計
    倉庫ごとの集計

全体の棚卸し結果レポート作成
差異リストを経理部に送信

繰り返し処理の注意点

1. 無限ループを防ぐ

危険な例

残高がある限り繰り返す:
    利息を追加(残高は減らない!)

安全な例

最大100回まで、残高がある限り繰り返す:
    支払いを処理
    残高を減らす

2. パフォーマンスを考慮

非効率な例

10000件のデータそれぞれに対して:
    データベースに接続
    1件更新
    接続を切断

効率的な例

データベースに接続
10000件のデータを100件ずつに分けて:
    100件をまとめて更新
接続を切断

3. エラー処理を忘れない

ファイルリストの各ファイルに対して:
    try:
        ファイルを処理
    エラーが発生したら:
        エラーログに記録
        次のファイルへ続行
        (全体を止めない)

4. 進捗を可視化

全1000件の処理:
    100件ごとに:
        進捗を通知(10%完了、20%完了...)
    
処理完了後:
    処理件数、エラー件数、処理時間を報告

実践演習:メール配信システムの設計

要件

1000人の顧客リストに対して:

  • 個別の宛名付きメール送信
  • VIP顧客には特別な内容
  • エラーがあっても続行
  • 配信結果をレポート

設計例

配信開始時刻を記録
成功数 = 0、失敗数 = 0

顧客リスト(1000人)の各顧客に対して:
    # 基本情報取得
    名前、メールアドレス、会員種別を取得
    
    # 宛名作成
    もしVIP会員なら:
        宛名 = "【VIP】" + 名前 + "様"
        本文 = VIP向けテンプレート
    そうでなければ:
        宛名 = 名前 + "様"
        本文 = 通常テンプレート
    
    # メール送信
    try:
        メールを送信
        成功数 += 1
        送信ログに記録
    エラーが発生したら:
        失敗数 += 1
        エラーログに記録
    
    # 進捗報告
    もし処理数が100の倍数なら:
        進捗を管理者に通知

# 最終レポート
配信完了時刻を記録
レポート作成:
- 総配信数:1000
- 成功:[成功数]
- 失敗:[失敗数]
- 処理時間:[完了時刻 - 開始時刻]

管理者にレポート送信

今日のまとめ

繰り返し処理の極意

  1. 同じ処理を自動で何度でも実行
  2. 1件でも1万件でも同じ労力
  3. 条件分岐と組み合わせて賢く処理
  4. エラー処理で安全に
  5. 人間には不可能な作業も可能に

次回予告

次のレッスンでは、「並列処理とシーケンス処理:効率的な処理の流れ」を学びます。

  • 複数の処理を同時に実行する方法
  • 順番が重要な処理の扱い方
  • 処理時間を大幅に短縮するテクニック
  • 依存関係の管理

繰り返し処理と並列処理を組み合わせれば、処理速度が飛躍的に向上します!

チャレンジ問題

問題1:繰り返しの種類を選ぼう

以下の処理に最適な繰り返しの種類を選んでください:

  1. 毎月1日に売上集計を行う
  2. フォルダ内のすべての画像を圧縮
  3. 在庫がなくなるまで注文を受け付ける
  4. 新規登録者100人にウェルカムメール送信
答えを見る
  1. 回数指定(12回繰り返す)または条件型(1年間繰り返す)
  2. リスト型(すべての画像ファイルに対して)
  3. 条件型(在庫 > 0 の間繰り返す)
  4. リスト型(新規登録者リストの各人に対して)

問題2:処理フローを設計しよう

「複数のExcelファイルから特定のデータを抽出して、1つのファイルにまとめる」処理を設計してください。

設計例を見る
# 準備
結果ファイルを新規作成
ヘッダー行を書き込む

# メイン処理
対象フォルダのすべてのファイルに対して:
    もし拡張子が.xlsxなら:
        ファイルを開く
        
        シート「売上データ」が存在するか確認
        もし存在するなら:
            A列〜D列のデータを読み込む
            
            各行に対して:
                もし日付が今月なら:
                    ファイル名を追加
                    結果ファイルに書き込む
        
        ファイルを閉じる
    
    処理済みファイル数をカウント

# 完了処理
結果ファイルを保存
処理結果を通知:
- 処理ファイル数
- 抽出データ件数
- 処理時間

問題3:エラーに強い設計

「1000件のWebサイトから情報を収集する」処理で、一部のサイトがエラーになっても継続する設計を考えてください。

解答例を見る
# 初期設定
成功数 = 0
失敗数 = 0
失敗リスト = []
最大リトライ回数 = 3

# メイン処理
WebサイトリストURLそれぞれに対して:
    リトライ回数 = 0
    成功 = False
    
    成功するかリトライ上限まで繰り返す:
        try:
            サイトにアクセス
            情報を取得
            データベースに保存
            成功 = True
            成功数 += 1
            break(ループを抜ける)
            
        エラーが発生したら:
            リトライ回数 += 1
            もしリトライ回数 < 最大リトライ回数なら:
                5秒待機
            そうでなければ:
                失敗リスト.append(URL)
                失敗数 += 1
                break
    
    # 進捗報告(100件ごと)
    もし (成功数 + 失敗数) % 100 == 0 なら:
        進捗を通知

# 結果レポート
レポート作成:
- 総URL数:1000
- 成功:[成功数]
- 失敗:[失敗数]
- 失敗URL一覧:[失敗リスト]

もし失敗数 > 0 なら:
    失敗URLを再処理リストとして保存

繰り返し処理をマスターすれば、大量のデータも恐れることはありません。次回も楽しみにしていてください!

さらに学習を続けるには

素晴らしい学習ペースです!次のレッスンに進むには、無料会員登録をお願いします。無料会員では各コース3レッスンまで学習できます。

無料で続きを学ぶ

各コース3レッスンまで学習可能

学習進捗の自動保存

コース修了証明書の発行