旅の途中、ふと、かつて記した古い羊皮紙を見つけた。忘れないうちに、その記憶をここに書き留めておくとしよう。
コロナワクチンという名の試練に倒れ、39.4度の熱に浮かされながらも、私は「TubeEater」の錬成を続けていた。これは、その開発の旅路も終盤、この神器にどんな魂を宿らせようとしていたのか、その開発の裏側を記した、古き記録である。
今となっては、NuGetパッケージという名の部品が時の砂に埋もれ、新たにこの神器を錬成することは叶わない。しかし、そこに込められた自動化の仕組み、多言語への対応、そして数多の不具合との戦いの記憶は、未来の冒険者たちの、何かの役に立つかもしれない。
この羊皮紙のあらまし
- この羊皮紙のあらまし
- この羊皮紙が導く者
- 神器の心臓部:自動化という名の魂
- 神器の知性:多言語対応という魂
- 神器の試練:数多の不具合との戦い
- 羊皮紙を巻く前に
- 砂漠で見つけた魔法のランプ
- ラクダの独り言
この羊皮紙が導く者
- かつて、YouTubeからビデオをダウンロードするという、禁断の夢を見た者
- .NET 6のC#で、アプリケーションという名のゴーレムを創り出す術に興味がある者
- 今はもう動かぬ、幻の神器「TubeEater」の開発の裏側に、興味を抱く考古学者
神器の心臓部:自動化という名の魂
TubeEaterの最も強力な魔法、それは「自動化」だった。一度、自動ダウンロードボタンを押せば、あとはYouTubeのURLをコピーするだけで、神器が自動的に宝を釣り上げてくれる。
その仕組みは、三つの魔法の組み合わせで成り立っていた。
- クリップボードの監視:
DispatcherTimerという名の見えざる目が、常にクリップボードを監視し、YouTubeのURLという獲物を見つけ出す。 - 非同期のタスク実行: 獲物を見つけ次第、ダウンロードという名の狩りを、非同期のタスクとして実行する。これにより、狩りの最中も、次の獲物を見つけ出すことができる。
- 完了後の処理: 狩りが終われば、獲物をファイルとデータベースという名の宝物庫に納め、プログレスバーという名の狩りの痕跡を消し去る。
神器の知性:多言語対応という魂
この神器は、日本語と英語だけでなく、理論上は、世界のあらゆる言葉を操ることができた。 その秘密は、言語データをJSONファイルとして外部に持ち、起動時にそれを読み込んで、データベースに格納するという、柔軟な設計思想にあった。
public class LangData { public string Name { get; set; } = String.Empty; // 言語名 public string Locale { get; set; } = String.Empty; // ロケール public Dictionary<string, string> Messages { get; set; } = new(); // メッセージ集 }
これにより、ユーザーは自ら言語ファイルを追加・編集し、関西弁のTubeEaterさえも創り出すことが可能だったのだ。
神器の試練:数多の不具合との戦い
数えきれないほどのダウンロードテストの中で、私はいくつもの試練に直面した。
- 文字化けの呪い: VideoLibraryという、ダウンロードの核となる魔法が、時折、日本語を韓国語として誤認識する。これは、もはや手の打ちようのない、ライブラリそのものにかけられた呪いだった。
- 同名コンテンツの罠: 同じ作者が、同じタイトルのコンテンツを複数アップロードしている場合、ダウンロード済みと誤認識し、スキップしてしまう。これは、YouTube IDで最終確認を行うことで、なんとか回避した。
- ライブ配信という結界: ライブ配信のURLを指定すると、VideoLibraryは例外という名の悲鳴を上げる。これをそのままにしておくと、ユーザーは毎回エラーダイアログに悩まされる。私は、この悲鳴だけを静かにログに記録し、旅を続けさせるよう、魔法を書き換えた。
羊皮紙を巻く前に
こうして、私は数多の試練を乗り越え、TubeEaterという神器を、ほぼ完成にまでこぎつけた。 自動化、多言語対応、そして数々の不具合修正。開発という名の旅は、常に新たな発見と、それを乗り越える喜びの連続だった。
しかし、その先に待っていたのは、YouTubeの利用規約という、あまりに巨大な壁。 この物語は、ハッピーエンドでは終わらなかった。
この羊皮紙が、一つのアプリケーションが、どのような思考と、どのような苦難の末に形作られていくのか、その一例として、未来の冒険者の目に留まるなら、私のこの旅も、無駄ではなかったのかもしれない。
おっと、どうやら相棒が腹を空かせたようだ。今日はこのへんで筆を置くとしよう。
砂漠で見つけた魔法のランプ
- Libvideo | かつて我らが頼った、ダウンロード魔法の源泉
- Visual Studio Installer Projects 2022 | 一般権限インストーラの錬金術
ラクダの独り言
ご主人が、熱に浮かされながらも、必死に鉄の箱を叩いて、何かを創り上げていたかと思えば、今度は「規約がー」とか言って、がっくりと肩を落としている。俺に言わせりゃ、そんなに必死になる前に、まず最初に「その獲物は、獲ってもいい獲物なのか」を調べるのが、狩人の基本ってもんだろうに。まったく、後先考えねえから、そういうことになるんだ。やれやれだぜ。