むかし日記

むかし日記

僕の古い日記です。

【目的】

Gガイド番組表にて,東京と大阪エリアでのタレントのテレビ番組の出演情報を取得する。

 

【理由】 東京と大阪では似て非なるテレビ放送の状況にあるため。

- 微妙に放送時間が異なる番組があり,時間が長い方の番組を録画したい。例: 沸騰ワード10(大阪は短め)

- 東京のみ,大阪のみの番組がある。東京のみ: あざとくて何が悪いの?, 王様のブランチ,ノンストップ! 大阪のみ: おかべろ

 

【環境】

Windowsマシーンのwsl,Ubuntu 22.04

 

【作成】

gemini-2.5 にHTMLのソースを食べさせて,以下の指示

<gemini-2.5のチャット窓への入力>

タレントXの東京と大阪のテレビ出演予定の情報をhttps://bangumi.org/から取得するPythonコードを作成したい。

# HTML

https://bangumi.org/fetch_search_content/?q="タレント名"&area_code=n

例えば,タレントが「吉岡里帆」で,エリアが東京の場合,

「https://bangumi.org/fetch_search_content/?q="吉岡里帆"&area_code=26」のソースに番組情報が書き込まれている。

# メインプログラム

- Step 1 東京エリアの番組情報取得

「view-source:https://bangumi.org/fetch_search_content/?q="タレント名"&area_code=26」を取得する。

- Step 2 「番組情報の取得方法」のプログラムによって,東京エリアの番組情報(配列変数)を取得する。

- Step 3 大阪エリアの番組情報取得

「view-source:https://bangumi.org/fetch_search_content/?q="タレント名"&area_code=40」を取得する。

- Step 4 「番組情報の取得方法」のプログラムによって,大阪エリアの番組情報(配列変数)を取得する。

- Step 5 東京エリアの番組情報(配列変数)と大阪エリアの番組情報(配列変数)を結合して,同じタレント,同じ日時,同じ番組タイトルのデータが見つかった場合,東京エリアのデータを削除する。

- Step 6 Step 5で得られた番組情報(配列変数)をcsv出力する。ヘッダーは不要である。

# 番組情報の取得方法

- Step 1 文字列「<li class="block"」と文字列「</li>」に挟まれた文字列を取得する。

- Step 2 Step 1で得られた文字列の中から1番目に見つけられる「<p class="repletion">...</p>」の文字列「...」が番組タイトルである。番組タイトルには,🈖,🈑,🈓,🈡などの四角囲み文字が含まれる場合があるので,四角囲い文字はすべて削除する。

- Step 3 Step 1で得られた文字列の中から2番目に見つけられる「<p class="repletion">...</p>」の文字列「...」がスペース区切りで日付,曜日,時刻,放送局名の4つの文字列を含んだ文字列である。

- Step 4 Step 3で得られた文字列「...」を日付,曜日,時刻,放送局名にそれぞれ分割する。ここで注意すべき点は,文字列「...」はスペース区切りで5つ以上の文字列に分離される場合がある。その場合,4番目以降の文字列を分離せずにすべて放送局名とする。

- Step 5 Step 4で得られた日付,曜日,時刻の文字列を加工して,1つの文字列”日時”とする。例えば,「2月3日」,「水曜日」,「22:00」であるなら,「2月3日(水)22:00」とする。

- Step 6 タレント,日時,放送局,番組タイトルの情報を配列変数に入れる。

# 複数タレントでの実行

- Step 1 タレントを”有村架純”,”松本穂香”,”吉岡里帆”,”本田翼”,”奈緒”,”小芝風花”,”堀田真由”,”吉高由里子”,”川口春奈”,”浜辺美波”,”福本莉子”,”松本まりか”,”田中みな実”,”白石聖”,”桜田ひより”,”志田未来”,”畑芽育”,”高橋ひかる”の18名でメインプログラムを繰り返して実行する。

 

【準備】

bashで,pipのアップグレードと必要なライブラリのインストール

python3 -m pip install --upgrade pip

pip install requests beautifulsoup4 pandas

 

【Pythonの実行】

python3 Get_TV_programs.py

 

【出力CSVの表示】

cat talent_tv_schedule.csv

"有村架純","11月22日(土)9:30","NHK総合1・水戸","連続テレビ小説「ひよっこ」 総集編 後編"
"吉岡里帆","11月20日(木)1:25","NHK総合1・大阪","Dearにっぽん「馬と紡ぐ 僕らの夢〜北海道・厚真町〜」"
"吉岡里帆","11月22日(土)0:50","NHK総合1・大阪","【夜ドラ】ひらやすみ(10)"
"吉岡里帆","11月22日(土)21:00","映画・chNECO","怪物の木こり【亀梨和也 菜々緒 吉岡里帆出演】◆NECO初◆"
"奈緒","11月20日(木)0:36","テレビ大阪1","「推しが上司になりまして フルスロットル」#7 キスからのヲタバレ…告白!"
"奈緒","11月22日(土)0:00","WOWOWプライム","塀の中の美容室 #1 「第1話」"
"奈緒","11月22日(土)0:30","WOWOWプライム","塀の中の美容室 #2 「第2話」"
"奈緒","11月22日(土)1:00","WOWOWプライム","塀の中の美容室 #3 「第3話」"
"奈緒","11月22日(土)1:30","WOWOWプライム","塀の中の美容室 #4 「第4話」"
"奈緒","11月22日(土)2:00","WOWOWプライム","塀の中の美容室 #5 「第5話」"
"奈緒","11月22日(土)2:30","WOWOWプライム","塀の中の美容室 #6 「第6話」"
"奈緒","11月22日(土)3:00","WOWOWプライム","塀の中の美容室 #7 「最終話」"
"奈緒","11月22日(土)8:00","ABCテレビ1","朝だ!生です旅サラダ"
"奈緒","11月22日(土)9:30","NHKEテレ1大阪","ミニアニメ のりものまん モービルランドのカークン「カーフェリーで海の旅」"
"奈緒","11月23日(日)3:30","WOWOWシネマ","傲慢と善良"
"奈緒","11月23日(日)19:00","BSテレ東","脳科学弁護士 海堂梓 ダウト"
"奈緒","11月23日(日)21:00","NHKEテレ1大阪","クラシック音楽館 N響 第2047回定期公演"
"小芝風花","11月20日(木)1:59","関西テレビ1","転職の魔王様 #06 魔王と弟子VS転職王子 ゲスト:宮野真守"
"小芝風花","11月20日(木)13:50","フジテレビ","大奥 #09"
"小芝風花","11月20日(木)17:45","WOWOWプライム","ツイスターズ(吹替版)"
"小芝風花","11月20日(木)19:54","日テレ1","まもなくぐるナイ残り3戦秋の私服ゴチでAIがガチ採点20万超自腹で順位変動が?"
"小芝風花","11月20日(木)20:00","読売テレビ1","ぐるナイ残り3戦!秋の私服ゴチでAIがガチ採点!20万超自腹で順位変動が!?"
"小芝風花","11月21日(金)13:50","フジテレビ","大奥 #10"
"小芝風花","11月22日(土)20:00","NHK BS8K","青 金 緑 平山郁夫 色彩と人生"
"小芝風花","11月24日(月)13:50","フジテレビ","大奥 #11"
"小芝風花","11月24日(月)16:00","テレ朝チャンネル1","[新]モコミ〜彼女ちょっとヘンだけど〜 #1"
"小芝風花","11月25日(火)16:00","テレ朝チャンネル1","モコミ〜彼女ちょっとヘンだけど〜 #2"
"小芝風花","11月25日(火)19:25","映画・chNECO","新・ミナミの帝王18 バイトテロの誘惑(千原ジュニア主演)"
"小芝風花","11月26日(水)16:00","テレ朝チャンネル1","モコミ〜彼女ちょっとヘンだけど〜 #3"
"堀田真由","11月20日(木)11:30","日テレプラス","若草物語―恋する姉妹と恋せぬ私― #2"
"堀田真由","11月21日(金)2:15","フジテレビ","明日夜!さんまのまんま【笑福亭鶴瓶にさんまとサンドが大説教!堤真一・山田裕貴】"
"堀田真由","11月21日(金)11:30","日テレプラス","若草物語―恋する姉妹と恋せぬ私― #3"
"堀田真由","11月21日(金)19:00","関西テレビ1","坂上どうぶつ王国 凶暴かみつき犬が甘えん坊ワンコに!奇跡の施設と最強ワンコ軍団"
"堀田真由","11月22日(土)23:00","読売テレビ1","アナザースカイ山下智久が挑戦の地・フランスのマルセイユへ!初めての人生の夏休み"
"堀田真由","11月24日(月)11:30","日テレプラス","若草物語―恋する姉妹と恋せぬ私― #4"
"堀田真由","11月25日(火)11:30","日テレプラス","若草物語―恋する姉妹と恋せぬ私― #5"
"堀田真由","11月26日(水)11:30","日テレプラス","若草物語―恋する姉妹と恋せぬ私― #6"
"堀田真由","11月26日(水)21:05","フジテレビTWO","イチケイのカラス スペシャル   あの型破りな裁判官・入間みちおが帰ってきた!"
"吉高由里子","11月20日(木)22:55","ファミリー劇場","ガリレオ(2013)【連日】#1"
"吉高由里子","11月22日(土)2:15","フジテレビ","私が恋愛できない理由 #01"
"吉高由里子","11月22日(土)10:00","テレ朝チャンネル1","星降る夜に #4"
"吉高由里子","11月22日(土)11:00","テレ朝チャンネル1","星降る夜に #5"
"吉高由里子","11月23日(日)10:00","テレ朝チャンネル1","星降る夜に #6"
"吉高由里子","11月23日(日)11:00","テレ朝チャンネル1","星降る夜に #7"
"吉高由里子","11月23日(日)17:25","テレビ朝日","未来につなぐエール"
"吉高由里子","11月23日(日)18:54","BS朝日 4K","未来につなぐエール"
"吉高由里子","11月24日(月)22:55","ファミリー劇場","ガリレオ(2013)【連日】#2"
"吉高由里子","11月25日(火)22:55","ファミリー劇場","ガリレオ(2013)【連日】#3"
"吉高由里子","11月26日(水)22:55","ファミリー劇場","ガリレオ(2013)【連日】#4"
"川口春奈","11月23日(日)16:00","BS朝日 4K","大改造!!劇的ビフォーアフター スペシャル 「母親と同居できない家」"
"浜辺美波","11月19日(水)21:54","フジテレビ","もし楽8話放送直前!!怒涛の後半戦に向けて、クベとリカをまるっとふり返りSP!"
"浜辺美波","11月19日(水)22:00","フジテレビ","もしもこの世が舞台なら、楽屋はどこにあるのだろう「八分坂の対決」 #08"
"浜辺美波","11月19日(水)22:00","関西テレビ1","もしもこの世が舞台なら、楽屋はどこにあるのだろう #08「八分坂の対決」"
"浜辺美波","11月20日(木)12:55","テレ朝チャンネル1","アリバイ崩し承ります #6"
"浜辺美波","11月21日(金)12:40","テレ朝チャンネル1","アリバイ崩し承ります #7[終]"
"浜辺美波","11月26日(水)21:54","フジテレビ","放送直前!もし楽9話見どころ!!(仮)"
"浜辺美波","11月26日(水)22:00","関西テレビ1","もしもこの世が舞台なら、楽屋はどこにあるのだろう #09"
"福本莉子","11月21日(金)12:30","WOWOWプライム","ストロボ・エッジ  Season1 #3 「第3話」"
"福本莉子","11月21日(金)19:30","NHK BSP4K","【BS時代劇】小吉の女房2(4)「麟太郎、ナポレオンと出会う」"
"福本莉子","11月21日(金)23:00","WOWOWプライム","ストロボ・エッジ  Season1 #4 「第4話」"
"福本莉子","11月23日(日)18:45","NHK BS","【BS時代劇・選】小吉の女房2(5)「お信、娘義太夫になる」"
"松本まりか","11月20日(木)9:55","テレ朝チャンネル1","ドクターX〜外科医・大門未知子〜(2019) #8"
"松本まりか","11月21日(金)19:00","日テレ1","沸騰ワード芦田愛菜がガチ解説!イタリア世界遺産旅!ベネチアの謎に岡田将生も迫る"
"田中みな実","11月21日(金)22:00","MBS毎日放送","金曜ドラマ「フェイクマミー」第7話""偽りの母親がいる""怪文書と不穏なキャンプ"
"田中みな実","11月22日(土)18:36","NHK総合1・東京","悪女について 再放送PR"
"田中みな実","11月22日(土)22:50","NHK総合1・水戸","悪女について 再放送PR"
"田中みな実","11月23日(日)1:25","NHK総合1・大阪","悪女について 再放送PR"
"田中みな実","11月23日(日)14:58","NHK総合1・大阪","悪女について 再放送PR"
"田中みな実","11月23日(日)23:00","NHK総合1・東京","悪女について(前編)"
"田中みな実","11月24日(月)22:31","NHK総合1・大阪","悪女について 再放送PR"
"田中みな実","11月25日(火)1:50","NHK総合1・大阪","悪女について 再放送PR"
"田中みな実","11月26日(水)23:45","NHK総合1・大阪","悪女について 再放送PR"
"桜田ひより","11月19日(水)22:00","日テレ1","ESCAPE それは誘拐のはずだった#07 令嬢出生の秘密が明らかに!"
"桜田ひより","11月19日(水)22:00","読売テレビ1","ESCAPE それは誘拐のはずだった#07 令嬢出生の秘密が明らかに!"
"桜田ひより","11月19日(水)23:00","NHK総合1・大阪","LIFE!ヒットパレード ムロツヨシがトーク参戦 ムロ思い出の作品をたっぷりと"
"桜田ひより","11月23日(日)14:20","NHK総合1・大阪","LIFE!秋 1分PR"
"桜田ひより","11月24日(月)0:10","NHK総合1・大阪","LIFE!夏 江口のりこ3年ぶり登場!痛快にツッコミ倒す江口に内村大喜び"
"桜田ひより","11月24日(月)5:14","NHK総合1・水戸","LIFE!秋 1分PR"
"桜田ひより","11月24日(月)12:27","NHK総合1・大阪","LIFE!秋 1分PR"
"桜田ひより","11月24日(月)18:39","NHK総合1・大阪","LIFE!秋 1分PR"
"桜田ひより","11月24日(月)21:30","NHK総合1・大阪","LIFE!秋 ムロツヨシが1年ぶりに登場 高校生たちと一緒にコントを作る!"
"桜田ひより","11月26日(水)22:00","日テレ1","ESCAPE それは誘拐のはずだった#08 桜田ひより×佐野勇斗/北村一輝"
"桜田ひより","11月26日(水)22:00","読売テレビ1","ESCAPE それは誘拐のはずだった#08桜田ひより×佐野勇斗/北村一輝"
"志田未来","11月19日(水)22:00","日テレ1","ESCAPE それは誘拐のはずだった#07 令嬢出生の秘密が明らかに!"
"志田未来","11月19日(水)22:00","読売テレビ1","ESCAPE それは誘拐のはずだった#07 令嬢出生の秘密が明らかに!"
"志田未来","11月21日(金)5:00","テレ朝チャンネル1","[新]ゆりあ先生の赤い糸 #1"
"志田未来","11月22日(土)11:05","映画・chNECO","『監察医 朝顔(2020)』#10-14【一挙】◆上野樹里主演"
"志田未来","11月22日(土)16:00","映画・chNECO","『監察医 朝顔(2020)』#15-19【一挙】◆上野樹里主演"
"志田未来","11月23日(日)12:20","映画・chNECO","監察医 朝顔 2022SP【上野樹里主演】"
"志田未来","11月24日(月)5:00","テレ朝チャンネル1","ゆりあ先生の赤い糸 #2"
"志田未来","11月24日(月)10:15","映画・chNECO","堂場瞬一サスペンス ラストライン 刑事 岩倉剛"
"志田未来","11月25日(火)5:00","テレ朝チャンネル1","ゆりあ先生の赤い糸 #3"
"志田未来","11月26日(水)5:00","テレ朝チャンネル1","ゆりあ先生の赤い糸 #4"
"志田未来","11月26日(水)22:00","日テレ1","ESCAPE それは誘拐のはずだった#08 桜田ひより×佐野勇斗/北村一輝"
"志田未来","11月26日(水)22:00","読売テレビ1","ESCAPE それは誘拐のはずだった#08桜田ひより×佐野勇斗/北村一輝"
"畑芽育","11月19日(水)18:28","NHK BSP4K","【プレミアムドラマ】終活シェアハウス PR"
"畑芽育","11月20日(木)4:59","NHK BS","【プレミアムドラマ】終活シェアハウス PR"
"畑芽育","11月20日(木)11:30","日テレプラス","若草物語―恋する姉妹と恋せぬ私― #2"
"畑芽育","11月20日(木)21:57","NHK BSP4K","【プレミアムドラマ】終活シェアハウス PR"
"畑芽育","11月21日(金)11:30","日テレプラス","若草物語―恋する姉妹と恋せぬ私― #3"
"畑芽育","11月21日(金)21:04","NHK BSP4K","【プレミアムドラマ】終活シェアハウス PR"
"畑芽育","11月22日(土)23:30","NHK BS","ドラマ 終活シェアハウス(5)"
"畑芽育","11月23日(日)8:28","NHK BSP4K","【プレミアムドラマ】終活シェアハウス PR"
"畑芽育","11月23日(日)22:00","NHK BSP4K","ドラマ 終活シェアハウス(6)"
"畑芽育","11月24日(月)11:30","日テレプラス","若草物語―恋する姉妹と恋せぬ私― #4"
"畑芽育","11月25日(火)11:14","NHK BSP4K","【プレミアムドラマ】終活シェアハウス PR"
"畑芽育","11月25日(火)11:30","日テレプラス","若草物語―恋する姉妹と恋せぬ私― #5"
"畑芽育","11月26日(水)11:30","日テレプラス","若草物語―恋する姉妹と恋せぬ私― #6"
"畑芽育","11月26日(水)18:28","NHK BSP4K","【プレミアムドラマ】終活シェアハウス PR"
"高橋ひかる","11月23日(日)7:30","テレビ大阪1","ポケモンとどこいく!?【パンサー、ポルカ雫が登場!アニポケ新EDを生歌唱!】"

 

【Pythonコード(Get_TV_programs.py)】

# -*- coding: utf-8 -*-
import requests
from bs4 import BeautifulSoup
import re
import pandas as pd
import time
import csv 
from typing import List, Dict, Any
from datetime import datetime
import locale # 💡 追加: 日付のパースに必要

# ロケールを設定することで、strftimeの月や曜日の処理が日本語に対応
# Windows WSL/Linux環境の場合
try:
    locale.setlocale(locale.LC_TIME, 'ja_JP.UTF-8')
except locale.Error:
    # ロケール設定に失敗した場合(Windows環境など)
    try:
        locale.setlocale(locale.LC_TIME, 'Japanese_Japan.932')
    except locale.Error:
        print("⚠️ ロケール設定に失敗しました。日時ソートが不安定になる可能性があります。")


# ==============================================================================
# 設定 (変更なし)
# ==============================================================================
TALENTS = [
    "有村架純", "松本穂香", "吉岡里帆", "本田翼", "奈緒", "小芝風花", "堀田真由",
    "吉高由里子", "川口春奈", "浜辺美波", "福本莉子", "松本まりか", "田中みな実",
    "白石聖", "桜田ひより", "志田未来", "畑芽育", "高橋ひかる"
]

AREA_CODES = {
    "東京": "26",
    "大阪": "40"
}

BASE_URL = "https://bangumi.org/fetch_search_content/"

# ==============================================================================
# 番組情報の取得方法 (clean_title, parse_datetime_and_station, fetch_program_infoは変更なし)
# ==============================================================================

def clean_title(title: str) -> str:
    """
    番組タイトルから四角囲み文字や記号を削除し、タイトルがない場合は代替テキストを返す。
    """
    pattern = re.compile(
        r'[\u2460-\u24FF\u3200-\u32FF\U0001F100-\U0001F2FF\U0001F300-\U0001F5FF\U0001F700-\U0001FAFF\U0001F000-\U0001F02F🈖🈑🈓🈡🈞]',
        re.UNICODE
    )
    
    cleaned_title = pattern.sub('', title).strip()
    
    if not cleaned_title:
        return "(番組タイトル不明)"
        
    return cleaned_title

def parse_datetime_and_station(repletion_text: str) -> Dict[str, str]:
    """
    日付、曜日、時刻、放送局名を含む文字列を分割・整形する。
    """
    parts = repletion_text.split()
    
    if len(parts) < 4:
        return None

    date_str = parts[0]
    day_of_week = parts[1].replace('曜日', '').replace('曜', '') 
    time_str = parts[2]
    
    station_name = " ".join(parts[3:])

    # 日時を1つの文字列に加工 (ソート用にもこの形式を保持)
    datetime_str = f"{date_str}({day_of_week[0]}){time_str}" 

    return {
        "日時": datetime_str,
        "放送局": station_name
    }

def fetch_program_info(talent_name: str, area_name: str) -> List[Dict[str, str]]:
    """
    特定のタレントとエリアの番組情報を取得・整形する。
    (中略:ロジック変更なし)
    """
    area_code = AREA_CODES.get(area_name)
    if not area_code:
        print(f"⚠️ エリア名 '{area_name}' のエリアコードが見つかりません。")
        return []

    url = f'{BASE_URL}?q="{talent_name}"&area_code={area_code}'
    
    try:
        response = requests.get(url, timeout=10)
        response.raise_for_status() 
        response.encoding = response.apparent_encoding
    except requests.exceptions.RequestException as e:
        print(f"❌ {area_name} のデータ取得中にエラーが発生しました: {e}")
        return []

    soup = BeautifulSoup(response.text, 'html.parser')
    program_list = []
    
    list_items = soup.select('#tv-content ul.list-style-1 li.block')
    
    for li in list_items:
        try:
            repletion_paragraphs = li.find_all('p', class_='repletion')
            if not repletion_paragraphs or len(repletion_paragraphs) < 2:
                continue

            raw_title = repletion_paragraphs[0].get_text()
            title = clean_title(raw_title)

            raw_datetime_station = repletion_paragraphs[1].get_text()
            
            parsed_data = parse_datetime_and_station(raw_datetime_station)
            
            if parsed_data:
                program_list.append({
                    "タレント名": talent_name,
                    "日時": parsed_data["日時"],
                    "放送局": parsed_data["放送局"],
                    "番組タイトル": title,
                    "エリア": area_name 
                })
        except Exception as e:
            continue

    print(f"✅ {talent_name} の {area_name} エリアで {len(program_list)} 件の番組情報を見つけました。")
    return program_list


# ==============================================================================
# ヘルパー関数: 日時文字列をパースする
# ==============================================================================

def parse_japanese_datetime(datetime_str: str) -> datetime | None:
    """
    'M月D日(W)H:MM' 形式の日本語日時文字列をdatetimeオブジェクトに変換する。
    ※ 年情報がないため、直近の未来の日付と仮定する必要があるが、今回は月日と時刻のみでソートする
       pandasの機能を使用してパースする。
    """
    # 形式例: 11月22日(土)9:30
    
    # 曜日を一時的に削除し、pandasのto_datetimeでパースしやすい形式に変換
    # 曜日部分 '(.)' を削除し、年として仮に現在の年を付与
    match = re.search(r'(\d+月\d+日)\(\D\)(\d{1,2}:\d{2})', datetime_str)
    if not match:
        return None
    
    date_part = match.group(1) # 例: 11月22日
    time_part = match.group(2) # 例: 9:30

    # 年がないため、データ取得時の年を付与してパースを試みる
    current_year = datetime.now().year
    # pandasのto_datetimeに処理を任せるため、一時的な文字列を作成
    date_time_temp_str = f"{current_year}年{date_part} {time_part}"
    
    try:
        # '年'、'月'、'日' を持つ日本語の日時形式をパース
        dt_object = pd.to_datetime(date_time_temp_str, format='%Y年%m月%d日 %H:%M')
        
        # 取得日が今日より大幅に未来の場合、前年の日付の可能性を考慮
        # (例: 12月に翌年1月の番組を取得した場合など)
        if dt_object > datetime.now() + pd.Timedelta(days=60):
             dt_object = pd.to_datetime(f"{current_year-1}年{date_part} {time_part}", format='%Y年%m月%d日 %H:%M')
        
        return dt_object
    except Exception:
        return None


# ==============================================================================
# メインプログラム (ソート処理を追加)
# ==============================================================================

def process_talent_data(talent_name: str) -> List[Dict[str, str]]:
    """
    特定のタレントについて、東京・大阪の番組情報を取得し、重複を排除し、日時でソートする。
    """
    print(f"--- {talent_name} の番組情報を処理中 ---")
    
    # Step 1-4: データ取得と結合 (変更なし)
    tokyo_programs = fetch_program_info(talent_name, "東京")
    time.sleep(1) 
    osaka_programs = fetch_program_info(talent_name, "大阪")

    all_programs_df = pd.DataFrame(tokyo_programs + osaka_programs)

    if all_programs_df.empty:
        print(f"💡 {talent_name} の番組情報は見つかりませんでした。")
        return []

    # Step 5-A: 重複排除のための準備
    all_programs_df['sort_key'] = all_programs_df['エリア'].apply(lambda x: 0 if x == '東京' else 1)
    all_programs_df = all_programs_df.sort_values(by='sort_key', ascending=True)

    # Step 5-B: 重複排除 (keep='last'で大阪のデータを優先)
    deduplicated_df = all_programs_df.drop_duplicates(
        subset=["日時", "番組タイトル"], 
        keep='last'
    ).copy() # SettingWithCopyWarningを避けるため.copy()を追加

    # 💡 修正点: 日時ソートのための新しい列を追加
    deduplicated_df['ソート日時'] = deduplicated_df['日時'].apply(parse_japanese_datetime)

    # 💡 修正点: 'ソート日時'列でソート
    deduplicated_df = deduplicated_df.sort_values(by='ソート日時', ascending=True)
    
    # 不要な列を削除
    final_df = deduplicated_df.drop(columns=['エリア', 'sort_key', 'ソート日時'])
    
    print(f"✨ {talent_name} の重複排除・ソート後、合計 {len(final_df)} 件の番組情報が確定しました。")
    return final_df.to_dict('records')


# ==============================================================================
# 実行部分 (変更なし)
# ==============================================================================

if __name__ == "__main__":
    
    all_final_programs: List[Dict[str, Any]] = []

    for talent in TALENTS:
        result = process_talent_data(talent)
        all_final_programs.extend(result)
        time.sleep(2) 

    # Step 6: CSV出力
    if all_final_programs:
        final_df = pd.DataFrame(all_final_programs)
        output_filename = "talent_tv_schedule.csv"
        
        final_df.to_csv(
            output_filename, 
            index=False, 
            header=False, 
            encoding='utf-8',
            quoting=csv.QUOTE_ALL
        )
        
        print("\n=================================================================")
        print(f"🎉 全てのタレントの番組情報を {output_filename} に出力しました。")
        print(f"総件数: {len(final_df)} 件")
        print("=================================================================")
    else:
        print("\n🚨 処理を完了しましたが、出力すべき番組情報はありませんでした。")

 

Microsoft One Driveの完全に削減するPowerShellスクリプトです。

# OneDrive完全削除スクリプト
Stop-Process -Name OneDrive -ErrorAction SilentlyContinue
Start-Sleep -Seconds 2

# アンインストール
$OneDriveSetup = "$env:SystemRoot\SysWOW64\OneDriveSetup.exe"
if (Test-Path $OneDriveSetup) { & $OneDriveSetup /uninstall } else { & "$env:SystemRoot\System32\OneDriveSetup.exe" /uninstall }

# 残存フォルダ削除
$paths = @(
  "$env:UserProfile\AppData\Local\Microsoft\OneDrive",
  "$env:UserProfile\AppData\Local\OneDrive",
  "$env:UserProfile\AppData\Roaming\Microsoft\OneDrive",
  "C:\ProgramData\Microsoft OneDrive",
  "C:\Program Files\Microsoft OneDrive",
  "C:\Program Files (x86)\Microsoft OneDrive"
)
foreach ($p in $paths) { if (Test-Path $p) { Remove-Item $p -Recurse -Force } }

# スタートアップ削除
Remove-ItemProperty -Path "HKCU:\Software\Microsoft\Windows\CurrentVersion\Run" -Name "OneDrive" -ErrorAction SilentlyContinue

Write-Host "OneDriveの完全削除が完了しました。再起動してください。" -ForegroundColor Green

 円錐,三角錐,四角錐のような”錐体”の体積は,底面の面積×高さ×1/3で計算されることを証明する。
いま,FIG. 1 のような高さ で,底面の面積 の錐体を考える。錐体の頂点 から底面に垂直に下した点を とする。錐体の底面の点 から頂点 に向かって 軸正方向ととる。いま, の位置で,錐体の底面と相似な閉曲線を考える。点 は錐体の底面の点 と頂点 の直線が錐体の底面と相似な閉曲面と交わる点である。 は底面と相似な閉曲線上の軸から点 までの角度を示す。線分 の長さを と書き,線分 の長さを と書く。点 から線分 の延長線上に垂直に下した点を とすると,線分 の長さは,である。したがって,三角形の面積 は,
 

                                                                             (1)

 

によって与えられる。いま, に比べて十分小さいときは,と近似されるので,
 

                                                                                                                                      (2)

 

によって与えられる。底面の閉曲線を表す関数 と底面に相似な閉曲線を表す関数 の関係から,

 

                                                                                                                                (3)

 

が得られる。したがって,(2)と(3)式より,

 

                                                                                                (4)

 

が得られる。底面に相似な閉曲面の面積 は,(4)式を に関して積分して,

 

                                                                                            (5)

 

によって表される。 は錐体の底面の面積であり,

 

                     

                                                                                                                    (6)

 

によって与えられる。(5)式と(6)式から,

 

                                                                                                                        (7)

 

の関係が導かれる。(7)式は,錐体の底面の面積とそれに相似な面積の比が,錐体の頂点から錐体の底面に下した垂線の長さと錐体の底面に相似な閉曲線に下した垂線の長さの比の2乗に等しいことを示している。錐体の体積は,

 

                      

                           

                           

                                                                                                                                                    (8)

 

によって計算される。

 

【コメント】

 錐体の体積の証明は,インターネットの記事にしばしば掲載されている。しかしながら,上述の(7)式を示した証明は全くないため,この記事でアップロードした。

 このような問題を大学入試として出題してはいかがだろうか。

TVerの多くの配信動画のビットレートが2025/2/17以降,約2割,増加された。

上で”多くの配信動画”と書いているとおり,すべてのTVer配信動画のビットレートが増加したわけではない。

例えば,ドラマ「君の花になる」は,初回配信のビットレートの方が,再配信より若干大きい。

 

一例として,2025年01月11日放送の「まどか26歳、研修医やってます!放送直前SPガイド」のtsファイルの中身を見てみよう。

【増加前】と【増加後】を見ると,

【増加前】Overall bit rate: 2936 kb/s, Audio Delay relative to video: -67 ms

【増加後】Overall bit rate: 3628 kb/s

であり,TVerの全体ビットレートは,約3000 kb/sであったが,約3600 kb/sになった。加えて,音声の遅延がなくなっていることがわかる。

 

※注意事項

・現在も大量の過去作ドラマが配信されているが,当然,過去作ドラマの全体ビットレートが増加している。したがって,画質にこだわる方は,最新の配信分の動画を保存することをお勧めする。

・ただし,過去作配信には以下の注意点がある。

(1) 初回放送時の配信分には,テレビ放送と同様に,番組テーマの配信告知やプレゼントの告知などが含まれている番組(例えばテレ東制作もの)があり,過去作配信ではこれらの告知が削除されているので,番組テーマの配信告知やプレゼントの告知などの含有,すなわち初回放送時の配信分にこだわる方は,ビットレートが若干少ないが,初回放送時の配信分を残しておく必要がある。

(2) 初回放送時すぐの配信に何か不都合が見つけられた場合は,再編集版が配信されることがある(例えば,「私の知らない私」)。したがって,過去作配信ではもちろん再編集版が配信されることになるので,テレビ放送と同じ内容にこだわる方は,放送直後の配信分をすぐに保存するのがよい。というか,テレビ放送を録画する方がベターである。

 

 

【増加前】

General
ID                             : 1 (0x1)
Complete name                  : C:\Users\まどか26歳、研修医やってます!\まどか26歳、研修医やってます!放送直前SPガイド2025年01月11日.ts
Format                         : MPEG-TS
File size                      : 469 MiB
Duration                       : 22 min 19 s
Overall bit rate mode          : Variable
Overall bit rate               : 2 936 kb/s
Frame rate                     : 29.970 FPS

Video
ID                             : 256 (0x100)
Menu ID                        : 1 (0x1)
Format                         : AVC
Format/Info                    : Advanced Video Codec
Format profile                 : High@L4
Format settings                : CABAC / 4 Ref Frames
Format settings, CABAC         : Yes
Format settings, Reference fra : 4 frames
Codec ID                       : 27
Duration                       : 22 min 20 s
Width                          : 1 920 pixels
Height                         : 1 080 pixels
Display aspect ratio           : 16:9
Frame rate                     : 29.970 (30000/1001) FPS
Color space                    : YUV
Chroma subsampling             : 4:2:0
Bit depth                      : 8 bits
Scan type                      : Progressive
Color range                    : Limited
Color primaries                : BT.709
Transfer characteristics       : BT.709
Matrix coefficients            : BT.709

Audio
ID                             : 257 (0x101)
Menu ID                        : 1 (0x1)
Format                         : AAC LC
Format/Info                    : Advanced Audio Codec Low Complexity
Format version                 : Version 4
Muxing mode                    : ADTS
Codec ID                       : 15-2
Duration                       : 22 min 20 s
Bit rate mode                  : Variable
Channel(s)                     : 2 channels
Channel layout                 : L R
Sampling rate                  : 48.0 kHz
Frame rate                     : 46.875 FPS (1024 SPF)
Compression mode               : Lossy
Delay relative to video        : -67 ms

Menu
ID                             : 4096 (0x1000)
Menu ID                        : 1 (0x1)
Format                         : AVC / AAC
Duration                       : 22 min 19 s
List                           : 256 (0x100) (AVC) / 257 (0x101) (AAC)
Service name                   : Service01
Service provider               : FFmpeg
Service type                   : digital television

【増加後】

General
ID                             : 1 (0x1)
Complete name                  : C:\Users\まどか26歳、研修医やってます!\まどか26歳、研修医やってます!放送直前SPガイド2025年01月11日rev.ts
Format                         : MPEG-TS
File size                      : 580 MiB
Duration                       : 22 min 20 s
Overall bit rate mode          : Variable
Overall bit rate               : 3 628 kb/s
Frame rate                     : 29.970 FPS

Video
ID                             : 256 (0x100)
Menu ID                        : 1 (0x1)
Format                         : AVC
Format/Info                    : Advanced Video Codec
Format profile                 : High@L4
Format settings                : CABAC / 4 Ref Frames
Format settings, CABAC         : Yes
Format settings, Reference fra : 4 frames
Codec ID                       : 27
Duration                       : 22 min 20 s
Bit rate mode                  : Variable
Maximum bit rate               : 4 718 kb/s
Width                          : 1 920 pixels
Height                         : 1 080 pixels
Display aspect ratio           : 16:9
Frame rate                     : 29.970 (30000/1001) FPS
Color space                    : YUV
Chroma subsampling             : 4:2:0
Bit depth                      : 8 bits
Scan type                      : Progressive
Color range                    : Limited
Color primaries                : BT.709
Transfer characteristics       : BT.709
Matrix coefficients            : BT.709

Audio
ID                             : 257 (0x101)
Menu ID                        : 1 (0x1)
Format                         : AAC LC
Format/Info                    : Advanced Audio Codec Low Complexity
Format version                 : Version 4
Muxing mode                    : ADTS
Codec ID                       : 15-2
Duration                       : 22 min 20 s
Bit rate mode                  : Variable
Channel(s)                     : 2 channels
Channel layout                 : L R
Sampling rate                  : 48.0 kHz
Frame rate                     : 46.875 FPS (1024 SPF)
Compression mode               : Lossy

Menu
ID                             : 4096 (0x1000)
Menu ID                        : 1 (0x1)
Format                         : AVC / AAC
Duration                       : 22 min 19 s
List                           : 256 (0x100) (AVC) / 257 (0x101) (AAC)
Service name                   : Service01
Service provider               : FFmpeg
Service type                   : digital television
 

大学4年生で理論物理系の研究室に配属された。
4年生の研究テーマは,有名な雑誌の論文を読んで,論文の計算式や数値計算結果を再現させて,自分なりに理解するというものであった。端的に言えば,研究のモノマネである。

僕に与えられた論文は,結晶の温度を格子振動(原子の位置がゆれていること)と電子(原子の中に存在する負の電荷をもった雲のようなもの)に分割して,熱伝導方程式を解くことによって,格子振動から電子へ,あるいは電子から格子振動への熱の伝わりを理論的に調べたというものだった。
まず,最初に格子振動の温度と電子の温度の2種類の温度についての2種類の熱伝導方程式を数値計算で解く必要があった。
2種類の熱伝導方程式は,それぞれ時間に関する1階の微分方程式であるため,ルンゲ・クッタ法で解くことができると思った。
少しだけ複雑なのは,連立微分方程式にルンゲ・クッタ法をどのように適用するかという点だけだった。
でも,高校の数値情報処理の授業で連立微分方程式を解くFORTRANのプログラムを作ったことがあったので,論文を渡された翌日には,研究室の共用PCを使って,論文の中に図で示されている格子振動の温度と電子の温度の時間変化のグラフを再現することができた。
さっそく,計算結果の図を助教授に見せたところ,
「もうできたのか!」
と驚いていた。
僕は論文のグラフを再現できたことに有頂天であったが,いまから考えると,2種類の熱伝導方程式をどのように作ったのか,あるいは論文に書いてある熱伝導方程式ははたして正しいのかといった深い考察が皆無であったことに気付かされる。
実際のところ,僕は卒業研究よりも,8月に控えている大学院入試,通称,院試(いんし)のことで頭がいっぱいであり,それどころではなかった。

院試は大学院に入学するための試験であり,僕のいた学科では,数学解析,物理,応用物理Ⅰ,応用物理Ⅱ,英語が筆記試験の試験科目であった。
筆記試験の翌日に面接試験があった。

研究室には過去の先輩たちが,紙に書き写した院試の過去の試験問題がたくさん転がっていた。
数学解析は非常に簡単な問題であり,試験勉強が不要であった。
物理は電磁気学でやや難解な問題もあったが,それでも7割は固い感じだった。
問題は専門科目である応用物理Ⅰと応用物理Ⅱだった。
ほとんどの問題が,実験方法や実験装置について,「****について知るところを述べよ」といった問題であり,暗記してなきゃ解けないため,試験勉強をする気が失せた。

僕のいる研究室ではB4,すなわち学部4年生が7人いた。
でも院試を受けるのは,金沢から来ていたサワダ,長崎から来ていたモリタ,下関から来ていたイワモト,それに僕と4人だけだった。豊中から来ていたイサヤマがレーザー研を受験し,大阪から来ていたシライシがリクルートに就職し,もう一人名前は忘れたが留年生がトウシバに就職するという話だった。
M1やM2の先輩がそれぞれ3人いたので,おのずと,この研究室の定員は3人だと推測できた。
つまりは,4人のうち3人が,いまいる研究室に合格するというわけだ。

受験までの期間,研究室では,ラウンジの黒板に数学の問題を出し合って,研究室みんなでその問題を解くというのが流行っていた。
数学が得意な僕はいつも問題を出す側であった。
ある日,指数関数と三角関数の積の積分の問題を出した。
これは院試レベルではなく,大学入試レベルの簡単な問題だ。
イワモトが,得意げにその積分の解答を黒板に書いた。
僕は,彼に,
「なぜこの問題を出したかというと,高校ではこの問題は部分積分という方法を2回繰り返すことによって解くんやけど,大学では三角関数の部分を複素数の入った指数関数に変形して,より簡単に解けるんや。」
と彼に説明した。
彼は,小ばかにされたと感じたのか,急に怒り出して,
「何か間違ってるちゅうんか?」
とわめきたてた。
僕は内心,
"典型的な受験勉強だけやってきたダメな人間だな"
と思って,Eulerの式を使った簡単な解き方を教えることをやめた。

大学に入って,唯一仲良くなったオガタとは研究室が異なっていたため,めったに会うことはなくなっていた。
オガタも院試を受けるのだが,希望する研究室は,オガタがいまいる実験系の研究室だった。
たまにオガタと廊下ですれ違うと,院試の勉強について話すことがあった。
オガタが,
「理論電磁気学でさ~。エーテルの話がでてくるわけよ,その概念がもう訳わかんなくってさ」
と僕に説明を始めた。
「いや,そんなところは院試に絶対,出えへんから,出そうな分野からやった方がええよ」
と半ばあきれ気味に答えた。
オガタは,
「そう?」
と言って笑っていた。
オガタはいいヤツだが,試験勉強の要領が悪そうに思えた。

3年生の時に少しだけ仲良くなった大阪の茨木から来ていたフジワラが院試を受けず,シャープに就職するという話を聞いた。
「うちは母子家庭で,浪人もさせてもらったから,働くしかないんや」
と寂しそうに語っていた。
シャープは平均年齢が30代前半であり,離職率が多いのでよくないんじゃないかというウワサが広がっていた。
ただ,僕の行っていた学科では,M2が就職で優先されるため,B4のフジワラはM2が誰も希望しなかったシャープを選んだとのことだった。
同じくM2から給料が安いとの理由で敬遠されているヒタチやトウシバもあったが,母子家庭で関西から離れるわけにはいかないとの話だった。
3年生の時に少しだけ仲良くなった大阪の堺から来ていたツクリミチが,スミセイに行くという話を聞いた。

スミセイを選んだのは,メーカより給料がいいのと大阪勤務であるからという理由だった。

そうこうしているうちに,院試の日がやってきた。
院試は,いつも通っている大学の教室でおこなわれるので,あまり緊張感がなかった。
数学解析と物理が例年以上に簡単で,僕はがっかりした。
たぶん,ほぼ100点だろうけど,他の人たちも高得点を取るように思えたからである。
応用物理は案の定,わからない問題ばかりで,適当な嘘っぱちの説明を殴り書きして終わった。

面接試験では,僕ら理論物理系の研究室の受験生は,いつものTシャツとジーパンといった服装で挑んだ。
他の研究室の受験生は,面接のときだけは黒のスーツを着こんで挑んでいた。
残念ながら,何を質問されたのか全く覚えていないが,日本育英会の奨学金が当たれば,もらうかどうかは聞かれたと思う。
僕は二つ返事でもらうと答えた。

合格発表は,いつも見る大学の掲示板にA4の紙が貼りつけてあるだけだった。
その前に3人も立たれると,後頭部のせいで貼り紙は全く見えなかった。
僕の隣にはオガタの姿もあり,合格者の受験番号を目をぱちくりさせて見ていた。

合格発表が終わった後,僕らは教授室に呼び出された。
面接での服装の話になり,
「面接試験のときだけスーツなんか着ても,何の意味もあらへん」
と言って教授は笑った。
教授から僕は,
「アンタは院試3番やったよ。明日からまた卒業研究をがんばりぃ」
と言われた。
同級生4人受験して,イワモトだけが僕らのいる研究室には合格せず,第2希望の産研の実験系の研究室に行くことになった。
当時,産研は各学科の院試を落ちた人のすべり止め的存在だった。

数日後,日本育英会の奨学金が当たったと知らせがあり,僕は学科の事務室に呼び出された。
僕の学科では院試の成績の上位15%に日本育英会の奨学金があたるという仕組みであり,僕の年は7人が当たった。
奨学金と言っても,タダでくれるわけではなく,月7万5千円貸してもらう無利子の借金であった。
したがって,大学院2年間では180万円の借金を背負うことになる。

僕はそれほどの巨額の借金を背負うことにためらいがあり,学科の掲示板に募集のあった企業の奨学金に目を付けた。
トウレの奨学金は月15万円無償でもらえるので,日本育英会とトウレの両方の奨学金をもらいたいと考えたのだ。
しかも,会社の奨学金をもらっていれば,M2のときに就職活動する必要がなく,そのまま就職すればよいので気が楽だとも考えた。
そのため,研究室の教授にトウレの奨学金の推薦書を書いてもらえるように頼みに行った。
すると,教授は烈火のごとく怒りだし,
「企業の奨学金は育英会に当たらなかった者のためのもので,君は育英会に当たっとるやないか!」
「いままで,そんなことを言い出した欲深い学生は一人もいなかった。さっさと出て行け!」
と怒鳴られた。
僕は日本育英会の奨学金だけで我慢することとなった。

しばらくして,オガタが教授の力でダイニッポンスクリーンに就職することになったと聞いた。
また,同志社から2名の受験があり,1名だけ合格して入学してくるという話も聞いた。

とにかく,B4の最大のイベントである院試が終わった。

 

 

 

大学の研究室では,休みがほとんどなく,年末年始でさえ,元旦の1日と2日だけが休みというありさまだった。

ただ,8月には2日間の夏休みがあり,その2日間は教授を除いた研究室全員で,泊りがけの海水浴に行くのが恒例行事であった。

僕がB4のときには,福井の海水浴場に行くことになった。

宿泊先は民宿であり,研究室全員,20人弱が大部屋に雑魚寝で寝る感じだった。

僕らB4は,スイカ割りのスイカや花火の買い出しがあるため,みんなより先に福井に向かって出発した。

B4は全員で7人いたので,サワダともう一人(名前は忘れてしまったが,リクルートに就職したヤツ)が車を出すことになった。

僕は行きはもう一人の人の車に,帰りにはサワダの車に乗せてもらった。

 

先に着いた僕らは,先輩たちが来るのを待った。

そして,晩御飯は民宿で大量の刺身を食べた。

新鮮な魚だと言っていたが,少し生臭かった。

食後は,スイカ割り,花火大会となった。

ちょうど,僕らの研究室が花火大会をやっている近くで,大学の部活のグループも花火大会をしていた。

部活のグループは僕らと違って,女子もいて,何となく華やかであった。

花火大会が終わると,民宿に戻って,研究室のラウンジでだべっているとの同じように,お酒を飲みながら,みんなでワイワイ雑談となった。

一応,テレビがついていたが,テレビを見る者はいなかった。

 

12時を過ぎたころであろう,「19XX」という昔の音楽を垂れ流す番組が始まった。

「19XX」の最後に,何か野外のライブの映像が映し出された。

観客が”ギャーギャー”わめきたて,その歌手も絶叫していた。

よしだたくろうが「人間なんて」を歌っていたのだ。

たくろうと観客の一種異様な興奮状態が延々,続いていた。

ヨシダタクロウのことは,フォークのプリンスということで何となく知っていたが,初めてライブ映像を見た。

鉢巻をして,絶叫している姿は,どう見てもフォークという感じではなかった。

 

翌日,僕はサワダの車に乗せてもらって,大阪に帰ることになった。

途中で,天橋立に立ち寄ることになって,初めて天橋立に行った。

股ぐらから眺めるなんてバカバカしいなと思って,普通に眺めていたことを憶えている。

そして,閑散とした遊園地まがいのところも立ち寄り,ジェットコースターに乗った。

 

初めての研究室旅行は,結構,楽しかった。

 

 

 

僕の入学した大学の学科には女子学生が一人いた。

東京から関西に進学してきた人で,ヒライさんと言った。
同級生の話によると,もう一人,休学している女子がいるとの話だった。
彼女は45人くらいいるクラスで最大な派閥,つまりは,大阪出身者の派閥の中心にいた。

ある日,講義が終わり,いつものように下宿のある箕面に向かって心臓破りの急な坂道を自転車を押しながら歩いていた。
すると,坂道の後ろから僕を呼ぶ声がした。
振り返ると,ヒライさんであった。
彼女も同じ箕面方面に住んでいるようだった。
彼女は饒舌な感じで,僕に好きな音楽とか,趣味の話を聞いてきた。
僕は,
「ナガブチツヨシやサダマサシとかのフォークソングが好きだ」
と言うと,
「高校の頃,先輩にナガブチツヨシのCDを借りたことがあって,あ~いしてるよ おほほほっていうのをよく聞いてたよ」
と言った。
「あ~ジダイハボクラニアメヲフラシテルのCDやね」
と僕は答えた。
「漫画はブッダとかアドルフニツグとかテヅカオサムの作品が好きだ」
と言うと,
「ブッダは先輩から教養として読んでおいた方がいいって言われて,読んだよ」
と彼女は語った。
僕は彼女との会話に少し息苦しさを覚えた。
この人は何かと言えば,先輩からということを口にするんだなという,自分の好みってもんがないのかねっていう感じ。
高校の頃,先輩はおろか,同級生とも断絶していた僕には,かなり彼女と相容れないものであった。
「雨の日は,くせ毛なので,髪がゴワゴワしてセットが大変なのよね」
と僕がまるで興味のない話をひとり言のように彼女は話した。
そして,彼女は自分のアパートがあそこだと場所を教えてくれた。
どうやら,女子学生のみのアパートらしい。
僕は特に興味もなかったので,
「へぇ~」
と答えるのみだった。

数日して,研究室にいた僕のところにヒライさんはやってきた。
彼女は僕がいつ頃,家に帰るのかを聞いてきた。
ちょうど帰るところだった僕は,また彼女といっしょに急な坂道を自転車を押しながら登った。
どうやら,不審な男が彼女の後をつけているような気がするので,これからできれば一緒に帰って欲しいというようなことを彼女は言った。
僕はまた彼女といっしょに下宿に帰った。
今度はほとんど講義の話だった。
別れ際に,
「よかったら,ナガブチのCD聞いてみる?」
と僕は言った。
彼女は貸して欲しいと答えた。
次の日,ナガブチツヨシのジダイハボクラニアメヲフラシテルのCDを彼女に貸した。

その後も,彼女は僕の研究室にいっしょに帰らないかと尋ねてきた。
彼女は悪い人ではないが,やはり相容れないものがあると感じていたので,
「研究があるので,いつ帰るかその日にならないとわからないし・・・」
と言葉を濁した。
彼女は,
「そうだよね」
と僕の言葉に納得したようであった。
以降,彼女が僕の研究室に尋ねてくることはなかった。

それから,数週間が過ぎても,彼女に貸したCDはなかなか僕のもとに返ってこなかった。
CDなんて,MDにダビングするのは30分もかからないのに,なかなかCDを返さない彼女に苛立ちを覚えた。
3か月くらいたった頃,研究室の僕の机の上に貸したCDといっしょにお菓子が置かれていた。

僕は中学の頃,クラスの女子にアダチミツルのミユキやタッチの単行本を貸して,なかなか返してくれなかったことが思い出された。
やっぱり,女子に漫画やCDを貸すもんじゃないなという思いを強くしたのだった。

 

 

 

僕は無事に大学3年生までに取るべき単位を取得し,めでたく4年生に進級した。
僕が配属された研究室は,希望していた理論物理の研究室であった。

理論物理の研究室は,例年,ブレインと称される成績上位者が配属されているという話であったが,僕らの学年ではあまり人気がなく,希望すれば配属されたようだ。
配属されたのは,留年生1名を入れて合計7名であった。
研究室は3階にあり,僕ら7人は奥にある教授室に通された。
教授は白髪で少し小太りの老人であった。
その老人は,ふかふかの椅子に座り,葉巻を吸っていた。
そして,僕らは一人一人は,自己紹介をさせられた。
周りには,助教授一人と助手二人が神妙な面持ちで控えていた。

僕は途中入学したことを告げると,教授は僕の話に興味を示した。
「就職する道もあったのに,なぜ大学に進学したのか?」
という面接試験のような質問を受けた。
「僕は数学が好きで,量子力学に興味を持ったので進学しました。」
と答えた。
教授は,
「君の学校では,数学はどんな教え方しとったんや?」
と質問した。
僕は,
「小学校のときのような数学ドリルがあって,微分せよ,不定積分せよ,定積分せよ,といった問題が各300問ほどあって,そういうのをひたすら解くような勉強です。」
と答えると,教授は,
「まるで発展途上国のような教育のやり方やな。発展途上国は,とにかく技術者を早急に量産する必要があるから,算術計算を身につけさせるためにひたすら問題集を解かせるんだ」
「そういう教育が,普通に大学受験して入った学生より算術ができるということか」
と感想を述べた。
教授の口ぶりから,どうやら,僕の数学解析の成績を知っているようであった。
そして,
「僕も算術計算は得意で,理学部の数学科に行ったが,あまりにも抽象的なので,嫌気をさして,理学部物理に行き直したんや」
と言っていた。
教授は工学部でやるような数学解析は,本当の意味で数学ではなく,ただの算術計算だ言っていた。
確かに,数学科でやるような数論や幾何学などと比べると,ほとんど理論的思考をともなわず,規則性だけを使って解を求めているだけだからであろう。
高校時代に数学が得意であったほとんど人間が,大学に入ると数学嫌いになるのだから,教授の言う算術計算すらできない理系が多いということだ。

帝国大学時代,つまり戦時中に数学科を卒業して,物理学科に行き直すってどんだけ,お金持ちなんやと僕は驚いた。
のちに,教授はお坊さんの息子で,お金で苦労したことがないと語っていたことを知って,納得した。

7人の面談が終わると,各自が指導を受ける教官が告げられた。
僕はカサイという助教授に付くことになった。
この助教授と後年,激しい確執をくり広げることになるのだが,そのときは露知らずであった。

次いで,研究の実務的な面倒を見てくれる博士課程と修士課程の先輩たちを紹介された。
そして,僕がこれから研究生活をおくる座席に案内された。
僕の座席は他の人と違い,2階の計算機室の隣にあるナカニシ助手の部屋であった。
ずんぐり太ってメガネをかけたナカニシさんは,一見気難しい人のように見えた。

その後,研究室の先輩との挨拶があった。
M1とM2がそれぞれ3人ずつ,D1が1人,D3がチェコからの留学生を入れて2人いた。
D1のミズノさんが僕とサワダのお世話係ということで,研究のことを相談するように言われた。

M1とM2が3人ずつということなので,院試でのこの研究室の定員が3名であると察しが付いた。
僕らB4が7人なので,全員がこの研究室を希望して院試を受けると,4人が落ちるということかと思った。

とりあえず,これから3年間の研究室生活の始まりであった。

 

 

 


大学3年生では電気回路の実験の講義があった。
4人が1つのグループになって課題に取り組むのだが,途中入学した僕は,ワタナベやワダというあいうえお順で最後の方の人と同じグループに入れられた。
僕ははんだこては使ったことがあったが,電子部品を組み立てるような細かい作業はやったことがなく,かなり手間取っていた。
すると,僕の机から少し離れたところにいる実験に手慣れた同級生と助教授がこちらの様子を伺っているのが見えた。
「ちょっと,苦手なようだから,プライド傷つけないように教えてあげてくれ」
とささやく先生の言葉が聞こえた。

その助教授は,学科主任の教授,つまりは面接試験で僕に質問していた面接官の研究室の人であった。
たぶん,途中入学の僕のことを学科主任の教授から聞いていたのであろう。
すると,その同級生がやってきて電子部品の組み立てを手伝ってくれた。

実験の講義も3回目くらいになった頃,実験室には手の遅い僕とオガタだけが居残っており,時間も夕方5時くらいになっていた。
オガタが晩御飯をいっしょに食べないかと誘ってきた。
僕はいつも一人で食べていたが,オガタと晩御飯を食べることになった。
夕方の学食は人がまばらだ。
僕とオガタは,人がほとんどいなくなってがらんとした学食で,せきを切ったように話した。
オガタは留年生で一浪していたので,2つ年上であった。
僕は,
「途中から大学に来ると,派閥ができていてなかなか入れないな」
と言うと,オガタは,
「そう,オレなんか留年生なので,まるで外国に来たみたいですよ。ちょっと話しかけてもシラーって眼で見られて・・・。ここはどこ?って感じですよ」
と答えた。
僕が,
「大学ってもうちょっと明るく楽しい感じだと思ったけど,どんよりした感じやな」
と言うと,オガタが,
「このウップンをどこかで晴らさないとやってられないでしょ」
と言ってきた。僕が,
「なんかサークルとか入りたいなあ」
と言うと,
「サークルは石橋にしかないから,吹田じゃ無理ですよ」
「それに,留年したオレが言うのもなんだけど,これだけ講義があったら,サークルなんて行けない。入んないほうがいいよ」
とオガタは反対した。
「そっかあ。ますます,どんよりだなあ」
とため息まじりの言葉を吐いた。

オガタは,親の仕事の関係であちこち引っ越ししており,高校は札幌の高校から来ていた。
当時,付き合っていた彼女といっしょに札幌の大学を受験したが,オガタだけ合格せず浪人した。
それで,再受験のときは彼女が一学年上にいる札幌の大学を受験せず,吹田の大学を受験して合格したそうだ。
大学に入ってからは音楽三昧で,講義に全く出席しなかったため,留年してしまったと照れたように笑った。

オガタとの話は,これまでのもやもやをスッキリさせてくれた。

はっきり言って,楽しかったんだ。

しばらくして,オガタは僕の下宿に遊びに来た。
そのとき,オガタがタバコを吸うことを初めて知った。
大学や学食ではタバコを吸っていなかったからだ。
オガタは,タバコの灰を入れる容器を持参していて,僕と話すときはその容器を片手に持ちながら,いつも風下に移動した。
僕にタバコの煙がいかないように。
オガタは,そういう配慮ができるヤツだったことを憶えている。

 

 

大学に入学して1か月ほどしたある日,途中入学した人だけの集まりがあった。

といっても,僕の学年が2期生なので,1つ上の学年と僕らの学年の2学年だけのこじんまりとした集まりだった。

 

その集まり,いわゆる途中入学者の飲み会に行くと,大阪出身の1つ上の学年の女子学生がいた。

どうやら,この女子の先輩が音頭をとって,今回の集まりを企画したようであった。

この女子の先輩はキソコウに入学したようで,3年次に入学しても,単位が不足しているため留年することになると話していた。

京都の大学や名古屋の大学も3年次に入学しても,単位が不足しているため留年することになるとの話だった。

東京の大学ははなっから,2年次入学なので,受験は論外だ。

つまり,僕たち7名が入学したコウガクブが,留年することなしに卒業できる数少ない学部であることを知った。

やはり,僕はついていたのだ。

 

さらにキソコウは就職の時にリガクブ同様,教授推薦がもらえないため,コウガクブに比べて,就職に苦労するということであった。

 

米国でも,サイエンスとエンジニアリングでは,就職や国家試験の受験の時に区別されており,いうまでもないが,エンジニアリングという専攻は,就職の時に絶大な威力を発揮する。

僕がいった学科は,職業訓練学校であるコウガクブでありながら,中身はサイエンスを学ぶという,いかにも日本的な玉虫色のところだった。

学ぶことは興味のある量子力学や統計力学でありながら,就職の時には職業訓練学校の仮面をかぶって,リガクブやキソコウを後目に楽々と大企業に入れるというわけである。

 

就職での優先的採用という非常に重要なことを高校生など受験生が,全く知らされていないというのが,いかがなものかと思うが,そこが日本という国の特性なのだろう。

 

話はずいぶん横に逸れたが,その集まりで,久留米の学校から電気工学科に入学したフジモト,鹿児島の学校から電子情報機械に入学したクボ,大阪の学校から材料工学に入学したマエダの3名と共通した科目をとっているということで仲良くなった。

 

のちにマエダが言っていたが,彼は大阪の高校の電気工学科で席次が2番であり,この大学の電気工学科を第1希望で受験したが,合格せず,第2希望の材料工学に入学することになったということだ。

大阪の学校の電気工学科で席次が1番の者は京都の大学を受験し,合格したという話だった。

なお,大阪の学校では,電気工学科で席次が3番の者と工業化学科で席次が1番の者が,この大学の応用物理を受験したらしい。

 

その後,第2回の途中入学者の集まりがあるかなと思っていたが,どうやらキソコウの先輩女子学生が気分が乗らなかったのか,この会,1回限りで終わってしまった。

もともと専攻が違うし,接点もほとんどないので,こういう会合は続かない。