雰囲気で請求書を作成する
しむどん
:
2025-09-24
最近、AIのコード生成能力が飛躍的に伸びた事で、「雰囲気」や「その場のノリ」だけで様々なものを作り出せるようになってきた。急に自分のできる事が増えたようで、何だか気分がいい。
動画や画像の生成ももちろん生成できるけれど、テキスト形式で出力できるものは、やはり相性が良いようだ。PDFのようなファイルも始めにTeXで出力し、それを元にしてPDFを生成するようにすれば、いろんな文書も作成しやすく、保守もしやすい。生成結果が気に入らなければ、人力で書き換られるという状態を保つ事ができる。
本来は雰囲気とその場のノリで作成するべきではないけれど、あえて請求書を作成してみる事にした。これはただの実験だけれど、使い道はいくらでもありそうだ。
エージェントにはOpenAI CodeXを使用し、数回、以下のプロンプトを指示した。
TeXで請求書を作成して
ビルド用のMakefileも作成して
バイブコーディングは結局どうなったので
日本語が組み込まれていない。
この後、何度かプロンプト上でやりとりし、以下のTeXファイルが完成した。
% -*- coding: utf-8 -*-
% シンプルで編集しやすい日本語の請求書テンプレート
% 主要な数値(小計・税・合計)は自動計算されます(整数円)。
\documentclass[a4paper,12pt,ja=standard,lualatex]{bxjsarticle}
% 余白設定
% クラス側で geometry は読み込まれるため、ここでは追加読み込み不要
\usepackage{tabularx,array,booktabs,multirow}
\usepackage{graphicx}
\usepackage[table]{xcolor}
% 日本語(LuaLaTeX 用のフォント設定)
\usepackage{iftex}
\ifLuaTeX
\usepackage{luatexja}
% TeX Live 標準の HaranoAji フォントを使用し、PDF へ埋め込み
\usepackage[haranoaji,deluxe]{luatexja-preset}
\fi
\usepackage{siunitx}
\sisetup{
group-separator = {,},
group-minimum-digits = 3,
input-digits = 0123456789,
input-signs = -+,
detect-all,
}
%======== 基本情報(必要に応じて編集) ========
% 発行元(自社)情報
\newcommand{\CompanyName}{株式会社サンプル}
\newcommand{\CompanyZip}{〒100-0000}
\newcommand{\CompanyAddress}{東京都千代田区サンプル1-2-3 サンプルビル 10F}
\newcommand{\CompanyTel}{03-1234-5678}
\newcommand{\CompanyPerson}{営業部 山田 太郎}
% 請求先(相手先)情報
\newcommand{\ClientName}{サンプル商事株式会社 御中}
\newcommand{\ClientZip}{〒150-0000}
\newcommand{\ClientAddress}{東京都渋谷区サンプル4-5-6}
% 請求書メタ情報
\newcommand{\InvoiceNo}{INV-2025-001}
\newcommand{\IssueDate}{2025年9月24日}
\newcommand{\DueDate}{2025年10月31日}
% 振込先
\newcommand{\BankInfo}{サンプル銀行 本店営業部 普通 1234567 カ)サンプル}
% 消費税率(整数%)
\newcount\TaxRate
\TaxRate=10\relax
%======== 内部計算用カウンタ ========
\newcount\Subtotal
\newcount\Tax
\newcount\Total
\Subtotal=0 \relax
% 明細行を追加するためのコマンド
% 第1引数: 品目名(文字列)
% 第2引数: 数量(整数)
% 第3引数: 単位(例: 個, 時間, 式 など)
% 第4引数: 単価(円、整数)
\newcommand{\AddItem}[4]{%%
\begingroup
\newcount\itemAmount
\itemAmount=\numexpr #2 * #4\relax
\global\advance\Subtotal by \itemAmount
\endgroup
#1 & #2 & #3 & \num{#4} & \num{\the\itemAmount} \\
}
\begin{document}
% 余白設定(クラスが geometry を読み込んだ後に上書き)
\newgeometry{top=20mm,bottom=25mm,left=20mm,right=20mm}
% タイトルと基本情報
\noindent
\begin{tabularx}{\textwidth}{@{}X r@{}}
{\Huge \bfseries 請求書} &
\begin{tabular}{@{}rl@{}}
請求書番号: & \InvoiceNo \\
発行日: & \IssueDate \\
支払期日: & \DueDate \\
\end{tabular} \\
\end{tabularx}
\vspace{1.2em}
% 請求先・発行元情報
\noindent
\begin{tabularx}{\textwidth}{@{}X X@{}}
\begin{minipage}[t]{\linewidth}
\textbf{御請求先}\\[0.2em]
\ClientName\\
\ClientZip\\
\ClientAddress\\
\end{minipage}
&
\begin{minipage}[t]{\linewidth}
\raggedleft
\textbf{発行元}\\[0.2em]
\CompanyName\\
\CompanyZip\\
\CompanyAddress\\
TEL: \CompanyTel\\
担当: \CompanyPerson\\[0.8em]
\fbox{\rule{0pt}{18mm}\rule{24mm}{0pt}}\quad\small (社判)
\end{minipage} \\
\end{tabularx}
\vspace{1.2em}
\noindent 下記の通りご請求申し上げます。
\vspace{0.8em}
% 明細テーブル
\setlength{\tabcolsep}{6pt}
\renewcommand{\arraystretch}{1.3}
\noindent
\begin{tabularx}{\textwidth}{@{}l >{\raggedleft\arraybackslash}p{12mm} >{\centering\arraybackslash}p{12mm} >{\raggedleft\arraybackslash}p{22mm} >{\raggedleft\arraybackslash}p{26mm}@{}}
\toprule
品目 & 数量 & 単位 & 単価(円) & 金額(円) \\
\midrule
% ===== 明細の追加例(必要に応じて編集) =====
\AddItem{デザイン費}{1}{式}{80000}
\AddItem{開発作業}{10}{時間}{5000}
\AddItem{ホスティング}{3}{月}{2000}
% ==========================================
\midrule
% 小計・税・合計の計算
\noalign{\global\Tax=\numexpr \Subtotal * \TaxRate / 100\relax
\global\Total=\numexpr \Subtotal + \Tax\relax}
\multicolumn{4}{r}{小計} & \num{\the\Subtotal} \\
\multicolumn{4}{r}{消費税 (\the\TaxRate\%)} & \num{\the\Tax} \\
\cmidrule(r){1-5}
\rowcolor[HTML]{F5F5F5}
\multicolumn{4}{r}{\bfseries 合計} & {\bfseries \num{\the\Total}} \\
\bottomrule
\end{tabularx}
\vspace{1.2em}
% 合計金額の強調ボックス
\noindent
\fcolorbox{black}{white}{\begin{minipage}{\textwidth}
\vspace{0.6em}
\large 合計請求金額(税込): \textbf{\Large \num{\the\Total}} 円
\vspace{0.6em}
\end{minipage}}
\vspace{1.2em}
% 支払条件・振込先
\noindent
\begin{tabularx}{\textwidth}{@{}l X@{}}
お支払期日: & \DueDate \\
お支払方法: & 銀行振込 \\
振 込 先: & \BankInfo \\
備考: & 恐れ入りますが、振込手数料は貴社にてご負担ください。\\
\end{tabularx}
\vfill
\noindent\footnotesize
本書はコンピュータにより作成されています。ご不明点がございましたら担当までご連絡ください。
\end{document}
お支払い期限までにご入金の程、よろしくお願いします。