Topics

Wie ich mit Claude Code ein Tool zur Bestellschein-Generierung (Desktop-App) erstellt habe, da eine Bestellung notwendig wurde

  • column

Bei der täglichen Arbeit ist es selbstverständlich geworden, dass wenn etwas auftaucht, das man "noch ein bisschen lästig findet, wenn man es weiterhin manuell macht", wir einfach schnell ein kleines System mit Claude Code bauen!

Dieses Mal war es genau so ein typischer Fall – der Auslöser war die Erhöhung des Eigenkapitals unseres Unternehmens.

Unser Geschäftsjahr beginnt im Februar, und die diesmalige Kapitalerhöhung fand auch im Februar statt. Mit der Erhöhung des Eigenkapitals war es notwendig, die Abläufe rund um die Bestellverwaltung gegenüber externen Partnern und Zusammenarbeitern noch sorgfältiger zu regeln als bisher.

Das ist das sogenannte Subunternehmergesetz – ein Bereich, der seit Januar 2026 im geltenden System als "Gesetz zur Gewährleistung fairer Transaktionen" bezeichnet wird. Es gibt mehr Anforderungen für die Seite der Besteller: Darlegung der Bestellinhalte, Erstellung und Aufbewahrung von Handelsdokumenten, Festlegung von Zahlungsterminen – alles wird einfach komplexer.

Natürlich geht es hierbei nicht nur darum, etwas "weil es das Gesetz verlangt" umzusetzen!

Wenn wir externe Partner mit Arbeiten beauftragen, ist es für beide Seiten – Besteller und Auftragnehmer – wichtig, die Inhalte der Bestellung, den Betrag, das Datum und die Beziehung zum Angebot klar zu machen. (Punkt)

Die Funktion war nicht in den Buchhaltungstools enthalten

Wir nutzen bei Liberogic die Tools von MoneyForward (im Folgenden "Manefo") für Buchhaltung, Angebote und Rechnungen.
Die Software ist praktisch für alltägliche Buchhaltungs- und Rechnungsaufgaben, aber das, was wir diesmal erreichen wollten, war etwas anderes.

Ein Angebots-PDF von einem externen Partner als Grundlage nutzen, um ein Bestellformular-PDF von Liberogic zu erstellen

Zumindest im Umfang unserer Nutzung hat Manebo einfach nicht die richtige Funktion, und es wäre auch verschwendet, einen Service-Vertrag nur dafür abzuschließen.

Falls es manuell gemacht werden müsste,

  • Ein Bestellformular-Format erstellen
  • Das Angebot ansehen und die Daten manuell in das Bestellformular-Format übertragen
  • Das Bestelldatum eintragen
  • Die Angebotsnummer übertragen
  • Die Einzelheiten übertragen
  • Den Gesamtbetrag und andere Inhalte überprüfen
  • Den Dateinamen anpassen
  • Sonstiges Sonstiges...

Das ist lästig, wenn diese Aufgaben zunehmen... Deshalb haben wir beschlossen, es zu entwickeln.

In etwa einer Stunde mit Claude Code produktionsreif gemacht

Das Timing war auch günstig.

Anfang Februar mit Geschäftsjahresbeginn, Kapitalerhöhung im Februar und die Einführung von Claude Code, die gleichzeitig auch in unserem Team verankert wurde.

Das war gerade die Zeit, in der wir intern in einem Hackathon-ähnlichen Modus waren und Claude Code nutzten, um Geschäftsverbesserungswerkzeuge, kleine interne Apps und sogar spontane Ideen bis zur Bereitstellung umzusetzen!

Von der äußerst einfachen Spezifikation über die Anweisungen an Claude Code bis hin zu feinen Anpassungen...

Wir konnten es in etwa einer Stunde bis zur Produktionsreife bringen.

Natürlich funktioniert nicht alles, wenn man es einfach der KI überlässt, aber wenn man es richtig in einem Prompt formuliert, ist es schnell und praktisch!

Desktop-Anwendung fertiggestellt

Ein einfaches Tool zur Bestellformulargenerierung, das wahrscheinlich auf einem Betriebssystem läuft, das die meisten von Ihnen verwenden.

Wenn Sie eine Angebots-PDF in die entsprechende .app ziehen und ablegen, wird ein Python-Skript ausgeführt, das den Inhalt der Angebots-PDF liest und ein Bestellformular-PDF im selben Ordner generiert.
Nach Abschluss wird eine macOS-Benachrichtigung angezeigt und das generierte Bestellformular-PDF wird automatisch geöffnet.

Die Struktur sieht folgendermaßen aus.

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

Da wir möchten, dass auch Mitarbeiter aus dem Finanz- und Verwaltungsbereich das Tool ohne Zugriff auf das Terminal nutzen können, verwenden wir ein AppleScript-Droplet als Einstiegspunkt und führen die eigentliche PDF-Generierung auf der Python-Seite durch.

Kurz gesagt ist es ein Desktop-Anwendung, bei der Sie einfach eine Angebots-PDF ziehen und ablegen, und daraufhin wird ein Bestellformular-PDF generiert. Da das Tool ohne Öffnen des Terminals verwendet werden kann, haben wir es in einer Weise gestaltet, die auch für interne Verwaltungsaufgaben leicht zu handhaben ist.

Das Erscheinungsbild des Bestellformulars basiert auf dem Format der Rechnungs- und Angebots-PDFs, die wir in unserem Unternehmen verwenden.
Der Bemerkungsbereich enthält den folgenden Text.

Diese Bestellung gilt hiermit als verbindlich. Bestellung gemäß Angebotsnummer XXX.

Das Bestellformularformat haben wir wie folgt festgelegt.

{Unternehmenskürzel} Bestellung {YYYY}{MM}{3-stellige fortlaufende Nummer}

Beispielsweise für den ersten Fall im Februar 2026 für einen bestimmten Kunden würde es wie folgt aussehen:

Herr/Frau 〇〇 – Bestellnummer 202602001

wird es wie folgt aussehen.

Laufende Nummern pro Unternehmen und Monat werden in purchase_order_counter.json verwaltet, und das Bestelldatum wird automatisch 5 Arbeitstage nach dem Datum des Angebots berechnet. (Dies ist hier nur eine vorläufige Spezifikation! Sie wird später unter Verwaltung geändert!)
Um nicht nur Wochenenden, sondern auch japanische Feiertage auszuschließen, haben wir die Python-Bibliothek jpholiday verwendet.

Ein winzig schwieriger Bereich

Da die Angebote, die der Grundlage für Bestellungen dienen, von externen Partnern und Kooperationsunternehmen stammen, unterscheidet sich das Format von Unternehmen zu Unternehmen.
Es ist daher nicht möglich, einfach festzulegen, dass „der Unternehmensname an dieser Koordinate steht" oder „die Gesamtsumme an dieser Position steht".

Am Ende haben wir reguläre Ausdrücke verwendet und Informationen wie Herstellername / Adresse / Telefonnummer / Angebotsnummer / Angebotsdatum / Betreff / Einzelheiten / Zwischensumme / Verbrauchssteuer / Gesamtbetrag usw. so flexibel wie möglich extrahiert. Wir haben Unternehmen mit dem Vermerk „御中" als unser Unternehmen behandelt und alle anderen als Auftraggeber. Wenn wir Text aus PDFs extrahieren, werden Informationen, die optisch getrennt aussehen, im Text zusammengefügt – solche Herausforderungen entstehen.

Da es auch Fälle gab, in denen Gebäudenamen oder Geschossnummern in das Betrefffeld einflossen, haben wir einen Prozess eingebaut, der anhand von Begriffen wie „ビル" und „階" unnötige Adressinformationen entfernt.

Ob mit AI oder ohne, das ist immer noch das typische Problem mit PDF-Verarbeitung.

An Claude Code übergebene Eingabeaufforderung

Anstatt vager Anforderungen ist es wirtschaftlicher, wenn Sie
so konkret wie möglich schreiben – mit Angaben zu Ordnerstruktur, Verarbeitungsfluss, Layout, Nummerierungsregeln, Arbeitstagsberechnung, PDF-Extraktionselementen und dergleichen. Schauen Sie sich auch die Beispiel-PDF an!

以下の条件で、見積書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行
- 合計エリア:小計・消費税・合計のみ
- 備考欄を枠付きで表示
- ページ番号なし

Es ist zwar fast nur eine einfache Spezifikation, aber es ist wichtig, die geschäftlichen Einschränkungen und die Vorstellung des fertigen Produkts so konkret wie möglich zu vermitteln – statt einfach zu sagen „mach das irgendwie schön".
Am Ende scheitert es manchmal, wenn man Claude ein anderes Format zu lesen gibt, daher muss man Claude immer noch etwas antreiben. Aber da es trotzdem schnell geht, ist das okay für uns.
(Bei unserer Situation – extern beauftragte Mitarbeiter und Kooperationspartner zusammen erreichen wir nicht mal zweistellig – ist das sowieso nicht wirklich relevant!)

Gerade weil es praktisch ist, muss man die Sicherheit ernst nehmen

Andererseits ist bei der Verwendung von AI-Entwicklungsunterstützung nicht nur der Komfort wichtig, sondern auch der Sicherheitsaspekt muss beachtet werden.

Bei der Arbeit mit Anweisungen für Claude Code werden mehrere Vorgänge in der lokalen Umgebung durchgeführt.

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

Dieses Mal ist es keine große Sache, aber es ist wirklich beängstigend, AI Ausführungsrechte in der lokalen Umgebung zu geben, nicht wahr? 😨

Wenn Sie Terminal-Operationen oder Dateivorgänge delegieren, besteht die Möglichkeit, dass Dateien unbeabsichtigt erstellt, überschrieben oder gelöscht werden,

  • Überprüfen Sie die Autorisierungsinhalte!
  • Erstellen Sie ein Backup!
  • Überprüfen Sie Unterschiede bei Dingen, die mit git verwaltet werden können!
  • Arbeitsmappen aufteilen!

sind solche grundlegenden Maßnahmen wichtig. Wenn Sie diese in Ihrer Entwicklung verwenden, ist es möglicherweise besser, die .env-Datei über 1password zu laden. Es ist zwar umständlich, aber es macht einen großen Unterschied. (von unserem CTO)

Andererseits ist das Risiko relativ begrenzt, wenn es nur in der lokalen Umgebung ausgeführt wird wie in diesem Fall. Die Auswirkungen verbreiten sich selten über das Netzwerk nach außen, und in den meisten Fällen bleiben die Auswirkungen auf "die eigene Umgebung im schlimmsten Fall" beschränkt.

Es gibt noch viele andere Überlegungen, aber "schnell erstellen" und "sicher verwenden" sind zwei verschiedene Dinge. Wenn Sie die KI-gestützte Entwicklung vorantreiben, überprüfen Sie bitte die Ausführungsberechtigungen, Dateivorgänge, externe Bibliotheken und den Umgang mit Eingabedaten!

In Zukunft: Mitarbeiterverwaltung und Supabase-Integration

Das jetzt erstellte Tool ist ein einfacher Bestellformular-Generator, der in einer lokalen Umgebung läuft.

In der ersten Phase haben wir purchase_order_counter.json verwendet, um aufeinanderfolgende Nummern nach Unternehmen und Monat zu verwalten. Aber wenn wir das in Zukunft mit Mitarbeitern teilen möchten, werden Probleme entstehen, wenn wir aufeinanderfolgende Nummern nur über lokale JSON-Dateien verwalten — zum Beispiel doppelte Bestellformularnummern.

Daher planen wir, die Zähler nach Unternehmen und Monat auf der Supabase-Seite zu verwalten, damit mehrere Benutzer ohne Überschneidungen der Nummern arbeiten können. Zusätzlich möchten wir die Ausstellungshistorie, Lieferanten, Angebotsnummern, Bestellbeträge, Bestelldaten und PDF-Speicherorte implementieren!

Dieser Artikel wurde geschrieben von

Obwohl ich CEO bin, fungiere ich immer als Ansprechpartner. Ich liebe es, neue Technologien zu verstehen und freue mich über die Momente, in denen etwas praktischer wird. Ich bin absolut leidenschaftlich bei der Arbeit vor Ort. Ich bin begeistert von zukünftigen Technologien und möchte in jedem Alter weiterhin neue Erfahrungen genießen.

Morimoto

Projektmanager / Direktor / gegründet 2007

Artikel dieses Mitarbeiters ansehen

Zuverlässige Teamstruktur und schnelle Reaktionsfähigkeit sind unsere Stärken

Bei Liberogic werden erfahrene Mitarbeiter aktiv bei der Projektförderung eingesetzt, daher erhalten wir hohe Bewertungen von unseren Kunden.
Wir weisen Projektmanager und Direktoren ordnungsgemäß zu und bemühen uns, Projekte reibungslos zu leiten. Wir vermeiden unnötige Kostensteigerungen durch vollständige Bindung und verteilen Ressourcen optimal. Wir sind auch bekannt für die Schnelligkeit bei der Erfassung von Geschäftsinhalten bis zur Erstellung und Einreichung von Angeboten.

Bitte beachten Sie, dass wir keine SES-ähnliche Vor-Ort-Arbeit aktiv durchführen.

Sie können nahezu alle wichtigen Projektmanagement-Tools und Chat-Tools verwenden, wie Slack, Teams, Redmine, Backlog, Asana, Jira, Notion, Google Workspace, Zoom, Webex und mehr.

Konsultieren Sie uns gerne bei Ihren Web-Fragen.

Fallstudien