docx-jp — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited docx-jp (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
python-docx を使用して、日本語のビジネス文書を正しいフォーマットで .docx ファイルとして生成するスキルです。日本語フォント設定、縦書き対応、ルビ(ふりがな)、禁則処理、印鑑欄など、日本のビジネス文書に必要な要素をすべてカバーします。
pip install python-docx lxmlすべての文書は以下のデフォルト設定で生成してください:
| 項目 | 値 |
|---|---|
| 用紙サイズ | A4(210mm x 297mm) |
| 上余白 | 25.4mm(1インチ) |
| 下余白 | 25.4mm(1インチ) |
| 左余白 | 31.75mm(1.25インチ) |
| 右余白 | 31.75mm(1.25インチ) |
| 文字方向 | 横書き(デフォルト) |
from docx.shared import Mm
section = document.sections[0]
section.page_width = Mm(210)
section.page_height = Mm(297)
section.top_margin = Mm(25.4)
section.bottom_margin = Mm(25.4)
section.left_margin = Mm(31.75)
section.right_margin = Mm(31.75)| 用途 | フォント名 | 分類 |
|---|---|---|
| 本文(ゴシック体) | 游ゴシック / Yu Gothic | ゴシック |
| 本文(明朝体) | 游明朝 / Yu Mincho | 明朝 |
| 互換用(明朝体) | MS 明朝 / MS Mincho | 明朝 |
| 互換用(ゴシック体) | MS ゴシック / MS Gothic | ゴシック |
| ビジネス文書推奨 | 游明朝 | 明朝 |
from docx import Document
from docx.shared import Pt
from docx.oxml.ns import qn
document = Document()
# デフォルトフォントの設定
style = document.styles['Normal']
font = style.font
font.name = 'Yu Mincho' # 英数字用
font.size = Pt(10.5) # 日本語文書の標準サイズ
# 日本語フォントの設定(rFonts の eastAsia 属性)
rPr = style.element.rPr
if rPr is None:
rPr = style.element.makeelement(qn('w:rPr'), {})
style.element.append(rPr)
rFonts = rPr.makeelement(qn('w:rFonts'), {})
rFonts.set(qn('w:eastAsia'), '游明朝')
rPr.append(rFonts)| 要素 | サイズ |
|---|---|
| 表題(タイトル) | 18pt〜24pt |
| 見出し1 | 14pt〜16pt |
| 見出し2 | 12pt〜14pt |
| 本文 | 10.5pt(標準) |
| 注釈・補足 | 9pt |
| フッター | 8pt〜9pt |
縦書き文書を生成する場合、セクションのテキスト方向を変更します:
from docx.oxml.ns import qn
from lxml import etree
section = document.sections[0]
sectPr = section._sectPr
# テキスト方向を縦書きに設定
textDirection = sectPr.makeelement(qn('w:textDirection'), {})
textDirection.set(qn('w:val'), 'tbRl') # Top-to-Bottom, Right-to-Left
sectPr.append(textDirection)注意事項:
python-docx には直接ルビを設定する API がないため、XML を直接操作します:
from docx.oxml.ns import qn
from lxml import etree
def add_ruby(paragraph, base_text, ruby_text, font_name='游明朝', base_size=21, ruby_size=10):
"""ルビ付きテキストを段落に追加する"""
ruby_elem = paragraph._element.makeelement(qn('w:r'), {})
ruby_xml = f'''
<w:ruby xmlns:w="http://schemas.openxmlformats.org/wordprocessingml/2006/main">
<w:rubyPr>
<w:rubyAlign w:val="distributeSpace"/>
<w:hps w:val="{ruby_size}"/>
<w:hpsRaise w:val="{base_size + 2}"/>
<w:hpsBaseText w:val="{base_size}"/>
<w:lid w:val="ja-JP"/>
</w:rubyPr>
<w:rt>
<w:r>
<w:rPr>
<w:rFonts w:eastAsia="{font_name}"/>
<w:sz w:val="{ruby_size}"/>
</w:rPr>
<w:t>{ruby_text}</w:t>
</w:r>
</w:rt>
<w:rubyBase>
<w:r>
<w:rPr>
<w:rFonts w:eastAsia="{font_name}"/>
<w:sz w:val="{base_size}"/>
</w:rPr>
<w:t>{base_text}</w:t>
</w:r>
</w:rubyBase>
</w:ruby>
'''
ruby_element = etree.fromstring(ruby_xml)
ruby_elem.append(ruby_element)
paragraph._element.append(ruby_elem)Word 文書での日本語禁則処理を適切に設定します:
# 段落に禁則処理を設定
pPr = paragraph._element.get_or_add_pPr()
kinsoku = pPr.makeelement(qn('w:kinsoku'), {})
kinsoku.set(qn('w:val'), '1') # 禁則処理を有効化
pPr.append(kinsoku)
# ワードラップ設定
wordWrap = pPr.makeelement(qn('w:wordWrap'), {})
wordWrap.set(qn('w:val'), '0') # 日本語の文字単位で折り返す
pPr.append(wordWrap)| 種別 | 文字 |
|---|---|
| 行頭禁則 | 、。,.・:;?!)」』】〉》〕}ー |
| 行末禁則 | (「『【〈《〔{ |
ビジネス文書に必要な印鑑欄をテーブルで作成します:
from docx.shared import Cm, Pt
from docx.enum.text import WD_ALIGN_PARAGRAPH
from docx.enum.table import WD_TABLE_ALIGNMENT
def add_inkan_table(document, labels=None):
"""印鑑欄を追加する(右寄せの3マス表)"""
if labels is None:
labels = ['承認', '確認', '担当']
table = document.add_table(rows=2, cols=len(labels))
table.alignment = WD_TABLE_ALIGNMENT.RIGHT
for i, label in enumerate(labels):
# ラベル行
cell = table.cell(0, i)
cell.text = label
cell.paragraphs[0].alignment = WD_ALIGN_PARAGRAPH.CENTER
cell.width = Cm(2.5)
# 印鑑スペース行(空白、高さで印鑑サイズを表現)
cell = table.cell(1, i)
cell.text = ''
cell.height = Cm(2.5)
return table日本のビジネスで使用する標準的な見積書フォーマットです。
支払いを依頼するための請求書フォーマットです。
日本語ビジネス文書のテーブルには以下のスタイルを適用してください:
from docx.shared import Pt, Cm, RGBColor
from docx.enum.table import WD_TABLE_ALIGNMENT
def style_business_table(table):
"""ビジネス文書用テーブルスタイルを適用"""
table.alignment = WD_TABLE_ALIGNMENT.CENTER
for row in table.rows:
for cell in row.cells:
for paragraph in cell.paragraphs:
paragraph.style.font.size = Pt(10)
paragraph.style.font.name = 'Yu Mincho'
# ヘッダー行の背景色を設定
for cell in table.rows[0].cells:
shading = cell._element.makeelement(qn('w:shd'), {
qn('w:fill'): 'D9E2F3',
qn('w:val'): 'clear'
})
cell._element.get_or_add_tcPr().append(shading)文書を生成する前に、以下をユーザーに確認してください:
不明な項目はデフォルト値を使用し、プレースホルダーには 【〇〇】 を使用してください。
mitsumori_20260304.docx(見積書_20260304.docx も可)document.save('filename.docx') で保存する.docx からの読み込みにも対応している~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.