🐉

エクセルだけでBPMN風フロー図を爆速作成!自治体DXを踏み出すための「jp-localgov-workflow-kit」を開発した話

に公開

🎯 この記事の対象読者

  • 自治体でDXや業務改善を担当されている職員の方
  • 「業務の可視化」と言われても、何から手をつけていいか悩んでいる方
  • プログラミング経験はあまりないけど、身近なツールで業務を効率化したいと考えている方
  • VBAやExcelを使ったツール開発に興味があるエンジニアの方

💡 この記事を読むと得られること

  • Excel VBAを使って業務フロー図を自動生成するツールの全体像がわかる
  • 複雑な業務プロセスを、誰でも簡単に可視化できる具体的な方法がわかる
  • 自治体業務におけるLLM(大規模言語モデル)の活用の一つのイメージがわかる
  • 業務分析を効率化するヒントが得られる

🚀 はじめに:なぜこの記事を書いたか

自治体のDX担当者のみなさん、こんにちは!

「DXを進めるには、まず業務改革ありき。そのためには業務フローの可視化が重要だ!」

…これ、耳にタコができるほど聞きますよね。でも、いざやろうとすると、「可視化」そのものがめちゃくちゃ大変な業務になっていませんか?

特に、日々の業務に追われる中で、専門知識も人的リソースも限られているのが多くの自治体のリアルだと思います。高尚なDX論も大切ですが、現場で本当に求めているのは、気取らないけど確実にお腹を満たしてくれる『町中華』のようなツールではないでしょうか。

手軽で実用的なサポートがしたい。そんな想いから、多くの自治体職員が使い慣れているExcelだけで、BPMN風の業務フロー図をワンクリックで作成できるツールjp-localgov-workflow-kit」を開発しました。この記事が、現場で奮闘する皆さんの「武器」の一つになれば、これほど嬉しいことはありません。


😫 課題:業務フロー図作成のつらい現実

業務改善の第一歩として重要な「業務の可視化」。しかし、その道のりは決して平坦ではありません。

担当者へのヒアリング、手書きのメモ、ホワイトボードでの整理…ここまではいいんです。問題は、それを「ちゃんとした」フロー図に清書する作業。Excelの図形を一つひとつ並べ、線を引いて、テキストを書き込んで…

  • 「あれ、ここのプロセスが抜けてる…」→ 全体のレイアウトを大移動
  • 「担当者が増えた…」→ レーンを追加して、また図形をポチポチ移動
  • 気づけば、フロー図を作ることが目的になってしまい、本来の業務改善の議論が進まない…

こんな「あるある」な状況を、どうにかしたかったのです。

業務フロー図を作成する業務のフロー図(rhyme)


✨ 解決策:Excelだけで完結する「jp-localgov-workflow-kit」

そんなつらい現実を打破するために開発したのが、「jp-localgov-workflow-kit」です!

このツールのすごいところは、Excelシートに業務の流れを箇条書きで入力していくだけで、BPMN(ビジネスプロセスモデリング表記法)っぽい業務フロー図をワンクリックで自動生成できること。

さらに、おまけ機能として、生成した業務内容を元に業務マニュアルの草案や、業務分析のためのプロンプトをLLMにそのまま投げ込めるMarkdown形式で出力します。

項目 内容
ツール名 jp-localgov-workflow-kit
概要 エクセルに業務の流れを入力するだけで、BPMN風の業務フロー図を自動生成。さらにLLM活用のためのプロンプトセットも出力。
利用シーン 窓口業務、内部事務など、あらゆる業務プロセスの可視化と改善検討
GitHubリポジトリ https://github.com/HosoyaYusaku/jp-localgov-workflow-kit

🛠️ 技術スタックと選定理由

特別なアプリケーションは一切不要!普段使っているExcelだけで動くことにこだわりました。

技術 役割 選定理由
Excel VBA 開発言語 多くの自治体で標準的に導入されており、職員が追加の環境構築なしにすぐ使えるため。最も身近な「最強ツール」!
(独自ロジック) 業務フロー図のレイアウト 1つのシートに入力された情報から、担当者ごとのレーンやプロセスの前後関係を読み取り、図形を自動で配置・接続するロジックをVBAで実装しました。

📜 コードのハイライト

このツールの心臓部である、Excelシートの情報から図形を一つひとつ描画し、線で繋いでいくVBAコードの一部を紹介します。フロー図の見た目を簡単にカスタマイズできるように設計しています。

' --- レイアウト設定 ---
' 図形のサイズや間隔など、デザインに関する詳細設定です。
' ここの数値を変更するだけで、フロー図の見た目を自由にカスタマイズできます。
Private Const POOL_TITLE_WIDTH As Long = 120
Private Const LANE_HEADER_WIDTH As Long = 100
Private Const SHAPE_WIDTH As Long = 220
Private Const SHAPE_HEIGHT As Long = 110
Private Const X_STEP As Long = 260
Private Const Y_LANE_HEIGHT As Long = 280

'===================================================================================================
' ■■■ フロー図の描画と接続 ■■■
' このツールの中核をなす部分です。
' Excelリストの各行をループ処理し、一つ一つの図形を描画・接続していきます。
'===================================================================================================
Private Sub DrawAndConnectShapes_Absolute()
    ' ステップ1: 全ての図形を描画する
    Dim id As String
    Dim i As Long
    For i = LBound(taskOrder) To UBound(taskOrder)
        id = taskOrder(i)
        
        If Not taskData.Exists(id) Then GoTo NextTask
        Dim currentTask As Object: Set currentTask = taskData(id)
        Dim who As String: who = currentTask("who")

        ' 担当者情報に基づき、正しいレーンを決定
        If who = "" Or Not laneLayout.Exists(who) Then
            who = "その他"
        End If
        
        If laneLayout.Exists(who) Then
            ' 1. X座標(横位置)の決定:手順番号(ID)から絶対的な位置を計算
            Dim numericId As Long: numericId = Val(id)
            Dim xPos As Long: xPos = X_START + (numericId - 1) * X_STEP

            ' 2. Y座標(縦位置)の決定:レーンの中央を基準に配置
            Dim laneInfo As Variant: laneInfo = laneLayout(who)
            Dim yPos As Long: yPos = laneInfo(0) + (laneInfo(1) - SHAPE_HEIGHT) / 2
            
            ' 3. 図形を描画し、後で接続するためにコレクションに保存
            Dim newShape As Shape
            Set newShape = DrawShape(wsOutput, id, currentTask, xPos, yPos)
            shapeCollection.Add id, newShape
        End If
NextTask:
    Next i
    
    ' ステップ2: 全ての図形を描画した後に、一括で接続する
    For i = LBound(taskOrder) To UBound(taskOrder)
        ConnectShape taskOrder(i)
    Next i
End Sub


' 実際に一つの図形を描画する関数
Private Function DrawShape(targetSheet As Worksheet, id As String, currentTask As Object, x As Long, y As Long) As Shape
    Dim flowElement As String: flowElement = currentTask("flowElement")
    Dim txt As String: txt = currentTask("summary")
    
    Dim baseShape As Shape
    Dim shpType As MsoAutoShapeType
    Dim shpColor As Long, shpWeight As Single
    shpColor = RGB(255, 255, 255)
    shpWeight = 1.5
    
    ' 「フロー要素」列の内容に応じて、図形の種類(丸、ひし形など)を決定
    Select Case True
        Case InStr(flowElement, "開始") > 0
            shpType = msoShapeOval
        Case InStr(flowElement, "終了") > 0
            shpType = msoShapeOval
            shpWeight = 3
        Case InStr(flowElement, "分岐") > 0, InStr(flowElement, "合流") > 0
            shpType = msoShapeDiamond
            shpColor = RGB(240, 240, 240)
        Case Else
            shpType = msoShapeRoundedRectangle
    End Select
    
    ' 決定した種類と座標で図形を追加
    Set baseShape = targetSheet.shapes.AddShape(shpType, x, y, SHAPE_WIDTH, SHAPE_HEIGHT)
    
    ' 図形の書式とテキストを設定
    With baseShape
        .Name = "Shape_" & id
        .Line.ForeColor.RGB = RGB(0, 0, 0)
        .Line.Weight = shpWeight
        .Fill.ForeColor.RGB = shpColor
        With .TextFrame2
            .VerticalAnchor = msoAnchorMiddle
            .WordWrap = msoTrue
            .TextRange.ParagraphFormat.Alignment = msoAlignCenter
            .TextRange.Text = id & ". " & vbCrLf & txt
            With .TextRange.Font
                .Name = FONT_NAME
                .Size = 10
                .Fill.ForeColor.RGB = RGB(0, 0, 0)
            End With
        End With
    End With
    
    Set DrawShape = baseShape
End Function

💻 使い方

① 環境構築

特別なツールのインストールは不要です!以下の手順ですぐに動かせます。

  1. GitHubリポジトリをダウンロード

    • こちらのリポジトリにアクセスし、「Code」ボタンから「Download ZIP」を選択して、ファイルを一式ダウンロード・解凍します。
  2. マクロ有効Excelブックを準備

    • Excelを起動し、新規に「マクロ有効ブック (.xlsm形式)」で保存します。ファイル名は自由です。(例:「業務フロー作成.xlsm」)
    • ダウンロードした sample_data フォルダ内にある Business_Process_List.xlsx を開き、中身をすべてコピーします。
    • 先ほど作成したマクロ有効ブック(.xlsm)に新しいシートを追加し、データを貼り付けた後、シート名を「業務リスト」に変更します。
  3. VBAモジュールをインポート

    • マクロ有効ブックを開いた状態で、Alt + F11 キーを押し、VBE(Visual Basic Editor)を開きます。
    • VBEのプロジェクトエクスプローラー上で右クリックし、「ファイルのインポート」を選択します。
    • ダウンロードした vba_modules フォルダにある、以下の2つのファイルをインポートします。
      • FlowchartGenerator.bas (CreateFlowChart)
      • LLMExporter.bas (ExportMarkdownForLLM)
  4. マクロを実行

    • Excelの画面に戻り、Alt + F8 キーを押してマクロ一覧を開きます。
    • CreateFlowChart を選択して実行すると、業務フロー図と凡例シートが新しく生成されます。
    • ExportMarkdownForLLM を選択して実行すると、LLM連携用のMarkdownファイル2点がデスクトップに出力されます。

② 出力結果(Before / After)

Before: ただのExcelのリストが…

After: ワンクリックでフロー図と分析用Markdownに!


🧗 開発でつまづいた点と解決策

開発は順風満帆…とはいきませんでした(笑)。特に苦労した点と、どう乗り越えたかを紹介します。

  • 課題1:BPMNの厳密なルールにこだわりすぎて、実装が複雑になりすぎた

    • 原因・解決策: 最初はBPMNの仕様を完璧に再現しようと意気込んでいました。しかし、ゲートウェイの種類やイベントの記法などを全て盛り込もうとすると、VBAでは実装が困難を極め、途中で頓挫しかけました。そこで、「完璧」より「実用性」を重視する方針に転換。「開始」「終了」「分岐」「タスク」など、業務改善の議論に最低限必要な要素に絞り込み、手書きで補足するような細かい記号は思い切って文字情報に置き換えることで、シンプルで実用的なツールに仕上げることができました。高級フレンチのフルコースではなく、いつもの「チャーハンと餃子」を目指す。まさに「そうそう、こういうので良いんだよ」という町中華スピリットが重要でした。
  • 課題2:生成されたフロー図の矢印が重なって、とても見づらかった

    • 原因・解決策: 当初、同じ主体のタスクはすべて同じ高さに並べていました。しかし、これだとタスクをつなぐ矢印が一直線上に重なってしまい、どこからどこへフローが流れているのか、非常に視認性が悪い状態でした。そこで、タスクの描画位置を単純な横並びにするのではなく、意図的に少し上下にずらす処理を追加しました。たったこれだけの工夫で、矢印の重なりが解消され、格段にフローが見やすくなりました。完全解決ではないですが、見やすくできました。

🔭 今後の展望と野望

現状、セキュリティや利用環境を考慮して、LLMに渡すプロンプトはMarkdownファイルとして出力する形にしています。でも、本当は…

「分析実行」ボタンをワンクリックするだけで、LLMのAPIが裏側で動いて、業務マニュアルの生成から課題の洗い出しまで、全自動で完了する。

…なんてことができたら最高ですよね!技術的には、下ごしらえさえすれば十分に実現可能です。自治体のネットワーク環境などのハードルはありますが、いつかそんな「究極のワンクリック業務改善ツール」を実現して、お届けしたいと思っています。


🔚 おわりに:小さな一歩が、大きな変化を生むと信じて

今回開発した「jp-localgov-workflow-kit」は、決して万能な魔法の杖ではありません。しかし、業務改善の最も面倒で時間のかかる「可視化という最初の壁を乗り越えるための、心強い相棒にはなれると信じています。

このツールが、皆さんにとっての「町中華」のように、気取らず、でも確実に日々の業務を楽にしてくれる存在になれたら嬉しいです。

「そうそう、こういうので良いんだよ」

現場の皆さんの、そんな一言が聞きたくてこのツールを作りました。ぜひ、あなたの職場で試してみてください。

現場の小さな一歩が、やがて組織全体の大きな変化を生み出す。

そう信じて、これからもDXを続けていきましょう!

Discussion