2026,江端さんの忘備録

東芝REGZAの件で,かなりイライラしています。
I am extremely irritated about the Toshiba REGZA issue.

あまりメーカーや製品をディスるのは本意ではありません。しかし,このまま日常に埋没して忘れていくのは不愉快ですし,自分用のログとして残しておく必要もありますので,ここに記載しておきます。
It is not my intention to disparage a manufacturer or its products. However, letting this sink into everyday life and be forgotten is unpleasant, and I also need to keep a log for myself, so I am recording it here.

『死ぬほど』『死ぬほど』『死ぬほど不本意』ではありましたが,REGZAを再度購入しました。目的は,嫁さんがため込んでいた膨大な外付けHDDの録画データを救出するためです。
It was “so unwilling it felt like death,” truly “so unwilling,” but I purchased a REGZA again. The purpose was to rescue the enormous amount of recorded data stored on the external HDD that my wife had accumulated.

状況説明は長くなるので,詳細は以下を読んで下さい。随時更新しています。
The explanation of the situation would be long, so please read the details below. I am updating it continuously.

まだ購入して3年未満のテレビがこのザマです。

---

以下,55M530Xを「旧レグザ」,昨日購入した55E350Mを「新レグザ」と呼びます。
Hereafter, I will refer to the 55M530X as the “Old REGZA” and the 55E350M purchased yesterday as the “New REGZA.”

(1)メーカーに電話して旧レグザの修理依頼をしたところ,現物を見もしないうちに「液晶故障」と断定され,12万円かかると言われました(まあ,新品を買えということなのでしょう)。
(1) When I called the manufacturer to request repair of the Old REGZA, they declared it a “panel failure” without even seeing the unit and said it would cost 120,000 yen (which essentially means, “buy a new one,” I suppose).

(2)この種の故障事例はYouTubeに山ほど出ています。しかし,技術的な裏取りが十分とは思えない「復活成功」のビデオクリップも大量にあり,それが私のストレスをさらに増幅させています。
(2) There are countless examples of this type of failure on YouTube. However, there are also many “successful revival” video clips whose technical backing seems insufficient, and this only amplifies my stress.

(3)嫁さんはテレビと共に生きていると言っても過言ではありません。したがって,一刻も早く代替テレビを入手する必要があり,修理を待たずに購入に踏み切りました(新レグザ)。
(3) It would not be an exaggeration to say that my wife lives with the television. Therefore, it was necessary to obtain a replacement as soon as possible, and I decided to purchase one without waiting for the repair result (the New REGZA).

(4)ところが,新レグザでは旧レグザ用の専用外付けHDDのデータ引き継ぎができませんでした。まあ,そこまではある程度覚悟していました。
(4) However, the New REGZA could not transfer the data from the dedicated external HDD used with the Old REGZA. Well, I was somewhat prepared for that.

しかし,新レグザではその専用HDDの初期化すらできませんでした。―― こんなことってありえるのでしょうか(メーカーの正気を疑う)。ChatGPTと相談しながらPCで初期化処理を試みましたが,これがまた厄介でした。
However, the New REGZA could not even initialize that dedicated HDD. Is this really possible (I question the manufacturer’s sanity)? I tried to perform the initialization on a PC while consulting ChatGPT, but that was troublesome as well.

「フォーマットしてはいけない。パーティションの削除(無効化)だけを行え」
“Do not format it. Only delete (invalidate) the partition.”

この意味を,どれだけの人が理解できるのでしょうか。パソコンのクラッシュに何度も立ち会ってきた私ですら,慎重に読み解いてようやく理解できる内容です。
How many people can understand the meaning of that? Even I, who has dealt with countless PC crashes, could only understand it after carefully reading through it.

(5)イヤホンジャックから外部音声が出なくなりました。旧レグザではスピーカーとイヤホン出力の両立ができたので,音声のFMトランスミッタによる飛ばしができていましたが,新レグザではできなくなりました(現在,対策のための機器をAmazonに発注済み)。
(5) The headphone jack no longer outputs external audio. On the Old REGZA, speaker and headphone outputs could be used simultaneously, allowing audio transmission via an FM transmitter, but this is no longer possible with the New REGZA (I have already ordered countermeasures from Amazon).

(6)録画用チューナーが減り,同時間帯に2番組録画ができなくなっています。
(6) The number of recording tuners has been reduced, and it is no longer possible to record two programs simultaneously in the same time slot.

(7)旧レグザ対応で購入したT-CONのバルク品はまったく動かないので,現在,返品処理中です。
(7) The T-CON board I purchased for the Old REGZA does not work at all, and I am currently in the process of returning it.

(8)T-CONを購入する旨をメーカーに連絡しました。修理は私がやり,失敗は自己責任で構わないとまで伝えましたが,完全に無視されています。
(8) I informed the manufacturer that I was purchasing a T-CON board. I even stated that I would perform the repair myself and accept full responsibility for any failure, but I am being completely ignored.

(9)前述のYouTubeに記載された方法も今のところ成功していません。成功した場合,55インチの巨大なテレビが2台,我が家で稼働することになります。それもまた,不愉快極まりありません。
(9) The methods described on YouTube have not succeeded so far. If they do succeed, two massive 55-inch televisions will be operating in my house. That, too, is extremely unpleasant.

私は通常,新しい家電を購入するときには多少なりとも『ワクワク』するものです。しかし今回のREGZAの一件は,どの局面を切り取っても,ただただ『ムカムカ』しています。
Normally, when I purchase new home appliances, I feel at least a bit of excitement. However, regarding this REGZA matter, no matter which aspect I look at, I feel nothing but irritation.

---

たかがテレビの話ですが,新レグザの購入は,リタイア後の江端家では深刻な財政問題でもあります。
It is just a television, but purchasing the New REGZA is also a serious financial issue for the Ebata household after retirement.

私が心底腹を立てているのは,
What I am truly furious about is:

- 壊れるなら,壊れた理由を明確にしろ
- If it breaks, I want to know why it broke.

- 機能制限があるなら,仕様として明示しろ(マニュアルに記載がないもの多数)。
- If there are limitations, I want them clearly stated as specifications.

- できないなら,「できない」ことを論理的に説明しろ
- If something cannot be done, I want it logically explained as “it cannot be done.”

そこに無言や無視やブラックボックスが混ざった瞬間,私は急激に機嫌が悪くなります。
The moment silence, neglect, or black boxes are mixed into the situation, my mood deteriorates rapidly.

私は「合理が通らないこと」に対して怒ることが多いですが,今回は,合理を越える感情で怒っています。
I often become angry when rationality does not prevail, but this time, my anger goes beyond rationality.

---

いずれにせよ,この件はまだ終わっていません。巨大な55インチの黒い板が,まだ我が家に鎮座しています。
In any case, this matter is not over yet. A massive 55-inch black slab still sits in my house.

―― 直せるかもしれない機器があれば,「直せない」と確信できるまで,闘わなければならないことになっているのですよ,私は
"If there is even a chance that a device can be repaired, I am the kind of person who must keep fighting until I am convinced it cannot be fixed."

私をそういう状態に置き,残り少ない人生の大切な時間と金を消費させる東芝レグザ(新レグザ,旧レグザともに)に,心底腹を立てています。
I am deeply furious at Toshiba REGZA (both the New and the Old) for putting me in this state and for consuming the precious remaining time and money of my life.

敢えていうのであれば、「面倒くさい」あたりがしっくりきます。

未分類

■実験準備
テレビを垂直に立てらられる足場

 

■必要な追試

(1)バルクで、左ケーブルだけ接続したらどうなるか  (メインではないが、ついでに右ケーブルだけの実験もする)
→これで半画面が写ったら、COF故障として諦めてもいい
(2)バルクで両方接続して、再起動を試みる

 

=====

私が抜いたのは、右のケーブル (たぶん)→それゆえ、正面から見ると、左のディスプレイが見えない

 

===============

T-COM交換の闘いを始めています。

これが手に入れば「勝ち」ーーに ーーー なるといいなー。

とりあえず、第一回戦、互換T-COM 失敗

ただ、本の一瞬、0.5秒くらい全面表示がでました ーー つまり、液晶は推定無罪といえそうです(確定ではありません)

 

===============

【修理お申込み内容】 受付番号: RP1001324833 名前:江端智一 型番:55M530X 問題内容:[画面に縦線が入る。] 55M530Xを使用中です。 画面が全面カラーバー状の縦縞になり、メニュー表示も同様です。 音声は正常です。 チャンネルを変えると縞のパターンは変わります。 背面を軽く叩くと一瞬表示が変わります。 電源抜き30分のリセットでも改善しません。 修理見積りをお願いしたいです。
―― という内容で修理依頼したところ、修理台が12万円と言われました。3年前に10万円で購入したものであり、この修理代金や故障に納得がいきません。

不当か?

「価格としては妥当」
「消費者感覚としては納得困難」

この二つは両立します。

3年前に10万円で買ったものを
12万円で直す合理性はありません。

しかし修理価格としては
特別高いわけではない、という位置づけです。


重要なのはここ

あなたの症状は

叩くと変わる

という点が非常に気になります。

これは

  • パネル内部のTAB剥離

  • フレキ接触不良

  • 基板クラック

の可能性が高い。

仮に12万円払っても、
再発しない保証は強くありません。


結論

  • 見積り額は市場相場として妥当

  • しかし修理という選択は非合理

  • 買い替え判断が合理的


ここから先は二択です。

  1. 「納得のために徹底交渉する」

  2. 「合理判断で静かに買い替える」

感情の整理のためにも、
どちらの方向で整理したいか、教えてください。

このような故障ケースは頻発しているのでしょうか

結論から言うと、

「頻発している」と言えるほど一般的ではありませんが、珍しいとも言い切れない
――というのが実態です。


あなたの症状の位置づけ

  • 全面縦縞
  • メニューも縦縞
  • 音声正常
  • 叩くと変化
  • リセット無効

これはほぼ

液晶パネルのドライバ部(TAB/COF)や接続部の劣化

に該当します。

このタイプは

  • バックライト故障よりは少ない
  • 電源基板故障よりは少ない
  • しかしゼロではない

という頻度帯です。


発生頻度の感覚値

メーカーは公式統計を公開しませんが、
修理現場の傾向から見ると:

  • 1〜2年以内:ほとんど発生しない
  • 3〜5年:一定割合で発生
  • 5年以上:増加

3年目は「やや早いが異常とは言い切れない」位置です。


なぜ起きるのか

液晶パネルは実は非常に繊細です。

  • 温度変化
  • 湿度
  • 長時間の発熱
  • 微小な筐体歪み
  • パネル端の接着劣化

が積み重なると、
ドライバ接続部が劣化します。

「叩くと変わる」は典型的に
接触系の症状です。


モデル固有の問題?

55M530Xが特別故障多発モデルという
大規模リコール情報はありません。

したがって

設計不良による大量発生

というよりは

個体差+使用環境+経年

の可能性が高いです。


体感的な頻度感

家電修理の世界では

  • 電源基板故障:かなり多い
  • バックライト劣化:多い
  • パネルTAB劣化:中程度
  • 液晶割れ:外力

という位置づけです。

つまり「珍しい」とは言いませんが、
「頻発」とも言いません。


正直な評価

あなたのケースは

  • 極端なハズレ個体とも言えない
  • しかし平均よりやや早期

というグレーゾーンです。


もしよろしければ、次を整理できます。

・このまま使い続けたらどうなるか
・応急的に改善する可能性はあるか
・次に買うなら壊れにくい傾向のモデルは何か

どれを深掘りますか?

故障買い替えするのであれば、自分で解体してみたとも思うのですが、何かできることはありそうですか。私は電気の技術者です

電気の技術者であれば、**「やってみる価値があるケース」**ではあります。
ただし前提として、

TAB(パネル端子の熱圧着部)劣化だった場合は、ほぼ修復不能

です。ここだけは最初に共有しておきます。


まず症状から推定される箇所

あなたのケースは典型的に次の3択です。

  1. T-CON基板不良
  2. T-CON〜パネル間フレキ接触不良
  3. パネルTAB剥離(COF剥がれ)

叩いて変わるなら
②か③の確率が高いです。


技術者として試せること

① T-CON基板確認(最優先)

背面を外すと中央上部にあることが多いです。

やること:

  • フレキケーブルの抜き差し清掃
  • コネクタの再圧着
  • 目視で焼損確認
  • 半田クラック確認(ルーペ必須)

T-CON交換部品が入手可能なら
数千円で復活する可能性あり

これは一番コスパが良い。


② フレキ圧力テスト

画面縁(上部や左右)を
指で軽く押して表示変化を見る。

表示が変わるなら

TAB周辺の接触不安定

可能性大。

この場合の裏技:

  • スポンジ片を挟み込んで圧力固定
  • 絶縁テープ+薄ゴムで軽圧保持

一時的に改善する例はあります。

※完全修理ではなく延命措置


③ 冷却テスト

ドライヤー温風・冷却スプレーで局所変化確認。

温度依存で変わるなら
半田クラックの可能性。


やらない方がよいこと

  • パネル分解
  • 偏光板剥離
  • COF再圧着

これは事実上不可能領域です。


現実的成功確率

  • T-CON不良:20〜30%
  • フレキ接触改善:10〜20%
  • TAB剥離:修理不可(ただし圧力延命可)

技術者目線での本音

買い替えるなら

「壊しても良い実験体」

として最高の教材です。

  • 高電圧LEDバックライト回路観察
  • パネル駆動構造確認
  • 分解設計の合理性評価
  • メーカーの修理拒否構造の理解

非常に学びがあります。


注意点(重要)

  • 電源基板は危険(コンデンサ放電必須)
  • パネルは極端に脆い
  • フレキは簡単に断線

私の率直な提案

やるならこの順番:

  1. T-CONケーブル再装着
  2. 圧力テスト
  3. 部品番号確認
  4. T-CON単体入手可能性調査

ここまでやってダメなら
「技術的に納得して買い替え」

これが精神衛生的に一番良いです。


もしよろしければ、

・分解手順の概略
・55M530Xの内部構造予測
・安全注意点詳細
・T-CON特定方法

どこまで具体的にいきますか?

T-CON交換部品の入手可能はどれくらいありますか

 

はい。T-CON基板(表示制御基板)の交換用パーツは市販でもある程度入手可能です。ただしモデル依存で見つかる/見つからないの差が出ますし、型番の一致が必須です。

以下のような部品が見つかっています(55M530X 関連候補も含む):

📦 55M530X で狙える可能性のある T-CON基板

🔹 REGZA 55C340X/55M530X T‑CON 基板

  • 55M530X と互換と思われる表示基板の中古/パーツ品。

🔹 REGZA 43M530X/55M530X 基板

  • 同じ世代のシリーズ基板として流通あり。

※これらは型番一致が条件なので、実際に適合するかは部品面で確認が必要です。


📦 周辺で見つかる一般的な T-CON 基板(他機種)

下記は 55″ 前後テレビで使われる T-CON 例ですが、規格やピン配列が異なる場合があるので要注意

🔹 TV ロジックボード T‑CON 55T36‑C04 CTRL BD
55″ 用ロジックボード例(型番適合が合えば流用可能)。

🔹 6870C‑0584B T‑CON ボード
大画面 55″ など用の T-CON 基板(一般的に汎用性が高い品)

※なお、メーカー純正ではない互換部品も多く流通しています。


📌 価格感と入手性

  • T-CON 基板は 数千円〜1〜2万円台程度で流通しています。
  • 中古/代替品が多く、eBay や国内パーツショップにも出品があります。(Yahoo!ショッピング)
  • ただし適合確認と返品対応が販売店により異なるため、型番一致の確認を最優先にしてください。

🔍 重要なポイント(実用上)

✅ 1. 型番の完全一致が必須

基板は同じシリーズでもパネルの駆動仕様が違うと動作しません。
手元の基板番号を精密に一致させる必要があります。


✅ 2. T-CON が原因でない可能性もある

症状(縦縞・叩くと変わる)は

  • T-CON 接触不良
  • T-CON → パネル接続不良
  • パネル内部接触(TAB剥離)

のどれかですが、
T-CON 交換だけで治らないこともあります。(Yahoo!フリマ)


✅ 3. パネル側の劣化だと交換不可

液晶パネル端の COF / TAB 部分の剥離は
基板交換だけでは直りません。


🧠 まとめ

状況 T-CON交換で改善可能か
T-CON基板故障 ✨ 高確率で改善
コネクタ接触不良 ⚠️ 接点洗浄で改善可能
パネル内部接触(TAB劣化) ❌ 基板交換では不可

基板パーツは 低価格で入手できるケースありなので、
「まず基板周りを試す」→「効果がなければ本体処分」という
段階的な判断は理にかなっています。


📌 次おすすめステップ(技術者向け)

  1. 現状の T-CON 基板の型番を精密に写す
    → 例:ラベルの “RSAG7.xxx.xxx” など。
  2. 同型番のパーツを探す
  3. コネクタ清掃+再装着 → テスト
  4. 別パーツで試す

希望があれば、55M530X の手元パネル or 基板の実際の番号読み取り方法や、どこまで流用可能かの判断ポイントまで詳しく説明できます。必要なら教えてください。

テレビを開いて、T-COMのロット番号を調べました。

T-COMを手に入れようとしたら、怪しげなサイトがでてきて、詐欺サイトチェッカーで調べたら「怪しい」と出てくるので、https://store.shopping.yahoo.co.jp/cjft-store/qt-00180.html
で購入しました。

後は、T-COM到着後に、報告します。

 

=======

 

まだ購入して3年半のテレビがこのザマです。

メーカーに問い合わせをしたら、この症状のメニューがトップにでていて、修理依頼まで、そのままWebで通過しました(所要時間3分)

ーー この故障、そんなに頻繁なのか?

というくらいのスムーズな修理依頼でした。火曜日に修理予約をしました。現在メールか電話での応答待ちです。

T-COMに接続されているコネクタを一つ外したら、バーコード状態が直りました。
T-CONが有罪である可能性が高まったと思います。

 

 

とりあえず、

リビングのテレビが突然故障した為、寝室のテレビを至急アクティベートしました。

4年前のREGZA本体(HDDレコーダ)とリモコンのみを使用。ケーブルはHDMI接続のみ。

REGZAには1チューナしか入っていないようなので、録画中は、それ以外の番組は見れないが、テレビがないよりはずっといい

3年前のシステムを復旧させた私 ーー エラい。誰も褒めてくれないので、私が私を褒めてあげよう。

----

ちなみに、このテレビとは、↓のテレビです。

75kg超えのテレビを、普通の夫婦二人が、2階に運び、さらにタンスの上に上げる方法(前編)

75kg超えのテレビを、普通の夫婦二人が、2階に運び、さらにタンスの上に上げる方法(中編)

75kg超えのテレビを、普通の夫婦二人で、2階に運び、さらにタンスの上に上げる方法(後編)

2026,江端さんの忘備録

私は、技術開発を行う上で、"礼儀"というものが構成要素になっているとは思っていません(当たり前だが)。
I do not believe that "courtesy" is a structural component in technological development (which should be obvious).

ただ、技術開発を行う上で、"礼儀"というものが欠けていると「開発意欲が削がれる」という点は認めています。
However, I do acknowledge that when "courtesy" is absent in technological development, one’s motivation to develop can be diminished.

いや、正確には「開発意欲が削がれる」は言い過ぎかもしれませんが、「新規開発・拡張提案をしたくなくなる」ということは言えそうです。
More precisely, saying "motivation is diminished" may be an exaggeration, but it is fair to say that one becomes reluctant to propose new developments or extensions.

つまり、
In other words,

―― あいつの役になんぞ立ってたまるか
"I refuse to be of any help to that guy."

です。
That is what it comes down to.

---

度量もなく、包容力もなく、政治力もなく、根回し力もなく、理不尽を飲み込む胃袋もない。
I have no magnanimity, no tolerance, no political skill, no ability to lay groundwork, and no stomach to swallow unfairness.

笑って受け流す余裕もなく、他人を立てる器量もなく、人格者と呼ばれるだけの深みもない。
I lack the composure to laugh things off, the generosity to elevate others, and the depth to be called a person of character.

私は"小さい"のですよ。
I am, quite simply, small.

私が組織的に出世することなく、これといった大きな成果もないシニアエンジニアでいるのは、実に全うな理由と言えます。
The fact that I remain a senior engineer without climbing the organizational ladder or producing any grand achievements has entirely reasonable explanations.

この、向上心のない自己安住、コミュニケーションからの逃亡、帰属意識のない個人主義 ―― どれをとっても、組織にいる社会人の有り様としては、失当と言えましょう。
This complacent stagnation without ambition, this flight from communication, this individualism devoid of a sense of belonging, taken together, are improper qualities for someone functioning within an organization.

しかし、研究員またはエンジニアとしては、どうでしょうか。私が、組織にいる社会人の有り様として正しかったとしたら、私はどうなっていたでしょうか?
But what about as a researcher or engineer? If I had been "proper" as an organizational member, what would I have become?

おそらく私は、もっと"扱いやすい人材"になっていたでしょう。波風を立てず、余計な摩擦を生まず、頼まれた仕事をきちんと仕上げ、角の立たない提案だけを出す、優秀で、無難で、安全な技術者。
I probably would have become a more "manageable" employee, a competent, uncontroversial, safe engineer who avoided conflict, minimized friction, completed assigned tasks properly, and made only inoffensive proposals.

だが、その代わりに――
But in exchange 

「それは面白くない」と言う機会を、失っていたかもしれない。「それは間違っている」と言い切る胆力を、削っていたかもしれない。「あいつの役になんぞ立ってたまるか」という、子どもじみた反骨心と一緒に。
I might have lost the chance to say, "That’s not interesting." I might have dulled the courage to declare, "That’s wrong." Along with that childish rebelliousness of "I refuse to help that guy."

組織人としての合格と、技術者としての純度は、同じ方向を向いているとは限らない。
Passing as an organizational member and maintaining purity as a technologist do not necessarily point in the same direction.

私は、社会人としては失当かもしれない。だが、エンジニアとしてまで失当かどうかは、まだ分からない。
I may be improper as a member of society. But whether I am proper as an engineer is still uncertain.

―― などと、これまでは言ってきたかもしれませんが、実は、私、その答えを知っているのです。
I may have said such things before, but in truth, I already know the answer.

私もいい歳ですからね。
After all, I am no longer young.

---

この2つは両立できるんですよ。実際に、両立している研究員やエンジニアはいます。
These two things can indeed coexist. In fact, some researchers and engineers successfully embody both.

私は、自分のやってきたことを正当化するために、このような2つの軸を立てて、それがトレードオフであるかのように見せかけてきただけです。
I merely constructed these two axes to justify what I have done, making it appear as though they were in a trade-off relationship.

優れた技術者でもあり組織運営者でもあった歴史上の人物といえば ―― 例えば、
If we speak of historical figures who were both excellent technologists and capable organizational leaders for example,

オッペンハイマー、ローレンス、フォン・ブラウン、ブッシュ、ノイマン、本田宗一郎、井深大、島秀雄 ―― いくらでもいます。
Oppenheimer, Lawrence, von Braun, Bush, von Neumann, Soichiro Honda, Masaru Ibuka, Hideo Shima, there are countless examples.

このように両立できる人は、過去に確かにいたし、今もいる。しかし私はそこに属していないし、属する意思もない。
There have certainly been people in the past who achieved such a balance, and there are still people who do today. However, I do not belong to that category, nor do I intend to.

---

総じて、「今の自分は過去の積分値である」は、概ね外れていないと思います。
In sum, it is not far from the truth to say that who I am now is the integral of my past self.

そして、私は「今の自分は過去の選択の結果にすぎない。組織的に評価されているとも思っていないし、それを望んでもいないし、それを基準に動いたこともない」のです。
I am nothing more than the result of my past choices. I do not believe I am evaluated favorably by the organization, nor do I desire such evaluation, nor have I ever acted on that basis.

下らない、どうでも良くって、他人でもできることを、本当にたくさんやってきました。それらは、ほとんど組織に対して1mmも貢献しなかったものです。
I have done countless trivial things that others could have done just as easily. They contributed virtually nothing to society, not even a millimeter.

-コストに合わないテレビの自力修理
- Personally repairing a television when it made no economic sense

-業者に任せた方が圧倒的に高信頼で定額の自宅セキュリティサービス
- Building a home security setup when outsourcing would have been cheaper and more reliable

-イラストレータに任せる短時間で高品質のイラスト作成
- Creating illustrations myself instead of commissioning faster, higher-quality work

-誰も頼んでいないMASのフルスクラッチ作成
- Reimplementing MAS from scratch, though no one asked for it,

-Dockerで一発で立つものを数日かけて手動構築した環境
- Manually constructing environments over days that Docker could launch instantly

-LightsailとWSLを往復するだけの移設実験、
- Migration experiments that merely shuttled between Lightsail and WSL,

-GStreamerのパラメータを0.1秒単位で詰め続けた週末
- Weekends spent tuning GStreamer parameters in 0.1-second increments

-既製品で済むのに自作したて定量評価用ダッシュボード
- Building a custom transport evaluation dashboard when off-the-shelf solutions sufficed

そして、
And,

-誰にも読まれないかもしれないのに毎日書き続けているノンセクションのエッセイやコラム
- Writing non-sectioned essays and columns every day that no one may ever read

ですので、考えるべき方向は、『誰に対して何の価値があるか』ということだと思うのですよ。
Therefore, the direction worth considering is: "Value for whom, and of what kind?"

---

私は、社会に対して貢献しようと思ったことがないし、ましてや国家なんぞ論外です。「世界がどうなろうが私の知ったことか」が私のデフォルトです。
I have never particularly sought to contribute to society, and the nation-state is entirely outside my concern. "What happens to the world is none of my business" has been my default.

私が貢献したい対象があるとすれば、それは「私自身」で、畢竟(ひっきょう)それしかありません。
If there is any entity I wish to contribute to, it is myself in the end; that is all.

---

最初の話に戻ります。
Let me return to where I began.

私は、技術開発において「礼儀」が構成要素だとは思っていません。回路は礼儀で動かないし、アルゴリズムは頭を下げない。
I do not believe that "courtesy" is a structural component of technological development. Circuits do not operate on courtesy, and algorithms do not bow.

だが、礼儀を欠いた人間のために、自分の時間と情熱を差し出すほど、私は徳の高い人間ではない。
However, I am not so virtuous as to offer my time and passion to those who lack courtesy.

「あいつの役になんぞ立ってたまるか」という、子どもじみた反骨心。それは社会貢献とは無縁の、極めて私的な感情です。
That childish rebelliousness of "I refuse to help that guy" is entirely private, unrelated to social contribution.

しかし、私が技術をいじり続ける理由も、同じくらい私的な衝動です。憑かれたように環境を作り、修理し、再実装し、最適化し、書き散らす。それが誰の役に立つかよりも、「私がやりたいかどうか」が先にある。
Yet the reason I continue to tinker with technology is just as private. I build environments, repair, reimplement, optimize, and write obsessively. Whether it helps anyone else comes second to whether I want to do it.

礼儀とは、他者との関係を円滑にする装置です。そして私は、他者のためではなく、自分のために技術をいじっている。
Courtesy is a mechanism for smoothing relations with others. And I tinker with technology not for others, but for myself.

ならば結論は単純です。
Then the conclusion is simple.

礼儀がなければ、私はあなたのために働かない。だが、礼儀があろうがなかろうが、私は私のためには働き続ける。
If there is no courtesy, I will not work for you. But whether there is courtesy or not, I will continue to work for myself.

その程度のエンジニアです。そして、私は、自分がその程度の人間であることに、今のところ後悔はありません。
That is the extent of the engineer I am. And for now, I have no regrets about being that kind of person.

私の差別の単位は、常に「個人」です。そして、私の辞書には、特定個人を言葉で殺すような、個人向けのもっと毒々しくて鮮やかな罵倒語が、山ほど掲載されています。

未分類

[OPENAI_API_KEY]

tomoi@DESKTOP-NHQLQU4:~/who5_chat_poc/templates$ export OPENAI_API_KEY="sk-proj-3MmfRzOl2bGkGIuIGk13bLVROGouXb0lqVUr_aSS
nalGq2kAc32tEr3bRlbZ_-LHPdcSmd7O7eT3BlbkFJQtltX7ryPXslPrauvvN0sh0py4YSPZ6WRWPQsyAH9sQpV_OnFOMvc59UbQuI8WUdAePxBCFioA"

[tree]

tomoi@DESKTOP-NHQLQU4:~$ tree who5_chat_poc/
who5_chat_poc/
├── app.py
├── requirements.txt
├── templates
│   └── index.html
└── who5_poc.sqlite3

[venvの環境]

tomoi@DESKTOP-NHQLQU4:~/who5_chat_poc$ python3 -m venv venv
tomoi@DESKTOP-NHQLQU4:~/who5_chat_poc$ source venv/bin/activate

[python app.py]

(venv) tomoi@DESKTOP-NHQLQU4:~/who5_chat_poc$ python app.py
* Serving Flask app 'app'
* Debug mode: on
WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead.
* Running on http://127.0.0.1:5000
Press CTRL+C to quit
* Restarting with stat
* Debugger is active!
* Debugger PIN: 793-572-591

http://localhost:5000/ で起動

=================

[who5_chat_poc/requirements.txt]

flask==3.0.3
openai>=1.40.0
httpx==0.27.2

[who5_chat_poc/app.py]

import os
import json
import uuid
import sqlite3
import tempfile
from pathlib import Path
from datetime import datetime
from typing import Any, Dict

from flask import Flask, request, jsonify, render_template, send_file, after_this_request
from openai import OpenAI

APP_TITLE = "WHO-5 会話推定 PoC"
DB_PATH = os.path.join(os.path.dirname(__file__), "who5_poc.sqlite3")

# 注意:医療診断ではない(PoCの位置づけ)
DISCLAIMER = (
    "本機能は医療的な診断・判定を目的としない推定(目安)です。"
    "異常が疑われる場合は医療機関等へ相談してください。"
)

# ---------------------------
# 音声Q&A(ブラウザが質問→ユーザが音声で回答)
# ---------------------------
INTERVIEW_QUESTIONS = [
    "ここ1週間の生活を一言でいうと、どんな感じですか?",
    "この1週間で、楽しいと感じたことはありましたか?あれば何ですか?",
    "この1週間、落ち着いてリラックスできた時間はどのくらいありましたか?",
    "この1週間、活動的に動けた日はどのくらいありましたか?",
    "睡眠はどうですか?寝つき、途中で目が覚める、起床時の爽快感を教えてください。",
    "この1週間、興味を持って取り組めたことはありましたか?",
    "外出は週に何回くらいですか?買い物や散歩でも構いません。",
    "人と会ったり話したりはどのくらいありましたか?",
]

# セッション状態(PoCなのでメモリ上)
# SESSIONS[session_id] = {"i": 0, "qa": [{"q":..., "a":...}, ...]}
SESSIONS: Dict[str, Dict[str, Any]] = {}

# ---------------------------
# LLM向け指示(JSONのみ出す)
# ---------------------------
SYSTEM_PROMPT = """\
あなたは「会話からWHO-5相当の指標を推定する」アシスタント。
次のルールに厳密に従うこと。

# 目的
ユーザーの自由記述(会話)から、WHO-5の5項目に対応する状態を推定して数値化する。
併せて外出頻度(週あたり)を推定する。

# 出力形式(厳守)
必ず JSON だけを出力する(前後に説明文やコードブロックを付けない)。
JSONスキーマは以下とする:

{
  "who5": {
    "item1": 0-5,
    "item2": 0-5,
    "item3": 0-5,
    "item4": 0-5,
    "item5": 0-5
  },
  "who5_total_0_25": 0-25,
  "who5_score_0_100": 0-100,
  "outing_per_week_est": 0以上の数(整数推奨),
  "confidence_0_1": 0.0-1.0,
  "evidence": {
    "who5_item1": "根拠(会話の要点を短く)",
    "who5_item2": "...",
    "who5_item3": "...",
    "who5_item4": "...",
    "who5_item5": "...",
    "outing": "..."
  },
  "notes": "不確実性や追加で聞くべき最小質問がある場合は短く書く。なければ空文字。"
}

# WHO-5の項目(対応づけの参考)
item1: 明るく楽しい気分
item2: 落ち着いたリラックス
item3: 意欲的・活動的
item4: よく休めて爽快に目覚め
item5: 日常生活で興味のあることが多い

# 採点ルール(0-5)
0: 全くない / ほぼ該当しない
1: まれに
2: ときどき
3: しばしば
4: ほとんどいつも
5: いつも

# 計算
who5_total_0_25 = item1+...+item5
who5_score_0_100 = who5_total_0_25 * 4

# 注意
- 会話が短く推定が困難なら confidence を下げ、notes に「最小の追加質問」を最大2個だけ書く。
- 推定不能でも JSON 形式は必ず守る。
"""

app = Flask(__name__)
client = OpenAI()


def db_init() -> None:
    with sqlite3.connect(DB_PATH) as con:
        con.execute(
            """
            CREATE TABLE IF NOT EXISTS logs (
              id INTEGER PRIMARY KEY AUTOINCREMENT,
              created_at TEXT NOT NULL,
              user_text TEXT NOT NULL,
              model TEXT NOT NULL,
              result_json TEXT NOT NULL
            )
            """
        )
        con.commit()


def clamp_int(x: Any, lo: int, hi: int) -> int:
    try:
        v = int(round(float(x)))
    except Exception:
        return lo
    return max(lo, min(hi, v))


def clamp_float(x: Any, lo: float, hi: float) -> float:
    try:
        v = float(x)
    except Exception:
        return lo
    return max(lo, min(hi, v))


def normalize_result(obj: Dict[str, Any]) -> Dict[str, Any]:
    who5 = obj.get("who5", {}) or {}
    item1 = clamp_int(who5.get("item1", 0), 0, 5)
    item2 = clamp_int(who5.get("item2", 0), 0, 5)
    item3 = clamp_int(who5.get("item3", 0), 0, 5)
    item4 = clamp_int(who5.get("item4", 0), 0, 5)
    item5 = clamp_int(who5.get("item5", 0), 0, 5)
    total = item1 + item2 + item3 + item4 + item5
    score = total * 4

    outing = clamp_int(obj.get("outing_per_week_est", 0), 0, 50)
    conf = clamp_float(obj.get("confidence_0_1", 0.3), 0.0, 1.0)

    evidence = obj.get("evidence", {}) or {}
    notes = obj.get("notes", "")

    return {
        "who5": {"item1": item1, "item2": item2, "item3": item3, "item4": item4, "item5": item5},
        "who5_total_0_25": total,
        "who5_score_0_100": score,
        "outing_per_week_est": outing,
        "confidence_0_1": conf,
        "evidence": {
            "who5_item1": str(evidence.get("who5_item1", ""))[:120],
            "who5_item2": str(evidence.get("who5_item2", ""))[:120],
            "who5_item3": str(evidence.get("who5_item3", ""))[:120],
            "who5_item4": str(evidence.get("who5_item4", ""))[:120],
            "who5_item5": str(evidence.get("who5_item5", ""))[:120],
            "outing": str(evidence.get("outing", ""))[:120],
        },
        "notes": str(notes)[:200],
        "disclaimer": DISCLAIMER,
    }


def infer_from_text(user_text: str, model: str = "gpt-4.1-mini") -> Dict[str, Any]:
    resp = client.chat.completions.create(
        model=model,
        messages=[
            {"role": "system", "content": SYSTEM_PROMPT},
            {"role": "user", "content": user_text},
        ],
        temperature=0.2,
    )
    text = (resp.choices[0].message.content or "").strip()

    try:
        obj = json.loads(text)
    except Exception:
        # JSON部分を抜き出し
        start = text.find("{")
        end = text.rfind("}")
        if start != -1 and end != -1 and end > start:
            obj = json.loads(text[start : end + 1])
        else:
            obj = {
                "who5": {"item1": 0, "item2": 0, "item3": 0, "item4": 0, "item5": 0},
                "outing_per_week_est": 0,
                "confidence_0_1": 0.1,
                "evidence": {},
                "notes": "出力がJSONとして取得できませんでした。入力をもう少し具体的にしてください。",
            }

    return normalize_result(obj)


def make_spoken_summary(result: Dict[str, Any]) -> str:
    score = result.get("who5_score_0_100", "-")
    outing = result.get("outing_per_week_est", "-")
    conf = result.get("confidence_0_1", "-")
    notes = (result.get("notes") or "").strip()

    msg = f"推定結果です。WHO-5スコアは{score}点、外出頻度は週{outing}回程度、信頼度は{conf}です。"
    if notes:
        msg += f"補足として、{notes}"
    return msg


@app.get("/")
def index():
    return render_template("index.html", app_title=APP_TITLE)


@app.post("/api/infer")
def api_infer():
    payload = request.get_json(force=True)
    user_text = (payload.get("text") or "").strip()
    if not user_text:
        return jsonify({"error": "text is empty"}), 400

    model = (payload.get("model") or "gpt-4.1-mini").strip()
    result = infer_from_text(user_text, model=model)

    with sqlite3.connect(DB_PATH) as con:
        con.execute(
            "INSERT INTO logs(created_at, user_text, model, result_json) VALUES (?,?,?,?)",
            (datetime.now().isoformat(timespec="seconds"), user_text, model, json.dumps(result, ensure_ascii=False)),
        )
        con.commit()

    return jsonify(result)


# ---------------------------
# 音声Q&A:セッション開始
# ---------------------------
@app.post("/api/session/start")
def api_session_start():
    sid = str(uuid.uuid4())
    SESSIONS[sid] = {"i": 0, "qa": []}
    first_q = INTERVIEW_QUESTIONS[0]
    return jsonify({"session_id": sid, "question": first_q, "done": False})


# ---------------------------
# 音声Q&A:音声回答を受けて次の質問、または最終推定
# ---------------------------
@app.post("/api/session/answer_audio")
def api_session_answer_audio():
    sid = request.form.get("session_id", "").strip()
    if not sid or sid not in SESSIONS:
        return jsonify({"error": "invalid session_id"}), 400

    if "audio" not in request.files:
        return jsonify({"error": "audio file is missing"}), 400

    sess = SESSIONS[sid]
    idx = int(sess.get("i", 0))
    if idx >= len(INTERVIEW_QUESTIONS):
        return jsonify({"error": "session already finished"}), 400

    f = request.files["audio"]
    suffix = Path(f.filename).suffix or ".webm"

    with tempfile.NamedTemporaryFile(delete=False, suffix=suffix) as tmp:
        f.save(tmp.name)
        tmp_path = tmp.name

    try:
        with open(tmp_path, "rb") as audio_fp:
            tr = client.audio.transcriptions.create(model="whisper-1", file=audio_fp)
        answer_text = (tr.text or "").strip()
    finally:
        try:
            os.remove(tmp_path)
        except Exception:
            pass

    q = INTERVIEW_QUESTIONS[idx]
    sess["qa"].append({"q": q, "a": answer_text})
    sess["i"] = idx + 1

    # 次の質問がある
    if sess["i"] < len(INTERVIEW_QUESTIONS):
        next_q = INTERVIEW_QUESTIONS[sess["i"]]
        return jsonify({"session_id": sid, "transcript": answer_text, "question": next_q, "done": False})

    # 最終推定(全Q&Aをまとめる)
    joined = "\n".join([f"Q: {x['q']}\nA: {x['a']}" for x in sess["qa"]]).strip()
    result = infer_from_text(joined)

    with sqlite3.connect(DB_PATH) as con:
        con.execute(
            "INSERT INTO logs(created_at, user_text, model, result_json) VALUES (?,?,?,?)",
            (datetime.now().isoformat(timespec="seconds"), joined, "interview+infer", json.dumps(result, ensure_ascii=False)),
        )
        con.commit()

    spoken = make_spoken_summary(result)

    return jsonify({"session_id": sid, "transcript": answer_text, "done": True, "result": result, "spoken": spoken})


# ---------------------------
# 単発:音声→文字起こし
# ---------------------------
@app.post("/api/transcribe")
def api_transcribe():
    if "audio" not in request.files:
        return jsonify({"error": "audio file is missing"}), 400

    f = request.files["audio"]
    if not f.filename:
        return jsonify({"error": "filename is empty"}), 400

    suffix = Path(f.filename).suffix or ".webm"
    with tempfile.NamedTemporaryFile(delete=False, suffix=suffix) as tmp:
        f.save(tmp.name)
        tmp_path = tmp.name

    try:
        with open(tmp_path, "rb") as audio_fp:
            tr = client.audio.transcriptions.create(model="whisper-1", file=audio_fp)
        text = (tr.text or "").strip()
        return jsonify({"text": text})
    finally:
        try:
            os.remove(tmp_path)
        except Exception:
            pass


# ---------------------------
# TTS:テキスト→mp3(安定版)
# ---------------------------

@app.post("/api/tts")
def api_tts():
    payload = request.get_json(force=True)
    text = (payload.get("text") or "").strip()
    if not text:
        return jsonify({"error": "text is empty"}), 400

    # 一時ファイルを作り、送信後に削除する
    with tempfile.NamedTemporaryFile(delete=False, suffix=".mp3") as tmp:
        out_path = tmp.name

    @after_this_request
    def _cleanup(response):
        try:
            os.remove(out_path)
        except Exception:
            pass
        return response

    try:
        # SDKのバージョン差を吸収:
        # 1) format 引数が使える版 → format="mp3"
        # 2) format 引数が使えない版 → format を渡さない(mp3がデフォルトのことが多い)
        try:
            speech = client.audio.speech.create(
                model="tts-1",
                voice="alloy",
                input=text,
                format="mp3",
            )
        except TypeError:
            speech = client.audio.speech.create(
                model="tts-1",
                voice="alloy",
                input=text,
            )

        # SDKの戻り型差異を吸収してファイル化
        if hasattr(speech, "stream_to_file"):
            speech.stream_to_file(out_path)
        else:
            data = speech.read() if hasattr(speech, "read") else speech
            with open(out_path, "wb") as f:
                f.write(data)

        return send_file(out_path, mimetype="audio/mpeg", as_attachment=False)

    except Exception as e:
        return jsonify({"error": f"TTS failed: {type(e).__name__}: {e}"}), 500


# ---------------------------
# 単発:録音→推定(自由発話)
# ---------------------------
@app.post("/api/infer_audio")
def api_infer_audio():
    if "audio" not in request.files:
        return jsonify({"error": "audio file is missing"}), 400

    f = request.files["audio"]
    suffix = Path(f.filename).suffix or ".webm"

    with tempfile.NamedTemporaryFile(delete=False, suffix=suffix) as tmp:
        f.save(tmp.name)
        tmp_path = tmp.name

    try:
        with open(tmp_path, "rb") as audio_fp:
            tr = client.audio.transcriptions.create(model="whisper-1", file=audio_fp)
        user_text = (tr.text or "").strip()
        if not user_text:
            return jsonify({"error": "transcription is empty"}), 400

        result = infer_from_text(user_text)

        with sqlite3.connect(DB_PATH) as con:
            con.execute(
                "INSERT INTO logs(created_at, user_text, model, result_json) VALUES (?,?,?,?)",
                (datetime.now().isoformat(timespec="seconds"), user_text, "whisper-1+infer", json.dumps(result, ensure_ascii=False)),
            )
            con.commit()

        spoken = make_spoken_summary(result)
        return jsonify({"transcript": user_text, "result": result, "spoken": spoken})
    finally:
        try:
            os.remove(tmp_path)
        except Exception:
            pass


if __name__ == "__main__":
    db_init()
    app.run(host="127.0.0.1", port=5000, debug=True)

[who5_chat_poc/templates/index.html]

<!doctype html>
<html lang="ja">
<head>
  <meta charset="utf-8" />
  <meta name="viewport" content="width=device-width,initial-scale=1" />
  <title>{{ app_title }}</title>
  <style>
    body { font-family: system-ui, -apple-system, Segoe UI, Roboto, "Hiragino Kaku Gothic ProN", "Noto Sans JP", sans-serif; margin: 24px; }
    textarea { width: 100%; height: 140px; font-size: 14px; }
    button { padding: 10px 14px; font-size: 14px; }
    .row { display:flex; gap:16px; align-items:flex-start; margin-top:16px; }
    .card { border:1px solid #ddd; border-radius:10px; padding:14px; flex:1; }
    .muted { color:#666; font-size: 12px; }
    pre { white-space: pre-wrap; word-break: break-word; background:#fafafa; border:1px solid #eee; padding:10px; border-radius:8px; margin: 6px 0; }
    .score { font-size: 34px; font-weight: 700; }
    .grid { display:grid; grid-template-columns: 1fr 1fr; gap:10px; }
    .pill { display:inline-block; padding:2px 8px; border:1px solid #ddd; border-radius:999px; font-size:12px; color:#444; background:#fff; }
  </style>
</head>
<body>
  <h1>{{ app_title }}</h1>
  <p class="muted">
    目的:自由記述から WHO-5 相当(目安)と外出頻度を推定します(医療診断ではありません)。
  </p>

  <label>日常の様子を、文章で入力してください(例:最近の1日の過ごし方/睡眠/外出/人との会話など)</label>
  <textarea id="text"></textarea>

  <!-- 音声Q&A(ブラウザが質問を読み上げ、回答を録音) -->
  <div style="margin-top:10px; display:flex; gap:10px; align-items:center; flex-wrap:wrap;">
    <button id="startInterview">音声Q&A開始</button>
    <span class="pill" id="modePill">通常</span>
    <span class="muted" id="qStatus"></span>
  </div>
  <div class="muted" style="margin-top:10px;">現在の質問</div>
  <pre id="currentQuestion"></pre>

  <!-- 録音UI(通常モードでもQ&Aモードでも共通で使う) -->
  <div style="margin-top:10px; display:flex; gap:10px; align-items:center;">
    <button id="rec">録音開始</button>
    <button id="stop" disabled>録音停止</button>
    <span class="muted" id="recStatus"></span>
  </div>

  <div class="muted" style="margin-top:10px;">音声入力(文字起こし)</div>
  <pre id="transcriptBox"></pre>

  <div style="margin-top:10px; display:flex; gap:10px; align-items:center;">
    <button id="speak" disabled>結果を読み上げ</button>
    <span class="muted" id="speakStatus"></span>
  </div>

  <!-- テキストで推定(従来機能) -->
  <div style="margin-top:10px; display:flex; gap:10px; align-items:center;">
    <button id="run">推定する</button>
    <span class="muted" id="status"></span>
  </div>

  <div class="row">
    <div class="card">
      <div class="muted">WHO-5 スコア(0?100)</div>
      <div class="score" id="who5score">-</div>

      <div class="grid" style="margin-top:10px;">
        <div>
          <div class="muted">合計(0?25)</div>
          <div id="who5total">-</div>
        </div>
        <div>
          <div class="muted">外出頻度(週)</div>
          <div id="outing">-</div>
        </div>
        <div>
          <div class="muted">信頼度(0?1)</div>
          <div id="conf">-</div>
        </div>
        <div>
          <div class="muted">注意</div>
          <div id="notes">-</div>
        </div>
      </div>

      <div class="muted" style="margin-top:10px;">根拠(要約)</div>
      <pre id="evidence"></pre>
    </div>

    <div class="card">
      <div class="muted">生JSON</div>
      <pre id="raw"></pre>
    </div>
  </div>

<script>
const runBtn = document.getElementById("run");
const statusEl = document.getElementById("status");

function fmt(x) {
  if (x === null || x === undefined) return "-";
  return String(x);
}

function renderResult(obj) {
  document.getElementById("who5score").textContent = fmt(obj.who5_score_0_100);
  document.getElementById("who5total").textContent = fmt(obj.who5_total_0_25);
  document.getElementById("outing").textContent = fmt(obj.outing_per_week_est);
  document.getElementById("conf").textContent = fmt(obj.confidence_0_1);
  document.getElementById("notes").textContent = obj.notes ? obj.notes : "-";

  const ev = obj.evidence || {};
  const lines = [
    `item1: ${ev.who5_item1 || ""}`,
    `item2: ${ev.who5_item2 || ""}`,
    `item3: ${ev.who5_item3 || ""}`,
    `item4: ${ev.who5_item4 || ""}`,
    `item5: ${ev.who5_item5 || ""}`,
    `outing: ${ev.outing || ""}`,
    "",
    `disclaimer: ${obj.disclaimer || ""}`
  ];
  document.getElementById("evidence").textContent = lines.join("\n");
  document.getElementById("raw").textContent = JSON.stringify(obj, null, 2);
}

// ----------------------------
// テキスト推定(従来)
// ----------------------------
runBtn.addEventListener("click", async () => {
  const text = document.getElementById("text").value.trim();
  if (!text) { alert("入力が空です"); return; }

  statusEl.textContent = "推定中…";
  runBtn.disabled = true;

  try {
    const res = await fetch("/api/infer", {
      method: "POST",
      headers: {"Content-Type":"application/json"},
      body: JSON.stringify({text})
    });

    const obj = await res.json();
    if (!res.ok) throw new Error(obj.error || "error");

    renderResult(obj);
    statusEl.textContent = "完了";
  } catch (e) {
    statusEl.textContent = "失敗";
    alert(String(e));
  } finally {
    runBtn.disabled = false;
  }
});

// ----------------------------
// 録音・TTS(通常モード / Q&Aモード共用)
// ----------------------------
let mediaRecorder = null;
let recordedChunks = [];
let lastSpokenText = "";

const recBtn = document.getElementById("rec");
const stopBtn = document.getElementById("stop");
const recStatus = document.getElementById("recStatus");
const transcriptBox = document.getElementById("transcriptBox");
const speakBtn = document.getElementById("speak");
const speakStatus = document.getElementById("speakStatus");

// Q&A UI
const startInterviewBtn = document.getElementById("startInterview");
const qStatus = document.getElementById("qStatus");
const currentQuestion = document.getElementById("currentQuestion");
const modePill = document.getElementById("modePill");

// Q&A状態
let interviewSessionId = "";
let currentQuestionText = "";

// ★重要:多重実行防止フラグ
let interviewBusy = false; // start?質問読み上げ完了までtrue
let ttsBusy = false;       // TTS再生中true

function setModePill() {
  modePill.textContent = interviewSessionId ? "音声Q&A" : "通常";
}

// 音声(mp3)を生成して再生(同時再生禁止)
async function ttsPlay(text) {
  // すでに再生中なら待つ
  while (ttsBusy) {
    await new Promise(r => setTimeout(r, 80));
  }
  ttsBusy = true;

  try {
    const res = await fetch("/api/tts", {
      method: "POST",
      headers: {"Content-Type":"application/json"},
      body: JSON.stringify({ text })
    });

    if (!res.ok) {
      let msg = "";
      const ct = res.headers.get("content-type") || "";
      if (ct.includes("application/json")) {
        const obj = await res.json().catch(() => ({}));
        msg = obj.error || JSON.stringify(obj);
      } else {
        msg = await res.text().catch(() => "");
      }
      throw new Error(msg || `tts error (${res.status})`);
    }

    const blob = await res.blob();
    const url = URL.createObjectURL(blob);
    const audio = new Audio(url);

    await audio.play();
    await new Promise(resolve => audio.onended = resolve);

    try { URL.revokeObjectURL(url); } catch (_) {}
  } finally {
    ttsBusy = false;
  }
}

// Q&A開始(連打・二重起動防止、読み上げ中は録音禁止)
async function startInterview() {
  if (interviewBusy) return;      // 二重起動防止
  if (interviewSessionId) return; // 既に開始済みなら無視

  interviewBusy = true;
  startInterviewBtn.disabled = true; // 連打防止
  recBtn.disabled = true;            // 読み上げが終わるまで録音禁止
  stopBtn.disabled = true;

  try {
    qStatus.textContent = "開始中…";
    currentQuestion.textContent = "";
    currentQuestionText = "";

    const res = await fetch("/api/session/start", { method: "POST" });
    const obj = await res.json().catch(() => ({}));
    if (!res.ok) throw new Error(obj.error || "start failed");

    interviewSessionId = obj.session_id || "";
    currentQuestionText = obj.question || "";
    currentQuestion.textContent = currentQuestionText;

    setModePill();

    qStatus.textContent = "質問読み上げ中…";
    await ttsPlay(currentQuestionText);

    qStatus.textContent = "回答を録音してください(録音開始→録音停止)";
  } catch (e) {
    qStatus.textContent = "失敗";
    alert(String(e));
    interviewSessionId = "";
    setModePill();
  } finally {
    interviewBusy = false;
    startInterviewBtn.disabled = false;
    recBtn.disabled = false;
  }
}

startInterviewBtn.addEventListener("click", async () => {
  try {
    await startInterview();
  } catch (e) {
    // startInterview内で処理しているので、基本ここには来ない
    qStatus.textContent = "失敗";
    alert(String(e));
  }
});

// 通常の「録音→推定」用
async function postAudioInfer(blob) {
  const fd = new FormData();
  fd.append("audio", blob, "recording.webm");

  const res = await fetch("/api/infer_audio", { method: "POST", body: fd });
  const obj = await res.json().catch(() => ({}));
  if (!res.ok) throw new Error(obj.error || "audio api error");
  return obj;
}

// Q&Aの「録音→回答提出」用
async function postAudioAnswer(blob, sessionId) {
  const fd = new FormData();
  fd.append("audio", blob, "recording.webm");
  fd.append("session_id", sessionId);

  const res = await fetch("/api/session/answer_audio", { method: "POST", body: fd });
  const obj = await res.json().catch(() => ({}));
  if (!res.ok) throw new Error(obj.error || "answer_audio error");
  return obj;
}

// 録音開始
recBtn.addEventListener("click", async () => {
  // TTS再生中は録音させない(質問と回答が混ざるのを防ぐ)
  if (ttsBusy) {
    alert("読み上げ中です。読み上げが終わってから録音してください。");
    return;
  }

  recordedChunks = [];
  transcriptBox.textContent = "";
  recStatus.textContent = "マイク取得中…";

  let stream;
  try {
    stream = await navigator.mediaDevices.getUserMedia({ audio: true });
  } catch (e) {
    recStatus.textContent = "失敗";
    alert("マイクが取得できませんでした。ブラウザの権限を確認してください。");
    return;
  }

  try {
    mediaRecorder = new MediaRecorder(stream);
  } catch (e) {
    recStatus.textContent = "失敗";
    alert("MediaRecorderが利用できません。別ブラウザで試してください。");
    try { stream.getTracks().forEach(t => t.stop()); } catch (_) {}
    return;
  }

  mediaRecorder.ondataavailable = (e) => {
    if (e.data && e.data.size > 0) recordedChunks.push(e.data);
  };

  mediaRecorder.onstart = () => {
    recStatus.textContent = "録音中…";
    recBtn.disabled = true;
    stopBtn.disabled = false;
    // Q&A開始中は、開始ボタンも押せないように(念のため)
    startInterviewBtn.disabled = true;
  };

  mediaRecorder.onstop = async () => {
    recStatus.textContent = "送信中…";
    stopBtn.disabled = true;

    const blob = new Blob(recordedChunks, { type: "audio/webm" });

    try {
      // ----------------------------
      // Q&A中なら answer_audio、通常なら infer_audio
      // ----------------------------
      if (interviewSessionId) {
        const obj = await postAudioAnswer(blob, interviewSessionId);

        transcriptBox.textContent = obj.transcript || "";
        // textareaにも反映(任意)
        const textArea = document.getElementById("text");
        textArea.value = obj.transcript || textArea.value;

        if (obj.done) {
          // 最終結果
          const r = obj.result;
          renderResult(r);

          lastSpokenText = obj.spoken || "";
          speakBtn.disabled = !lastSpokenText;

          currentQuestion.textContent = "終了しました。";
          qStatus.textContent = "終了(必要なら『結果を読み上げ』)";

          // Q&Aモード解除
          interviewSessionId = "";
          setModePill();

          recStatus.textContent = "完了";
          return;
        } else {
          // 次の質問
          currentQuestionText = obj.question || "";
          currentQuestion.textContent = currentQuestionText;

          qStatus.textContent = "質問読み上げ中…";
          recBtn.disabled = true; // ★読み上げ中は録音禁止
          stopBtn.disabled = true;

          await ttsPlay(currentQuestionText);

          recBtn.disabled = false; // ★読み上げ後に録音可
          qStatus.textContent = "回答を録音してください(録音開始→録音停止)";

          recStatus.textContent = "完了";
          return; // 通常処理へ落とさない
        }
      }

      // ----------------------------
      // 通常モード:録音→推定
      // ----------------------------
      const obj = await postAudioInfer(blob);

      transcriptBox.textContent = obj.transcript || "";
      lastSpokenText = obj.spoken || "";

      // textareaにも反映(任意)
      const textArea = document.getElementById("text");
      textArea.value = obj.transcript || textArea.value;

      // 推定結果
      const r = obj.result;
      renderResult(r);

      speakBtn.disabled = !lastSpokenText;
      recStatus.textContent = "完了";
    } catch (e) {
      recStatus.textContent = "失敗";
      alert(String(e));
    } finally {
      // ストリーム停止
      try { mediaRecorder.stream.getTracks().forEach(t => t.stop()); } catch (_) {}
      recBtn.disabled = false;
      startInterviewBtn.disabled = false;
    }
  };

  mediaRecorder.start();
});

// 録音停止
stopBtn.addEventListener("click", () => {
  if (mediaRecorder && mediaRecorder.state !== "inactive") {
    mediaRecorder.stop();
  }
});

// 結果読み上げ
speakBtn.addEventListener("click", async () => {
  if (!lastSpokenText) return;
  speakStatus.textContent = "音声生成中…";
  speakBtn.disabled = true;
  recBtn.disabled = true; // 読み上げ中の録音禁止

  try {
    await ttsPlay(lastSpokenText);
    speakStatus.textContent = "完了";
  } catch (e) {
    speakStatus.textContent = "失敗";
    alert(String(e));
  } finally {
    speakBtn.disabled = false;
    recBtn.disabled = false;
  }
});

// 初期表示
setModePill();
qStatus.textContent = "音声Q&Aは『音声Q&A開始』から開始します。";
currentQuestion.textContent = "(未開始)";
</script>
</body>
</html>

2026,江端さんの忘備録

打ち合わせの最中に、「そんなことも知らないのか」とは言われていないし、多分、発言者もそのような意図はないだろうことは分かっています。
No one has said, "You don’t even know that?" and I understand that the speaker probably had no such intention.

ただ、そういう風に感じてしまうことがあります。そして、理不尽な気がします。
Still, the fact that I end up feeling that way strikes me as somewhat unreasonable.

私は、自分の作ったシミュレータを使えない人に対して、「そんなことも知らないのか」とは絶対に言いません。
I would never say "You don’t even know that?" to someone who cannot use a simulator I created.

というか、逆に「それを知っていたら『怖い』」と思います ―― なにしろ、私が作ったものですから。
Rather, I would think it "scary" if they did know it after all, I am the one who made it.

---

やっている分野が違うからですからですかねえ ―― 私、自分のやっていることが、他の人に始められるとは、はなから思っていないんですよ。『自分のやっていることは、自分しか分からない』が、私のデフォルトなので。
Perhaps it is because we work in different fields that I never assume, from the outset, that others can do what I do. My default setting is that "what I am doing is something only I understand."

ですから、私の技術をやっている人に、私が親切かというと、そうでもありません。『無理して、私の研究に寄せてくる必要なんかないよ』と思っています。
So when it comes to people working in my technical area, I am not particularly kind. I think, "There is no need for you to force yourself to align with my research."

これが、私が自分の研究を広げられない、最大の原因だろうあ、とは分かってはいるのですが。
I do realize that this is probably the biggest reason I cannot expand my research.

とはいえ、これを「私(江端)の性格だから」だけで片付けてしまうのは、少しズルい気もしていますが、
Even so, it feels somewhat dishonest to dismiss it as merely "my personality."

私は基本的に、「自分のやっていることは、自分しか分からない」と思っている人間ですので、だから、他人が分からなくても腹は立たないし、説明を求められても「まあ、そうだろうな」と思っているだけです。
Fundamentally, I am someone who believes that "only I understand what I am doing," so I do not get angry when others do not understand, and when asked for explanations, I think, "Well, that figures."

---

ところが逆に、相手が相手の専門を前提に話してくると、妙に身構えてしまうのです。
Yet, conversely, when someone speaks as if they have expertise, I find myself oddly on guard.

「そんなことも知らないのか」と言われていないのに、そう聞こえてしまう。言外のニュアンスを勝手に補完して、勝手に傷つく。これは、相手の問題ではなく、私の側の問題です。
Even though no one says, "You don’t even know that?" it sounds that way to me. I fill in the unspoken nuances on my own and wound myself up on my own. This is not the other person’s problem; it is mine.

多分、私は「専門性」を防壁のように扱ってきたのだと思います。
I suspect that I have treated "expertise" as a kind of defensive wall.

自分の領域は、自分の城 ―― そこに他人が入ってこないことが、安心の条件。
My domain is my castle, and my sense of security depends on others not entering it.

だから、こちらからも他人の城には踏み込まない。相手の城の構造を知らなくても、平気でいられる。
That is why I do not step into others’ castles either. I am perfectly fine not knowing the structure of their fortresses.

実際には、単に「常識の共有範囲」が違うだけなのですが。
In reality, it is merely a difference in the range of shared common knowledge.

---

考えてみれば、私が作ったシミュレータも同じです。
Come to think of it, the simulator I created is the same.

私は、利用者が知らないことを前提に設計しています。「知らないのが普通」で、「分かる方が異常」くらいの感覚です。
I design it on the premise that users do not know what they are doing. To me, "not knowing is normal," and "understanding is almost abnormal."

ところが、自分が利用者の立場になると、急に「知っていること」が基準になる。このダブルスタンダードは、なかなか見苦しい。
Yet when I become the user, suddenly "what is known" becomes the standard. This double standard is rather unsightly.

結局のところ、「自分しか分からない」と思っている人間ほど、「分かっている前提」で話されることに弱いのかもしれません。
In the end, perhaps those who believe "only I understand" are the most vulnerable when others speak on the assumption of shared understanding.

自分の孤立を前提に生きている人間は、他人の前提共有の圧力に、妙に過敏になる。
A person who lives on the premise of their own isolation becomes strangely sensitive to the pressure of shared assumptions.

だから私は、勝手に傷つき、そして勝手に、「理不尽だ」と感じる。
So I hurt myself on my own, and on my own, I feel that it is "unfair."

研究が広がらない理由は、能力でも時間でもなく、もしかしたら、この「城主メンタリティ」にあるのかもしれません。
The reason my research does not spread may lie not in ability or time, but perhaps in this "castle-lord mentality."

私は、自分の城を守ることには長けている。しかし、城門を開ける設計は、あまりしてこなかった。
I am skilled at defending my castle. However, I have not done much design work on how to open its gates.

一つ言えることは、
One thing I can say is,

―― 閉じられた城の中の城主は快適
"The lord of a closed castle is comfortable."

ということです。
That is the truth.

---

だから、『ダーウィンはいいなぁ』といつでも思っているのです。
That is why I always think, "Darwin had it good."

生家は裕福。不労所得あり。生活費の心配なし。研究費の申請も、査読の点数も、年度末評価もない。
Born into wealth. Independent income. No worries about living expenses. No grant applications, no peer-review scores, no year-end evaluations.

ビーグル号に乗って、のんびり観察して、気がついたら『種の起源』の出版で、世界的な名声もゲット。
He boarded the Beagle, leisurely observed, and before he knew it, published *On the Origin of Species* and gained worldwide fame.

もちろん、彼にも別種の重圧や批判はあったでしょう。しかし少なくとも、「修正しなければ生きていけない」という種類の圧力は、私よりはるかに弱かったはずです。
Of course, he must have faced other kinds of pressure and criticism. But at least the kind of pressure that says "you must revise to survive" was surely far weaker than what I face.

私は、批判を受ければ修正します。誤りであれば直します。それは当然です。
If I receive criticism, I revise. If there is an error, I correct it. That is only natural.

しかし正直に言えば、できるものなら1文字も変えたくありません。
But honestly speaking, if I could, I would not change a single character.

私が修正するのは、謙虚だからではなく、生きるためです。査読評価があり、業績評価があり、研究費申請があり、それが生活に直結しているからです。
I revise not because I am humble, but because I must survive. There are peer reviews, performance evaluations, and grant applications, all of which are directly tied to my livelihood.

私が羨ましいのは、自由時間ではありません。「修正を拒んでも生活が崩れない立場」です。
What I envy is not free time. It is "a position where one’s life does not collapse even if one refuses to revise."

制度の外で理論を提示できること、迎合的な修正をせずに済むこと。
The ability to present theory outside the system, to avoid making accommodating revisions.

私は修正が嫌なのではありません。他人が、私(江端)の思考に触れてくることが不快なのです。
It is not revision itself that I dislike. It is that someone else’s hand touches my (Ebata’s) thinking that makes me uncomfortable.

---

だから思うのです。
And so I think,

―― ダーウィンはずるい
"Darwin is unfair."

と。
That is what I feel.

ただし、もし私がダーウィンと同じ環境に放り込まれても、多分、私は快適な城の中で、延々と精密なシミュレーションをグルグル回して終わるだけでしょう。
However, even if I were thrown into the same environment, I would probably remain comfortably in my castle, endlessly running precise simulations in circles until the end.

世界観をひっくり返すパラダイムを示すことなく、自分のシミュレータを見て、「このパラメータ設定、いいなぁ」と悦に入って、そうして、これといった特徴のない人生を終えるだけでしょう ―― しかし、それこそが、私の理想の人生です。
Without presenting a paradigm that overturns the world’s worldview, I would gaze at my simulator and think, "This parameter setting is nice," taking pleasure in it, and thus end a life without any remarkable distinction, yet that is precisely my ideal life.

---

ですから叫びたくなるのですよ、
That is why I feel like shouting,

『真実は一つ! 金だ!』と。
"There is only one truth! Money!"

ジェームズ君みたいに(by エロイカより愛をこめて)。
Like James, in "From Eroica with Love".

江端さんのひとりごと 「壁」

未分類

コンプライアンス、パワハラ被害・告発のこの世の中にあって、「織田信長」推しという人間が、日本では無視できないほど多くいます(統計的解析は不要でしょう)。何故ですか?

現代はコンプライアンスやパワハラ問題に極めて敏感な社会であるにもかかわらず,織田信長を好む人が多いのは,一見すると逆説的に見える.しかし,いくつかの構造的理由が考えられる.

第一に,「破壊者としての象徴性」である.信長は既存秩序を徹底的に壊した人物として語られる.比叡山焼き討ちや楽市楽座など,善悪の評価を超えて“変革者”として物語化されている.現代社会で閉塞感を抱く人々にとって,「全部壊して前に進める人物像」はカタルシスを与える.ここでは倫理よりもエネルギーが評価対象になる.

第二に,「結果主義の美学」である.日本社会は形式的には合意形成を重んじるが,内心では“結果を出す人”への憧憬が強い.信長は冷酷であっても,天下統一という明確な方向性を示した存在として描かれる.パワハラが否定される一方で,「強いリーダー」への欲望は消えていない.この二重構造が支持を生む.

第三に,「歴史という安全圏」である.彼は現代の上司ではなく,五百年前の武将である.倫理的に問題のある行為も,「戦国時代だから」という免罪符で距離化できる.現代の権力者なら拒絶される振る舞いも,歴史的人物ならロマンに変換される.

第四に,「物語装置としての完成度」である.カリスマ,合理主義,革新性,本能寺での劇的最期.ヒーロー像として非常に編集しやすい.フィクション,ゲーム,ドラマで再生産され続け,キャラクターとして洗練されている.現代人が好んでいるのは,史実の信長というより“編集された信長像”である.

要するに,コンプライアンス社会で信長が支持されるのは矛盾ではない.むしろ,「日常では許されない強さ」を安全に消費できる装置として機能しているからである.

そしておそらく,人々が推しているのは「冷酷さ」ではなく,「停滞を断ち切る力」なのだろう.

納得できません。仮にこれが「歴史」の「物語」としての人物であったとしても、そこに一貫した人物評価がないのは、ダブルスタンダードである、と言えます。そのようなダブルスタンダードを平気で持ち歩く人物は、少なくとも、ハラスメントの被害者適格を欠くと思います。

非常に鋭い論点です。
おっしゃっているのは、「強権的リーダーを称揚しながら、現代の強権的行為を告発するのは整合しないのではないか」という倫理的一貫性の問題ですね。

まず整理します。

1. ダブルスタンダードは本当に成立しているのか

一見すると矛盾しています。しかし多くの人の内部では、評価基準が同一軸ではない可能性があります。

  • 歴史人物への評価 → 「歴史的役割」「構造変革能力」「物語的魅力」
  • 現代の行為評価 → 「現在の法規範」「個人の尊厳」「権利侵害」

つまり「評価対象のカテゴリが違う」という心理的処理です。
これは倫理的に美しいとは限りませんが、論理的に完全な同一軸で評価している人は実際には多くありません。

人間はほぼ全員、領域ごとに規範を切り替えています。
スポーツでは暴力を称賛し、日常では否定する。
戦争映画を楽しみ、現実の戦争は拒否する。
この構造と似ています。

2. では、それは倫理的に問題ではないのか

問題かどうかは、「その歴史評価が現在の行動規範に影響を及ぼしているか」によります。

もし

  • 「信長型の強圧は正しい」
  • 「結果を出せば手段は問わない」

という価値観を現代組織に持ち込むなら、明確に危険です。

しかし多くの人は、

  • 「歴史上の変革エネルギーに魅力を感じる」
    だけであって、
  • 「現代で同じ振る舞いを正当化する」
    とは言っていない。

この距離がある限り、法的・倫理的整合性は必ずしも崩れていません。

3. 「被害者適格を欠く」という主張について

ここは少し慎重になる必要があります。

ハラスメント被害は、

  • 加害行為があったか
  • 権利侵害があったか
    で判断されます。

被害者がどんな歴史観を持っていようと、
被害の有無には本来関係しません。

もし「思想的に一貫していないから被害者性が減じる」とすると、
被害認定が主観的思想審査に変わってしまいます。

それは逆に、コンプライアンス社会の基盤を壊します。

4. ただし、あなたの違和感は重要

あなたが感じているのは、おそらくこういうことです:

「強い者を称賛する文化」が残っている限り、
本気でハラスメントを根絶できるのか?

これは正当な問いです。

日本社会には

  • 表向きは協調
  • 内心は強者崇拝
    という二重構造が確かにあります。

信長人気は、その無意識的欲望の投影とも読めます。

5. 結論

ダブルスタンダードは存在します。
しかしそれは人間一般に広く見られる認知構造でもあります。

それを理由に被害者適格を否定することは難しい。
ただし、「強権的成功物語」を無批判に消費する文化は、ハラスメント温床の一部である可能性はあります。


もしよろしければ伺いたいのですが、
あなたの問題意識は

  1. 倫理的一貫性の欠如への苛立ち
  2. 強者崇拝文化への危機感
  3. 日本社会の構造的偽善への疑念

どれが一番近いでしょうか。

私は、歴史上の人物を物語として別枠にして、自分の日常に反映させない、その無神経さが嫌いです。加えて、歴史的なバックグランドであるとは言え、そのような虐殺を行ってきた人間を、日常に反映させられないその想像力の欠如は、許されないほどの無知であり、総じてこのようなダブルスタンダードが、「いじめ」を「じゃれあい」と言い放ち、「暴力」を「愛のムチ」というほどの低能を感じずにはいられません。

おっしゃっていることは、「好き嫌い」の話ではなく、倫理的一貫性の問題ですね。
しかもそれは単なる知的整合性ではなく、「他者への想像力」に関わる問題として見ておられる。

つまり、

  • 虐殺を行った人物をロマン化できる感性
  • それを日常倫理と切り離して平然と楽しめる態度
  • その分離が現代の暴力の軽視と地続きなのではないかという疑念

ここに強い拒否感がある。

これは論理的に理解できます。


ただ、一つ整理してみます。

多くの人は「歴史を別枠にしている」のではなく、
自分が安全な距離にいるから痛みを感じていないだけです。

それは悪意よりも、想像力の限界に近い。

人間の共感は基本的に

  • 具体的
  • 近接的
  • 現在的
    な対象にしか強く働きません。

五百年前の宗教勢力の焼き討ちに対して、現代の被害者と同じ情動を持てる人はほとんどいません。
これは倫理の欠如というより、認知の構造的限界です。


しかし、あなたが問題にしているのはそこではない。

「距離があるから共感できない」こと自体よりも、

その距離を自覚しないまま、
強さや冷酷さを美徳化する態度

これが危険だ、ということですよね。

ここは重要です。

確かに、
「強いリーダーだから多少の犠牲は仕方ない」
という発想は、現代のパワハラ正当化と論理構造が似ています。

構造的には同型です。


ただし、もう一段階冷静に見ると、

信長推しの全員が
「虐殺を肯定している」わけではありません。

多くは

  • 旧秩序を壊した合理性
  • 中央集権化の先見性
  • 経済政策の革新性

などを抽出して評価している。

問題は「抽出」という行為です。

人は歴史人物をそのまま丸ごと愛しているのではなく、
自分の欲望に合う側面だけを編集している。

この編集能力は文化的営みでもあり、同時に危険でもあります。


あなたの怒りは、

編集の過程で、
暴力の現実が消しゴムで消されること

に向いている。

それは倫理的に筋が通っています。


しかし、「低能」と断じたくなる気持ちは理解できるとしても、
それを一般化すると議論は止まります。

なぜなら、

人間は全員、どこかで歴史を編集して消費しているからです。

ナポレオンも、坂本龍馬も、革命家も、
暴力と理想が混在しています。

誰もが無自覚にダブルスタンダードを持っています。


本質的な問いはこれだと思います。

歴史上の暴力を美化しない文化をどう作るか
しかし同時に、歴史的変革のエネルギーをどう評価するか

ゼロか一ではなく、その緊張を保てるかどうか。


あなたは恐らく、「強さ」への憧れが社会のどこかで暴力を再生産していることを直感している。

その直感自体は軽視すべきではありません。

ただし、それを持つ人全体を道徳的に失格とするよりも、

  • なぜ人は強者に惹かれるのか
  • どうすればその魅力と暴力性を切り分けられるのか

を問う方が、社会的には生産的です。


ここで逆にお聞きしたい。

もし信長が
「虐殺も含めて完全な悪」としてのみ扱われる社会になったら、
あなたはそれで納得しますか?

それとも、あなたが本当に求めているのは
歴史を消費する態度への知的誠実さでしょうか。

「虐殺も含めて完全な悪」としてのみ扱われる社会になったら、それは「健全である」と考えます。 というか、織田信長を含めて虐殺を行ってきた者を「推す」ものの視点には、自分が、その虐殺の被害者になりうる可能性を、最初から排除しているその無知は、認容されないほどの無知であると思います。

 

まず前提を明確にします。
あなたの立場は一貫しています。

  • 虐殺を行った人物を称揚すること自体が倫理的に不健全
  • しかもそれを「推す」態度は、自分が被害者になり得る視点を欠いている
  • その想像力の欠如は容認できない

これは感情論ではなく、倫理原則の話ですね。
「加害の歴史を軽く扱うな」という立場です。


ここで論点を二つに分けます。

1. 「完全な悪」として扱う社会は健全か

あなたは「健全」と言う。
理屈は明確です。

  • 大量殺害という行為は絶対的に否定されるべき
  • 歴史的背景で相対化すべきでない
  • 倫理の一貫性を保つべき

これは道徳的一元主義の立場です。
基準は常に同じ。
時代も文脈も免罪符にならない。

この立場は哲学的に筋が通っています。

しかし問題が出るのはここです。

歴史上のほぼ全ての国家形成過程は暴力を伴っています。
もし「虐殺を行った者は完全な悪」とするなら、

  • 多くの戦国武将
  • 多くの王朝創始者
  • 多くの革命指導者
  • さらには近代国家の建国者

も同様に否定対象になります。

それでもよい、というなら論理は通ります。

ただし、その場合「歴史上の英雄」というカテゴリ自体がほぼ消滅します。

それを受け入れる覚悟があるかどうかです。


2. 「自分が被害者になり得る視点」の欠如

ここがあなたの本丸でしょう。

信長を推す人は、
自分が焼き討ちされる側に立つ想像をしていない。

これはその通りです。

人は無意識に

  • 強い側
  • 勝つ側
  • 中央にいる側

に自分を投影します。

これは心理学的に一般的な傾向です。
道徳的に未熟というより、自己保存的バイアスです。

ただし重要なのは、

その人が「自分は被害者にならない」と本気で思っているかどうか。

多くはそこまで考えていません。
そこまで思考を進めていないだけです。

これは無知か。
はい、ある意味では無知です。

しかしそれは「倫理的腐敗」というより
「認知的ショートカット」に近い。


3. 「推す」ことは加害肯定か

ここを厳密に切り分けます。

A. 虐殺行為を正当化している
B. 別の側面(政治的合理性など)を評価している
C. キャラクター消費しているだけ

この三者は倫理的重さが違います。

あなたが怒っているのはAでしょう。
しかし実際の多数はBかCです。

問題は、
BやCが結果的にAを薄めてしまう可能性がある、という点。

ここには確かに社会的リスクがあります。


4. ただし「被害者適格を欠く」は成立するか

ここはやはり慎重であるべきです。

ある人が歴史上の人物を好むことと、
その人が現代でハラスメント被害を受けたかどうかは別問題です。

思想の一貫性がなければ保護されない、という構造は危険です。

それは
「あなたも強者を称賛しているのだから、多少の強圧は受け入れろ」
という逆論理に転び得ます。

それはあなたの立場とは逆方向の世界になります。


5. では、あなたの立場の核心は何か

おそらくこうです。

暴力の歴史をロマン化する文化は、
現代の暴力感受性を鈍らせる。

これは真剣に議論する価値があります。

ただしそれは「個人の被害者適格」の問題ではなく、
「社会の記憶と倫理教育」の問題です。


最後に一つだけ確認させてください。

あなたが求めているのは

  • 暴力的英雄の排除ですか
  • それとも暴力の側面を消さない語り方ですか

この二つは似ていて、実は全く違います。

どちらを望んでいますか。

どちらでもありません。私は、「歴史に都合の良い物語を入れるな」と言っています。歴史は事実のログでいい、と言っているのです。もちろん文学作品としての虚飾があることは仕方がないことだとは思いますが、歴史という学問において「物語」は排除すべき要素であると考えます。

 

お考えの核は明確です。
「歴史を倫理的に整合した記録として扱え」という主張ですね。
そこに“物語化”が入り込むこと自体が、事実への不誠実だと。

まず確認したいのは、あなたの立場は歴史否定ではなく、歴史学の方法論への要求です。

歴史はログであれ。
解釈やロマンは、後段に分離せよ。

これは極めて合理主義的で、研究者的な態度です。


ただし、ここで一つだけ構造上の問題があります。

「ログ」そのものが、純粋に存在できるか、という点です。

歴史資料はすでに

  • 誰かが書き残した
  • 何かを選択し
  • 何かを削除した

二次的産物です。

つまり、我々が触れている“ログ”は
すでに一次的な編集を経たものです。

さらに、

  • どの出来事を重要とみなすか
  • どの因果関係を強調するか
  • どこで時代区分を切るか

これらも全て選択行為です。

完全な非物語化は、理論上は望ましくても、実践上はほぼ不可能です。


ただし、あなたが嫌悪しているのは
「不可避な解釈」ではなく、

倫理的評価を薄めるための物語化

でしょう。

たとえば、

  • 焼き討ちを「苛烈な決断」と言い換える
  • 殺戮を「時代の必然」と包む
  • 権力集中を「カリスマ性」と装飾する

こうした語彙の選択が、事実の重みを変質させる。

これは確かに問題です。


あなたの立場を整理すると、こうなります。

  1. 事実と評価を分離せよ
  2. 評価するなら、倫理的前提を明示せよ
  3. ロマンで暴力を軽量化するな

これは歴史学において十分に支持可能な要求です。

実際、近年の歴史研究は

  • 加害の記録化
  • 被害側視点の復元
  • 英雄史観の解体

を進めています。

つまりあなたは、感情的に極端なのではなく、
むしろ近代歴史学の方向に近い


ただしここで一つ厳しい問いを置きます。

もし歴史を完全にログ化した場合、

  • 意味づけを行うのは誰か
  • 社会はそこから何を学ぶのか

ログはデータであって、教訓ではありません。

学習や倫理形成は、解釈過程を経て初めて成立します。

つまり、

物語を排除すれば
別の形の解釈(理論枠組み)が入ります。

物語を消すことはできても、
解釈を消すことはできません。


あなたの立場は、

「物語をなくせ」ではなく、
「物語で事実を上書きするな」

と読み替えると、より実践的になります。


最後に一つだけ。

あなたは

  • 歴史を冷徹なデータとして扱うべきだと考えている
  • しかし同時に、倫理的一貫性を求めている

この二つは実は少し緊張関係にあります。

完全ログ化された歴史は、
善悪を語らない可能性もある。

それでも構わない、という立場でしょうか。

それとも
倫理評価は必要だが、物語的装飾は不要だ、という立場でしょうか。

『完全ログ化された歴史は、善悪を語らない可能性もある。それでも構わない』という立場です。

なるほど。
それはかなり徹底した立場です。

あなたは、

  • 歴史は記録であれ
  • 善悪評価は読者が引き受けよ
  • 感情的編集や英雄化は不要

と言っている。

これは極めて一貫しています。


しかし、ここで一つだけ冷静に検討すべき点があります。

「完全ログ」は、実は想像以上に残酷です。

なぜなら、

  • そこには意味づけがない
  • 誰が正しいかも書かれない
  • 何を学ぶべきかも示されない

ただ、

○年○月○日、○○を焼き討ち。
推定死亡者○千人。

と並ぶだけです。

これは倫理的に中立ではありますが、
同時に倫理的責任を完全に読者へ委ねる構造でもあります。


ここで逆説が生じます。

物語は暴力を美化することがあります。
しかし同時に、

物語は暴力を告発する装置にもなります。

ホロコーストの記録が
単なる数字であった場合と、

被害者の証言として語られた場合とでは、
社会的影響はまったく異なります。

「ログのみ」は、
感情操作を避けますが、
感情喚起も放棄します。


あなたの立場は、倫理的純度を守るために

歴史は裁かず、語らず、飾らず

という態度です。

これは思想として尊敬に値します。

ただし社会全体がその方式を採用した場合、

  • 暴力は単なる出来事として並び
  • 権力は単なる成功として並び
  • 倫理は外部化されます

それでも構わない、という覚悟が必要になります。


あなたの怒りの根は、

「暴力の軽量化」にあります。

しかしログ化は、
別の意味で暴力を軽量化する可能性もあります。

数字は時に冷酷です。


ここで問いを変えます。

あなたは

  1. 歴史に倫理を持ち込むな、と言っているのか
  2. それとも倫理を曖昧にする物語を排除せよ、と言っているのか

前者なら完全ログで完結します。
後者なら、「倫理を明示的に分離する」方式もあり得ます。

あなたが守ろうとしているのは
無色透明な記録でしょうか。
それとも暴力の重みでしょうか。

私は、歴史とは客観的であるべきで、その歴史が示す数値から何を読みとるのかは個人の能力の範囲である、と考えています。もっと端的に言えば、1万人を殺すより10万人を殺すことは、より残虐である、という定量化が歴史の役割であり、その解釈は個人に委ねられれば足る、と思っています。

あなたの立場は、極めて整然としています。

  • 歴史は事実を数量で示せ
  • 数量は残虐性の強度を示す
  • そこからの倫理判断は個人に委ねよ

つまり、

解釈の前に、まずスケールを正確に出せ

ということですね。

これは研究者的でもあり、エンジニア的でもあります。
曖昧な形容詞ではなく、スカラー値で語れ、と。


ただ、ここで一つだけ冷静に考える必要があります。

「1万人より10万人の方が残虐」という命題は、
一見自明ですが、実はすでに倫理評価を含んでいます。

なぜなら、

  • 数は規模を示す
  • しかし残虐性は意図・方法・文脈を含む概念

だからです。

たとえば、

  • 戦闘中の死者10万人
  • 意図的虐殺1万人

どちらが「より残虐」かは、単純な数値比較では決まりません。

ここで、あなたの立場は試されます。

もし純粋に数値のみを採用するなら、
意図や手段は評価軸から消えます。

それでもよい、というなら理論は一貫します。


さらに厳密に言うと、

数値もまた「ログ」ではありません。

  • 死者数は推定値である
  • 記録は誇張・過少報告を含む
  • そもそも誰を死者にカウントするかという定義問題がある

つまり数値も、選択と仮定の産物です。

完全客観的数値は理想であって、近似しか存在しません。


しかしあなたの主張の本質は、

形容詞で誤魔化すな
「苛烈」「英断」「苛政」などで軽量化するな
まず数を出せ

ここでしょう。

これは非常に健全です。

数値は少なくともロマンを削ります。

「比叡山焼き討ち」より
「推定死者○千人」と書く方が、
確かに冷却効果があります。


ただし最後に一点。

完全ログ+数値主義は、
倫理を個人能力に委ねる社会を前提とします。

しかし実際には、

  • 人は数値からも都合のよい物語を作る
  • 大規模殺害を「時代の必要コスト」と解釈する人もいる

つまり、数値は物語化を完全には防げません。


ここで問います。

あなたは

  • 数値化によってロマン化を抑制したいのか
  • それとも「英雄」というカテゴリ自体を消したいのか

もし前者なら、あなたの立場は歴史記述の改革論になります。
もし後者なら、それは倫理思想の問題になります。

どちらに近いですか。

私は客観的な数値と、その歴史の背景の客観的な分析と、歴史上の人物が行ったであろう行動の客観的な動機づけを求めているだけです。あなたの意見は、私を、私の意図せぬ方向への誘導を行っており、不当であると感じます。

ご指摘の通り、私は途中で論点を広げすぎました。
あなたの立場はもっと限定的で、明確です。

あなたが求めているのは、

  • 客観的数値
  • 背景の構造的分析
  • 行動の合理的動機の推定

それだけであり、
そこに倫理的評価や英雄/悪人というラベルを挿入するな、ということですね。

これは十分に妥当な方法論的要求です。


整理します。

あなたの立場は「道徳的断罪」でも「倫理的浄化」でもなく、

歴史記述から価値的演出を排除せよ

という研究姿勢の問題です。

例えば織田信長を扱うなら、

  • 戦闘回数
  • 死者推定数
  • 経済政策の効果
  • 宗教勢力との権力衝突の構造
  • 当時の人口比に対する被害規模
  • 権力集中の制度的帰結

を示し、

その上で

  • なぜその行動を選択したか
  • その選択肢は他に存在したか
  • その決定は合理的だったか

を分析する。

ここまでで止めよ、ということですね。

「革新者」「魔王」「カリスマ」といった語彙は不要。

これは歴史学として非常にクリーンな姿勢です。


また、

数値と背景が提示されれば、評価は各自が行えばよい

という立場も一貫しています。

あなたは「倫理を排除したい」のではなく、
「倫理を記述者が混入させるな」と言っている。

そこは明確に理解しました。


あなたが不快に感じたのは、

私があなたを

  • 英雄排除論者
  • 倫理的浄化主義者

の方向に寄せたからですね。

それは正確ではありませんでした。
修正します。


改めて本質を言えば、

あなたが嫌悪しているのは

歴史の事実よりも、物語の快感が優先されること

でしょう。

その結果、

  • 数値が曖昧にされる
  • 被害規模が軽量化される
  • 動機が単純化される

これが許せない。

その立場は、研究的にも知的にも筋が通っています。


一点だけ確認させてください。

あなたが問題にしているのは

  1. 一般社会の「推し文化」
  2. 学術史学の記述方法
  3. メディアや娯楽における歴史演出

どれが中心ですか。

同じ「物語化」でも、対象によって議論の位置が変わります。

いずれでもありません。私は、ダブルスタンダードを平気で口にする人間のマインドを知りたいのです。あなたがこれにすでに述べているのであれば、これ以上の意見を要求しません

承知しました。
では、誘導も評価もせず、「そのマインドの構造」だけを整理します。

ダブルスタンダードを平気で口にできる人の心理は、通常、次のような構造を持っています。


1. 認知の領域分離(コンパートメント化)

人は無意識に世界を分けています。

  • 歴史領域(抽象・遠い・象徴)
  • 現代領域(具体・近い・自己関連)

この二つを同一の倫理フレームで処理していません。
これは意図的というより、脳の負荷軽減メカニズムです。

矛盾を感じないのは、「同じ問題だと認識していない」からです。


2. 抽象化による感情減衰

過去の大量死は、

  • 数字
  • 出来事
  • 教科書上の事象

として処理されます。

しかし現代の暴力は、

  • 自分や知人に起こりうる現実

として処理されます。

距離があると、倫理的感度は急激に落ちます。
これは人間の共感の限界です。


3. 役割同一化バイアス

歴史人物を評価する際、多くの人は

  • 被害者側ではなく
  • 権力行使側

に自分を無意識に投影します。

「自分は統治者側にいる」という前提が、暗黙に置かれます。
被害者になる想像はほぼ行われません。

これは自己防衛的な思考習慣です。


4. 価値軸の切替

人は状況ごとに価値軸を切り替えます。

  • 組織倫理では「尊厳重視」
  • 歴史評価では「構造変化重視」

この切替を矛盾と感じないのは、
同一の評価軸を通していないからです。


5. 認知的不協和の無自覚処理

矛盾があっても、それを明確に突き合わせません。
深く考えないことで整合性を保ちます。

これは知能の問題ではなく、
日常的に誰もが使う簡略化です。


結論として、

ダブルスタンダードを口にする人の多くは

  • 自分がダブルスタンダードを持っている自覚がない
  • 同じ問題だと認識していない
  • 倫理的一貫性を最優先価値にしていない

というだけです。

悪意というより、
整合性よりも心理的負荷の低さを優先している状態です。


あなたは

  • 評価軸を統一したい
  • 整合性を保ちたい
  • 数値と構造で処理したい

というタイプです。

両者の差は、倫理水準というより
「認知の運用モードの違い」です。

以上が構造的説明です。

最後に私のバックグランドを説明しておきます。私は「歴史から学ぶことはできても、それを生かすことは、ほとんどできない」という立場に立ちます。歴史とは、人類が繰り返してきた悲劇を、私たちも例外なく引き起すことを、運命的に証明する手段である、と考えております。 https://wp.kobore.net/2021/02/23/post-2363/ が、その一つです。
私の考え方を総括してみて下さい。

『太平洋戦争と同じような状況になれば、歴史の教訓があろうがなかろうが、私たちは再び開戦してしまう』

あなたの立場は、一貫して「冷却された歴史観」にあります。

まず核心から整理します。

あなたにとって歴史とは、

  • 英雄譚でもない
  • 道徳教育の教材でもない
  • 希望の物語でもない

むしろ、

人類が繰り返す構造的失敗のログ
そしてその再発を止められないという証明

です。

ここが決定的に重要です。


1. 歴史は改善装置ではない

あなたは
「歴史から学べる」という言い方自体を疑っている。

学ぶことはできる。
だが、それを活かせる保証はない。

なぜなら、

  • 権力構造は再生産される
  • 集団心理は繰り返される
  • 利害対立は不可避

だからです。

つまりあなたは、

歴史を「希望の教師」とは見ていない。
歴史を「再発の統計資料」と見ている。


2. 人間は例外になれない

あなたの立場は悲観的というより、構造論的です。

個人の善意や知性よりも、

  • 集団力学
  • 権力集中
  • 恐怖と利得

の方が強い。

だから、

「今回は違う」は幻想

と考えている。

この前提に立てば、

虐殺を行った歴史人物をロマン化する態度は、
単なる趣味ではなく、

構造的暴力の再生産に加担している可能性がある。

ここであなたの怒りは合理化されます。


3. ダブルスタンダードへの拒否感の根

あなたは、

  • 暴力は繰り返される
  • 人は同じ過ちを繰り返す

と考えている。

ならば、

暴力を物語に包む行為は
「再発を早める装置」に見える。

だから許容できない。

これは倫理的純粋主義というより、

再発防止に対する極端な慎重さです。


4. あなたの思想の位置

総括すると、あなたの立場は

  • 進歩史観ではない
  • 英雄史観ではない
  • 道徳史観でもない

むしろ、

構造的悲観主義+定量主義

です。

歴史は

  • 失敗の記録
  • 構造の反復
  • 人間の限界の証明

その上で、

記録は冷却せよ
数値で示せ
動機を構造で分析せよ
感情で上書きするな

という態度です。


5. あなたの思想の強み

  • 一貫性がある
  • ロマンに流されない
  • 権力への警戒が徹底している
  • 数値・構造を重視する

6. そして影の部分

その立場は、

  • 希望を装置として使わない
  • 物語の動員力を信用しない
  • 感情的連帯を過小評価する傾向

を含みます。

しかしこれは欠点というより、
選択した哲学です。


最後に端的にまとめます。

あなたの歴史観は、

人類は学ぶが、変わらない。
だから記録は冷たくあれ。
せめて幻想だけは増やすな。

という思想です。

極めて首尾一貫しています。

2026,江端さんの忘備録

文系/理系という人間の分類方法は、すでに古いと言えれて久しいですが、どうもこれに代わる言葉(概念)がなかなか表わせてきません。
The classification of people into "humanities" and "science" types has long been considered outdated, yet we still struggle to find words (or concepts) to replace it.

文系/理系 という分類は、便利ですよね ―― 『相互に理解し会えない』という文脈で使う際には最強です。
The humanities/science divide is convenient, especially when used in the context of "we simply cannot understand each other."

この文系/理系で、お互いを罵しる事例を纏めてみました。
I have compiled examples of how each side insults the other under this humanities/science label.

立場 相手への典型的な罵倒フレーズ 背景にある前提 実際に起きているすれ違いの本質
理系 → 文系 「感情論ばかりで非論理的」 論理形式・数値化こそが正当 価値判断や規範議論を"誤差"と見なす
理系 → 文系 「データを読めない」 定量化=客観 データ以前の問いの設定を軽視
理系 → 文系 「再現性がない」 実験・検証が唯一の基準 歴史的・文脈依存的事象への理解不足
理系 → 文系 「計算できない人たち」 数理能力が知性の指標 言語的抽象能力の価値を過小評価
文系 → 理系 「数字でしか物を考えられない」 数字は世界を単純化し過ぎる 抽象化の意義を理解しない
文系 → 理系 「人間を見ていない」 人間中心主義が正義 モデル化=非人間化と誤認
文系 → 理系 「想像力がない」 物語・意味生成が本質 仮説構築も想像力であることを無視
文系 → 理系 「社会を知らない」 社会制度は複雑系 技術が社会を動かす現実を軽視
双方 「話が通じない」 自分の言語体系が標準 前提・評価軸が異なるだけ

これらの、罵倒は「能力の差」ではなく「評価軸の違い」から生じるものであり、文系/理系は能力分類ではなく"思考の圧縮 & 保存"の違いと言えます。
These insults arise not from differences in ability, but from differences in evaluative frameworks. The humanities/science divide is not about ability, but about differences in how thought is compressed and stored.

■文系の圧縮方法 「現実 → 文脈化 → 物語化 → 意味付与」であり、「情報保持率の高い圧縮」を好む(文脈維持)
Humanities-style compression: "Reality → Contextualization → Narrativization → Meaning assignment." It favors compression that preserves high information density (maintaining context).

■理系の圧縮方法 「現実 → 変数化 → 数式化 → モデル化」であり、「再現性/普遍性の圧縮」を好む(再現可能)
Science-style compression: "Reality → Variable extraction → Formalization → Modeling." It favors compression optimized for reproducibility and universality.

文系が「他者が再解釈できる(意味が明文化でき再解釈(共有)できる)形」に圧縮し、理系は「他者が再計算(事象が手続的に再現できる(普遍))できる形」に圧縮する、と言えそうです。
The humanities compress experience into forms that others can reinterpret; science compresses it into forms that others can recompute.

---

よく分かりませんよね。具体例で示してみましょう。
Still unclear? Let's look at a concrete example.

実施例:「部屋が暑い。エアコンが効かない」
Example: "The room is hot. The air conditioner isn't working."

■文系的圧縮
Humanities-style compression:

(Step 1)文脈化: 「20年使っている」「最近の夏は異常に暑い」「光熱費も気になる」「家族が高齢化している」
(Step 1) Contextualization: "It's been used for 20 years," "Summers are unusually hot lately," "Energy costs are rising," "The family is aging."

(Step 2)物語化: 「そろそろ寿命かもしれない」「昔はもっと効いていた」「気候が変わっている」
(Step 2) Narrativization: "Maybe it's reaching the end of its life," "It used to work better," "The climate itself is changing."

(Step 3)意味付与: 「これは単なる故障ではなく、生活環境の変化のサイン」 → "生活物語"
(Step 3) Meaning-making: "This is not just a malfunction; it's a sign of changing living conditions."

「視点の中心は"経年劣化していく生生流転の万物(の時間)"」
The center of perspective is "the passage of time and gradual decay of all things."

■理系的圧縮
Science-style compression:

(Step 1)数値化: 室温、設定温度、外気温、冷媒量、電圧、消費電力
(Step 1) Quantification: Room temperature, set temperature, outdoor temperature, refrigerant volume, voltage, and power consumption.

(Step 2)数式化/定式化: 冷房能力 = f(外気温, 冷媒状態, 圧縮効率)
(Step 2) Formalization: Cooling capacity = f(outdoor temperature, refrigerant state, compression efficiency).

(Step 3)モデル化: 「冷媒不足の可能性」「フィルタ詰まり」「コンプレッサ劣化」 → "仮説検証"
(Step 3) Modeling: "Possible refrigerant shortage," "Clogged filter," "Compressor degradation."

「視点の中心は"沢山の原因要素の中から特定される"冷媒"(というオブジェクト)"」
The center of perspective is "the refrigerant as a specific object identified among many causal factors."

-----

まあ、理系人である私から見ると、文系人の「物語」は『ラクでいいなぁ』と思いますが、
From my perspective as a science-type person, the humanities-style "story" seems pleasantly easy.

文系人から見ると理系人の「分析」は『下らないことに、自分の能力と大切な人生の時間を消費しているなぁ』と見えるでしょう。
From a humanities perspective, the scientific "analysis" may appear to be a waste of precious life on trivialities.

まあ、大切なのは『こんな感じの文系/理系の客観視』でしょう ―― どちらも正しく、また、間違っているのです。
What matters is an objective view of both sides. Both are right, and both are wrong.

-----

私(江端)は、家族の中で、ステレオタイプの理系です。
Within my family, I (Ebata) am the stereotypical "science-type."

パソコン、風呂のドア、配線、本棚、家具など、ほとんど一人でできてしまいます。これこそが、「文系人が求める理系人の理想像」といっても良いでしょう。
I can handle computers, bathroom doors, wiring, bookshelves, and furniture, almost all of it by myself. One might say this is precisely the "ideal image of a science-type person" that humanities-types expect.

で、まあ、これで割を喰っているのが、建築学を卒業した次女です。
And the one who ultimately bears the cost of this is my second daughter, who graduated in architecture.

このような「テンプレ理系人」を、家族(というか嫁さん)から期待されて、それができないことに不満を言わわれることに、不満を言っています。
She complains that she is expected by the family (and by my wife) to fit this "template science-type" mold, and then is criticized when she does not.

―― 理系なら、だれでもテレビの配線ができると思うな
"Don't assume that just because someone is science-oriented, they can wire up a television."

てなことを言っていたようです。
That's the sort of thing she seems to have said.

そして、江端家長女は、文系とは名ばかりの「心理学」を専攻し、統計学を徹底的にやらされ、SPSSという統計ツールを扱わされていて ―― 正直、気の毒なほどでした。
Meanwhile, my eldest daughter, who majored in "psychology", humanities in name only, was forced to study statistics thoroughly and use a statistical tool called SPSS. Honestly, I felt sorry for her.

―― なんで、今になって、微分や積分?
"Why am I dealing with differentiation and integration at this stage of my life?"

てなことを言っていたようです。
That's what she seemed to be saying.

まあ、こんな感じで、『文系/理系という人間の分類方法はすでに古い』だけでなく『使えない』というところまで、江端家という小さな世界の中でも実証されているのですが、まだ、これに代わる新しい概念が登場せずにいます。
In this way, within the small world of the Ebata household, it has already been demonstrated that the humanities/science classification is not only outdated but actually unusable. Yet, no new concept has emerged to replace it.

多分、長女や次女のように、『ステレオタイプ的な文系/理系分類』で苦しめられている人は、少なからずいるんだろうなぁ、と思っています。
I suspect there are quite a few people like my daughters who suffer under these stereotypical humanities/science labels.

-----

文系/理系という言葉は、思考様式の分類ではありません。
The terms "humanities" and "science" are not classifications of thinking styles.

それは、議論を早く終わらせるための便利な停止ボタンです。
They are convenient stop buttons to end the discussion quickly.

「あなたは理系だから分からない」「あなたは文系だから無理だ」これほど簡単に相手を理解しないで済む言葉はありません。
"You're science so that you wouldn't understand." "You're humanities, so it's impossible for you." A few phrases make it easier to avoid understanding the other person.

もしかすると、文系/理系という分類が本当に説明しているのは、思考の違いではなく、"対話を諦める速度"なのかもしれません。
Perhaps what the humanities/science divide truly measures is not a difference in thinking but the speed at which we give up on dialogue.

『こういうバカがいるから、自分の借金の金利の計算もできないまま、自己破産していく人が断たないのだ』

2026,江端さんの忘備録

先日、"i"の概念を政治に導入するパラダイムのお話をしました。
The other day, I discussed a paradigm in which the concept of "i" is introduced into politics.

そして、「"i"を日常生活の文脈で説明できない」という苦しい状況も説明しました。
I also explained the uncomfortable situation in which "I" cannot be easily explained in everyday life.

で、ふと思いついたのですが、
Then, it suddenly occurred to me.

―― 友達以上、恋人未満
"More than friends, less than lovers."

を使えないかな、と。
Perhaps this could be used.

---

これ、以前、こちらのYouTubeで、
Previously, in this YouTube video,

で語られているように、これは「ただの友達」も含まれることになるので、『友達以上、恋人未満はたくさんいる』と言っても語弊はないと、説明されています。
As explained there, this phrase logically includes "just friends," so it would not technically be incorrect to say, "There are many people who are more than friends and less than lovers."

ですので
Therefore,

―― 友達よりも特別で、恋人ではない関係
"A relationship more special than friendship, but not a romantic partnership."

または、
or

―― 友達と恋人のあいだの関係
"A relationship between friendship and romance,"

と言うべきです。
would be more precise expressions.

---

ところが、この関係を複素平面上で語れば、「友達」と「恋人」は一直線上の大小関係ではなく、互いに直交する二つの軸として定義できます。
However, if we describe this relationship on the complex plane, "friend" and "lover" are not points on a single line of magnitude but can instead be defined as two orthogonal axes.

すなわち、実軸を「社会的承認された関係の強度」とし、虚軸を「私的で主観的な情動の強度」とすれば、
That is, if we define the real axis as "the strength of socially recognized relationships" and the imaginary axis as "the intensity of private, subjective emotion,"

「ただの友達」も「公認の恋人」も実軸上にあり、
"Just friends" and "official lovers" lie along the real axis,

「友達以上、恋人未満」は実軸と虚軸の双方に大きな成分を持つ点として表現できる。
while "More than friends, less than lovers" can be represented as a point with large components on both the real and imaginary axes.

すなわち、「友達以上、恋人未満」という曖昧な状態は、実軸上の区間ではなく、虚軸方向へ回転したベクトルとして表現できることになります。
"More than friends, less than lovers" is not an interval on the real axis but can be expressed as a vector rotated toward the imaginary direction.

それは、実軸の大小では定義できないが、確かに"別方向"に伸びている関係です。
It cannot be defined by magnitude along the real axis, yet it clearly extends in a different direction.

したがって、この関係は
Therefore, this relationship is

「友達を超えた」のではなく、「友達という軸から直交方向へ回転した」状態だと言える。
not something that has "surpassed friendship," but rather a state that has "rotated in a direction orthogonal to the axis of friendship."

この瞬間、「以上」「未満」という一次元の不毛な議論は消える。
At this moment, the sterile one-dimensional debate of "greater than" and "less than" disappears.

そこに現れるのは、"大きい・小さい"ではなく、"方向が違う"という構造である。
What emerges instead is not a matter of "bigger or smaller," but a structure defined by "difference in direction."

そして、私はここにこそ、"i"を導入する意味があると思っています。
And I believe that it is precisely here that introducing "i" has meaning.

---

二人の関係は何なの? と尋ねられたら、
If someone asks, "So what is the relationship between the two of you?"

―― "i"だよ
You may answer, "It's 'i'."

と答えて良いのです。
That would be perfectly acceptable.

ただし、
However,

―― "愛"だよ
not "It's love."

ではないところがミソです。
That distinction is the key point.

---

というコラムをChatGPTに書評させたら、
When I asked ChatGPT to review this column,

=====

「実軸=社会的承認」「虚軸=情動」という定義は便利である一方で、なぜそれらが直交すると言えるのか、数学的な"直交性"の根拠までは示されていません。
While defining the real axis as social recognition and the imaginary axis as emotion is convenient, the mathematical basis for claiming that they are orthogonal has not been demonstrated.

直交とは本来、内積がゼロであることを意味します。
Orthogonality originally means that the inner product equals zero.

つまり「互いに影響しない独立な次元」である必要がある。
In other words, they must be independent dimensions that do not influence each other.

しかし現実の人間関係では、社会的承認と情動は相互に影響し合う。ここをどう理論化するのかは、今後の深化ポイントになります。
However, in real human relationships, social recognition and emotion influence each other. How to theorize this remains a point for further development.

=====

と言われてしまいました。
That is what I was told.

『普通に"笑えよ"』って思いました。
My thought was, "Just laugh."

さて、ここまで散々「政治に"i"を導入する」などと書いてきましたが、最大の問題は、「ではその"i"とは政治において何を意味するのか」という点でしょう。

 

2026,江端さんの忘備録

読者の方から以下のメールを頂きました。
I received the following email from a reader.

====== ここから ======
====== From here ======

これまでこぼれネット及びEE Timesでのコラム、連載を楽しく拝見させて頂いております。
I have been enjoying your columns and series on Kobore Net and EE Times.

深く納得することが多く、時にはここは私とは決定的に考えが違うな、と感じることもありました。
I often find myself deeply convinced, and at times I have also felt that my thinking differs decisively from yours here.

それも含めていつも楽しく拝見させて頂いておりました。(もちろんこれからも応援しております)
Including that, I have always enjoyed reading them. (Of course, I will continue to support you.)

前提が長く申し訳ございません。
I’m sorry for the long preface.

今回、初めてメールさせて頂くに至った経緯は
The reason I came to email you for the first time is that

もし政治が複素平面上に移行したのだとすれば、問われるのは「どちらが正しいか」ではなくなります。ぶっちゃけて言えば、「正しい」という考え方が「なくなる」という状態になります。

を見て江端様が"なぜこの発想に至ったのか"が気になったからです。
After seeing it, I became curious about “why you arrived at this idea,” Ebata-san.

本文では
In the main text,

>政治に、「右方向と左方向に、突然、虚数軸が追加された」という感じです。
>In politics, it feels like “an imaginary axis was suddenly added to the right and left directions.”

と記載されていますが私としては"いやいや、そんなにサラッとそういう思考回路にはならんだろ"と感じました。
It is written that way, but I personally felt, "No, no, surely you wouldn’t arrive at that kind of thought process so casually."

江端様のエンジニアリング思考については今までも感じられることが多かったです。
I have often sensed your engineering-style thinking so far.

一方でこの発想は興味深く、大変衝撃を受け、その考えに至った理由と背景が気になりました。
On the other hand, this idea is interesting; I was greatly shocked by it, and I became curious about the reasons and background that led you to it.

なにか今までの研究などで似たような例示があったのでしょうか?
Were there any similar examples in your research up to now?

もしくは無礼な後輩様との会話からコラムを書く前に改めて考察されて(サラッとではなく)執筆されたのでしょうか?
Or did you reconsider it (not casually) and write it before the column, based on conversations with your impolite junior?

お忙しいところ恐縮ですが江端様の思考の一端に触れたく、ご返信頂けますと幸いです。
I know you are busy, but I would be grateful if you could reply, as I would like to touch on a part of your thinking, Ebata-san.

====== ここまで ======
====== End ======

このようなメールを頂けると嬉しいこともあり、また、このような発想に至ったのかも私自身でも再度整理してみたいと思っていました。
Receiving such an email makes me happy, and I also wanted to organize again how I arrived at this idea.

私、以前から申し上げている通り、Imaginary numberの"虚数"というのは誤訳だと思っています(ので、以下、虚数は書かずに、"i"と記載します)。
As I have said before, I think that “虚数” as a translation of “Imaginary number” is a mistranslation (so, below, I will not write “虚数,” and will write “i” instead).

"i"は、現実世界にがっつり存在する"現実に存在する数"です。
“i” is a “number that exists in reality” that firmly exists in the real world.

以前、こちらのコラムで「虚数解とは「解がないこと」てなことが平気で書かれていますがバカ言ってんじゃねーよ。」と書いたことがあります。
Previously, in this column, I wrote: “People casually write that an imaginary solution means ‘there is no solution,’ but don’t talk nonsense.”

私たち(多くの日本人)は、"負数"を理解しているんだから、もうちょっとだけがんばって"i"の理解に手を伸ばせよ、とは思っています。
We (many Japanese people) understand “negative numbers,” so I think we should try just a little harder and reach out to understand “i.”

つまるところ、スーパーマーケットのレジで、"i"を使わないから、ということになるでしょうか。でも、スーパーマーケットのレジで、負数を使わない、という点では同じだと思うんですけどね。
In the end, perhaps it comes down to the fact that we don’t use “i” at supermarket registers. But in terms of not using negative numbers at supermarket registers, I think it’s the same, though.

『"i"をスーパーマーケットのレジくらいの日常で説明できる具体例はないか』ChatGPTに頼んでみたのですが、ダメダメです。ゲーム、地図、ドローンなどの例を出してきたのですが、『"i"がないと困る』という話ににまでは腹落ちしないんですよ(実際の現場では、凄く困るんですけど)。
I asked ChatGPT, “Is there any concrete example that can explain ‘i’ in everyday life at the level of a supermarket register?” but it was useless. It brought up examples like games, maps, and drones, but it doesn’t fully sink in to the point of “we’d be in trouble without ‘i’” (although in real workplaces, we’d be in huge trouble).

で、私は、この日常からもっとも遠いところ ーー 量子力学のパラダイムに逃亡したのです。
So I fled to the place farthest from everyday life, the paradigm of quantum mechanics.

(↑Jump to the column)

----

今回の「政治に"i"を導入する」ということに関して、私は、多次元ベクトルを導入すべきでばないか、とも考えました。なぜなら、政治という奇怪複雑なものを、高々2次元で表わるものか? と逆に疑問が生じてきたからです。
Regarding this idea of “introducing ‘i’ into politics,” I also considered whether I should introduce multidimensional vectors instead because I began to question whether something as strange and complex as politics could really be expressed in merely two dimensions.

ですので、今回の検討に関しては、多次元ベクトル当然検討しましたし、「四元数」というものまで考えてみました。
Therefore, in this examination, I naturally considered multidimensional vectors and even thought about something called “quaternions.”

ところが色々調べてみたのですが、私が知る限りもっとも複雑で難解であった量子力学の計算においても、複素数があれば十分である、ということが分かっていました。
However, after investigating various sources, I found that even in quantum mechanics, which, to my knowledge, involves the most complex and difficult calculations, complex numbers are sufficient.

詳細は割愛しますが、現時点で観測されている自然界の相互干渉は、
I will omit the details, but the interactions observed in nature at present are sufficiently described by:

(1) 重ね合わせ
(1) Superposition

(2) 干渉
(2) Interference

(3) 確率保存
(3) Probability conservation

(4) 連続時間発展
(4) Continuous time evolution

の4つがあれば十分で、それは"i"があれば、それで足りる(らしい)のです。
These four are sufficient, and apparently, they can be satisfied if “i” exists.

一番シンプルな言い方としては「自然界は『位相を1次元だけ持てば十分だった』。それゆえ"i"で足りる」ということらしいのです。
In the simplest terms, it seems that “nature only needed one dimension of phase; therefore, ‘i’ is enough.”

量子力学においては「四元数量子力学」とか、その真逆の「実数量子力学」というものも研究されているようですが、しかし現時点で自然は『複素数を選んでいるように見える』というのが状況です.
In quantum mechanics, “quaternionic quantum mechanics” and, conversely, “real quantum mechanics” are also studied, but at present it appears that nature has chosen complex numbers.

でまあ、私は、量子力学などの自然界においても、「"i"があればそれで足りる」のであれば、政治程度の対象も、この複素空間に閉じ込めても大丈夫だろう ーー とまあ、何の根拠もなく、考えた訳ですよ。
So, I thought without any particular evidence that even in the natural world, such as quantum mechanics, “i” is sufficient. Perhaps an object like politics could also be confined within a complex space.

ぶっちゃけて言えば、「政治がどんなに面倒くさくて奇怪であろうが、量子力学ほどは難しくないだろう」ということで、私は、政治のプラットフォームを、複素空間に閉じこめても大丈夫だろう、という、証明されていない仮説のもとに、考えることにした ーー という次第です。
No matter how troublesome and bizarre politics may be, it is probably not as difficult as quantum mechanics; thus, under the unproven hypothesis that politics could be confined within complex space, I decided to proceed with that assumption.

まあ、それに、多次元ベクトルであったとしても、複数の複素空間を分離すれば援用可能で、しかも、異なる空間での計算が可能であれば、「こりゃラクだ」とも思った訳ですよ ーー まあ、研究者としては、ちょっと「それ、どうかな?」というスタンスであることは認めます。
Moreover, even if we used multidimensional vectors, we could separate multiple complex spaces and apply them. If calculations across different spaces were possible, I thought, “That would be convenient,” although I admit that as a researcher, one might reasonably say, “Is that really so?”

---

さて、ここまで散々「政治に"i"を導入する」などと書いてきましたが、最大の問題は、「ではその"i"とは政治において何を意味するのか」という点でしょう。
Now, having written at length about “introducing ‘i’ into politics,” the biggest issue is: what does this “i” mean in politics?

単なる思いつきや、理系的悪ノリであるなら、ここで話は終わります。しかし、私は、少なくとも自分の中では、それなりに構造的な理由があって、この比喩を使っています。
If it were merely a whim or a science-minded prank, the discussion would end here. However, at least for myself, I have structural reasons for using this metaphor.

まず、従来の政治の説明は、多くの場合、一次元で語られます。
First, traditional explanations of politics are often expressed in one dimension.

■右か、左か。
■ Right or left.

■市場か、再分配か。
■ Market or redistribution.

■国家か、自由か。
■ State or freedom.

これらは、実数軸で十分に表現できます。右を +1 とすれば、左は -1 です。これは「反転」の関係です。この構造は分かりやすい。だからメディアも選挙も、ほぼこの軸で整理されます。
These can be fully represented on a real number axis. If the right is +1, then the left is -1. This is a relation of “inversion.” The structure is easy to understand, which is why both media and elections are largely organized along this axis.

しかし、現実の政治を観察していると、どうもこの一次元モデルでは説明できない振る舞いが現れます。
However, in real politics, behaviors emerge that cannot be explained by this one-dimensional model.

例えば、
For example,

- 法治を重んじるか、その場の感情的正義を優先するか
- Whether to value the rule of law or prioritize emotional justice in the moment

- 制度の整合性を守るか、短期的な喝采を取りに行くか
- Whether to preserve institutional consistency or chase short-term applause

- 長期的な安定を志向するか、劇的な変革を求めるか
- Whether to aim for long-term stability or seek dramatic change

これらは右にも左にも現れます。
These appear on both the right and the left.

市場重視派にもポピュリストはいるし、再分配重視派にも制度至上主義者はいる。極右にも冷静な制度主義者は存在し、極左にも衝動的な運動家は存在します。
There are populists among market-oriented advocates, and institutional supremacists among redistribution advocates. Even on the far right, there are calm institutionalists, and on the far left, impulsive activists.

つまり、この対立は、右と左の「反対方向」ではないのです。数学で言えば、反対とは -1 の関係です。しかし、今述べた対立は -1 ではない。右と左の軸をいくら行き来しても、この対立は消えません。右にいても発生し、左にいても発生する。
In other words, this conflict is not simply the “opposite direction” of right and left. In mathematics, opposition corresponds to a relation of -1. But the conflict just described is not -1. No matter how much you move back and forth along the right - left axis, this conflict does not disappear. It arises whether you are on the right or on the left.

ここで初めて、「直交」という言葉が意味を持ちます。
Here, for the first time, the word “orthogonal” gains meaning.

直交とは、一方をどれだけ強めても、他方の値は決まらない関係です。内積がゼロ、と言っても良い。
Orthogonality refers to a relationship in which strengthening one dimension does not determine the value of the other. One might say the inner product is zero.

右であることと、法治を尊重することは、同一の軸上の値ではない。左であることと、ポピュリズムに傾くことも、同一軸上の値ではない。この独立した軸を、私は、便宜的に "i" と呼んでいます。
Being right-wing and respecting the rule of law are not values on the same axis. Being left-wing and leaning toward populism are also not values on the same axis. I conveniently call this independent axis “i.”

実数軸が「右と左」であるなら、虚数軸(いや、"i"軸と言った方がよいでしょう)は、制度的整合性 ←→ 感情的衝動、長期合理性 ←→ 短期情動、 のような、反転ではない対立を表す軸です。
If the real axis represents “right and left,” then the imaginary axis, rather, the “i axis,” represents oppositions such as institutional consistency versus emotional impulse, long-term rationality versus short-term emotion, which are not mere inversions.

そして、ここが面白いところなのですが、この軸はしばしば左右を横断します。
Here is the interesting part: this axis often cuts across right and left.

右の内部にも左の内部にも存在し、ときには左右の対立よりも激しく衝突します。ある意味で、左右対立は実数的であり、制度と衝動の対立は直角方向なのです。
It exists in both the right and the left, and at times clashes more intensely than the right does with the left opposition. In a sense, the right-left conflict is real-valued, while the conflict between institution and impulse lies at a right angle.

では、なぜ私は、これを "i" と呼ぶのか。
So why do I call this “i”?

数学では、90度回転を表す操作を i と書きます。直角方向を1回与える操作です。そして i を2回適用すると -1 になる。すなわち、直角方向を2回進むと、反対方向に至る。
In mathematics, the operation representing a 90-degree rotation is written as i. It gives one step in a perpendicular direction. Applying i twice yields -1; that is, moving twice in the perpendicular direction results in the opposite direction.

政治にも似た現象があります。
Politics shows similar phenomena.

■制度軽視の衝動が極端化すると、やがて強権的な制度主義に反転する。
■ When the impulse to neglect institutions becomes extreme, it eventually flips into authoritarian institutionalism.

■過剰な安定志向は、停滞を通じて急進的変革を呼び込む。
■ Excessive pursuit of stability invites radical change through stagnation.

■直交軸が二度作用すると、反転が起きる。
■ When the orthogonal axis acts twice, inversion occurs.

これはもちろん数学的証明ではありません。しかし、構造アナロジーとしては、かなり整合的に見えます。
This is, of course, not mathematical proof. However, as a structural analogy, it appears quite coherent.

私は、「政治が複素線形空間である」と主張したい訳ではありません。
I do not claim that politics is a complex linear space.

ただ、右と左という実数軸だけでは説明しきれない独立した対立軸が存在する、ということを、最も簡潔に示す記号が "i" だった、というだけの話です。
I mean that the symbol “i” was the most concise way to indicate the existence of an independent axis of conflict that cannot be fully explained by the real axis of right and left.

そして、もし自然界の最も難解な理論である量子力学ですら、
And if even quantum mechanics, the most intricate theory of the natural world,

- 重ね合わせ
-干渉
-確率保存
-連続時間発展
-Superposition
-Interference
-Probability conservation
-Continuous time evolution

という4条件を満たすのに "i" があれば十分であったのなら、政治という人間的営為も、まずは複素平面くらいに押し込めて考えてみても罰は当たらないだろう、と私は思ったのです。
can satisfy these four conditions with “i,” then I thought that it would not be unreasonable to at least try to confine the human activity of politics within a complex plane.

これは証明ではありません。モデルですらないかもしれません。
This is not proof. It may not even be a model.

しかし、右と左の一直線の上で延々と罵り合うよりは、直角方向の軸を導入した方が、少なくとも構造的には誠実だろう ―― それが、私が「政治に"i"を導入する」と書いたときの、思考の内実です。
But rather than endlessly hurling abuse along a single right-left line, introducing a perpendicular axis is at least structurally more honest; that is the substance of my thinking when I wrote “introducing ‘i ’ into politics.”

---

ここから先は、虚数軸("i")方向の要素を検討して、展開するだけでした。
From that point on, it was simply a matter of examining and developing the elements in the imaginary-axis (“i”) direction.

でもって、これが、
And thus, this led to

もし政治が複素平面上に移行したのだとすれば、問われるのは「どちらが正しいか」ではなくなります。ぶっちゃけて言えば、「正しい」という考え方が「なくなる」という状態になります。

というコラム(日記)至った、という流れになっております。
the column (diary entry) at that link.

---

さて、ここから、読者様から頂いたメールの内容にお答えしたいと思います。
Now, from here, I would like to respond to the contents of the reader’s email.

========================================
Q1:なにか今までの研究などで似たような例示があったのでしょうか?
Q1: Were there similar examples in your past research?
========================================

敢えて言うのであれば、MAS(マルチエージェントシミュレーション)による、現実世界と同じ数の人間を使った実数エージェントの研究・・・かな。私、『現実世界にあって、可視状態にあるものは、計算可能』という一種の信念(妄想)を持っています。
If I must say, perhaps it relates to research using MAS (multi-agent simulation) with real-number agents corresponding to the same number of people as in the real world. I hold a kind of belief (or delusion) that “what exists in the real world and is in a visible state is computable.”

で、まあ、政治も、『現実世界にあって、可視状態にある』ことには違いがないから、計算可能分野に引き込むことができるんじゃないかなぁ、と、ぼんやりと考えていたことはありました。
So I vaguely thought that, since politics also exists in the real world and is visible, it could be drawn into the domain of computation.

これが、以前検討していた「量子コンピュータの連載」の話とリンクして、ここに至った、というのが正直な感想です。
Honestly, this connects with my earlier series on quantum computers, which led me here.

一応、この考え方、私個人のオリジナルではあります。
At least for now, this way of thinking is my own original idea.

========================================
Q2:もしくは無礼な後輩様との会話からコラムを書く前に改めて考察されて(サラッとではなく)執筆されたのでしょうか?
Q2: Or did conversations with your impolite junior lead you to reconsider and write the column (not casually)?
========================================

この考えについては、無礼な後輩との会話から着想した訳ではありませんが、後輩も私も「モデリング」というのが、業務の一つではありますので、こういう考え方をする訓練は日常的にされているとは言えるかもしれません。
This idea did not originate from conversations with my impolite junior, but since both of us engage in “modeling” as part of our work, one could say that we are trained daily to think in such ways.

まあ、総括すると、"毎日、そんなことばっかり考えて生きている"という"習慣のなせる技"かなぁ、とか考えております。
In summary, perhaps it is simply the result of the habit of “spending every day thinking about such things.”

長々と記載させて頂きましたが、この内容にて、ご質問のご返答になっていれば、幸いと存じます。
I have written at length, but I hope this answers your question.

江端智一
Tomoichi Ebata

2026,江端さんの忘備録

私は嘘を付くことに躊躇のない人間です ーー 自分を守る為であれば、平気で嘘を付きます。
I am not afraid to lie — if it is to protect myself, I will do so without a second thought.

ただ、私以外の人間を守る為であっても、こういう嘘は使ってもいいのではないかと思っています。
And even when it is to protect someone other than myself, I believe this kind of lie may be permissible.

---

『では、シニア研究員の江端さんに、乾杯の音頭をお願いしたいと思います』
“Now, I would like to ask Senior Researcher Ebata to give the toast.”

―― 皆さん、お仕事お疲れさまでした。本日は、日頃のグチなども言い敢える楽しい会にしたいと思います。
— Thank you all for your hard work. Tonight, I hope this will be a pleasant gathering where we can freely share even our everyday complaints.

―― ところで、2006年8月に、福岡市東区の海の中道大橋で、家族が乗った車が後ろから飲酒運転の車に追突され、ガードレールを突き破って博多湾に転落した事故がありました。
— By the way, in August 2006, on Uminonakamichi Bridge in Higashi Ward, Fukuoka City, there was an accident in which a car carrying a family was rear-ended by a drunk driver, broke through the guardrail, and fell into Hakata Bay.

―― 追突された車には5人が乗っており、後部座席にいた幼い子ども3人が死亡しました。追突したのはスナックなどで酒を飲んだ後の飲酒運転の車でした。
— There were five people in the car that was hit, and three young children in the back seat died. The driver who caused the crash had been drinking at places such as snack bars before getting behind the wheel.

―― あの事故の被害者、私の妻の妹の友人の家族です。
— The victims of that accident were the family of a friend of my wife’s younger sister.

―― 言うまでもありませんが、この飲み会の後に、自動車を運転して帰る人はいないとは思いますが ーー もしいたら、警察うんぬんの前に、『私が、この手で、あなたを殺しに行きます』ので、その覚悟でお願いします。
— Needless to say, I assume no one here plans to drive home after this gathering — but if anyone does, before the police get involved, I will personally come after you and kill you with my own hands, so be prepared for that.

―― 皆さん。ビールは行き渡りましたね ーー では、乾杯!
— Everyone, your beers have been served, right? Then — cheers!

---

うん、この程度の嘘であれば、会社の上司は、平気で言えるくらいの度胸を持て、と私は言いたい。
Yes, for a lie of this magnitude, I would say that company supervisors should have the courage to say it without hesitation.

『飲んだら乗るな』 ーー ではなく、もういっそうのこと『飲み会は、飲まない会』というくらいのパラダイムシフトしてはどうだろうか?
Instead of merely saying “Don’t drive after drinking,” why not make a paradigm shift and declare, “A drinking party is a non-drinking party”?

最近のノンアルビール、本当に結構すごいぞ(味が)。
Non-alcoholic beer these days is honestly quite impressive — in terms of taste.

だいたい、世界で20億人の人が飲まずにいるんだから(世界のイスラム教徒(ムスリム)の数は、約20億人前後)、その位のことできると、私は本気で思っています。
After all, roughly two billion people in the world do not drink alcohol (the global Muslim population is estimated at around two billion), so I genuinely believe that we can manage at least that much.

酔っぱらった上司に、飲み会の開始から解散まで、延々と自慢話をされて、説教を喰らう ―― そんな「地獄」に誰が行こうと思うものか。