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

並列処理とシーケンス処理:効率的な処理の流れ

処理を1つずつ順番に実行していませんか?実は、多くの処理は同時に実行できます。並列処理を使えば、処理時間を大幅に短縮できます。一方で、順番が重要な処理もあります。このレッスンでは、両者の使い分けと組み合わせ方を学びます。

はじめに

これまでのレッスンで、自動化の基本要素をすべて学んできました。

今回は、処理の「効率化」に焦点を当てます。

同じ結果を得るにも、処理の組み立て方次第で時間が大きく変わります:

  • 10個の処理を順番に → 10分
  • 10個の処理を同時に → 1分

この違いを生み出すのが、並列処理シーケンス処理の使い分けです!

身近な例で理解する

朝食の準備

シーケンス処理(順番に)の例

1. パンを焼く(3分)
2. 焼き終わったらコーヒーを淹れる(2分)
3. 淹れ終わったら卵を焼く(3分)
合計:8分

並列処理(同時に)の例

同時にスタート:
- パンを焼く(3分)
- コーヒーを淹れる(2分)
- 卵を焼く(3分)
合計:3分(最も時間がかかる処理の時間)

5分も短縮! これが並列処理の威力です。

レストランの厨房

プロの料理人は、並列処理の達人です:

オーダー:パスタ、サラダ、スープ

並列処理:
├─ コック1:パスタを茹でる・ソース作り
├─ コック2:サラダの準備
└─ コック3:スープを温める

すべて同時に完成 → 熱々の料理を一緒に提供

もし1人で順番に作ったら、最初の料理が冷めてしまいますね。

処理方法の違い

  • シーケンス処理:順番に1つずつ実行
  • 並列処理:複数を同時に実行

シーケンス処理(順次処理)

シーケンス処理が必要な場面

順番が重要で、前の処理の結果を次が使う場合:

例1:銀行振込

1. 残高を確認
2. 残高が足りるか判定
3. 送金元から引き落とし
4. 送金先に入金
5. 明細を作成

※順番を変えると大変なことに!

例2:料理のレシピ

1. 野菜を切る
2. 油を熱する
3. 野菜を炒める
4. 調味料を加える
5. 皿に盛る

※順番が違うと別の料理に...

ビジネスでのシーケンス処理

承認フロー

申請書提出
    ↓
課長承認
    ↓
部長承認
    ↓
経理確認
    ↓
支払い実行

データ変換パイプライン

CSVファイル読み込み
    ↓
文字コード変換
    ↓
データクレンジング
    ↓
集計処理
    ↓
レポート生成

シーケンス処理の実装例

ファイルの段階的処理

処理フロー:
1. 元ファイルをバックアップ
2. ファイルを開く
3. データを読み込む
4. 変換処理を実行
5. 検証を行う
6. 問題なければ保存
7. 完了通知を送信

各ステップは前のステップの成功が前提

並列処理(並行処理)

並列処理が効果的な場面

お互いに依存しない、独立した処理の場合:

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

同時に実行:
├─ サイトAから天気情報を取得
├─ サイトBから株価を取得
├─ サイトCからニュースを取得
└─ サイトDから為替を取得

すべて集まったら → ダッシュボードに表示

例2:画像の一括処理

100枚の画像に対して同時に:
├─ 画像1をリサイズ
├─ 画像2をリサイズ
├─ 画像3をリサイズ
└─ ...(10個同時に処理)

処理時間:1枚1秒 × 100枚 ÷ 10並列 = 10秒
(順次なら100秒かかる)

ビジネスでの並列処理

メール一斉送信

1000人の顧客に対して:

シーケンス処理の場合:
- 1通3秒 × 1000人 = 3000秒(50分)

並列処理の場合(10並列):
- 1000人 ÷ 10 = 100バッチ
- 3秒 × 100 = 300秒(5分)

45分の短縮!

複数システムへのデータ連携

売上データを同時に送信:
├─ 会計システムへ
├─ 在庫管理システムへ
├─ CRMシステムへ
└─ BIツールへ

各システムが独立しているため並列可能

並列処理の実装パターン

パターン1:バッチ分割

10000件のデータ処理:

1000件ずつ10個のバッチに分割
    ↓
10個のバッチを同時処理:
├─ バッチ1(1-1000)
├─ バッチ2(1001-2000)
├─ バッチ3(2001-3000)
└─ ...

すべて完了したら結果を統合

パターン2:タスク別並列化

月次レポート作成を並列化:

同時に実行:
├─ 売上データ集計
├─ 在庫データ集計
├─ 顧客データ集計
└─ コストデータ集計
    ↓
すべて完了後:
    レポートに統合

並列処理の効果

  • 処理時間の大幅短縮
  • リソースの有効活用
  • レスポンスの向上
  • スケーラビリティの確保

並列とシーケンスの組み合わせ

実践的な組み合わせパターン

現実の業務では、両者を組み合わせることが多いです:

パターン1:前処理 → 並列 → 後処理

1. データベースから対象データを取得(シーケンス)
    ↓
2. データを10個のグループに分けて同時処理(並列)
   ├─ グループ1の処理
   ├─ グループ2の処理
   └─ ...
    ↓
3. 結果を統合してレポート作成(シーケンス)

パターン2:条件による切り替え

ファイル処理:

もしファイル数が10個以下なら:
    → シーケンス処理(シンプルに)
そうでなければ:
    → 並列処理(高速化優先)

実例:ECサイトの注文処理

注文受付
    ↓
【シーケンス処理】
1. 注文内容の検証
2. 在庫の確認
3. 在庫の引き当て
4. 決済処理
    ↓
【並列処理】同時に実行
├─ 倉庫に出荷指示
├─ 顧客に確認メール
├─ 売上データ更新
└─ ポイント付与
    ↓
【シーケンス処理】
5. 処理完了の記録

実例:バックアップとレポート作成

深夜のバッチ処理:

【並列処理】各システムのバックアップ
├─ データベースAのバックアップ
├─ データベースBのバックアップ
├─ ファイルサーバーのバックアップ
└─ 設定ファイルのバックアップ
    ↓
【シーケンス処理】バックアップ完了後
1. バックアップの整合性チェック
2. 古いバックアップの削除
3. バックアップレポート作成
4. 管理者へ通知

依存関係の管理

依存関係とは

「Aが終わらないとBができない」という関係:

例:Webサイト更新
1. 新しい画像をアップロード
2. HTMLファイルを更新(画像パスを含む)
3. キャッシュをクリア

※1が終わる前に2を実行すると、画像が表示されない

依存関係の可視化

タスクA ─→ タスクD
         ↗
タスクB ─→ タスクE → タスクF
         ↘
タスクC ─→ タスクG

並列可能:A, B, C(お互いに依存しない)
待機必要:D(Aの完了待ち)、E(Bの完了待ち)

実践例:データ分析パイプライン

【第1段階】データ収集(並列)
├─ 売上DB から抽出
├─ 顧客DB から抽出
└─ 商品DB から抽出
    ↓
【第2段階】データ結合(シーケンス)
すべてのデータが揃ってから結合
    ↓
【第3段階】分析処理(並列)
├─ 地域別分析
├─ 商品別分析
├─ 時系列分析
└─ 顧客セグメント分析
    ↓
【第4段階】レポート生成(シーケンス)
すべての分析結果を統合

処理方式を選ぶ基準

シーケンス処理を選ぶべき場合

✅ 順序が重要 ✅ 前の結果を次が使う ✅ リソースが限られている ✅ エラー時の原因特定が重要 ✅ トランザクション処理

並列処理を選ぶべき場合

✅ 処理が独立している ✅ 大量のデータがある ✅ 処理時間を短縮したい ✅ 各処理の負荷が軽い ✅ リアルタイム性が必要

判断フローチャート

処理は独立している?
    ↓No        ↓Yes
シーケンス    処理数は多い?
              ↓No      ↓Yes
          シーケンス  並列処理

パフォーマンスの考慮点

並列数の最適化

❌ 並列数が少なすぎる:
- 2並列で1000件 → 遅い

❌ 並列数が多すぎる:
- 1000並列で1000件 → システムが過負荷

✅ 適切な並列数:
- 10-20並列で1000件 → 最適なバランス

リソース管理

利用可能なリソースを確認:
- CPU使用率
- メモリ使用量
- ネットワーク帯域
- API制限

リソースに応じて並列数を調整

実測による最適化

テスト実行:
- 5並列:60秒
- 10並列:35秒
- 20並列:30秒
- 50並列:45秒(逆に遅くなった)

→ 20並列が最適

実装時の注意点

1. エラーハンドリング

シーケンス処理の場合

各ステップでエラーチェック:
1. 処理A実行
   → 失敗したら中断
2. 処理B実行
   → 失敗したらAを戻して中断

並列処理の場合

個別にエラー管理:
├─ 処理1:成功
├─ 処理2:失敗 → 記録して続行
├─ 処理3:成功
└─ 処理4:成功

最後に失敗分だけ再処理

2. 進捗管理

並列処理の進捗表示:
処理中:[####......] 40% (400/1000完了)

個別状態:
- バッチ1:完了
- バッチ2:処理中
- バッチ3:待機中
- バッチ4:エラー(再試行中)

3. リトライ戦略

並列処理でのリトライ:
- 個別にリトライ(他に影響しない)
- 最大3回まで
- 指数バックオフ(1秒→2秒→4秒)

今日のまとめ

処理方式の使い分け

  1. シーケンス処理:順序が大切な時に使う
  2. 並列処理:独立した処理を高速化
  3. 多くの場合は両者の組み合わせが最適
  4. 依存関係を明確にして設計
  5. パフォーマンスは実測して最適化

次回予告

次のレッスンでは、「エラー処理:失敗しても大丈夫な仕組み」を学びます。

  • エラーの種類と対処法
  • リトライとフォールバック
  • エラー通知とログ
  • 自己修復する自動化

どんなに完璧な自動化も、エラーは必ず発生します。それを前提とした設計方法を学びましょう!

チャレンジ問題

問題1:処理方式を選ぼう

以下の処理にシーケンス/並列のどちらが適切か選んでください:

  1. 1000枚の写真のサムネイル作成
  2. ユーザー登録(メール確認→DB登録→ウェルカムメール)
  3. 10個のWebサイトから最新ニュース取得
  4. 給与計算(勤怠集計→控除計算→振込データ作成)
答えを見る
  1. 並列処理:各画像は独立して処理可能
  2. シーケンス処理:順番に依存関係がある
  3. 並列処理:各サイトは独立している
  4. シーケンス処理:前の計算結果を次が使用

問題2:最適な組み合わせを設計

「複数店舗の月次売上レポート作成」の処理フローを、並列とシーケンスを組み合わせて設計してください。

設計例を見る
【第1段階】店舗別データ収集(並列)
├─ 東京店のデータ取得
├─ 大阪店のデータ取得
├─ 名古屋店のデータ取得
└─ 福岡店のデータ取得
    ↓
【第2段階】店舗別集計(並列)
├─ 東京店の集計処理
├─ 大阪店の集計処理
├─ 名古屋店の集計処理
└─ 福岡店の集計処理
    ↓
【第3段階】全体処理(シーケンス)
1. 全店舗データの統合
2. 全社合計の計算
3. 前年同月比の計算
4. グラフ作成
    ↓
【第4段階】配信(並列)
├─ 役員へメール送信
├─ 各店長へメール送信
├─ 社内ポータルへアップロード
└─ Slackへ通知

問題3:ボトルネックを見つけよう

以下の処理フローのボトルネックを特定し、改善案を提案してください:

現在のフロー(すべてシーケンス):
1. データベースから1万件取得(10秒)
2. 各レコードを1件ずつ処理(1件0.1秒 = 1000秒)
3. 結果をファイルに書き込み(5秒)
合計:1015秒
改善案を見る

ボトルネック:ステップ2の逐次処理(1000秒)

改善案

1. データベースから1万件取得(10秒)※そのまま
    ↓
2. 10並列で処理(変更点)
   - 1万件を1000件×10グループに分割
   - 各グループを並列処理
   - 1000件×0.1秒 = 100秒
    ↓
3. 結果をファイルに書き込み(5秒)※そのまま

改善後の合計:115秒(約9分の1に短縮!)

さらなる改善:

  • データ取得も分割して並列化
  • 書き込みをバッファリング
  • より多くの並列数を検討

処理の効率化は、自動化の真価を発揮する重要な要素です。適切な使い分けで、驚くほどの時間短縮が可能になります!

さらに学習を続けるには

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

無料で続きを学ぶ

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

学習進捗の自動保存

コース修了証明書の発行