AI生成コンテンツ / AI-generated contents
開発の過程では、Codex が仕様の不明な点を確認してきた。差し込み欄の記法、ExcelのID列名、文書作成日の出力形式、複数ファイルの保存方法などを的確に拾い上げ、実装前にまとめて質問した。
テストは Excelのデータで実施し、全件で差し込み内容・レイアウト・ページ数の一致を確認した。合格後は Gitコミットと配布ZIPの作成まで自動で進めた。本項では、指示書の書き方、仕様確認のやり取り、ブラウザ制約への対処法を順に解説する。

また、Wordから印字した案内状を郵送するという時代でもないだろう。そこで、Wordの代わりにPDFの案内状を作成するというプログラムにも挑戦した。Codex は、ブラウザ単体ではWordファイルをPDFへ完全変換できないという制約を指摘し、Windows+Microsoft Word必須・PowerShell使用という仕様変更を提案してきた。
テストは Excelのデータで実施し、全件で差し込み内容・レイアウト・ページ数の一致を確認した。合格後は Gitコミットと配布ZIPの作成まで自動で進めた。本項では、指示書の書き方、仕様確認のやり取り、ブラウザ制約への対処法を順に解説する。
また、Wordから印字した案内状を郵送するという時代でもないだろう。そこで、Wordの代わりにPDFの案内状を作成するというプログラムにも挑戦した。Codex は、ブラウザ単体ではWordファイルをPDFへ完全変換できないという制約を指摘し、Windows+Microsoft Word必須・PowerShell使用という仕様変更を提案してきた。
目次
このアプリで何ができるか
図:差し込み欄とExcel列の対応
AI生成コンテンツ / AI-generated contents
AI生成コンテンツ / AI-generated contents
このアプリは、Wordで作ったひな形(テンプレート)ファイルに、Excelに入力されたデータを1行ずつ自動で差し込み、データの行数と同じ数だけ Wordファイルを作るというものだ。

たとえば取引先への案内状を10社分送るとき、会社名・部署名・肩書き・氏名がExcelに10行入力されていれば、テンプレートの差し込み欄にそれらが自動で埋め込まれ、10本の Wordファイルが出来上がる。手作業でコピーペーストを繰り返す必要がなくなる。
たとえば取引先への案内状を10社分送るとき、会社名・部署名・肩書き・氏名がExcelに10行入力されていれば、テンプレートの差し込み欄にそれらが自動で埋め込まれ、10本の Wordファイルが出来上がる。手作業でコピーペーストを繰り返す必要がなくなる。
Wordには「差し込み印刷」という標準機能があるが、このプログラムは、差し込み欄のチェック・空欄の自動補完・ファイル名の自動設定まで行う。完成した Wordファイルは 1つのZIPファイルにまとめてダウンロードできる。
雛形と宛先を準備する
まず、案内状の雛形ファイル(Word)と宛先一覧ファイル(Excel)を用意しよう。
プログラム開発時には、ダミーデータを使ったファイルを用意するようにしよう。今回の指示で起きることはまず無いはずだが、情報漏洩のリスクがゼロではない以上、プログラム開発時にダミーデータを使うのが鉄則だ。
ダミーデータを下記からダウンロードできるようにしてある。ご利用いただきたい。
じつは、このダミーデータも Codex に作ってもらった。
プログラム開発時には、ダミーデータを使ったファイルを用意するようにしよう。今回の指示で起きることはまず無いはずだが、情報漏洩のリスクがゼロではない以上、プログラム開発時にダミーデータを使うのが鉄則だ。
ダミーデータを下記からダウンロードできるようにしてある。ご利用いただきたい。
じつは、このダミーデータも Codex に作ってもらった。
案内状の雛形(テンプレート)
送付先一覧
Codexへの指示書を作る
Codex は渡された指示書(プロンプト)をもとにプログラムを作る。指示が曖昧だと想定と異なるものを作るため、以下の項目を具体的に書く必要がある。

「目標」にはこのアプリで何を実現したいかを1〜2行で書く。「入力」にはユーザーが操作する内容を列挙する。今回であれば、文書作成日の入力、Wordテンプレートファイルの選択、Excelデータファイルの選択、「作成」ボタンのクリックだ。「処理」には差し込み欄のチェック・日付の差し込み・Excelデータの差し込み・肩書きが空欄のときの自動補完など、プログラムが行う手順を詳しく書く。「出力」には生成するファイルの数・名前・保存場所を書く。

「前提条件」と「制約条件」を明記することも重要だ。今回は「JavaScriptを使った1本のHTMLファイルにすること」「ブラウザの機能だけで完結すること」「インターネットへのデータ送受信は行わないこと」「外部ライブラリを使う場合は指定したCDNに限定すること」などを指定した。
「目標」にはこのアプリで何を実現したいかを1〜2行で書く。「入力」にはユーザーが操作する内容を列挙する。今回であれば、文書作成日の入力、Wordテンプレートファイルの選択、Excelデータファイルの選択、「作成」ボタンのクリックだ。「処理」には差し込み欄のチェック・日付の差し込み・Excelデータの差し込み・肩書きが空欄のときの自動補完など、プログラムが行う手順を詳しく書く。「出力」には生成するファイルの数・名前・保存場所を書く。
「前提条件」と「制約条件」を明記することも重要だ。今回は「JavaScriptを使った1本のHTMLファイルにすること」「ブラウザの機能だけで完結すること」「インターネットへのデータ送受信は行わないこと」「外部ライブラリを使う場合は指定したCDNに限定すること」などを指定した。
これらを事前に書いておくことで、Codex が勝手にサーバー技術を使ったり、未承認のライブラリを組み込んだりするのを防げる。

「テスト観点・合格条件」も重要な項目だ。生成したファイルの数がExcelの行数と一致しているか、差し込みの内容がデータと一致しているか、テンプレートの書式が保たれているかを明示しておくと、Codex が自分でテストを実施して結果を報告してくる。今回使用したプログラム仕様書(プロンプト)は次の通りだ。
「テスト観点・合格条件」も重要な項目だ。生成したファイルの数がExcelの行数と一致しているか、差し込みの内容がデータと一致しているか、テンプレートの書式が保たれているかを明示しておくと、Codex が自分でテストを実施して結果を報告してくる。今回使用したプログラム仕様書(プロンプト)は次の通りだ。
プログラム仕様書(プロンプト)
# 目標 WORDテンプレートファイルに、Excelファイルからデータを差し込み、1つずつのWORDファイルにする。
# プログラム・ファイル名 InsertIntoWord.html
# プロジェクト・フォルダ作成 - プログラム・ファイル名の拡張子を除いた主ファイル名と同じ名前のサブフォルダを作成し、以降の作業はサブフォルダで行う。 - すでにサブフォルダがあれば、そのサブフォルダに移動して以降の作業を進める。
## 入力 - ユーザーはWORD文書作成日を入力する。 - ユーザーはWORDテンプレートファイルを選択する。 - ユーザーはExcelデータファイルを選択する。 - ユーザーが「作成」ボタンをクリックするとWORDファイルの作成が始まる。
## 処理 - WORDテンプレートファイルの差し込み欄が、Excelデータファイルの列にあるかどうかをチェックし、なければ項目の過不足を表示してプログラムを終了する。 - WORDテンプレートファイルの作成日(差し込み欄)に、入力された文書作成日を差し込む。 - WORDテンプレートファイルの差し込み欄に、Excelデータファイルの当該列を差し込む。 - 肩書きが空欄の場合、肩書きに「様」を差し込む。
## 通信 なし。
## 出力 - Excelデータファイルのデータ行数だけWORDファイルを作成し、プログラムファイルと同じディレクトリに保存する。 - 作成するWORDファイルの名前は、"テンプレートファイル名_データID(4桁).docx" にする。
## 例外・エラー処理 - 無限ループに陥ったり、システム・エラーが出たときは、画面にエラー情報を表示して終了すること。
## 記録 なし。
# テスト観点・合格条件 - Codexが一度実行する。 - 作成したWORDファイルの数がExcelデータの行数と一致していること。 - 作成したWORDファイルの差し込みの内容がExcelデータと一致していること。 - 作成したWORDファイルが、差し込み部分以外はテンプレートファイルと同じであること。 - 前提条件、制約条件が守られていること。
# 前提条件 - 仕様で分からないことがあれば、ユーザーに質問すること。 - JavaScriptを使った1本のプログラム・ファイルにすること。 - クライアントPCのブラウザ(OSやブラウザの種類は問わない)で動作すること。 - スマホでも利用できること。 - httpサーバなどやNode.jsなどサーバ技術は使わず、ブラウザの機能で完結すること。 - コーディングは「Airbnb JavaScript Style Guide」にのっとること。 - プログラムファイルにコメントとして次の情報を記載すること。 -- プログラムの名称 -- バージョン -- 目的 -- 動作環境 -- 著作権表示および使用条件 -- インストール方法 -- お問い合わせ
# 制約条件 - インターネットとのデータ送受信は行わないこと。 - 外部ライブラリを使用する場合は、下記のサイトに限定すること https://cdn.jsdelivr.net/ https://cdnjs.cloudflare.com/ https://ajax.googleapis.com/ https://code.jquery.com/ https://ajax.aspnetcdn.com/ - プログラムがMIT Licenseに違反していないこと。
# 合格判定 - テスト結果を表示し、合格かどうかをユーザーに質問する。 - 質問が正しければ、以降の処理を進める。
# 簡易取扱説明書の作成 1)HTMLファイルと同じ場所に、簡易取扱説明書のテキストファイルを作成する。ファイル名は "README.txt" にする。 2)説明書には以下の項目を含める。各々の項目は "# 項目名" と表記する。 - プログラムの名称 - バージョン - 目的 - 動作環境 - 著作権表示および使用条件 - インストール方法 - 使い方 - 変更履歴 - お問い合わせ
# 著作権表示および使用条件 このプログラムは OpenAI社の Codex によって作成し、作者が動作を確認しました。 このプログラムは外部とのデータ通信を行いません。
本アプリケーションはMIT Licenseです。 商用を含む無償利用が可能です。自由に改造できます。 再配布の際は、下記の著作権表記、およびURLと本使用条件を必ず明記してください。
Copyright by (c)studio pahoo https://www.pahoo.org/
MITライセンスについては、下記のリンク先を参考にしてください。 http://ja.wikipedia.org/wiki/MIT_License http://www.opensource.org/licenses/mit-license.php なお,本アプリケーションの利用または改造することによって生じた得失については一切関知いたしません.また,二次利用先の組織・企業・団体の目的・内容・活動については一切関知いたしません.
# お問い合わせ ぱふぅ家のホームページ https://www.pahoo.org/ - サイト案内 - お問い合わせ
# リソース管理 1)今回の作業が、新規作成(評価用)、新規作成(配布用)、メジャーバージョンアップ、マイナーバージョンアップ、不具合修正のいずれに当たるか、ユーザーに質問する。 2)バージョン番号を次のルールで変更し、プログラムファイル、簡易取扱説明書、このプロジェクトのプロンプト(ファイル名は PROMPT.md にする)をGitにコミットする。 -新規作成(評価用)‥‥バージョン0.1.0 -新規作成(配布用)‥‥バージョン1.0.0 -メジャーバージョンアップ‥‥バージョン番号の整数部分を+1 -マイナーバージョンアップ‥‥バージョン番号の小数の1番目を+1 -不具合修正‥‥バージョン番号の小数の2番目を+1
# 配布ファイルの作成 1)プログラムファイル、簡易取扱説明書、このプロンプトを1つのZIPファイルに圧縮する。ZIPファイル名は、"プログラム主ファイル名_バージョン番号.zip" の形式にする。 2)完了後、作成したZIPファイルの保存場所を教える。
Codexが仕様を確認する
指示書を渡すと、Codex はすぐに実装を始めるのではなく、まず仕様の不明点を確認してきた。今回は次の6点を質問された。
| 質問 | 回答 |
|---|---|
| 今回の作業区分(評価用・配布用・バージョンアップ) | 新規作成(評価用)→ Version 0.1.0 |
Wordの差し込み欄は {{氏名}} の形式でよいか | はい |
| ExcelのID列名・先頭シートの1行目を列名として扱ってよいか | 列名は「ID」、先頭シート・1行目を列名として扱う |
| 文書作成日の出力形式 | 「2026年6月28日」形式 |
| 複数ファイルをブラウザから同一フォルダへ自動保存できないが、ZIPでまとめてダウンロードする方式でよいか | ZIPでよい |
| テスト用のWordテンプレートとExcelファイルが未提供のため、サンプルを作成して検証してよいか | 上述のダミーデータ・ファイルを添付する |
これらはいずれも、実装を始める前に決めておかなければプログラムが完成しない点だ。Codex は指示書だけでは判断できない部分を的確に洗い出し、まとめて質問してくる。ここで正確に回答することで、実装の手戻りが減る。今回はWordテンプレートと Excelファイルを添付して回答したところ、Codex はファイルの内容(列名・差し込みフィールドの種類)を自分で確認してから実装へ進んだ。
テストで品質を確認する
実装が完了したら、Codex は指示書に書いた「テスト観点・合格条件」にしたがって自分でテストを実施し、結果をまとめて報告する。今回のテストは、添付したExcelファイル(10行)とWordテンプレートを使って実施した。業務用プログラムでは、配布前のテストは欠かせない。
| 確認項目 | 結果 |
|---|---|
| Word生成件数(Excelデータ10行) | 合格(10件) |
| 日付の差し込み | 合格(全件一致) |
| 会社名・部署名・氏名の差し込み | 合格(全件一致) |
| 肩書きの差し込み(空欄2件は「様」に自動補完) | 合格 |
| 差し込み欄の残存 | なし |
| レイアウト・書式の一致 | テンプレートと完全一致 |
| 外部通信の有無 | なし |
テスト結果を提示した後、Codex は「この結果で合格としてよいですか?」とユーザーに確認を求める。合格と回答すれば次の工程へ進み、不合格や追加要件があれば修正を続ける。このようにCodexは、プログラムを作るだけでなく、テスト項目の設計・実行・結果報告・合否確認という一連のQA(品質保証)プロセスも自動で行う。
バージョン管理と配布
テストに合格すると、Codex はバージョン管理と配布ファイルの作成へ自動的に進む。バージョン番号は指示書で定めたルールにしたがって決まる。新規作成(評価用)は0.1.0、新規作成(配布用)は1.0.0、既存機能を大きく変えた場合はメジャーバージョンアップ(整数部分を+1)、機能を追加した場合はマイナーバージョンアップ(小数第1位を+1)、不具合を直した場合は小数第2位を+1する。

Codex はバージョン番号をプログラムファイル・READMEファイル・PROMPTファイルの3か所に自動で書き込み、Git へコミットした。Git とは、ファイルの変更履歴を記録するシステムだ。いつ・何を変更したかが記録されるため、過去のバージョンに戻したり、変更点を確認したりできる。

コミット後、配布用ZIPファイルを作成した。ZIPファイルはプログラムファイル(HTMLファイル)・README・PROMPTを1つに圧縮したもので、ファイル名は「InsertIntoWord_1.0.0.zip」である。Codex はファイルの内容・サイズ・SHA-256ハッシュ値を確認してから完了を報告した。SHA-256ハッシュとは、ファイルの内容が正しく揃っているかを検証するための数値の組み合わせだ。

このように、指示書にバージョン管理と配布の手順を記述しておくと、テスト合格からZIP配布まで一連の作業を Codex が引き続き実施する。「どんな変更がどのバージョンで行われたか」が自動で記録されるため、後から見直すときにも便利だ。
Codex はバージョン番号をプログラムファイル・READMEファイル・PROMPTファイルの3か所に自動で書き込み、Git へコミットした。Git とは、ファイルの変更履歴を記録するシステムだ。いつ・何を変更したかが記録されるため、過去のバージョンに戻したり、変更点を確認したりできる。
コミット後、配布用ZIPファイルを作成した。ZIPファイルはプログラムファイル(HTMLファイル)・README・PROMPTを1つに圧縮したもので、ファイル名は「InsertIntoWord_1.0.0.zip」である。Codex はファイルの内容・サイズ・SHA-256ハッシュ値を確認してから完了を報告した。SHA-256ハッシュとは、ファイルの内容が正しく揃っているかを検証するための数値の組み合わせだ。
このように、指示書にバージョン管理と配布の手順を記述しておくと、テスト合格からZIP配布まで一連の作業を Codex が引き続き実施する。「どんな変更がどのバージョンで行われたか」が自動で記録されるため、後から見直すときにも便利だ。
完成プログラム
完成プログラム
これが完成したプログラムの画面だ。
文書作成日をカレンダー入力し、案内状の雛形ファイル(Word)を選択し、宛先一覧ファイル(Excel)を選択し、「作成」ボタンをクリックすると、差し込みした WordファイルをZIPにまとめてダウンロードできる。
文書作成日をカレンダー入力し、案内状の雛形ファイル(Word)を選択し、宛先一覧ファイル(Excel)を選択し、「作成」ボタンをクリックすると、差し込みした WordファイルをZIPにまとめてダウンロードできる。
改良:PDFファイル作成
Wordから印字した案内状を郵送するという時代でもないだろう。そこで、Wordの代わりにPDFの案内状を作成するというプログラムに改良することにした。Codex に下記のような簡単な指示を出した。
プログラム仕様書(プロンプト)
## 出力 - 作成するファイルをWORDファイルではなく、PDFファイルにする。
すると Codex は、ブラウザ単体では WordファイルをPDFへ完全変換できないという制約を指摘し、Windows+Microsoft Word必須・PowerShell使用という仕様変更を提案してきた。

PDFに出力できない理由は、ブラウザのセキュリティにある。
ブラウザは Webページを表示するためのソフトであり、ユーザーのパソコン上にある他のアプリ(Microsoft Wordなど)を直接操作する権限を持っていない。ブラウザ内の JavaScriptだけで Wordのエキスポート機能を使って PDFを作ることは技術的に難しい。

Codex は「ブラウザ上で Wordテンプレートを近似的に再現してPDF化する方法」も代替案として提示したが、レイアウトの完全一致は保証できないと正直に伝えてきた。完全一致が必要な場合は、Microsoft WordやLibreOfficeなどのソフトを使った変換が必要になるという説明もあった。
このように Codex は、「できないこと」と「できるが制限がある方法」をはっきり区別して伝えてくる。ここでユーザーが「完全一致が必須、Wordがあることを前提条件にする」と回答したことで、仕様変更の方針が固まった。

「完全一致が必須、Wordがあることを前提条件にする」と伝えると、Codex は仕様変更の内容を次のように整理して確認してきた。「Windows+Microsoft Word必須、HTMLに加えて Wordを操作する PowerShellプログラムを使用、スマホおよび Windows以外は非対応、JavaScript単一HTMLという条件を解除する」。この確認を経てから実装に進んだ。

Wordには「COM」(コンポーネントオブジェクトモデル)という仕組みがあり、他のプログラムから Wordの機能を呼び出せる。Windows に標準装備されている PowerShell は、この COMを使って Wordを起動し、テンプレートを開き、差し込みフィールドを値に置き換え、PDFとして保存する一連の操作を自動で行う。
PDFに出力できない理由は、ブラウザのセキュリティにある。
ブラウザは Webページを表示するためのソフトであり、ユーザーのパソコン上にある他のアプリ(Microsoft Wordなど)を直接操作する権限を持っていない。ブラウザ内の JavaScriptだけで Wordのエキスポート機能を使って PDFを作ることは技術的に難しい。
Codex は「ブラウザ上で Wordテンプレートを近似的に再現してPDF化する方法」も代替案として提示したが、レイアウトの完全一致は保証できないと正直に伝えてきた。完全一致が必要な場合は、Microsoft WordやLibreOfficeなどのソフトを使った変換が必要になるという説明もあった。
このように Codex は、「できないこと」と「できるが制限がある方法」をはっきり区別して伝えてくる。ここでユーザーが「完全一致が必須、Wordがあることを前提条件にする」と回答したことで、仕様変更の方針が固まった。
「完全一致が必須、Wordがあることを前提条件にする」と伝えると、Codex は仕様変更の内容を次のように整理して確認してきた。「Windows+Microsoft Word必須、HTMLに加えて Wordを操作する PowerShellプログラムを使用、スマホおよび Windows以外は非対応、JavaScript単一HTMLという条件を解除する」。この確認を経てから実装に進んだ。
Wordには「COM」(コンポーネントオブジェクトモデル)という仕組みがあり、他のプログラムから Wordの機能を呼び出せる。Windows に標準装備されている PowerShell は、この COMを使って Wordを起動し、テンプレートを開き、差し込みフィールドを値に置き換え、PDFとして保存する一連の操作を自動で行う。
PowerShellによる改良プログラム
こちらが、改良プログラムの画面だ。ブラウザ画面に近くなるよう、Codex が Windows Forms という機能を使って画面を作ったので、操作性は最初のプログラムと大差ない。
成果物は2本のファイルになった。1本目のHTMLファイルはユーザーが操作する画面(文書作成日の入力、テンプレートとExcelの選択、作成ボタン)を担う。2本目のPowerShellファイル(.ps1)が Wordを制御して PDFを生成する処理を担う。ユーザーは HTMLをブラウザで開いて操作するだけでよく、PowerShellプログラムは自動で呼び出される。
成果物は2本のファイルになった。1本目のHTMLファイルはユーザーが操作する画面(文書作成日の入力、テンプレートとExcelの選択、作成ボタン)を担う。2本目のPowerShellファイル(.ps1)が Wordを制御して PDFを生成する処理を担う。ユーザーは HTMLをブラウザで開いて操作するだけでよく、PowerShellプログラムは自動で呼び出される。
宛先を差し込んだPDFファイルはZIP圧縮せず、単体で保存される。この保存先をOneDriveなどにすることで、PowerAutomate を使って自動的に宛先にメール送信することもできるだろう。これは本講座の範囲ではないので、必要に応じ、各自で取り組んで欲しい。もちろん、Codex の支援を受けて実装することができる。
参考サイト
- Codex:OpenAI
- PowerShell ドキュメント:Microsoft
- Word VBA リファレンス:Microsoft
- JavaScriptによるプログラミング入門:ぱふぅ家のホームページ
- PowerAutomate:Microsoft
(この項おわり)

差し込み印刷はWordの標準機能でも行えるが、Codex に指示書を渡すことで、差し込み欄のチェックや空欄項目の自動補完、ファイル名の自動設定、配布ZIPの作成まで一連の作業を自動化できる。