以前,『Excel ワークシートの一括 CSV 変換』記事で,Spreadsheet::ParseExcel モジュールを用いて Excel 2003 形式の Excel ファイルから CSV 形式でデータ抽出する Perl プログラム xlstocsv.pl について書いた。

しかしその後,このプログラムだと,JISX 0213 の文字のうち Unicode コードポイント U+20000 以上の拡張領域にある漢字がすべて x'EFBFBD' に文字化けしてしまうことがわかった。Spreadsheet::ParseExcel モジュールの日本語処理モジュール Spreadsheet::ParseExcel::FmtJapan モジュールの問題と思われた。

入力の Excel ファイル (jisx0213-extarea-tbl.xls) と xlstocsv.pl の抽出結果 CSV を,それぞれ図 1,図 2 に示す。

fig1-jis0213-xls.png
図 1. 入力 Excel: jisx0213-extarea-tbl.xls
fig2-jisx0213-win-old.png
図 2. 出力 CSV (漢字が文字化け)

そこで,文字化け対策として,今回は Python3 言語を用いて,Excel - CSV 変換プログラムを書いた。果たして,U+20000 以上の拡張領域の文字もきちんと抽出できた。

以下,Excel から CSV を抽出するプログラム,CSV から Excel 2007 ブックを生成するプログラム,及び Excel ブックの属性変更を行うプログラムの例について示す。Excel データを読み書きする openpyxl 及び,データサイエンスライブラリ Pandas のモジュールが必要なので,あらかじめ “pip install pandas openpyxl” にて組み込んでおく。

なお,本稿で作成するプログラムの前提として,CSV のセパレータは “|”(vertical line, x'7c') としている。また,データ中にセパレータ文字を使う場合のエスケープ文字は,“\”(backslash, x'5c') としている。

xlsxtocsv.py: Excel から CSV を抽出する

Excel ブックに含まれるすべてのシートについて,データを CSV 形式で出力する手順は概ね次のとおりである。

  1. pandas の ExcelFile("Excel ファイル名") 関数により,Excel ブックオブジェクト (ここでは xls_book とする) を読み込む。
  2. xls_book.sheet_names で参照できる Excel シート名毎に以下処理を行う。
  3. xls_book.parse(sheet_name=シート名, opts) 関数により,シートのデータを読み込んで,pandas DataFrame オブジェクト (ここでは df) に格納する。
  4. DataFrame オブジェクト dfto_csv(CSV ファイル名, opts) メソッドにより,指定したファイルに CSV データを書き出す。

実装 xlsxtocsv.py のコードを以下に示す。

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
#
# xlsxtocsv.py: Excel to CSV
#
# 2020(c) isao yasuda, All Rights Reserved.
# $Id: xlsxtocsv.py 488 2020-04-11 16:02:10Z isao $
#
# DESCRIPTION
# -----------
# - usage: xlsxtocsv.py xlsx-file
# - Excel Book を読んで,Sheet名.csv を書き出す
# - セパレータは '|'
# - " クォートしないようにする。(panda.DataFrame.to_csv quotechar='\\' 指定) 
 
import os
import sys
import pandas as pd
 
# プログラム名
pn = os.path.basename(sys.argv[0])
 
# 引数チェック
if len(sys.argv) != 2:
    print("usage:", pn, "excel-file")
    exit(1)
 
print("*", pn + ":", "Excel file:", sys.argv[1])
 
# Excel Book 読み込み
xls_book = pd.ExcelFile(sys.argv[1])
 
# シートごとに内容を"シート名.csv"ファイルに書き出す
# - シートが存在するだけループ
for sht_name in xls_book.sheet_names:
    # シートオブジェクトを DataFrame にセット
    df = xls_book.parse(sheet_name=sht_name, header=None)
    csv_fname = sht_name + '.csv'
    print("*", pn + ": Sheet:", sht_name, "output to", csv_fname)
    # DataFrame を「シート名.csv」で CSV 出力
    df.to_csv(csv_fname,
              index=False,
              header=False,
              sep='|',
              quotechar='\\')
 

本プログラムの実行の様子を以下に示す。CSV 出力結果は図 3 のとおりである。文字化けせず正しく出力されている。

$ /xlsxtocsv.py jisx0213-extarea-tbl.xls
* xlsxtocsv.py: Excel file: jisx0213-extarea-tbl.xls
* xlsxtocsv.py: Sheet: jis0213-win output to jis0213-win.csv
$
fig3-jis0213-win.png
図 3. CSV 出力結果

csvtoxlsx.py: 複数の CSV ファイルから Excel ブックを生成する

複数の CSV ファイルを Excel シートとして格納し,Excel ブックを生成するプログラムを書く。その主な手順は以下のとおりである。

  1. 指定した CSV ファイル毎に以下を行う。
  2. csv モジュールの reader 関数で CSV データをオブジェクト (ここでは reader) に読み込む。
  3. reader オブジェクトから行のリストを組み立て,このリストから pandas DataFrame (ここでは sdf) を生成する。
  4. pandas の ExcelWriter(Excel ファイル名, engine="openpyxl"[, opt]) 関数によりライタ (ここでは writer) を定義する。このとき,最初のシートの場合,opt に何も指定せず,2 シート目以降の場合,optmode="a" (追加モード) を指定する。
  5. DataFrame オブジェクト sdfto_excel(writer, sheet_name=シート名, opts) メソッドにより,writer 指定で CSV ファイルに対応した Excel シートを生成する。

実装 csvtoxlsx.py のコードを以下に示す。

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
# 
# csvtoxlsx.py: CSV files to Excel Book
#
# 2020(c) isao yasuda, All Rights Reserved.
# $Id: csvtoxlsx.py 488 2020-04-11 16:02:10Z isao $
#
# DESCRIPTION
# -----------
# - usage: csvtoxlsx.py xlsx-file 0 1 2..
# - 0.csv, 1.csv,.. を読んで 0, 1,.. シート名からなる xlsx-file を生成する。
# - CSV のセパレータ '|'; 引用文字 \; エスケープ文字 \\;
 
import os
import sys
import csv
import pandas as pd
 
# CSV ファイルを読んで DataFrame を生成する関数
def genCSVDataFrame(csv_fname):
    with open(csv_fname, newline='') as csvf:
        reader = csv.reader(csvf,
                            delimiter='|',
                            quotechar='\'',
                            escapechar='\\')
        csvlist = [row for row in reader]
        return pd.DataFrame(csvlist)
 
# 主処理
# プログラム名
pn = os.path.basename(sys.argv[0])
 
# 引数チェック
argc = len(sys.argv)
if argc < 3:
    print("usage:", pn, "xlsx-file 0 1 2 ..")
    print(" 0, 1,..4: basename of 0.csv, 1.csv,.. 4.csv")
    exit(1)
 
# Excel ファイルがすでに存在していたら削除
xlsx_fname = sys.argv[1]
if os.path.exists(xlsx_fname):
    os.remove(xlsx_fname)
    print("*", pn + ": old Excel Book:", xlsx_fname, "removed.")
 
# 引数の CSV ファイルごとに Excel シートを追加
# - 指定 CSV ファイル (sys.argv[2] 〜 (argc - 1)) 毎にループ
# - openpyxl エンジンで Excel シートとして出力
for i in range(2, argc):
    sht_name = sys.argv[i]
    csvfile = sht_name + '.csv'
    print("*", pn + ": CSV file:", csvfile)
    # CSV DataFrame を Excel に出力
    sdf = genCSVDataFrame(csvfile)
    if os.path.exists(xlsx_fname):
        # すでに xlsx ファイルがあれば,当該シートを追加(二つ目以降の CSV ファイル)
        with pd.ExcelWriter(xlsx_fname,
                            engine="openpyxl",
                            mode="a") as writer:
            sdf.to_excel(writer,
                         sheet_name=sht_name,
                         index=False,
                         header=False)
            print("*", pn + ": added Sheet:", sht_name, "to", xlsx_fname)
    else:
        # 存在しなければ,当該シートで xlsx ファイルを作成(最初の CSV ファイル)
        with pd.ExcelWriter(xlsx_fname,
                            engine="openpyxl") as writer:
            sdf.to_excel(writer,
                         sheet_name=sht_name,
                         index=False,
                         header=False)
            print("*", pn + ": added Sheet:", sht_name, "to new", xlsx_fname)
 
本プログラムの実行の様子を以下に示す。生成された Excel ブックは図 4 のとおりである。
$ ./csvtoxlsx.py jisx0213-extarea-tbl.xlsx jis0213-win
* csvtoxlsx.py: old Excel Book: jisx0213-extarea-tbl.xlsx removed.
* csvtoxlsx.py: CSV file: jis0213-win.csv
* csvtoxlsx.py: added Sheet: jis0213-win to new jisx0213-extarea-tbl.xlsx
$
fig4-jis0213-xlsx-pre.png
図 4. 出力 Excel ブック: jisx0213-extarea-tbl.xlsx


adjustxlsx.py: Excel ブックの属性を変更する

上記 csvtoxlsx.py で生成した Excel ブックのセル属性は,必ずしも利用者の意図に沿ったものとは限らず,フォントや,セルの格納文字列の長さに応じた幅・折り返し,左寄せ等の配置,といった属性を指定したい場合がある。

Excel ブックを読み,セル属性を設定変更して,当該ブックを上書きするプログラムを書く。その主な手順は以下のとおりである。

  1. openpyxl モジュールの load_workbook(Excel ファイル名) 関数を用いて,Excel ブックオブジェクト (ここでは wb) を取得する。
  2. wb.sheetnames で得られるシート名リストの各シート名毎に以下を行う。
  3. 当該シート名をアクティブに設定する。ここではアクティブシートオブジェクトを ws とする。
  4. 設定したい属性に応じて,ws の行・列・セル単位で FontAlignment によって属性をセットしていく。フォント属性や列幅は列単位で,行の高さは行単位でセットできる。水平・垂直の寄せ,折り返し表示等の配置属性については,セル単位に設定する必要があるようである。
  5. 属性設定を完了したら,ws.save(Excel ファイル名) でファイルをセーブし,ws.close() でクローズ処理を行う。

実装 adjustxlsx.py のコードを以下に示す。

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
# adjustxlsx.py - Excel 行・列幅,セル属性の調整
# 2020(c) isao yasuda, All Rights Reserved.
# $Id: adjustxlsx.py 488 2020-04-11 16:02:10Z isao $
# DESCRIPTION
# -----------
# - usage: adjustxlsx.py xlsx-file
# - Excel Book を読んで,シートごとに以下を行う
#   (1)列幅を設定する。
#   (2)行高を設定する。
#   (3)フォント,テキスト配置のセル属性を設定する。
# - 同一ファイルに格納する。
 
import openpyxl as px
from openpyxl import Workbook
from openpyxl.styles import Alignment, Font
import os
import sys
 
# プログラム名
pn = os.path.basename(sys.argv[0])
 
# 引数チェック
if len(sys.argv) != 2:
    print("usage:", pn, "xlsx-file")
    exit(1)
 
# Excel Book オブジェクト
wb = px.load_workbook(sys.argv[1])
# シート名のリストを取得
sht_nm = wb.sheetnames
# セル属性
# - フォント: メイリオ, 11pt, ボールド無, 立体, アンダーライン無
font1 = Font(name='メイリオ', size=11, bold=False, italic=False,
            vertAlign=None, underline='none', strike=False)
# - 配置: 左寄せ, 上寄せ, 折り返し表示, インデント無
aligment1 = Alignment(horizontal='center', vertical='center',
                     wrapText=True, indent=0)
 
# シート毎の設定
# - シートの数だけループし,セル属性を設定
# - インデックス i = 0: 文字; 1: コードポイント
sht_len = len(sht_nm)
for i in range(0, sht_len):
    # アクティブシートの選択
    ws = wb[sht_nm[i]]
    print("*", pn + ": sheet:", sht_nm[i], "attribute setting")
     
    # 列毎にフォント属性を設定
    for coln in ["A", "B"]:
        ws.column_dimensions[coln].font = font1
     
    # 列毎に列幅を設定
    #   A列    B列
    #   漢字|コードポイント
    #   6   12
    ws.column_dimensions["A"].width = 6
    ws.column_dimensions["B"].width = 12
     
    # 行毎に行高を設定
    # - 18pt
    # 当該行の列毎に配置属性を設定
    # - 定義した alignment1 属性
    # ws.max_row: シートの有効行数
    print("*", pn + ":", sht_nm[i],
          "items:", ws.max_row)   # 行数
    rowmax = ws.max_row + 1       # ループの range 境界値
    for row in range(1, rowmax):  # 先頭行から最終行まで
        ws.row_dimensions[row].height = 18
        for col in range(1, 3):   # 行・列 (セル) 毎に配置属性を設定
            ws.cell(row = row, column = col).alignment = aligment1
 
# Excel Book の保存・クローズ
wb.save(sys.argv[1])
wb.close()

本プログラムの実行の様子を以下に示す。生成された Excel ブックは図 5 のとおりである。フォント (メイリオ),漢字及びそれに対する Unicode コードポイントの列幅 (それぞれ 6,12),行高 (18),配置 (中央揃え) が,それぞれ ( ) 内の属性に変更されている。

$ ./adjustxlsx.py jisx0213-extarea-tbl.xlsx
* adjustxlsx.py: sheet: jis0213-win attribute setting
* adjustxlsx.py: jis0213-win items: 303
$
fig5-jis0213-xlsx-aft.png
図 5. 属性変更後 Excel ブック: jisx0213-extarea-tbl.xlsx

参考資料

pandas,openpyxl の API の詳細は以下のドキュメントを参考にしていただきたい。

筆者が学んだ Python3 の参考書をあげておく。

4873117380
入門 Python 3
Bill Lubanovic(著), 斎藤 康毅(監修), 長尾 高弘(翻訳)
オライリージャパン
¥4,070 (新品)

令和二年のお正月

あけましておめでとうございます。令和二年,皇紀二千六百八十年,庚子。

2019 年,令和元年は,御代がわりというだけでなく,初孫が生まれるなど,俺個人にとっても特別な年だった。台風で被災された方々にとってはたいへんな年であったけれども,ラグビーワードカップでの日本代表の活躍,渋野日向子の全英オープン優勝などスポーツでもうれしい話題に事欠かなかった。

ま,政治では消費増税があり,野党愚連隊による桜を見る会の茶番ばかりで国会時間が膨大にムダにされ(桜を見る会の予算5千万に対して国会運営は一日3億かかるらしい),そろそろ,あれだけ議席を確保しながら野党の愚行を野放しにしている自民党国対政治そのものにもお灸をすえる時期のようである。

そして 2020 年。東京オリンピックイヤーである令和二年の初春も,希望のある年にしたいという思いで,老母,娘,妹夫婦とともに伊勢神宮内宮・外宮,猿田彦神社にお詣りした。

妻のために内宮厄除御守,自分用に猿田彦神社御守をいただく。猿田彦神社は道開きの神,建設の神とされるので,システム開発に関わる俺の仕事にはありがたいご利益を期待して。猿田彦神社でのおみくじは小吉。ま,そんなところだろう。

しかしながら,年明け早々イランと米国とがほぼ戦争に近い状態になり,国内では中国が絡む国会議員IR贈収賄問題が騒がしく,と,世の中には激震が走っている。4月に習近平が来日する見込みであり,香港やウイグルに対する中国による弾圧があれだけ世界で問題視されている最中に,米中新冷戦の最中に,自由抑圧の独裁国家元首を「国賓」として招くなどという,これ以上ないバカ外交をやる安倍政権のメッキの剥がれようも悲惨である。経済も消費増税・米中貿易戦争の影響で先行きは真っ暗。オリンピックイヤーの日本の情勢を占うに,間違いなく凶。ま,俺には関係ない。

01-naiku-02.png
伊勢神宮 内宮正宮前
02-geku-04.png
伊勢神宮 外宮正宮前
03-sarutahiko-01.png
猿田彦神社

お伊勢参りのための宿は,鳥羽の民宿・上耕(うえこう)さんだった。民宿なのでお風呂などの施設は想像通りではあったが,料理が凄かった。宿主の美人の娘さんが運んでくれた料理は,お正月のおせちのほか,鯛塩焼,伊勢海老残酷焼,伊勢海老刺身,伊勢海老テルミドール,海老二尾のてんぷら,牡蠣三枚の陶板焼,鮃・甘海老・鰤刺身舟盛と,超豪華。宿主自ら漁で獲た伊勢海老まるごと三尾が出てくるとは信じられなかった。舟盛の刺身は食いきれなかった。翌朝は,雑煮,鮃焼魚,晩に食った伊勢海老刺身の頭で煮付けたお味噌汁もろもろが饗され,こんなに贅沢してよいのかと思うくらいであった。

妹の旦那がレンタカーを借りて大阪からの移動などに精を出してくれたわけだが,その費用込みで,正月の特別期間であるにもかかわらず,一泊二日でひとり2万円強だったのだから,ヘタなホテルに宿泊するよりコスパ・満足度は遥かに高かったと思う。

早朝に民宿から坂を降りて鳥羽の海辺を歩いた。

04-minshuku-07.png
鳥羽・民宿そばの海辺にて
05-minshuku-03.png
民宿・上耕さんの伊勢海老残酷焼

二見浦の海浜に臨む賓日館も訪れた。賓日館は皇室の伊勢神宮ご親拝の折のご宿泊に利用された超 VIP 向け宿泊施設で,現在は国重要文化財として一般公開されている。皇室が利用された数々の品々やゆかりの日本画家・中村左洲の作品を見学した。天皇皇后即位礼正殿の儀を記念した雛人形が可憐であった。賓日館前の道にある松尾芭蕉句碑も興味深かった。「うたがふな潮の花も浦の春」。

06-hinjitsukan-03.png
賓日館
08-hinjitsukan-01.png
賓日館 天皇皇后即位礼正殿の儀雛人形
07-hinjitsukan-04.png
賓日館前の海辺

ワルキューレの祈り

英国の画家,エドワード・ロバート・ヒューズ(1851-1914)の描いた『ワルキューレの祈り』。ラファエル前派風の物語性豊かな耽美的神話画。うっとりとしてしまう。

ワルキューレは戦にて死すべき者を定む……

Edward_Robert_Hughes-The_Valkyries_Vigil.png
"The Valkyrie's Vigil", Edward Robert Hughes (before 1915)

大津皇子の恋歌

『万葉集』巻二に,大津皇子おおつのみこ(西暦 663 - 686)の興味深い相聞歌(恋歌)がある。

大船おほぶね津守つもりうららむとはまさしに知りて我がふたり宿
『萬葉集 一』高木市之助・五味智英・大野晋 校注,岩波日本古典文学大系4,昭和三十二年,岩波書店,73頁。

「大津皇子,石川郎女いしかわのいらつめひそかにふ時,津守連通つもりのむらじとほるの其の事をうらあらはすに,皇子の作りましし御歌一首」(同書)との詞書がある。「占へ露はす」,つまり,占いに顕れるとは書かれているが,津守連通とは諜報・秘密警察のような役割を担った役人であってみれば,これは密かに探りを入れて知るという意味だろう。ちなみに「大船の」は「津」に掛かる枕詞である。

つまり,この歌の意味は「スパイにバレると知りながら俺はお前と寝たのさ」。反対勢力に取り囲まれる政治的苦境のなかで,そんなのどこ吹く風とばかりに愛欲に身を委ねるその豪胆さに,思わずしびれてしまう。
 
大津皇子は父・天武天皇の崩御後まもなく,謀反の罪に問われ自害した皇子。享年24。二上山にある彼の墓に,俺は高校生のころお詣りしたことがある。それにしても,叛逆者とされた人物による,かような愛欲の詩さえをも収録する『万葉集』というわが国最大の詞華集には,本当に驚かされる。詩精神が政治によって曇らされていないのだ。焚書坑儒の中国とはまったく異なるこの日本の文学伝統は,誇ってよい。

令和に御代替りとなり,はじめて国書がその典拠とされたことから,四月以降,にわかに『万葉集』関連の図書が書店の平積みを占めるようになった。俺も令和を寿ぎ,久しぶりに『万葉集』を手にとりつまみ食い。

上記引用は,手元にある旧岩波日本古典文学大系本『萬葉集 一』に拠ったが,『万葉集』のとびきり有名な作品を学習者により分かりやすく解説したものとして,角川ソフィア文庫から出ている『ビギナーズ・クラシックス 日本の古典 万葉集』をお勧めする。ただし,大津皇子の件の和歌については,鑑賞の対象とはなっておらず,エピソード的に言及されている。

失くした夢は碧い海の色…


失くした夢は
碧い海の色…


恋のために
髪を剪る日は
涙はこぶその風が
教えてくれるよ…

安全地帯『碧い瞳のエリス』,1985 年。

通勤の電車のなかで昔の J-POP(当時は,歌謡曲という「ダサい」呼ばれ方を嫌って「ニューミュージック」なんて言ってた。草)を聴いていて,ときおり,その歌詞にふと改めてこころを貫かれ,魂がどこか遠くに行ってしまうようなことがあるものである。

いい歳をして,過ぎ去った若いころの情に,諦めの胸騒ぎ。失くした夢は碧い海の色…。感情のお里が知れてしまう。

韓国ホワイト国除外

8 月 2 日,外為法ホワイト国から韓国を除外する政令変更が閣議決定された。施行は 28 日からとのこと。米国が仲裁をもちかけたとの報道もあったが,予定通りである。

でも,だからといって,韓国への輸出が禁止されるわけでもなく,しかるべく手続きをすればよいのに,日本製品不買運動・排除に韓国世論が動いていて,アホじゃないかと思う。なら,エッチングガスもなにもかも,日本から買わなきゃいいじゃないか? 日本から韓国への輸出禁止は彼らにとっては願ったり叶ったりではないか? 東京五輪をボイコットする? サッカー日韓ワールドカップでのラフプレー・不審な審判裁定以来,世界は韓国のアンフェアを刷り込まれているので,むしろ韓国の東京五輪不参加は,欧州を中心に世界が歓迎するだろう。アホじゃないかと思う。

どうしてここまで韓国(いまや「り地域」とネットでは言われている)は気が狂ったように騒いでいるのか。よくわからない。こういうのを火病というのか。

朝鮮出身労働者請求権問題,慰安婦合意破棄問題,火器管制レーダー照射問題,韓国国会議長による天皇侮辱問題と,昨年から度重なる韓国の約束破り・対日侮蔑行為にとうとう日本がキレて「経済報復」に出たのだ,と思うに足る背景があることは間違いない。韓国だけではなく,海外も概ね日本の「制裁」と受け取っているようである。

しかし,わが経産省はあくまで安全保障上の理由による輸出管理の厳格化措置だと公式には説明しているので,仮に昨年来のこれらの日韓事案が日本の望む通りに解決されたとしても,ホワイト国除外を撤回できない。だって問題の理由が違うのだから。それくらい日本の官僚は公言したことは徹底する。経産省はまた,パーティーと会合しかやっていないような外務省みたいな口先集団ではなく,実務責任を持つ役所なので,きっちり決めた物事を進めるはずだ。そして,人間関係の常として,一旦失われた韓国への信頼は,回復のために韓国側の多大な時間と努力が必要となるはずだ。

それにしても,韓国という国はどういう神経をしているのか。まったく呆れる。「経済報復」と決めつけて責任をすべて日本に押し付け,WTO においてまで鼻摘まみの大騒ぎ。なのに直接的な安保問題である北朝鮮のミサイル問題はほとんど放置モード。何よりも,貿易管理の実施内容について日本と実務のコンセンサスをとって改善を約束することで事態を打開するという,当たり前の手順をどうして踏まないのだろうか。問題をすり替えるのか。

徹底的に日本の所為にして国民の怒りを日本に向けさせることに韓国政府は大わらわである。ホワイト国除外は WTO 違反だと主張しながら,韓国も報復として日本をホワイト国から外しかつ WTO に提訴するなんて,論理破綻したことを平気で口にしている。一方で,貿易となんの関係もない GSOMIA を継続しないなどと日本に脅しをかけている。

だが,これで米国の怒りを買い米韓同盟を揺るがすことがどうしてわからないのか。俺からみても,まったくアホちゃうかである。ま,おそらく GSOMIA は,中国・北朝鮮よりの現在の韓国であってみれば,むしろ日米の敵国への情報漏洩が心配されるだけに,もはやあまり価値がない。つまり,脅しにもなっていない。

これでは,韓国政府の輸出管理改善が望めず,わが経産省も本当に輸出許可を出さないことになり,結果,韓国経済に大きな影響が出る事態になってしまいかねない。輸出する日本企業側は輸出管理手続きをきちんとやるのでほとんど影響はないと言っているらしいのに。なのに韓国は勝手に騒いでいる。それ自体が墓穴を掘るように思われる。「日本による経済侵略」だと。笑ってしまう。どこまで被害者意識が強いのか。頭の悪いトップがいると本当に国の進むべき道を誤るんだな。

ま,俺からすれば,愚かな韓国指導者のおかげで韓国経済が自滅してくれて,半導体その他,サプライチェーンから韓国が剥がされて,韓国がもっている高付加価値ハイテク市場シェアを米国,日本,台湾で山分けできるのなら,これ以上のことはない。祝杯をあげるのはそのときである。米中貿易戦争でいっしょに中国がつぶれてくれ,その安全保障的・経済的恩恵を米国とともに日本が受けられるのなら,万々歳である。

と,考えると,日本政府はこの措置を米国と示し合わせてやったのか,という思いを強くする。となると,韓国がいくら騒いでも,懇願しても,日本が再び韓国をホワイト国に戻すなんてありえないという気がする次第である。

ついさっき,為替相場をチェックしたら,韓国通貨危機のボーダーとも言われている1ドル1200ウォンを下回るウォン安になっていた。ほどなく面白いことが起きそうである。

対韓国輸出規制強化

日本の経産省が 7/4 から韓国に対しフッ化水素などの三品目の輸出管理について規制を強化した。加えてパブリックコメントを経た上で,8/1 から韓国を輸出規制ホワイト国から除外することも発表した。

これに関する 6/30 の産經新聞の報道から,韓国では蜂の巣をつついたように大騒ぎになっている。G20 で韓国の存在感まるでなし,トランプがキムジョンウンと電撃会談,なんてのも吹き飛ぶ勢いである。指定三品目の供給阻害が,韓国の主要産業である半導体,有機 EL ディスプレイの製造に決定的な悪影響を及ぼし,この結果,ただでさえ弱っている韓国経済が破綻するかもしれないからである。

朝鮮半島出身労働者問題(いわゆる徴用工問題)の韓国最高裁判決とその後の韓国政府の放置に対する経済制裁と韓国では捉えられているが,日本政府は,そうではなく,韓国の信用が低下したことによる,輸出規制優遇対象からの除外だ,と説明している。

僕自身,韓国最高裁判決に基づく日本企業の資産差し押さえが現金化され日本企業が実質的に損害を被ってはじめて日本政府が報復に打って出るというふうに報道から知らされていたこともあり,現金化の前でのこの経産省の措置はたいへん意外に思われた。日本政府には,単独で他国に対して経済制裁をなす法的根拠も,根性もない,と思っていたからである。

たしかに,この輸出規制強化は韓国を優遇対象から外すというだけで,これがすなわち禁輸に直結するわけでもなくきちんと申請・受査すれば輸出は可能なわけなので,制裁というには甘すぎる話ではあるけれども,韓国の狂騒的反応をみていると恐るべき効果を発揮しているようにも思われる。

経産省の発表によれば,この措置をとった理由は「不適切な事案が発生した」こと。ところが,具体的に韓国の行った何が不適切な事案なのか,まったく説明していない。別の報道によれば,経産省が具体的事案の説明を行わないのは「守秘義務があるから」だそうである。そんなの理由にできるか?

じつは,僕はこの思わせぶり,「俺たちは知ってるぜ」風の物言いにいちばん「日本政府の怖さ」を感じるところなんである。ひと月半前くらいに産經の zakzak で,韓国に輸出した戦略物資がイランに横流しされていた可能性について記事が出ていたのだが,これを読んだときは,ま,産經なんで韓国をディスる記事は当たり前か,程度にしか捉えなかった。しかし,ここにきて,この手の「事案」について経産省が確かな証拠を押さえていて,今後の動向をみながら次なるカードとして隠しもっているのかもしれない,ということに思い至ると,日本政府も恐ろしい戦略をもって韓国に戦いを挑んだものだと考えさせられるのだ。

日本から韓国に輸出されたフッ化水素がイランや北朝鮮のウラン濃縮のために横流しされていたというような事実が仮に明らかになると,米国を烈火のごとく怒らせるのは間違いなく,韓国は日本に限定されず米国からも制裁を受ける事態になりかねない。そもそも情報オンチの日本政府であってみれば,じつは米国からの情報に基づいて米国と十分に議論した上で韓国を絞めるこの措置に至った,と考えるほうが腑に落ちるところがある。

外務省は相手国と高級ワインを飲んで宴会をしているだけなのだが,経産省は違うようである。日本政府は韓国に対して本当に怒っている。徹底的に韓国ムンジェイン政権を締め上げるつもりのようである。これまで日本政府が産業を直撃しかねないような措置を韓国にしたことがあるのか?と考えるにつけ,韓国はいま恐れおののいているのではないかと,それゆえに狂騒的に日本に噛み付いているのではないかと思う。

韓国は日本の「報復」に対し相応の報復をやると息巻いている。何ができるのか? WTO に訴える? ホワイト国でない他の国と同じ扱いにするのがどうして自由貿易原理や国際法の違反なのだろうか? しかも,WTO に訴えると日本に「不適切な事案」の具体的問題を明らかにされ,逆に自分の首を絞めるのではなかろうか。日本に対して同様に「輸出制限」をかける? 制限されて日本が困る代替不可の品物なんて韓国にあるのか? 関税を上乗せする? それこそ WTO 違反ではないか。日本製品不買? 一般消費者にはムリムリ。日本への旅行自粛? んー…,その程度? 日本への報復として韓国にできることは,せいぜい日本の「不当な措置」を泣き喚いて国際社会に吹き込むことくらいに思われる。

これから日韓の面白いチキンレースがみられそうである。ま,中二病韓国がへこみ泣き喚き吠えまくるのをみるのは一興ではあるが,ここで他人の不幸はどうでもよくて,願わくば,これを機に,わが国が韓国に盗まれた技術と市場を奪い返し,いま再び「朝鮮特需」にあやからんことを。あくまで日本の利益になるように日本政府にはお願いしたいものである。

8/10 付記:ここで「輸出規制強化」と書いているが,経産省は「規制ではなく管理の強化」と明言している。他のホワイト国以外への国と管理を同じにするということなので,たしかに「規制」ではなく,そもそも「禁輸」でもなく,緩い「管理」からきつい「管理」に変更するということに過ぎない。朝日や毎日は政府がいくら口を酸っぱくして説明しても,いまだに「規制」と書いている。朝日や毎日みたいな新聞と同じになりたくないけれども,ま,このままにしておこう。

令和の御代。橿原神宮参詣。

20190501-reiwasokui.png

皇紀二千六百七十九年五月一日,第百二十六代の天皇陛下が御即位され,令和の御代となった。

朝10時半ころから俺もNHKで,剣璽等承継の儀,即位後朝見の儀を見た。

剣璽等承継の儀では,八尺瓊勾玉(やさかにのまがたま)・天叢雲剣(あめのむらくものつるぎ)が継承されるところをはじめて見た。なんで三種の神器のもう一器,八咫鏡(やたのかがみ)がないのか俺は知らなかったのだが,調べたところによれば,この鏡は,天照大神がご自身と思って祀るようにと神勅を下したことから,伊勢神宮に祀られ,他の神器とは別格の渡御すべからざる神性があるゆえ,この儀において取り扱われないという。

特集番組は,天皇御即位と令和の幕開けに関して,国民のお祝いムードを伝えていた。昭和の天皇が崩御された悲痛な雰囲気のなかで平成の時代が始まったのとは,まったく異なる御代がわりである。

受禅践祚はなんと 202 年ぶりだそうで,今回は,現在の皇室典範において譲位の定めがないことから特例法を制定しての儀となった次第である。こういう歴史的な明るい御代がわりを俺もこころから言祝ぎたい気分である。

四月三十日,平成最後の日,奈良県橿原市にある橿原神宮にお詣りした。橿原神宮は,第一代神武天皇とその皇后,媛蹈韛五十鈴媛命(ひめたたらいすずひめのみこと)をお祀りする。この地は,神倭伊波禮毘古命(かむやまといわれびこのみこと)が初代天皇として即位したところと日本書紀に記された,我が国建国の聖地である。御代がわりに皇統の源に思いを馳せるに相応しいと思ったのである。

大和三山のひとつ畝傍山を望みながら外拝殿に入る。そこから本殿に向けて柏手を打った。他の参詣者を見ていて,皆,二拝二拍手一拝の作法に従ってお詣りしているのに少し驚く。いったい,いつの頃からこうしてきちんとした作法が定着するようになったのか。

俺は神道系の高校を卒業した関係で,神道教科において神社の作法を教え込まれ,そこではじめて二拝二拍手一拝を知ることとなった。毎朝,毎夕,構内の神社の前で,二拝二拍手一拝をさせられたわけだが,その当時こんな作法は一般には誰も知らないのではないかと思っていたし,実際,当時は神社の参拝風景でもほとんど目にすることはなかったと記憶する。

20190430-kashiharajingu.png

recv() is deprecated on :utf8 handles

misimakansiserver: misima 漢詩平仄音韻分析デーモン,misimaserver: misima 旧仮名遣い・旧字変換デーモンのログに,いつのころからか次のようなエラーメッセージが出るようになっていた。

recv() is deprecated on :utf8 handles at /usr/local/lib/perl5/5.24/mach/IO/Socket.pm line 304.

機能的にはなんら支障が出ていないのでしばらく放置していたのだが,ちょっと気持ち悪いので対処することにした。

cpan perldelta によれば,Perl 5.23 あたりから,sysread(), syswrite(), recv(), send() について :utf8 ハンドルが廃止予定になったとのこと。

バークレイソケットインタフェースでクライアントと接続する際に,これまではクライアントのソケットディスクリプタ(ハンドル,通信路)に対し,binmode 関数で UTF-8 デコードするように指示していたのだが,これを行うとワーニングを発するようになっていたのだった。

とりあえず binmode:utf8 フラグをセットしてデコードするのをやめ,読み書きの前後に utf8::decode 関数(ストリームデータを Perl 内部で UTF-8 として処理できるようデコードする), utf8::encode 関数(Perl 内部データを UTF-8 にエンコードする)で変換操作を行うように改変した。コード主要部は以下のとおり。

while ($reqs-- > 0) {
    # クライアントからのリクエストを受信
    my $client = $listen_sock->accept() || last;
    my $readbuf;
    my $clip = $client->peerhost();
    my $ts = [gettimeofday] if ($sopts{'d'}); # タイマ
    print logtime() . " - $$ Chinese Verse Analysis Started.\n";
    # binmode $client, ":utf8";  # 削除
    defined ($client->recv($readbuf, $MAXLEN)) ||
        die logtime() . " - $$ recv error: $!\n";
    utf8::decode($readbuf);      # 追加: UTF-8受信データをデコード
 
    print logtime() . " - $$ Client: $clip; Received Text:\n$readbuf"
        if ($sopts{'d'});
    # クライアントからのデータをもとに処理を実行し,送信バッファにセット
    my $sendtext = kansi_main($readbuf);
 
    # 処理結果をクライアントに送信
    utf8::encode($sendtext);     # 追加: 送信データをUTF-8にエンコード
    print $client "$sendtext\n";
    $client->flush();
    $client->close();
    print tstrip($sendtext) if ($sopts{'d'});
    print logtime() . " - $$ Analysis for $clip Completed.\n";
    print logtime() . " - $$ Elapse: " . tv_interval($ts) . " sec.\n"
        if ($sopts{'d'});
}

これでワーニングを抑止できた。

五月一日の御代替わりの新しい元号は「令和」と決まった。万葉集巻五,梅花の歌三十二首の序文の一節から採られたとのこと。

時に,初春の令月にして,氣く風やはらぎ,梅は鏡前の粉をひらき,蘭は珮後はいごかうくんず。
日本古典文学大系『萬葉集 二』岩波書店,昭和三十四年,73頁。

鏡の前の美女の白粉のように白い梅花,嚢中のお香のように薫る蘭花という,清く美しい和の花の背景が麗しい。なるほど,めでたい元号ではないか。

しかしながら,「令和」という元号に対して,予想通り,左がかったインテリたちは日本の右傾化を象徴していると息巻いているらしく,例にたがわず,このめでたい新元号発表に不愉快な一石を投じてくれている。

欧米メディアには,漢籍の伝統に反し国書から採用したのは,中国に対抗しナショナリズムに傾く日本の国情の現れだというような,独善的な論評をなすものもあるようである。

また,「令」は命令の令であり「和」を強制するとは安倍の独裁も極まった,などというのも見た。「令」は「巧言令色」にあるように悪い意味だ,というバカ左翼もいた。「令」は「気品があって麗しい」という意味(「令嬢」の「令」)があることを,頭から無視している。「令子」という名の女性は数多くいるが,それは「悪い意味」なのだろうか? 人を侮辱していることがわからないのか。

そしてまた,元号は天皇制の時間軸を国民に強制するものだ,と,またぞろ,日本共産党は日本の伝統を否定するのに忙しい。これと同じように,天皇に結びついた元号を押し付けられるのは,国民の基本的人権の侵害であり,憲法違反だ,として裁判所に訴え出たバカな八十ジジイもいた。見境なく人権尊重を振りかざすバカジジイ。さらに,西暦を使えという主張は,キリスト教の時間軸を国民に強制することである,となぜに思い至らないのか。1960 年代に学生運動にかぶれた世代は,ホント,傍迷惑な存在である。いったいどこまで日本の老人は愚鈍なのか。もちろん,皆が皆ではないが。おまけに,もっともよい条件で年金を貰っているから,いよいよ頭に来るんである。

これらはすべて,己の Anti-Japan,反安倍政権の立場を説明するか,人権をはき違えているか,もしくは,元号というわが国柄のひとつを貶めたいに過ぎない。おまけに,その主張の過程で,「令子」さんに対してまったく意味のない侮辱的言説をなしていることにすら気づいていない。

もう一方で,今回,元号史上はじめて国書を典拠としたことが大きな話題となったわけだが,「初春令月,気淑風和」という文言は,中国古代の有名な詩文集『文選』にある「仲春令月,時和気清」に淵源があり,万葉集から採ったというのは間違いだ,などと衒学的なことを言うイヤミな野郎もいる。元号を決定した内閣が「万葉集から採った」と公に言うのだから,この出典議論はなんの意味もない,ただのバカ丸出しの学者気取りである。

はっきり言って,日本の古典が中国古典詩のレミニッサンスに満ちているのは当たり前であって,この愚か者の論理がまかり通ると,韓国人の病的なお家芸である「なんでも韓国起源説」と変わりがなくなってしまう。「米国産の小麦粉を使ったからと言って,日本人のパティシエが日本で作った美味しい菓子を米国産だと言うバカがどこにいる?」と,ある人がうがった譬えをしていた。

「初春の令月にして,氣淑く風和ぎ,梅は鏡前の粉を披き,蘭は珮後の香を薫ず」は明らかに漢文調である。ここから漢文を俺なりに「再構成」してみると,「初春令月 氣淑風和 梅披鏡前粉 蘭薫珮後香」となるだろう。さらに梅,蘭に対し中国風に梅花,蘭花と花字を補うと,「初春令月 氣淑風和 梅花披鏡前粉 蘭花薫珮後香」。平仄は○○●● ●●○○ ○○○●○● ○○○●●○。対句・平仄も見事な四六駢儷体となる。この序文を書いた古代日本人の漢籍の教養を推し量ることができる。

このように,元号「令和」は漢籍の文言に拠るという元号の伝統をもきちんと踏まえている。その上で,万葉集というわが国最古の詩歌集を直接の典拠としたわけである。しかも,万葉集は,天皇,貴族から兵士・乞食・売春婦にいたるあらゆる社会階層の人々の作品から構成されているという,世界に類をみない「国民的・民主的」詩歌集である。まさにその点で,「令和」は,日本国民の統合を象徴するに相応しい,たいへん美しい元号だと思う。こんなクールな元号を発案し決定してくれてありがとうである。

新元号発表直後に讀賣新聞社が行った緊急全国世論調査では,「令和」に好感をもっているとした人は 62% で,国書から採られたことを評価するとした人は 88% に上った。やはり,日本国民は総じて,上記の偽善的左翼,インテリぶったバカども(ホント,頭に来る!)とは違うのだ。安心した。

ここで改めて,典拠となった序文をすべて引用しておきたい。

 梅花の歌三十二首
天平二年正月十三日に,そちおきないへあつまりて,宴會をひらきき。時に,初春の令月にして,氣く風やはらぎ,梅は鏡前の粉をひらき,らんはいかうくんず。加之しかのみにあらずあけぼのの嶺に雲移り,松はうすものを掛けてきぬがさを傾け,夕のくきに霧結び,鳥はうすものめらえて林にまよふ。庭には新蝶しんてふ舞ひ,空には故雁歸る。ここに天をきぬがさとし,地をしきゐとし,膝をちかづさかづきを飛ばす。ことを一室のうらに忘れ,ころものくびを煙霞の外に開く。淡然にみづかほしきままにし,快然にみづから足る。若し翰苑あらぬときには,何を以ちてかこころべむ。請ふ落梅の篇をしるさむ。古と今とをそれ何そ異ならむ。園の梅を賦していささかに短詠を成すし。
同前。

師匠の家に仲間が集い,令月,やわらかな風,白い梅,芳しい蘭,曙光をおおってたなびく霧,蝶,帰る雁,など初春の麗しい暁の風景のもと,酒宴を囲み,各々気ままにくつろぐうちに,ある者がいまのこの快いこころを表して梅の歌を詠もうと提案し,そして仲間が詠んだ歌三十二首を掲載する,というのが要旨である。

安倍総理が令和発表後の談話において「人々が美しく心を寄せ合う中で,文化が生まれ育つという意味が込められている」と述べたのも,この序文全体から読み取れる,仲間が集まり美しい自然に喚起されて酒宴を和やかに楽しむなかで詩を生み出して行く,ということを踏まえているのである。

五月一日の御代替わりとともに,令和という新元号を,俺もこころから寿ぎたい。

20190401-shingengo-yomiuri.png
2019.4.1 讀賣新聞夕刊
* * *

ところで,四月一日,令和が公にされたわけだが,もう一方で働き方改革法が施行される運びとなった。個人的な意見としては,めでたい新元号発表の影に隠れるように,くだらない悪法が施行された,という感じなんである。

さしあたりは大企業が対象であるが,来年には中小企業もこれに従わなければならない。うちの会社でも,法改正が国会を通過したときから,残業規制の厳しい通達が回って,幹部が口うるさく労務管理を言うようになった。なにせ,この法律に違反する事案がたった三発出たら,その企業は官庁調達において指名停止を食らうのだから。

もちろん,「日本人は働き過ぎ」という国際常識からみた考え方や過労死問題を軽んじることはできないが,法律で雁字搦めにする話かは疑問である。先日,体罰禁止の児童虐待防止法改正案が閣議決定したこともそうだが,共同体が法律とは独立して対処すべきことを,法律で政府なり自治体なりが強制するというのは,共同体が機能しなくなっていることの現れのように思われる。要するに,問題は行政とは別のところにあるのではなかろうか。

俺からすれば,働いて働いて,それで稼いで何が悪い,である。サービス残業の評価基準を決め,対価のない不当労働の強制を取り締まるだけで十分ではないか?

韓国の文在寅政権は,経済状況を踏まえずに最低賃金を上げるという,馬の前に荷車を繋ぐような愚かな政策を推し進めた結果,企業が採用を見合わせ,若年層の失業率を悪化させている。弱き者の味方みたいな政策が,結局弱き者を路頭に迷わしているのである。

それとまさに同じように,働き方改革法は,思うに,サービス残業をより深刻にする。だって,法が認める残業時間上限が下がるのに応じて,支払われる残業代が下がるのは目に見えているからだ。あるいは,真面目にこの法律に従う企業に対しては,生産性向上が果たせないと,必要以上に雇用を増やさせ固定費増大を余儀なくし,収益を悪化させる。これが,ひいては国富を低下させ,日本経済をいよいよデフレ化させることになりはしないか。

ゆとり教育と同じで,結局はよろしくない方向に行くと思われてしかたがない。これで十月に消費増税? 追加教育のゆとりのない家庭の子供の能力をさらに低下させ,経済的弱者をさらに弱体化させる。ふざけんな。