Topics

因為需要採購單,所以用 Claude Code 製作了採購單產生工具(桌面應用程式)的故事

  • column

在日常業務中,只要發現「一直靠手動處理有點吃力」的工作,就用 Claude Code 快速建置一套小型機制!這已經成為日常的做法了。

這次正是這種典型的情況,契機是公司增加了資本金。

本公司以 2月為會計期首,這次增資也是在 2月進行的。隨著資本金的增加,對於向外部夥伴和協力公司的委託業務,我們需要比以往更加妥善地整備相關流程。

這就是所謂的下請法,在現行制度中,自 2026年01月起被稱為「取適法」的領域。作為發購方,需要進行的對應工作增加了,包括發購內容的明示、交易文件的製作與保存、支付期日的設定等。

當然,這並不只是「因為有法律規定,所以被迫執行」的事情!

既然向外部夥伴委託工作,就應該把發購內容、金額、日期、與估價單的對應關係明確下來,這對發購方和受委方雙方都很重要。(決心)

會計工具附帶的功能中也沒有這個

本公司在會計、估價、發票相關業務中使用 MoneyForward(以下簡稱 Manefo)工具。
日常的會計和發票業務中很方便,但這次想要做的事情有點不同。

根據外部合作夥伴收到的估價單 PDF,製作 Liberogic 的採購單 PDF

至少在我們使用的範圍內,Moneforce 沒有正好適合的功能,而且為了這個功能而簽訂服務合約也不划算,對吧。

假如變成手動作業的話,

  • 製作採購單格式
  • 查看估價單,手動將資料轉記到採購單格式中
  • 記載採購日期
  • 轉記估價單編號
  • 轉記明細
  • 確認合計金額等內容
  • 整理檔案名稱
  • 其他其他...…

確實很麻煩,這類工作增加...…所以我們決定開發這個工具。

用 Claude Code 在不到一小時內實現投入使用

時機也很恰當。

2月期初、2月增資,加上 Claude Code 發佈和公司員工的熟悉度提升這三件事同時進行。

公司內部也正好是那個時期,大家開始使用 Claude Code 等工具,進行業務改善工具或小型內部應用程式的開發,甚至完成自發性創意的部署——有點像黑客松的氛圍。

從超簡單的規格整理到對 Claude Code 的指示,以及細微調整...…

不到一小時就能夠推進到可以實際使用的程度。

當然,不是把所有事都丟給 AI 就能完成,但如果能夠恰當地轉化為提示詞,確實能快速且便利呢~!

桌面應用程式完成

這是一個在各位可能正在使用的作業系統上執行的簡單採購單生成工具。

將報價單 PDF 拖放到專用的 .app 中,Python 腳本就會執行,讀取報價單 PDF 的內容,並在同一資料夾中生成採購單 PDF。
完成後,它會發送 macOS 通知並自動開啟生成的採購單 PDF。

架構如下所示。

~/Desktop/発注書生成/
 見積書をドロップ→発注書生成.app
 _lib/
  generate_purchase_order.py
  liberogic_logo.png
  liberogic_seal.png
  purchase_order_counter.json

因為我們希望會計和管理部門的員工也能在不開啟終端機的情況下使用,所以使用 AppleScript droplet 作為入口,實際的 PDF 生成處理由 Python 端負責。

簡言之,這是一個 拖放報價單 PDF 就能生成採購單 PDF 的桌面應用程式。因為不需要開啟終端機就能使用,所以讓公司內部的管理業務更容易處理。

採購單 PDF 的外觀參照了我們公司使用的 Money Forward 格式的發票和報價單 PDF。
在備註欄中輸入了以下內容。

本採購單為正式採購確認。根據報價單編號 XXX 提出採購。

採購單編號採用以下格式。

{公司簡稱}樣 採購單{YYYY}{MM}{3位序號}

例如,針對 ○○ 樣在 2026年02月的第 1 件採購單的話,

○○様 採購單202602001

會是如下所示。

公司別、月別的流水號由 purchase_order_counter.json 管理,採購日期會從報價單日期自動計算 5 個工作天後。(這只是暫定規格!之後會在管理部門的指示下變更!)
為了排除不只是週末,還有日本祝日,我使用了 Python 的 jpholiday

只是稍微有點難度的部分

做為採購單基礎的報價單是來自外部合作夥伴或協力廠商,所以各家公司的格式都不同。
單純地「這個座標有公司名」「這個位置有總金額」這樣死板地決定是無法應對的。

說到底,我們使用正規表達式,盡可能靈活地提取廠商名 / 地址 / 電話 / 報價單號 / 報價日期 / 標題 / 詳細內容 / 小計 / 消費稅 / 合計等資訊,將帶有「御中」的公司視為自己公司,其他視為發單對象,或者從 PDF 提取文字時,視覺上分開的資訊在文字上卻黏在一起等等。

也有標題後面混入大樓名或樓層的情況,所以我加入了以「大樓」「層」等標記為線索來刪除不必要地址資訊的處理。

無論是 AI 還是什麼,這一帶依舊是 PDF 處理的常見問題。

傳給 Claude Code 的提示

與其籠統地請求,不如寫得具體一點,像是資料夾結構 / 處理流程 / 版面配置 / 編號規則 / 工作日計算 / PDF 提取項目等,這樣在代幣消耗上反而更經濟。
也請讀一下範例 PDF!

以下の条件で、見積書PDFを発注書PDFに自動変換するツールをmacOS向けに作ってください。

## 環境

- macOS / Python3(pip可)
- フォント:`~/Library/Fonts/NotoSansJP-Regular.ttf` / `NotoSansJP-Bold.ttf`

## フォルダ構成

`~/Desktop/発注書生成/
  見積書をドロップ→発注書生成.app
  _lib/
    generate_purchase_order.py
    liberogic_logo.png
    liberogic_seal.png
    purchase_order_counter.json`

## 処理フロー

1. `.app` に見積書PDFをドラッグ&ドロップ
2. Pythonスクリプトを実行し発注書PDFを生成
3. 完了通知(macOS通知)を出して発注書PDFを自動で開く
4. 発注書PDFは見積書と同じフォルダに保存

## 発注書の仕様

出力フォーマットは添付のMoneyForward形式のPDFに合わせること。

このPDFから以下を抽出して使う:

- ロゴ画像
- 押印画像
- レイアウト座標
- 列幅
- 余白
- フォントサイズ

## 自社情報

リベロジック株式会社
登録番号:T2010401081132
〒108-0073 東京都港区三田1-3-37 板金会館2F
TEL: 03-6809-4366 / FAX: 03-6809-4367

## 発注書番号

- 形式:`{会社略称}様 発注書{YYYY}{MM}{3桁連番}`
- 会社別・月別の連番を `purchase_order_counter.json` で管理
- 出力ファイル名もこの発注書番号に揃える

## 発注日

- 見積書の日付から5営業日後
- 土日と日本の祝日を除外する

## 見積書からの情報抽出

- どんな会社のフォーマットでも対応できる柔軟な正規表現で抽出
- 抽出項目:ベンダー名・住所・TEL、見積書番号、見積日、件名、明細、小計・消費税・合計
- ベンダー判定:「御中」の付いた会社=自社、それ以外=発注先
- 件名に住所の建物名が混入するケースに対応

## 発注書レイアウト

- タイトル「発注書」中央大文字
- 左:発注先の社名・住所・TEL
- 右:自社情報+ロゴ+押印+発注書番号・発注日・見積書番号・見積日
- 件名・発注金額を大きく表示
- 明細テーブル:品目/単価/数量/単位/価格
- 交互グレー背景
- 最低8行
- 合計エリア:小計・消費税・合計のみ
- 備考欄を枠付きで表示
- ページ番号なし

雖然幾乎是簡易規格書,但重要的是要盡可能具體地交付業務上的限制和完成想像,而不是「隨便做做」。
說實話,如果讓 Claude 讀取其他格式可能會失敗,所以還是需要 Claude 多費力一些,但至少速度很快,所以還不錯。
(我們委託的外部人員或合作夥伴即使加起來也不到兩位數,所以這不是什麼大事!)

正因為便利,也要留意安全性

另一方面,在使用 AI 開發支援時,除了考慮便利性,也需要重視安全性。

在向 Claude Code 下達指示並推進工作的過程中,會對本地環境執行多項操作。

- ~/Desktop へのファイル読み書き
- ~/Library/Services/ へのアクセス検討
- pip install によるPythonライブラリの追加
- osacompile によるAppleScriptアプリの生成
- ~/Library/Fonts/ にあるフォントファイルの読み取り

這次雖然不是什麼大事,但既然要給 AI 本地環境的執行權限,確實令人害怕呢😨

當委託進行終端操作或文件操作時,可能會發生意想不到的文件建立/覆寫/刪除的情況,所以

  • 確認允許的內容!
  • 備份!
  • 對於 git 管理的內容要確認差異!
  • 區分工作資料夾!

等基本對策很重要。如果在開發業務中使用,最好通過 1password 讀取 .env 檔案。雖然有點麻煩,但效果確實很大不同。(by 本公司 CTO

另一方面,像這次一樣僅在本機環境執行的用途,風險相對有限。很少會透過網路對外部造成影響,大多數情況下會「最多只影響自己的環境」。

還有許多其他注意事項,但「能快速開發」和「能安全使用」是兩回事。在推進 AI 輔助開發時,請一邊確認執行權限/檔案操作/外部函式庫/輸入資料的處理方式,一邊進行開發吧!

今後計劃:員工共享與 Supabase 整合

那麼,這次製作的是在本機環境執行的簡單採購單生成工具。

最初階段,purchase_order_counter.json 用來管理按公司別、月別的流水號。但考慮到今後要與員工共享使用,如果只用本機 JSON 檔案管理流水號,自然會出現採購單號重複等各種問題,對吧。

所以我打算在 Supabase 端設置按公司別、月別的計數器,這樣多人使用也不會流水號重複。另外還要實現採購單發行歷史/供應商/報價單號碼/採購金額/採購日期/PDF 儲存位置等功能!

本文作者

身為公司代表,卻始終保持著合作夥伴的心態。熱愛理解新技術、享受事物變得便利的瞬間,是個徹底沉浸於現場工作的人。對未來科技充滿期待,無論年紀多大都想持續體驗嶄新的事物。

森本

專案經理 / 總監 / 2007年創立

查看此員工的文章

信心十足的團隊體制與迅速的應對能力是我們的優勢

Liberogic 擁有經驗豐富的人員積極推進專案,因而獲得客戶的高度評價。
我們恰當地安排專案經理和總監,致力於順利推進整個專案。 我們避免不必要的全面投入而導致成本增加,而是採用適材適所配置資源的方式,因此在業務把握到估價制作與提交的速度上也備受好評。

請注意,我們不積極進行 SES 形式的駐場業務。

Slack、Teams、Redmine、Backlog、Asana、Jira、Notion、Google Workspace、Zoom、Webex 等幾乎所有主要的專案管理工具和聊天工具都可供您使用。

請諮詢我們解決您的網站問題。

案例分析