0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

CopilotでOutlookから会議時間を集計するアプリを作成

0
Last updated at Posted at 2025-11-07

はじめに

Outlookの会議情報を効率的に管理したいと思ったことはありませんか?
私は、Outlookの会議情報を取得・集計し、Excelに出力するツール 「Outlook Meeting Project」 を開発しました。
このプロジェクトは Microsoft Copilot を活用して設計・実装を進めたものです。

Outlook Meeting Projectの主な機能

  • 自身のOutlookの予定表から、月ごとに同じ件名の会議の件数と合計時間を集計
  • 集計した情報をExcelファイルに自動保存
  • 期間や会議のステータス、会議の分類を指定可能

👉 GitHubリポジトリはこちら

Outlook Meeting の使い方

1. exeファイルをダウンロードし、実行する。
ダウロード時警告がでるが、保存を押下する
image.png
2. 日付、会議のステータス、会議の分類(任意、除外したい場合はExclude Categoryにチェックを入れる) 、ダウンロード先の指定(デフォルトはダウンロードフォルダ)、表示形式(分、時、日)を選び、Runを押下する。 
image.png
3. 実行結果が表示される。同時に保存先にEXCELが保存される
image.png

完成までの流れ

1. 毎月の工数入力が面倒

 毎月の工数入力がふと面倒だなと思ったとき、CopilotにOutlookから抽出できないか相談しました。すると、一発で下記のpythonコードを出力してくれました。実行環境がある人であれば十分な状態です。

import win32com.client
import datetime
from collections import defaultdict

# Outlookアプリケーションを初期化
outlook = win32com.client.Dispatch("Outlook.Application")
namespace = outlook.GetNamespace("MAPI")

# カレンダーフォルダを取得
calendar_folder = namespace.GetDefaultFolder(9)  # 9はカレンダーフォルダを指します

# カレンダーアイテムを取得
calendar_items = calendar_folder.Items

 
# カレンダーアイテムを開始日時でソートし、繰り返しの会議を含むように設定
calendar_items.Sort("[Start]")
calendar_items.IncludeRecurrences = True

# 会議の期間を定義(例:今年の4月から9月まで)
start_date = datetime.datetime(datetime.datetime.now().year, 4, 1)
end_date = datetime.datetime(datetime.datetime.now().year, 9, 30)
restriction = "[Start] >= '" + start_date.strftime("%m/%d/%Y %H:%M %p") + "' AND [End] <= '" + end_date.strftime("%m/%d/%Y %H:%M %p") + "'"
restricted_items = calendar_items.Restrict(restriction)

# 各月ごとの会議の詳細を格納する辞書を初期化
meetings_by_month = {month: defaultdict(lambda: {"count": 0, "total_duration": datetime.timedelta()}) for month in range(4, 10)}

# 制限されたアイテムを反復処理して会議の詳細を抽出
for item in restricted_items:
    if item.MeetingStatus in [1, 3]:  # 1は会議、3は会議リクエストを指します
        meeting_month = item.Start.month
        meeting_subject = item.Subject
        meeting_duration = datetime.timedelta(minutes=item.Duration)
       
        if meeting_month in meetings_by_month:
            meetings_by_month[meeting_month][meeting_subject]["count"] += 1
            meetings_by_month[meeting_month][meeting_subject]["total_duration"] += meeting_duration

# 各月ごとの会議の一覧と合計時間、回数を表示
for month, meetings in meetings_by_month.items():
    print(f"Meetings in month {month}:")
    for subject, details in meetings.items():
        print(f"  Subject: {subject}, Count: {details['count']}, Total Duration: {details['total_duration']}")
    print("\n")

 このままでも十分なのですが、GUIと追加機能をこのままCopilotに作成してもらいました。

2. 実装技術の決定

 Pythonのライブラリはどれを使えばいいかわからないのでCopilotに訊き、下記の方法でGUIを作成することにしました。

  • Python + win32com.client + pandas を採用。
  • tkinterでGUIを作成
  • PyInstallerで .exe を作成

3. 実行環境の整備

 そして、実際に開発する環境の整備ですが、これもCopilotに訊きながら整備しました。Pythonのバージョン管理は相談した結果、venvを採用しました。venvはPythonを公式サイトからインストーラーをダウンロードし、インストールすると一緒についてくる機能です。

仮想環境の作成

ソースコードがある場所でvenvを作成します。

python -m venv venv

4.実装

 実際作っていてうまくいかない場合もありました。会話を長く続けるとなぜか、固まってしまうのでやり直したり、ファイル間の連携がうまくいかなかったりしました。また、いくら聞いても解決できないバグは、ぐぐった方が速かったりしました。

5.GitHubのリリースノート

 exe化した後はGitHubに載せます。ここで必要なリリースノートもCopilotに作成してもらいました。多少は手で修正が必要ですが、リリースに書くべきことを粗方だしてくれるので楽です。

改修時の手順

 構造はすごくシンプルでGUIをgui.pyでロジックをoutlookmeeting.pyに記載している。
下記のコマンドがわかればあとはCopilotにソースを貼り、機能追加をお願いする。
(ただし、デグレが良く発生するので部分改修がベーター)

Python環境の確認

Pythonは公式サイトからインストーラーをダウンロードしてインストールします。

python --version
仮想環境の立ち上げ

Macの場合

source venv/bin/activate  

Windowsの場合

venv\Scripts\activate
依存パッケージのインストール

プロキシ設定が必要な場合はプロキシ設定をコマンドに追加します。

pip install -r requirements.txt --proxy http://username:password@proxy.example.com:8080
実行
 python main.py
実行ファイルの作成

pyInstallerでexe化

 pyinstaller outlookmeetings.spec

ただこの方法だと、以下の問題が発生中

おわり

 Copilotにソースを読み込ませるときは、基本コピペなのが面倒ですが、ソースをほぼCopilotに書いてもらうことで完成しました。環境や必要なライブラリも提案してくれるので、簡単なアプリであれば気軽に作れるのを実感しました。また、月末になるとこのアプリを使うので作って良かったと思います。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?