C#で業務効率化を実現!自動化スクリプト10選【2026最新版】

業務効率化は、組織の競争力を左右する重要な要素です。
「何かを自動化して、時間と手間を削減したい!」という声は、開発者だけでなく、事務担当者や経営層まで幅広くあります。
そんな声に答えるのが C# です。

.NET の豊富なライブラリと、Windows だけでなく Linux もカバーするクロスプラットフォームサポートにより、デスクトップアプリから Web まで、あらゆる領域で自動化スクリプトを書きやすくしています。
2026年版として特に注目すべき、最新ライブラリや API を組み込んだ自動化スクリプトを 10 個まとめました。
まずは何を自動化すべきか―という背景を整理し、次に具体的に「どう書くか」をコード例とともに解説します。

1. ディレクトリ監視&自動アーカイブ

業務で定期的にファイルを受け取ることがある場合、ディレクトリ監視は時間を大幅に短縮します。
.NET の FileSystemWatcher を使えば、ファイルの生成・変更・削除を即座に検知できます。

using System;
using System.IO;
using System.IO.Compression;

class ArchiveWatcher
{
    static void Main()
    {
        var watcher = new FileSystemWatcher(@"C:\DropFolder")
        {
            NotifyFilter = NotifyFilters.FileName | NotifyFilters.CreationTime,
            Filter = "*.txt"
        };

        watcher.Created += OnCreated;
        watcher.EnableRaisingEvents = true;

        Console.WriteLine("監視中… Ctrl+C で終了");
        Console.ReadKey();
    }

    private static void OnCreated(object sender, FileSystemEventArgs e)
    {
        string zipPath = Path.Combine(@"C:\Archive", $"{Path.GetFileNameWithoutExtension(e.Name)}.zip");
        ZipFile.CreateFromDirectory(@"C:\DropFolder", zipPath);
        File.Delete(e.FullPath);
        Console.WriteLine($"【自動】{e.Name} をアーカイブしました。");
    }
}

上記は単純なテキストファイルを受け取るケースですが、 Filter を拡張すれば画像・ログ・レポートなど多様なファイルを対象にできます。

2. メール送信自動化(送信済みログ付き)

週次レポートや毎朝の営業先連絡など、メール自動送信は頻繁に要求されます。
.NET の SmtpClient で簡単に送信できますが、送信ログを残すことで後から確認や再送がスムーズです。

using System;
using System.Net;
using System.Net.Mail;
using System.IO;

class MailAuto
{
    private static string logFile = @"C:\Logs\maillog.txt";

    static void Main()
    {
        SendEmail(
            to: "sales@example.com",
            subject: $"月次レポート {DateTime.Today:yyyy-MM-dd}",
            body: "添付のレポートをご確認ください。"
        );
    }

    static void SendEmail(string to, string subject, string body)
    {
        var mail = new MailMessage("noreply@mycompany.com", to, subject, body);
        mail.IsBodyHtml = false;

        using var client = new SmtpClient("smtp.mycompany.com")
        {
            Port = 587,
            Credentials = new NetworkCredential("user", "pass"),
            EnableSsl = true
        };

        try
        {
            client.Send(mail);
            Log($"送信成功: {to} / {subject}");
        }
        catch (Exception ex)
        {
            Log($"送信失敗: {ex.Message}");
        }
    }

    static void Log(string message)
    {
        var record = $"{DateTime.Now:yyyy-MM-dd HH:mm:ss} - {message}";
        File.AppendAllLines(logFile, new[] { record });
        Console.WriteLine(record);
    }
}

ポイント

  • ログファイルで送信履歴を保存 → 再送時の判断
  • SMTP サーバーの設定は外部設定ファイル(appsettings.json 等)に分離すると可搬性が向上

3. データベースバックアップ自動化

データベースは定期的にバックアップを作る必要があります。SQL Server なら sqlcmd を呼び出すか、Ado.NET で直接操作できます。

using System;
using System.Data.SqlClient;
using System.IO;

class DbBackup
{
    static void Main()
    {
        string backupPath = $@"C:\Backups\MyDb_{DateTime.Now:yyyyMMdd}.bak";
        string connectionString = "Server=.;Database=MyDb;Trusted_Connection=True;";

        var backupSql = $@"BACKUP DATABASE MyDb TO DISK = N'{backupPath}' WITH FORMAT, MEDIANAME = 'MyDbBackup', NAME = 'Full Backup of MyDb';";

        using var conn = new SqlConnection(connectionString);
        using var cmd = new SqlCommand(backupSql, conn);

        try
        {
            conn.Open();
            cmd.ExecuteNonQuery();
            Console.WriteLine($"【バックアップ完了】{backupPath}");
        }
        catch (Exception ex)
        {
            Console.Error.WriteLine($"【バックアップ失敗】{ex.Message}");
        }
    }
}

実務上のポイント

  • バックアップファイルを Azure Blob Storage へ自動アップロード(Azure.Storage.Blobs を使う)
  • バックアップ失敗をメールで通知
  • 7 日ごとに古いバックアップを自動削除

4. Excel マクロではなく C# でのバッチ処理

Excel VBA を使わずに C# で大量データを処理する例です。EPPlus ライブラリを使うと、Excel ファイルの読み書きが高速で安全に行えます。

using System;
using System.IO;
using OfficeOpenXml;

class ExcelBatch
{
    static void Main()
    {
        string input = @"C:\Data\input.xlsx";
        string output = @"C:\Data\output.xlsx";

        ExcelPackage.LicenseContext = LicenseContext.NonCommercial;
        using var package = new ExcelPackage(new FileInfo(input));

        var worksheet = package.Workbook.Worksheets[0];
        int rowCount = worksheet.Dimension.Rows;

        for (int row = 2; row <= rowCount; row++)
        {
            var name = worksheet.Cells[row, 1].Text;
            var score = double.Parse(worksheet.Cells[row, 2].Text);

            // 例: 成績が 70 未満なら赤くハイライト
            if (score < 70)
                worksheet.Cells[row, 2].Style.Fill.PatternType = OfficeOpenXml.Style.ExcelFillStyle.Solid;
                worksheet.Cells[row, 2].Style.Fill.BackgroundColor.SetColor(System.Drawing.Color.Red);
        }

        package.SaveAs(new FileInfo(output));
        Console.WriteLine($"【Excel処理完了】{output}");
    }
}
  • EPPlus は .NET Standard 2.0 以降から正式に商用版で購入が必要な場合があります。
  • 大量データでも高速に処理可能(数万行でも数秒以内)

5. Web スクレイピング(Headless ブラウザ)

Web から定期的に情報を取得する必要がある場合、 SeleniumHeadless Chrome を組み合わせると UI を見せないでスクレイピングできます。

using System;
using OpenQA.Selenium;
using OpenQA.Selenium.Chrome;
using System.IO;

class WebScraper
{
    static void Main()
    {
        var options = new ChromeOptions();
        options.AddArgument("--headless");
        options.AddArgument("--disable-gpu");
        options.AddArgument("--no-sandbox");

        using var driver = new ChromeDriver(options);
        driver.Navigate().GoToUrl("https://example.com/products");

        // 例: 商品名と価格を取得
        var items = driver.FindElements(By.CssSelector(".product-item"));
        using var writer = new StreamWriter(@"C:\Data\products.txt");

        foreach (var item in items)
        {
            var name = item.FindElement(By.CssSelector(".title")).Text;
            var price = item.FindElement(By.CssSelector(".price")).Text;
            writer.WriteLine($"{name}\t{price}");
        }

        Console.WriteLine("【スクレイピング完了】products.txt を出力");
    }
}
  • ポイント: Selenium.WebDriverSelenium.WebDriver.ChromeDriver を nuget でインストール
  • 定期実行は Windows Task Scheduler か Azure Functions で実行可

6. API連携自動化(WebHook 受信+処理)

外部サービス(Slack、Teams、Jira など)と連携し、イベントを受信して自動処理を行う簡易サーバーを作ります。ASP.NET Core Minimal API が手軽です。

using Microsoft.AspNetCore.Builder;
using Microsoft.Extensions.Hosting;
using Microsoft.AspNetCore.Http;
using System.Text.Json;

var builder = WebApplication.CreateBuilder(args);
var app = builder.Build();

app.MapPost("/webhook", async (HttpRequest req) =>
{
    using var reader = new StreamReader(req.Body);
    var body = await reader.ReadToEndAsync();
    var payload = JsonSerializer.Deserialize<WebhookPayload>(body);

    // 例: 受信したデータを DB に保存
    SaveToDatabase(payload);

    return Results.Ok("OK");
});

app.Run("http://0.0.0.0:5000");

void SaveToDatabase(WebhookPayload payload)
{
    // 実装例:ファイル出力
    File.AppendAllText(@"C:\Data\webhook.log",
        $"{DateTime.Now:O} - {payload.Id}\n");
}

public class WebhookPayload
{
    public string Id { get; set; }
    public string Event { get; set; }
}
  • Docker でコンテナ化すると Azure Container Apps へデプロイ容易
  • HTTPS を設定し、認証(Bearer Token 等)で保護

7. CI/CD の自動化(PowerShell + dotnet CLI)

GitHub Actions でビルド・テスト・デプロイを自動化する際、C# の dotnet CLI を呼び出すスクリプトは頻繁に使われます。

#!/usr/bin/env bash
set -e

# 1. ビルド
dotnet build src/MyApp.csproj -c Release

# 2. テスト
dotnet test tests/MyApp.Tests.csproj -c Release --logger "trx;LogFileName=test-results.trx"

# 3. Docker イメージ作成
docker build -t myapp:$(git rev-parse --short HEAD) -f Dockerfile .

# 4. コンテナレジストリへ push
docker tag myapp:$(git rev-parse --short HEAD) myregistry.azurecr.io/myapp:$(git rev-parse --short HEAD)
docker push myregistry.azurecr.io/myapp:$(git rev-parse --short HEAD)

echo "CI/CD 完了"
  • GitHub Secrets に Azure Container Registry の認証情報を登録
  • 上記スクリプトを ci.yml で呼び出すことで、1 行でビルド・テスト・デプロイが完了

8. 時間ベースのタスクスケジューラ(Windows だけでなく Linux も可)

System.Threading.Timer を使った簡易スケジューラは、.NET Core でクロスプラットフォームに対応します。

using System;
using System.Threading;

class SchedulerDemo
{
    private static Timer _timer;

    static void Main()
    {
        _timer = new Timer(DoWork, null, TimeSpan.Zero, TimeSpan.FromHours(1));
        Console.ReadLine();
    }

    private static void DoWork(object state)
    {
        Console.WriteLine($"【定時実行】{DateTime.Now}");
        // ここに処理を書く
    }
}
  • より複雑なジョブ(Cron 形式)を扱うには Quartz.NET を検討
  • Windows Service として実行したい場合は Worker Service テンプレートを利用

9. ログ集約と通知システム

業務アプリのログを一元管理し、異常が検知されたら Slack へ通知するシンプルなサンプルです。SerilogSerilog.Sinks.Slack を使うと設定は簡単。

using Serilog;
using Serilog.Events;

class LoggingDemo
{
    static void Main()
    {
        Log.Logger = new LoggerConfiguration()
            .MinimumLevel.Information()
            .WriteTo.Console()
            .WriteTo.File(@"C:\Logs\app.log",
                rollingInterval: RollingInterval.Day)
            .WriteTo.Slack("YOUR_SLACK_WEBHOOK_URL",
                restrictedToMinimumLevel: LogEventLevel.Error,
                customizeMessage: (msg) => msg.Facility("MyApp"))
            .CreateLogger();

        Log.Information("アプリ起動");

        try
        {
            throw new Exception("想定外のエラー");
        }
        catch (Exception ex)
        {
            Log.Error(ex, "エラーが発生しました");
        }

        Log.CloseAndFlush();
    }
}
  • Slack だけでなく Microsoft Teams 用の Webhook に置き換えることも簡単
  • Azure Monitor へのエクスポートを行えば、クラウドベースのダッシュボードでリアルタイム監視が可能

10. レポート自動生成(PDF )

業務では PDF へのレポート作成が頻繁にあります。iText7 でスタイリッシュな PDF を簡単に生成

using System.IO;
using iText.Kernel.Pdf;
using iText.Layout;
using iText.Layout.Element;

class PdfReport
{
    static void Main()
    {
        string outPath = @"C:\Reports\sales_report.pdf";

        using var pdfWriter = new PdfWriter(outPath);
        using var pdfDoc = new PdfDocument(pdfWriter);
        var doc = new Document(pdfDoc);

        doc.Add(new Paragraph("月次売上レポート")
            .SetFontSize(18)
            .SetBold());

        doc.Add(new Paragraph($"日付: {DateTime.Today:yyyy-MM-dd}")
            .SetFontSize(12));

        // テーブル例
        var table = new Table(3);
        table.AddHeaderCell("商品");
        table.AddHeaderCell("数量");
        table.AddHeaderCell("売上");

        // ダミーデータ
        table.AddCell("A商品");
        table.AddCell("120");
        table.AddCell("¥120,000");

        table.AddCell("B商品");
        table.AddCell("80");
        table.AddCell("¥80,000");

        doc.Add(table);
        doc.Close();

        Console.WriteLine($"【PDF作成完了】{outPath}");
    }
}
  • CSV から自動生成する場合は CsvHelper で読み込み、上記 PDF 作成ロジックに渡すだけ
  • PDF のテンプレートを iText 7 Layout で作成すると、デザインの統一感を保てます

まとめ

  • ディレクトリ監視 でファイルを自動アーカイブ
  • メール送信 をログ付きで自動化
  • データベースバックアップ とクラウドへの自動アップロード
  • ExcelWeb スクレイピング で大量データ処理
  • API連携 で外部サービスと自動連携
  • CI/CD でビルド・テスト・デプロイを完全自動
  • タスクスケジューラ で定時ジョブをクロスプラットフォーム実装
  • Serilog でログ集約と異常時通知
  • PDF レポートを簡易自動生成

これらのサンプルを組み合わせることで、ほぼすべての業務プロセスをコードで「自動化」できる基盤が構築できます。
まずは自社の「手間がかかっている」作業を洗い出し、上記実装例のいずれかに置き換えてみてください。
C# は「開発と維持が楽」として多くの企業で採用されています。是非、これを踏み台にさらに高度な自動化・データ化を進めてみてください。

コメント

タイトルとURLをコピーしました