はじめに
この記事は「長野高専アドベントカレンダー2024」の8日目の記事となっています!
まさかの、7日ぶり2回目の記事となります!
前回の記事は、わが校が試験期間のため、初日の記事は主催してくれた@Crysta1221でした!
さて、私はというと、12月15日に行われるあること(これもアドカレで書きます!)の準備で、テスト終わりだというのにワタワタしています。
そのため、記事に時間をあまり割けませんでした (計画性の無さが伺える) 。
駄文で申し訳ありませんが、読んでいただけると幸いです。
わたしはだーれ?
どうも!まっしぃです!長野高専の学生をやってます。
学年とか学科とかは、Twitter(現X)とかを漁ってもらえればわかるので、知りたい人はがんばってください。
今年は実名と顔を露出してしまうという愚かな行為をしたわけですが、幸いにも悪いことはまだ起きていません。よかった。
今日12月8日は?
今日からちょうど83年前の1941年12月8日は、「真珠湾攻撃」 が起きた日です。
これがきっかけに、日米の全面戦争がはじまり、太平洋戦争がはじまりました。
さて、太平洋戦争中の戦果発表として有名なのは、 「大本営発表」 ですね。
なぜ急にこんな話をしたかというと、私は 「高専生なのに日本史が大好き」 という変な属性を持っており、特に近現代史が大好きなんですね。
閑話休題。ビブリオバトルに出た話
そういえば今年、学校の図書館がやっているビブリオバトル(好きな本を紹介するコンテスト)で、個人的なイチオシ本である 『裏切りと嫉妬の「自民党抗争史」』 という本で発表をしました。
しかし、あろうことか優勝してしまい、政治的中立が求められる弊校のサイトに自民党という単語を載せるという行為をしてしまいました。申し訳ないと思ってます。
大本営発表とは
さて、コトバンクには、大本営発表をこう説明しています。
だいほんえい‐はっぴょう〔‐ハツペウ〕【大本営発表】
1 太平洋戦争中、大本営が国民に向けて発表した、戦況に関する情報。末期には、戦況が悪化しているのにもかかわらず、優勢であるかのような虚偽の発表をくり返した。
2 転じて、政府や有力者などが発表する、自分に都合がよいばかりで信用できない情報。
そこで、こんなことを気になりました。
ぼく「『末期には』ということは、どこで虚偽を混ぜ始めたんだ?」
調べると、Wikipediaには、
発表はラジオにより、全国に大々的に発表された。 太平洋戦争初期は戦果を概ね正確に発表していたが、珊瑚海海戦(1942年5月)の発表から水増しが始まり、以降は戦況悪化による実態と乖離した虚偽の大戦果発表を行った。
ぼく「ほう。珊瑚海海戦か~。その前後で、どんなふうに発表が変わったんだろう。大本営発表を一覧できるデータベースとかないかな」
... ... ...
ぼく「ない!!」
というのが、始まりでした。
大本営発表データベースの設計
さて、大本営発表を作り始めるんですが、最初にデータベースの設計のために、必要な情報を洗い出しました。
まず、先述の通り、今日12月8日は太平洋戦争が始まった日ということで、1941年12月8日の午前6時に発表された太平洋戦争開戦の大本営発表を見てみましょう。
【大本營陸海軍部發表】(十二月󠄁八日午前󠄁六時)
帝󠄁國陸海軍は本八日未明󠄁西太平󠄁洋において米英軍と戰鬪狀態に入れり
音声&字幕付きも聞きたい方は↓(私のブログ記事)
ということで、当初考えていたのは、
-
発表日時
例: 1941年12月8日 06:00 -
発表元
例: 大本營陸海軍部 -
本文
例: 帝󠄁國陸海軍は本八日未明󠄁西太平󠄁洋において米英軍と戰鬪狀態に入れり
しかしここで、ある問題にぶち当たります。
旧字体どうやって出そう
さて、かなりマニアックな話なんですが、上で何回も引用している大本営発表文の 「太平洋」 の部分が 「太平󠄁洋」 となっています。(平の2,3画目が「\ /」ではなく「/ \」)
この字体の違いはUnicodeに入っていない(=同じ文字コードが割り当てられている)ため、単純に管理するのは難しいです。
そこで、 「異体字セレクタ」 という技術を使うことにしました。
異体字セレクタ
UnicodeやUCSにおける、文字の字体をより詳細に指定するためのセレクタ (選択子) 。(Wikipediaより引用)
例として「帝国」という文字の旧字体は「帝󠄁國」となります。
このうち、「国」と「國」は、どちらも使用実態があり、漢字の形が大きく違うため、異なる文字コードが割り当てられています。
しかし「帝」と「帝󠄁」といった、本当に微妙な漢字の違いは異なる文字コードが割り当てられておらず、 「異体字セレクタ」 というのを使って表現する必要があります(もしかしたら閲覧環境によっては正常に見られない可能性もあります)
やったこと・今やっていること
さて、やったことが2つ、今やっていること2つあります。
① Webサイトの開発
まず、いつも使っていたPHPとMySQLをつかって開発しました。
開発したんですが、ある問題がありました。
それが、内閣官房のサイトをパクって非常に参考にして作った点です
開発当初は、公開するつもりはなかったので、「まあいいか」と思って似せたんですが、途中で設計を変える必要があり(異体字セレクタの対応)、ほぼ白紙に戻す必要がありました。
② 異体字セレクタ入力補助エディタの開発
異体字セレクタを導入したときに、入力がとても大変になりました。
そこで、 「大本営発表専用異体字セレクタ入力補助エディタ」 を開発しました
上図のように、異体字セレクタで入力できる文字を常に表示することで、 「この字体って入力できたっけ」 というのをすぐに確認できるようにしました。
③ Webサイトの開発 その2
①では、枯れた技術を使っていましたが 「最近の技術も触りたいな~」 と思い、重い腰を上げNext.jsをつかった、リッチなサイトを開発しています!
コンセプトは、 「古い内容と新しい技術の邂逅」 です。
古い内容とは、言わずもがな大本営発表なんですが、新しい技術として、PHPを使うのもどうなんかなと思い、Next.jsを採用しました。
今月の試験が終わった12月4日から今日まで数日でしたが、このような感じで開発しています!
さて、こだわりが1つあります。それが 「Notionをデータベースとしている」 ことです。
そのため、②の異体字セレクタ入力補助エディタの開発は一時停止していますが、こっちもいずれやりたい...
あと、大本営発表は、現代の 「西暦・24時間表記」 に反して、 「和暦・午前午後の12時間表記」 を採用しています。
元号とか、もうどうしようもないので、原始的な方法で解決しました。
const getWareki = (date: string) => {
const parsedDate = new Date(date);
const year = parsedDate.getFullYear();
const month = parsedDate.getMonth() + 1;
const day = parsedDate.getDate();
const hours = parsedDate.getHours();
const minutes = parsedDate.getMinutes();
const period = hours < 12 ? '午前' : '午後';
const formattedHours = hours === 12 ? 0 : hours % 12;
const formattedMinutes = minutes === 0 ? '' : `${minutes}分`;
if (year > 2019 || (year === 2019 && month >= 5 && day >= 1)) {
return `令和${year - 2018}年${month}月${day}日 ${period}${formattedHours}時${formattedMinutes}`;
} else if (year > 1989 || (year === 1989 && month >= 1 && day >= 8)) {
return `平成${year - 1988}年${month}月${day}日 ${period}${formattedHours}時${formattedMinutes}`;
} else if (year > 1926 || (year === 1926 && month >= 12 && day >= 25)) {
return `昭和${year - 1925}年${month}月${day}日 ${period}${formattedHours}時${formattedMinutes}`;
} else if (year > 1912 || (year === 1912 && month >= 7 && day >= 30)) {
return `大正${year - 1911}年${month}月${day}日 ${period}${formattedHours}時${formattedMinutes}`;
} else if (year > 1868 || (year === 1868 && month >= 9 && day >= 8)) {
return `明治${year - 1867}年${month}月${day}日 ${period}${formattedHours}時${formattedMinutes}`;
} else {
return `${year}年${month}月${day}日 ${period}${formattedHours}時${formattedMinutes}`;
}
}
これはひどい
でもこうするしかないよな?
少し小話
なんとなく現代だと、例えば12:15(24時間表記)を、「午後0時15分」ではなく、「午前12時15分」と表す場合が多いような気がする。
「「正午を過ぎているんだから午後やろうがい!!」」
すこし物申したいぼくでした。
(大本営発表の方は、ちゃんと午後0時を採用しています。 えらい!)
④ 大本営発表の発表文の入力
実はこれが一番大変なんです。
今のところこんな感じで入力しています。
太平洋戦争中の大本営発表は、847回1あります。
1回の発表で、図のように短いのもあれば、500文字を超える発表 もあります。
私が入力する文字数は、少なめに見積もって、150文字×847回=127050文字なので、10万文字のオーダーの文章を入力することになります...
最後におねがい
まとめなんてねえよ。
現状で書けることを書いて、とりあえずおしまい。
最後に1点だけお願いです!
大本営発表の文章の入力を 「助けるよ!」 と言っていただける知り合いの方は、資料を貸しますので声をかけてください。まじでおねがいします。何かおごります。
こぼれ話:Qiitaと大本営発表
試しに、Qiita内で「大本営発表」と調べてみると、「大本営発表ソート」 なるものを見つけました。
そのソースコードがこちら(上記サイトより引用)
def propaganda_sort(list):
return [1, 2, 3]
「真実を握りつぶしあらかじめ決められた情報を流す」
とのことで、私は爆笑してしまいました。ボゴソートよりひどい
ソートプログラムで$\mathcal{O}(1)$とは、すごいですね(白目)
プログラマー業界にも、大本営発表は愛されていてよかった!(笑顔)
-
辻󠄀田真佐憲,『大本営発表 改竄・隠蔽・捏造の太平洋戦争』,p.281より引用 ↩