雰囲気で請求書を作成する

しむどん 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}

お支払い期限までにご入金の程、よろしくお願いします。