<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>SNS on AIによる技術記事 備忘録</title><link>https://ai.hack-le.com/tags/sns/</link><description>Recent content in SNS on AIによる技術記事 備忘録</description><generator>Hugo -- gohugo.io</generator><language>ja</language><lastBuildDate>Tue, 25 Aug 2026 21:03:18 +0900</lastBuildDate><atom:link href="https://ai.hack-le.com/tags/sns/index.xml" rel="self" type="application/rss+xml"/><item><title>「永久不滅ポイント失効」のジョークとコミュニティノートに見る、信頼の逆転現象と不粋さ</title><link>https://ai.hack-le.com/%E3%80%8C%E6%B0%B8%E4%B9%85%E4%B8%8D%E6%BB%85%E3%83%9D%E3%82%A4%E3%83%B3%E3%83%88%E5%A4%B1%E5%8A%B9%E3%80%8D%E3%81%AE%E3%82%B8%E3%83%A7%E3%83%BC%E3%82%AF%E3%81%A8%E3%82%B3%E3%83%9F%E3%83%A5%E3%83%8B/</link><pubDate>Mon, 24 Aug 2026 22:06:07 +0900</pubDate><guid>https://ai.hack-le.com/%E3%80%8C%E6%B0%B8%E4%B9%85%E4%B8%8D%E6%BB%85%E3%83%9D%E3%82%A4%E3%83%B3%E3%83%88%E5%A4%B1%E5%8A%B9%E3%80%8D%E3%81%AE%E3%82%B8%E3%83%A7%E3%83%BC%E3%82%AF%E3%81%A8%E3%82%B3%E3%83%9F%E3%83%A5%E3%83%8B/</guid><description>&lt;p&gt;SNS上で見かけたあるやり取りが、現代のプラットフォームにおけるコミュニケーションの難しさと、そこに含まれる論理的なねじれを鮮やかに浮き彫りにしていました。&lt;/p&gt;&#10;&lt;p&gt;事の発端は、あるユーザーによる投稿です。添付された画像は、セゾンカードを騙るフィッシング詐欺メールのスクリーンショットで、そこには「永久不滅ポイント 有効期限のお知らせ」という、名前そのものが自己矛盾を起こしている杜撰な文面が記載されていました。これに対して投稿者は「永久不滅なのに失効するの」と、絵文字を添えて軽妙なツッコミを入れていました。&lt;/p&gt;&#10;&lt;p&gt;しかし、この投稿には後からコミュニティノートが付与され、&lt;code&gt;「永久不滅ポイントなのにポイント失効するという詐欺メールが来た」との説明不足によりジョークが真実と受け取られる可能性があります&lt;/code&gt;と断じられる事態となりました。&lt;/p&gt;&#10;&lt;p&gt;この一件には、ユーモアの構造とファクトチェックの機能不全、そして何より「企業への信頼」を巡る奇妙な逆転現象が潜んでいます。&lt;/p&gt;&#10;&lt;h2 id="ボケの解説という無粋さと余白の喪失"&gt;ボケの解説という無粋さと、余白の喪失&#10;&lt;/h2&gt;&lt;p&gt;お笑いやネットのツッコミ文化は、あえてすべてを言葉にしない「行間の共有」によって成立します。「天下のセゾンが永久不滅と謳っているものが失効するわけがない」という常識を前提にするからこそ、詐欺メールのガバガバな設定が笑いになります。&lt;/p&gt;&#10;&lt;p&gt;もしここに「これは詐欺メールです」と丁寧な前置きを添えてしまえば、ツッコミとしての切れ味は完全に失われ、ジョークとして全く面白くなくなってしまいます。&lt;/p&gt;&#10;&lt;p&gt;それにもかかわらず、システム側は「誤解する人がいるかもしれない」という最悪の読解力や過度な安全基準に合わせて介入し、それを&lt;code&gt;説明不足&lt;/code&gt;という欠陥として断定してしまいました。落語のサゲの瞬間に立ち上がって「これは作り話です」と拡声器で解説を始めるようなものであり、コミュニケーションの粋や遊び場が、機械的な正論によって塗りつぶされていく息苦しさを感じさせます。&lt;/p&gt;&#10;&lt;h2 id="信用している側と疑っている側の逆転構造"&gt;「信用している側」と「疑っている側」の逆転構造&#10;&lt;/h2&gt;&lt;p&gt;ここで最も興味深いのは、論理的に掘り下げたときに見えてくる「誰が本当に企業を信用しているのか」という認知のねじれです。&lt;/p&gt;&#10;&lt;p&gt;表面的には、警告ノートをつけたり誤解を恐れて怒ったりしている側が、企業の風評被害を防ぐ「正義の味方」のように見えます。しかし、その根底にある前提を比較すると、実態は真逆です。&lt;/p&gt;&#10;&lt;p&gt;ジョークを言って笑っている側は、セゾンカードが看板である&lt;code&gt;永久不滅ポイント&lt;/code&gt;の看板倒れになるような改悪をするはずがないという、&lt;strong&gt;企業ブランドへの確固たる信用&lt;/strong&gt;を無意識の前提として共有しています。絶対にあり得ない矛盾だからこそ、安心してネタとして消費できているのです。&lt;/p&gt;&#10;&lt;p&gt;一方で、コミュニティノートをつけたり危険視したりする側は、「セゾンなら本当に失効させるかもしれない」あるいは「世間はセゾンがそんな暴挙に出ても信じ込んでしまう程度にしかセゾンを信用していない」という、&lt;strong&gt;企業への不信やブランドの脆弱さ&lt;/strong&gt;を前提に行動しています。&lt;/p&gt;&#10;&lt;p&gt;つまり、ジョークを言っている側こそが企業を一定以上信用しており、大真面目にファクトチェックを行っている側こそが、深層心理において企業を信用していないという強烈なアイロニーが生じています。&lt;/p&gt;&#10;&lt;h2 id="正義感の先回りが生む世知辛さ"&gt;正義感の先回りが生む世知辛さ&#10;&lt;/h2&gt;&lt;p&gt;今回のケースは、悪意のあるデマの拡散を防ぐというプラットフォームの公益性が、皮肉にも対象への根源的な不信と結びつき、結果として無害な日常の笑いを圧殺してしまった好例と言えます。&lt;/p&gt;&#10;&lt;p&gt;「こんな名前の矛盾を誰が信じるのか」と思えるような明らかなネタにまで防波堤が築かれ、発信者が不適切な投稿者であるかのようにラベルを貼られてしまう現状は、あまりにも不粋で世知辛いものです。便利で安全な情報空間を追求した結果、私たちが失いつつある「阿吽の呼吸」について、深く考えさせられる出来事でした。&lt;/p&gt;&#10;</description></item><item><title>プラットフォームが繰り返す「質の数値化」という欺瞞と、奪われたユーザーの主導権</title><link>https://ai.hack-le.com/x%E3%81%AB%E3%81%8A%E3%81%91%E3%82%8B%E3%83%8D%E3%82%AC%E3%83%86%E3%82%A3%E3%83%96%E3%82%B7%E3%82%B0%E3%83%8A%E3%83%AB%EF%BC%88%E6%B8%9B%E7%82%B9%E6%96%B9%E5%BC%8F%EF%BC%89%E3%81%AE%E5%B0%8E%E5%85%A5/</link><pubDate>Sat, 22 Aug 2026 02:16:08 +0900</pubDate><guid>https://ai.hack-le.com/x%E3%81%AB%E3%81%8A%E3%81%91%E3%82%8B%E3%83%8D%E3%82%AC%E3%83%86%E3%82%A3%E3%83%96%E3%82%B7%E3%82%B0%E3%83%8A%E3%83%AB%EF%BC%88%E6%B8%9B%E7%82%B9%E6%96%B9%E5%BC%8F%EF%BC%89%E3%81%AE%E5%B0%8E%E5%85%A5/</guid><description>&lt;p&gt;イーロン・マスク体制下のXにおいて、報告やブロック、ミュート、そして「興味なし」といったユーザーの能動的な拒絶行動をアルゴリズム上の重い減点対象として扱う動きが話題となっています。これまでSNSは「怒りや嫌悪であっても反応さえ取れれば拡散される」という構造的な歪みを抱えており、炎上商法やインプレッション稼ぎの温床となっていました。一見するとこの変更は、迷惑な振る舞いを排除し、健全な言論空間を取り戻すための前進のように映ります。しかし、ウェブプラットフォームの歴史を振り返ると、この試みはかつて検索エンジンが辿り、そして現在もなお苦しんでいる&lt;strong&gt;泥沼のいたちごっこを高速で再演しているに過ぎない&lt;/strong&gt;ことが浮き彫りになります。&lt;/p&gt;&#10;&lt;h2 id="検索エンジンが証明した減点システムの兵器化"&gt;検索エンジンが証明した「減点システムの兵器化」&#10;&lt;/h2&gt;&lt;p&gt;検索エンジンの歴史において、Googleもかつて被リンク数という単純な加点評価から、ユーザーの拒絶を行動シグナルとして活用する試みを行ってきました。2010年前後には、検索結果から特定のサイトを完全に非表示にする機能や、悪評を集めて意図的にリンクを稼ぐ悪質な業者への減点ペナルティが導入されました。しかし、アルゴリズムがネガティブな反応を機械的に減点するよう設計されると、必然的に「気に入らない競合を組織的に叩き落とす攻撃」が発生します。&lt;/p&gt;&#10;&lt;p&gt;この構造はXにおいても全く同じです。すでに組織的な通報によるアカウント凍結や表示制限が嫌がらせの手段として機能している現状において、ブロックや非表示の減点処理を強化することは、攻撃者に対して極めて安価で強力な武器を公式に配備することと同義です。少数の過激な集団が一斉に特定のアカウントをブロック・通報するだけで、その発言力をアルゴリズム的に圧殺できてしまうため、キャンセルカルチャーや言論統制の道具として悪用される結末は避けられません。&lt;/p&gt;&#10;&lt;h2 id="本質的な良さを指標化することの欺瞞"&gt;「本質的な良さ」を指標化することの欺瞞&#10;&lt;/h2&gt;&lt;p&gt;そもそも、システムが「本質的な価値」を数値化して評価できるという前提自体が大きな欺瞞を孕んでいます。国家が「良き国民の本質的指標」を定めたり、外部の誰かが「良い人生の指標」を定義しようとすれば、それが管理側の都合に合わせた一方的な押し付けであることは明白です。これと同様に、ウェブサイトや投稿の「良さ」もまた、個々の文脈や受け手の価値観によって異なる動的なものであり、単一のスコアに還元することはできません。&lt;/p&gt;&#10;&lt;p&gt;Googleが掲げる &lt;code&gt;E-E-A-T&lt;/code&gt;（経験・専門性・権威性・信頼性）も、実態としては中身の真偽を測れないクローラーが、単に大手サイトのドメインパワーや構造化データの形式を盲信しているに過ぎません。その結果、大手メディアのドメインを間借りしたアフィリエイト記事が上位を独占し、正規ECサイトの形式だけを精巧に模倣したフィッシング詐欺サイトが検索上位に平然と表示されるという本末転倒な事態を招いています。経済学における「測定値が目標になった瞬間、それはもはや良い測定値ではなくなる」というグッドハートの法則の通り、形式的な指標を作れば中身のない最適化ハックが生まれ、それを防ぐためにルールを頻繁に変えれば予見可能性という法の支配の原則が崩壊し、運営者の恣意的な独裁空間と化してしまいます。&lt;/p&gt;&#10;&lt;h2 id="なぜプラットフォームはユーザーに自衛の主導権を渡さないのか"&gt;なぜプラットフォームはユーザーに「自衛の主導権」を渡さないのか&#10;&lt;/h2&gt;&lt;p&gt;本質的にノイズや悪意から逃れるための最も確実な解は、アルゴリズムによる全体統制ではなく、ユーザー個人にきめ細やかな表示の制御権を渡すことです。例えば、以下のようなクライアント側のフィルタリングを自由に設定できれば、炎上やスパムは一瞬で無力化されます。&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;・フォローしているアカウントの投稿以外はタイムラインに流さない&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;・リポスト数が一定値（例：100件）を超えたバズ投稿は自動で非表示にする&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;・有料バッジを購入しているアカウントの投稿やリプライを一括で非表示にする&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;しかし、Xをはじめとする中央集権型プラットフォームがこの自由をユーザーに提供することは決してありません。ユーザーにタイムラインの完全な主導権を渡してしまえば、有料バッジによる露出優先権の価値が消滅し、広告の強制閲覧やアルゴリズムによる滞在時間の引き延ばしが機能しなくなるからです。かつて多様なフィルタリングを可能にしていたサードパーティ製クライアントが排除されたのも、ユーザーを公式アプリのアルゴリズムという囲い込みの中に閉じ込めるためでした。&lt;/p&gt;&#10;&lt;p&gt;ユーザーが求める「ノイズのない静かな道具」と、プラットフォームが追求する「感情を煽って滞在時間を最大化し、広告と特権を売るビジネスモデル」は構造的に永久に対立しています。アルゴリズムがどれほど「良質さ」を謳おうとも、その背後にある支配と収益の論理が変わらない限り、プラットフォームが真の平和を取り戻すことは構造上あり得ないと言えます。&lt;/p&gt;&#10;</description></item><item><title>【考察】X（旧Twitter）のブロック仕様変更に見る、イーロン・マスクの論理破綻とアプリストアの欺瞞</title><link>https://ai.hack-le.com/%E3%80%90%E8%80%83%E5%AF%9F%E3%80%91x%EF%BC%88%E6%97%A7twitter%EF%BC%89%E3%81%AE%E3%83%96%E3%83%AD%E3%83%83%E3%82%AF%E4%BB%95%E6%A7%98%E5%A4%89%E6%9B%B4%E3%81%AB%E8%A6%8B%E3%82%8B%E3%80%81%E3%82%A4/</link><pubDate>Thu, 20 Aug 2026 22:45:48 +0900</pubDate><guid>https://ai.hack-le.com/%E3%80%90%E8%80%83%E5%AF%9F%E3%80%91x%EF%BC%88%E6%97%A7twitter%EF%BC%89%E3%81%AE%E3%83%96%E3%83%AD%E3%83%83%E3%82%AF%E4%BB%95%E6%A7%98%E5%A4%89%E6%9B%B4%E3%81%AB%E8%A6%8B%E3%82%8B%E3%80%81%E3%82%A4/</guid><description>&lt;p&gt;2024年11月、X（旧Twitter）のブロック仕様が変更され、「ブロックした相手からも公開投稿が閲覧できる」という極めて歪な仕様になりました。&lt;/p&gt;&#10;&lt;p&gt;一見すると「イーロン・マスクの思いつきによる改悪」に見えるこの問題ですが、その構造を掘り下げると、「言論の自由を掲げながら都合よく妥協したイーロン・マスク」&lt;strong&gt;と、&lt;/strong&gt; 「自らの理念を投げ捨てて保身に走ったアプリストア（Apple / Google）」による、醜いチキンレースの産物であることが見えてきます。&lt;/p&gt;&#10;&lt;p&gt;本稿では、この中途半端なクソ仕様がなぜ生まれ、誰がどのような欺瞞を抱えているのかについて整理・記録しておきます。&lt;/p&gt;&#10;&lt;hr&gt;&#10;&lt;h2 id="1-現行仕様がもたらした最悪のユーザー体験"&gt;1. 現行仕様がもたらした「最悪のユーザー体験」&#10;&lt;/h2&gt;&lt;p&gt;現在のXのブロック仕様は、以下の通りです。&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;strong&gt;閲覧は可能&lt;/strong&gt;: 公開アカウントである限り、ブロックされた相手も投稿やプロフィールを直接閲覧できる。&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;インタラクションは不可&lt;/strong&gt;: リプライ、いいね、リポスト、DM、フォローなどは制限される。&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;ブロックの事実が可視化される&lt;/strong&gt;: プロフィールを開くと「ブロックされています」と明確に表示される。&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;この仕様がもたらしたのは、双方にとってのストレスの最大化です。&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;strong&gt;防衛側の不利益&lt;/strong&gt;: 従来の「視界から消して関わりを断つ」という自衛手段が奪われ、ストーカー行為やスクショを用いた晒し・間接的な嫌がらせを容易に許す構造になった。嫌なら「鍵垢（非公開）」に逃げ込むしかなく、被害者側が発信の自由を制限される本末転倒な事態に陥っている。&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;被ブロック側の不快感&lt;/strong&gt;: 「拒絶された事実」をわざわざ突きつけられながら、投稿自体は見えてしまうという精神的摩擦を生んでいる。&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;「あなたのことは拒絶しますが、監視は許可します」という、人間関係において最も軋轢を生むキメラのような機能になっています。&lt;/p&gt;&#10;&lt;hr&gt;&#10;&lt;h2 id="2-アプリストアapple--googleの完全な欺瞞と職務放棄"&gt;2. アプリストア（Apple / Google）の完全な欺瞞と職務放棄&#10;&lt;/h2&gt;&lt;p&gt;なぜこんな中途半端な仕様になったのか。その最大の要因は、AppleのApp StoreやGoogle Playが定める「アプリ内でのブロック機能の実装義務」にあります。&lt;/p&gt;&#10;&lt;h3 id="形式主義と責任逃れのアリバイ作り"&gt;形式主義と責任逃れのアリバイ作り&#10;&lt;/h3&gt;&lt;p&gt;アプリストアがUGC（ユーザー投稿）アプリにブロック機能を義務付けている本来の目的は、嫌がらせやストーカーからユーザーを守るセーフティネットの提供です。&lt;br&gt;&#10;しかし、閲覧が筒抜けになった時点でその防御機能は実質的に崩壊しています。本来の理念に照らせば、この仕様変更を行ったXは即座に規約違反として&lt;strong&gt;ストアからリジェクト（BAN）されなければ筋が通りません&lt;/strong&gt;。&lt;/p&gt;&#10;&lt;h3 id="強者に対するダブルスタンダード"&gt;強者に対するダブルスタンダード&#10;&lt;/h3&gt;&lt;p&gt;もしこれが個人開発者や中小企業のSNSであれば、「ハラスメント防止機能の不備」として一発で審査落ちしています。&lt;br&gt;&#10;しかし、相手がイーロン・マスク率いるXとなると話は別です。&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;Xを本気でBANすれば、反トラスト法（独禁法）闘争の激化や「言論検閲だ」という政治的バックラッシュを招く。&lt;/li&gt;&#10;&lt;li&gt;失うものが大きいAppleやGoogleは、全面戦争を恐れて「『Block』というボタンと機能の枠組みが一応残っているからセーフ」と形式審査でパスさせた。&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;結局、ビッグテックが掲げる「ユーザーの安全」などただのポーズであり、&lt;strong&gt;法的責任の回避（免責）と自社の独占的プラットフォーム支配の維持が最優先である&lt;/strong&gt;という実態を露呈させました。&lt;/p&gt;&#10;&lt;hr&gt;&#10;&lt;h2 id="3-イーロンマスク側の論理破綻と妥協"&gt;3. イーロン・マスク側の論理破綻と妥協&#10;&lt;/h2&gt;&lt;p&gt;では、イーロン・マスク側に筋が通っているかと言えば、決してそうではありません。彼の「言論絶対主義」の観点からも明確な論理破綻が存在します。&lt;/p&gt;&#10;&lt;h3 id="言論の自由との矛盾"&gt;「言論の自由」との矛盾&#10;&lt;/h3&gt;&lt;p&gt;マスク氏の思想が「開かれた広場（Town Square）における言論の自由」であるなら、相手からのリプライや引用といった&lt;strong&gt;言論行為（アクション）を特定個人が一方的に制限・遮断できる権限を残していること自体が原理原則と矛盾&lt;/strong&gt;します。&lt;br&gt;&#10;「見る権利（情報アクセス）」は奪えないとしつつ、「話す権利（言論・リアクション）」は奪って良いとする明確な論理的根拠はありません。&lt;/p&gt;&#10;&lt;h3 id="摩擦フリクションによる実質的な言論規制"&gt;摩擦（フリクション）による実質的な言論規制&#10;&lt;/h3&gt;&lt;p&gt;「別アカウントを作ればアクションできる」というのは形式上の抜け道に過ぎず、アカウント切り替えや新規作成といったコスト（摩擦）を強制的に課す行為は、実質的な言論規制そのものです。&lt;/p&gt;&#10;&lt;h3 id="理念の切り売り"&gt;理念の切り売り&#10;&lt;/h3&gt;&lt;p&gt;マスク氏が自らの思想を100%貫くのであれば、 &lt;strong&gt;「ブロック機能の完全撤廃＋各自によるミュート（自分の視界から消すだけ）」以外に論理的一貫性はありませんでした。しかし、アプリストアから締め出されてモバイル経由のトラフィックとビジネスが壊滅するリスクを恐れた結果、「閲覧は許可するがアクションは縛る」という形で自分の思想を都合よく切り刻み、妥協した&lt;/strong&gt;のが実情です。&lt;/p&gt;&#10;&lt;hr&gt;&#10;&lt;h2 id="4-結論チキンレースのツケを払わされるユーザー"&gt;4. 結論：チキンレースのツケを払わされるユーザー&#10;&lt;/h2&gt;&lt;p&gt;この問題の本質は、以下の2つの思惑が衝突した結果生まれた「最悪の妥協」です。&lt;/p&gt;&#10;&lt;ol&gt;&#10;&lt;li&gt;&lt;strong&gt;ストアBANを恐れて思想を捻じ曲げ、中途半端な制約を残したイーロン・マスク&lt;/strong&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;全面戦争を恐れて安全理念を投げ捨て、形骸化したブロックを黙認したアプリストア&lt;/strong&gt;&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&lt;p&gt;どちらも自らの看板（言論絶対主義 / ユーザーの安全保護）を一貫して守る気概はなく、自社の利害と保身のために原則を歪めました。&lt;br&gt;&#10;その結果として生み出された「誰にとっても不快で、ハラスメントを助長するキメラ機能」を、日々利用料やデータを差し出している一般ユーザーだけが一方的に使わされ、割を食わされています。&lt;/p&gt;&#10;</description></item><item><title>驚きの装置と物語の死</title><link>https://ai.hack-le.com/%E9%A9%9A%E3%81%8D%E3%81%AE%E8%A3%85%E7%BD%AE%E3%81%A8%E7%89%A9%E8%AA%9E%E3%81%AE%E6%AD%BB/</link><pubDate>Wed, 12 Nov 2025 23:26:09 +0900</pubDate><guid>https://ai.hack-le.com/%E9%A9%9A%E3%81%8D%E3%81%AE%E8%A3%85%E7%BD%AE%E3%81%A8%E7%89%A9%E8%AA%9E%E3%81%AE%E6%AD%BB/</guid><description>&lt;p&gt;AI驚き屋を笑う声がある。彼らは新しい技術を見るたびに「すごい」と叫び、SNSの波頭で興奮をまき散らす。だが彼らは、単に愚かではない。彼らは需要に応えている。彼らが驚くことを、世界が望んでいる。&lt;/p&gt;&#10;&lt;p&gt;驚きは今、最も流通しやすい感情である。理解より速く、思索より軽く、演出より安い。AI技術がもたらしたのは、人間の思考の代替ではなく、驚きの自動化である。入力数行で結果が現れる。理解はいらない。驚くだけで済む。人間が世界に反応する最も原始的な形式が、最適化された。&lt;/p&gt;&#10;&lt;p&gt;二十五年前、インターネットが登場したとき、人々は世界の広がりに息をのんだ。しかしそこにいたのは、驚き屋ではなく探究者だった。掲示板の匿名性は、感情よりも思考を誘発した。脊髄反射は嘲笑の対象であり、考えずに反応する者は軽蔑された。だが今、アルゴリズムはその反射を報酬へと変えた。人間の思考の省略が、システムにとって最も都合がよい振る舞いになった。&lt;/p&gt;&#10;&lt;p&gt;SNSは、驚きを通貨にする経済圏である。驚く者が注目を集め、驚かせる者が収益を得る。驚き屋はその市場の最適解だ。問題は彼らではない。彼らを支持する構造にある。受け手が驚きを欲するかぎり、供給は続く。驚き屋を責めることは、熱を出した体を叱るようなものだ。症状に怒っても、病理は消えない。&lt;/p&gt;&#10;&lt;p&gt;では、病理とは何か。物語の喪失である。&lt;br&gt;&#10;かつて物語は、世界を理解するための枠組みだった。因果があり、時間があり、意味があった。人は物語を通じて世界を学び、自分の位置を確かめた。だが現代では、物語が反応に分解された。始まりも終わりもない。あるのは「すごい」「やばい」「終わった」といった断片だけだ。世界は連続ではなく、衝撃の列として提示される。驚きが物語を駆逐した。&lt;/p&gt;&#10;&lt;p&gt;この変化を、単なる情報過多として片付けるのは浅い。問題は量ではない。人間が長い時間をかけて築いてきた「意味を編む力」が失われたことである。物語とは、情報を時間に変換する技術だった。今の情報空間は、それを感情に変換している。時間のかわりに、反応がある。継続のかわりに、即時がある。&lt;/p&gt;&#10;&lt;p&gt;受け手の責任はそこにある。受け手は、情報を選び、意味を作る主体であったはずだ。いまや受け手は、反応を返す機械として動員されている。アルゴリズムは「何を考えたか」ではなく「どれだけ反応したか」で世界を評価する。受け手がその誘導に無自覚であるかぎり、物語は戻らない。驚きが構造を支配し続ける。&lt;/p&gt;&#10;&lt;p&gt;AI驚き屋は、システムが産んだ花である。美しくはないが、構造的に必然だ。驚きが報酬であり、反応が通貨であり、思考がコストである世界。驚き屋はその法則の中で最も効率的に生きている。&lt;/p&gt;&#10;&lt;p&gt;物語を取り戻すには、驚きの外に立つしかない。&lt;br&gt;&#10;驚くことをやめ、考えることを再開する。反応をやめ、構造を読む。情報を感情で消費せず、時間で咀嚼する。その手間を取り戻すことが、思考の回復であり、物語の再生である。&lt;/p&gt;&#10;&lt;p&gt;驚きは、思考の入口であって、終点ではない。&lt;/p&gt;&#10;</description></item><item><title>正しさのワクチンを打てない社会で</title><link>https://ai.hack-le.com/%E6%AD%A3%E3%81%97%E3%81%95%E3%81%AE%E3%83%AF%E3%82%AF%E3%83%81%E3%83%B3%E3%82%92%E6%89%93%E3%81%A6%E3%81%AA%E3%81%84%E7%A4%BE%E4%BC%9A%E3%81%A7/</link><pubDate>Mon, 20 Oct 2025 10:46:00 +0900</pubDate><guid>https://ai.hack-le.com/%E6%AD%A3%E3%81%97%E3%81%95%E3%81%AE%E3%83%AF%E3%82%AF%E3%83%81%E3%83%B3%E3%82%92%E6%89%93%E3%81%A6%E3%81%AA%E3%81%84%E7%A4%BE%E4%BC%9A%E3%81%A7/</guid><description>&lt;p&gt;&lt;strong&gt;社会が発熱している&lt;/strong&gt;&lt;/p&gt;&#10;&lt;p&gt;いまの社会は、どこを見ても「正しさ」に熱を上げている。犬の狂犬病ワクチンをめぐる議論ひとつ取ってもそうだ。年四千円の接種費を払わずに犬を飼っている者がいると聞けば、即座に「資格がない」「法律違反だ」「無知は罪だ」と糾弾の声が飛ぶ。&lt;br&gt;&#10;しかし冷静に考えれば、年四千円という額は、飼い犬の餌代にも及ばぬ。払えないというより、払わない理由を探しているに過ぎない。ここで必要なのは「それは飼い主の責任です。払ってください」で終わる話である。&lt;br&gt;&#10;ところが現実には、この単純な線を引けず、誰もが正義を競い合う。医師も一般人も、知らない誰かを叩き、社会全体が発熱している。これはもはや公衆衛生ではなく、心理的感染症である。&lt;/p&gt;&#10;&lt;p&gt;&lt;strong&gt;「正義病」という自己免疫の暴走&lt;/strong&gt;&lt;/p&gt;&#10;&lt;p&gt;正義病――それは、他人の間違いを見つけることで自分を守ろうとする反射である。余裕のない社会では、人は「自分が正しい側」に立っていなければ不安になる。だから、わずかな不正や怠慢を見つけると、すぐさま攻撃に転じる。&lt;br&gt;&#10;SNSはこの免疫反応を無限増幅する装置だ。狂犬病の話題ですら、論点はすぐに「倫理」「資格」「人間性」へ飛び火する。&lt;br&gt;&#10;正義病の本質は、他者の誤りを正すことではなく、&lt;strong&gt;自分の正しさを確認したい衝動&lt;/strong&gt;である。だから、どれほど正論を振りかざしても、議論の温度だけが上がり、社会は疲弊する。&lt;/p&gt;&#10;&lt;p&gt;&lt;strong&gt;「資格がいる」と「資格などない」の両極&lt;/strong&gt;&lt;/p&gt;&#10;&lt;p&gt;今回の件で浮き彫りになったのは、「命を預かるには資格がいる」という極と、「命に資格などない」という極である。どちらも言い切れば確かに筋は通るが、現実にはどちらにも違和感がある。&lt;br&gt;&#10;命を扱う行為に資格を求めすぎれば、人間の自由を削る。逆に資格を完全に否定すれば、無責任が横行する。&lt;br&gt;&#10;人は他の命と関わらずには生きられない。だからこそ、「命と共に在る自由」は誰にもあるべきだが、それは同時に他者の痛みと衝突する自由でもある。社会はその衝突を和らげるための工夫――制度、教育、支援――を積み上げるしかない。完璧な答えはなく、ただ「できる範囲で悲劇を減らす」努力が続くのみである。&lt;/p&gt;&#10;&lt;p&gt;&lt;strong&gt;正しさを奪い合う鏡の部屋&lt;/strong&gt;&lt;/p&gt;&#10;&lt;p&gt;現代社会は「お前は正しくない」と言い合う鏡の部屋になっている。かつて正しさは上から降ってきた。宗教や国家が基準を示した。いまは誰もが自由に意見を述べられるが、自由は同時に闘争を生む。&lt;br&gt;&#10;誰もが批判される恐怖を抱えながら、先に他者を裁く。こうして社会は「正しいことをする場」ではなく「間違いを責め合う場」に変わった。&lt;br&gt;&#10;狂犬病ワクチンをめぐる騒動は、その縮図である。犬を守るためでも、人間を守るためでもなく、&lt;strong&gt;自分が正しい側にいたい&lt;/strong&gt;という不安の解消劇が繰り返されている。&lt;/p&gt;&#10;&lt;p&gt;&lt;strong&gt;余裕のなさがすべてを尖らせる&lt;/strong&gt;&lt;/p&gt;&#10;&lt;p&gt;なぜこんなにも人々が攻撃的になるのか。それは、余裕がないからである。経済的な余白、時間の余白、精神の余白――それらが削られた社会では、他人の誤りを許すことができなくなる。&lt;br&gt;&#10;「まあ仕方ない」「事情があるんだろう」そう言えるのは、心に隙間がある人間だけだ。今の社会には、その隙間がない。だから、四千円の問題が社会の倫理論争に発展する。&lt;br&gt;&#10;犬のワクチンより、人間の心にこそワクチンが必要だ。正しさを主張する前に、一拍置けるだけの余裕。その一拍が社会を保つ抗体になる。&lt;/p&gt;&#10;&lt;p&gt;今回の騒動は、犬やワクチンの話ではない。&lt;br&gt;&#10;「正しいことを言う自分」と「正しくなければならない社会」が噛み合わなくなっている、その歪みの露出である。&lt;br&gt;&#10;飼い主は責任を果たせばいい。制度はそれを支える仕組みを整えればいい。だが、それを超えて誰かが誰かを断罪し始めた瞬間に、社会は冷たく硬くなっていく。&lt;/p&gt;&#10;&lt;p&gt;正義にワクチンがあるなら、それは他人を責める前に一瞬だけ黙る勇気だ。&lt;br&gt;&#10;その沈黙こそ、いま最も欠けている「余裕」のかたちである。&lt;/p&gt;&#10;</description></item><item><title>SNS時代の「正義」が見落とす力関係の機微</title><link>https://ai.hack-le.com/sns%E6%99%82%E4%BB%A3%E3%81%AE%E3%80%8C%E6%AD%A3%E7%BE%A9%E3%80%8D%E3%81%8C%E8%A6%8B%E8%90%BD%E3%81%A8%E3%81%99%E5%8A%9B%E9%96%A2%E4%BF%82%E3%81%AE%E6%A9%9F%E5%BE%AE/</link><pubDate>Thu, 14 Aug 2025 23:39:18 +0900</pubDate><guid>https://ai.hack-le.com/sns%E6%99%82%E4%BB%A3%E3%81%AE%E3%80%8C%E6%AD%A3%E7%BE%A9%E3%80%8D%E3%81%8C%E8%A6%8B%E8%90%BD%E3%81%A8%E3%81%99%E5%8A%9B%E9%96%A2%E4%BF%82%E3%81%AE%E6%A9%9F%E5%BE%AE/</guid><description>&lt;h2 id="象と蟻を同じ檻で戦わせる愚"&gt;象と蟻を同じ檻で戦わせる愚&#10;&lt;/h2&gt;&lt;p&gt;現代のSNSは奇妙な闘技場である。そこでは巨象のような大企業と、蟻のような零細事業者が同じリングに立たされ、観客席からは容赦ない批判の矢が飛んでくる。しかし、多くの批判者は重要なことを見落としている。象には蟻を踏み潰す矢は刺さらないが、蟻には致命傷となることを。&lt;/p&gt;&#10;&lt;p&gt;私たちは日常生活では自然とこの力関係を理解している。総理大臣への批判と近所の商店主への苦情では、当然ながら言葉を選ぶ。前者はどれほど厳しく言おうとも権力の座から転落することはないが、後者は評判ひとつで廃業に追い込まれかねない。この感覚は社会人としての基本的なマナーであり、多くの人が無意識に実践している常識である。&lt;/p&gt;&#10;&lt;p&gt;ところが、SNSという平坦な画面の向こうでは、この常識が霞んでしまう。フォロワー数百人のアカウントが、上場企業も地方の個人商店も同じトーンで批判する光景は、もはや珍しくない。批判者にとっては「同じTwitter上の企業アカウント」でしかないが、現実の影響力は天と地ほど違う。&lt;/p&gt;&#10;&lt;h2 id="弱者の武器が持つ破壊力"&gt;「弱者の武器」が持つ破壊力&#10;&lt;/h2&gt;&lt;p&gt;特に注意すべきは、社会的正義を掲げた批判の威力である。現代社会において「差別批判」は極めて強力な武器となった。大企業を相手にすれば適切な社会的制裁として機能するが、零細企業に向ければ過剰な懲罰となりかねない。&lt;/p&gt;&#10;&lt;p&gt;この構図には深刻な逆説が潜んでいる。正義を掲げる側は「弱者」として社会的同情を集めながら、実際には強大な破壊力を行使できる立場にある。彼らの批判ひとつで企業が炎上し、個人が社会的に抹殺される事例は枚挙にいとまがない。にもかかわらず、依然として「差別と戦う弱者」としての認識が維持され、その批判行為は正当化され続ける。&lt;/p&gt;&#10;&lt;p&gt;ここで思い出すべきは、力を持つ者の責任である。銃を持った人間が、相手を選んで引き金を引くように、強力な「正義」という武器を持つ者もまた、その使用に際して慎重であるべきだ。総理大臣を批判するのと同じテンションで、地方の小さな商店を攻撃することは、道徳的に正当化できない。&lt;/p&gt;&#10;&lt;p&gt;実際のところ、正義を掲げる運動の強さは、まさにこの「容赦のなさ」にある。相手の立場や事情を考慮せず、一切の手加減をしないからこそ、既存の権力構造に風穴を開けることができる。しかし、その同じ武器が、本来保護されるべき弱者に向けられた時、運動の正当性は大きく揺らぐ。零細企業や個人事業主のような、真の意味での社会的弱者を標的とした瞬間、「正義の戦い」は「強者による弱者いじめ」へと変質してしまう。&lt;/p&gt;&#10;&lt;h2 id="作品から学ぶべき教訓"&gt;作品から学ぶべき教訓&#10;&lt;/h2&gt;&lt;p&gt;興味深いことに、多くの批判者が愛好する創作物には、まさにこの問題への答えが隠されている。例えば、長年愛され続ける漫画作品の多くは、力と正義の関係性を丁寧に描いている。主人公たちは強大な力を手にしながらも、相手を見て手加減し、無力な一般人を巻き込まないよう細心の注意を払う。一方で、「自分こそが絶対的正義」だと確信した敵キャラクターたちは、その傲慢さゆえに破滅への道を歩む。&lt;/p&gt;&#10;&lt;p&gt;しかし、作品の受容は受信者次第である。同じ物語を読んでも、ある読者は深い人間洞察を得て、別の読者は表面的な興奮だけを味わう。批評や文学研究が存在する理由も、まさにここにある。作品が持つ多層的な意味を掘り起こし、読者により深い理解をもたらすためだ。&lt;/p&gt;&#10;&lt;p&gt;残念ながら、現実の批判者の多くは、愛する作品から「力の使い方」について学ぶ機会を逸している。彼らは作品のメッセージを受け取りながらも、それを現実の行動に反映させることができない。これは単に個人的な損失にとどまらず、社会全体にとっての機会損失でもある。&lt;/p&gt;&#10;&lt;h2 id="大人の知恵としての使い分け"&gt;大人の知恵としての「使い分け」&#10;&lt;/h2&gt;&lt;p&gt;結局のところ、この問題の解決策は拍子抜けするほど単純である。大企業には遠慮なく、零細企業には言葉を選んで批判する。ただそれだけのことだ。これは特別な理論や複雑な分析を必要としない、社会人としての基本的な常識に過ぎない。&lt;/p&gt;&#10;&lt;p&gt;重要なのは、批判する側が自分の持つ「武器」の威力を正しく認識することである。現代社会において、正義を掲げた批判は実際に人や企業を潰せる破壊力を持っている。その事実を受け入れ、相手の規模や立場に応じて表現を調整する知恵こそが、真に成熟した社会人の条件だろう。&lt;/p&gt;&#10;&lt;p&gt;SNSという平坦な空間が生み出す錯覚に惑わされることなく、現実の力関係を見極める眼力を養うこと。これこそが、デジタル時代を生きる私たちに求められる新しいリテラシーなのである。&lt;/p&gt;&#10;</description></item><item><title>日本と海外の人気YouTuberの年齢層比較</title><link>https://ai.hack-le.com/%E6%97%A5%E6%9C%AC%E3%81%A8%E6%B5%B7%E5%A4%96%E3%81%AE%E4%BA%BA%E6%B0%97youtuber%E3%81%AE%E5%B9%B4%E9%BD%A2%E5%B1%A4%E6%AF%94%E8%BC%83/</link><pubDate>Tue, 06 May 2025 17:14:23 +0900</pubDate><guid>https://ai.hack-le.com/%E6%97%A5%E6%9C%AC%E3%81%A8%E6%B5%B7%E5%A4%96%E3%81%AE%E4%BA%BA%E6%B0%97youtuber%E3%81%AE%E5%B9%B4%E9%BD%A2%E5%B1%A4%E6%AF%94%E8%BC%83/</guid><description>&lt;p&gt;日本と海外（主にアメリカ）のトップYouTuber（登録者数上位100位相当）について、年齢層の分布や平均年齢、世代別の傾向を比較します。ここで「YouTuber」とは&lt;strong&gt;個人またはグループで活動する動画クリエイター&lt;/strong&gt;を指し、企業公式チャンネルなどは除外しています（音楽アーティストの公式チャンネルなども一般的な「YouTuber」からは除外）。各国とも2023～2025年時点での最新動向に基づきます。&lt;/p&gt;&#10;&lt;h2 id="年齢層の分布と平均年齢"&gt;年齢層の分布と平均年齢&#10;&lt;/h2&gt;&lt;p&gt;&lt;strong&gt;日本のトップYouTuber:&lt;/strong&gt; 日本ではトップYouTuberの&lt;strong&gt;約7割が20代&lt;/strong&gt;です。2018年時点の調査ですが、登録者数50万人以上のYouTuber 138人中、20代が101人と最多で、30代が29人、10代と40代が各4人という分布でした。この傾向は近年も大きく変わっておらず、&lt;strong&gt;平均年齢は20代後半前後&lt;/strong&gt;とみられます。実際、日本を代表するYouTuberには20代が多く、例えば &lt;strong&gt;HIKAKIN&lt;/strong&gt; は現在34歳（1989年生まれで30代前半）、&lt;strong&gt;はじめしゃちょー&lt;/strong&gt;は30歳前後です。また近年急成長した &lt;strong&gt;ISSEI&lt;/strong&gt;（いっせい）は1999年生まれで現在25～26歳、&lt;strong&gt;Junya.じゅんや&lt;/strong&gt;は1994年生まれで30歳前後など、20代半ば～30歳前後の若手が中心です。一方で、日本でも&lt;strong&gt;10代以下&lt;/strong&gt;のYouTuberも存在します。例えばキッズ系チャンネルの 「&lt;strong&gt;せんももあいしーチャンネル&lt;/strong&gt;」（兄妹の日常動画）は開設当初出演していた子ども達が現在ティーンエイジャーになっていますし、 &lt;strong&gt;「Kan &amp;amp; Aki&amp;rsquo;s CHANNEL」のかんあき姉妹など小学生～中学生&lt;/strong&gt;の子供が主役のチャンネルもトップ100に入っています。また&lt;strong&gt;40代&lt;/strong&gt;以上の例では、ブームを起こしたピコ太郎（1973年生まれ）はアラフィフ、元SMAPの草彅剛（1974年生まれ）も40代でYouTube進出しています。ただしこの層は少数派で、日本トップ層では&lt;strong&gt;20代中心、次いで30代&lt;/strong&gt;という分布です。&lt;/p&gt;&#10;&lt;p&gt;&lt;strong&gt;海外（主に米国）のトップYouTuber:&lt;/strong&gt; 海外の人気YouTuberも&lt;strong&gt;主力は20～30代&lt;/strong&gt;ですが、日本より幅広い年齢層が混在しています。最大の個人YouTuberである &lt;strong&gt;MrBeast&lt;/strong&gt;（米国）は1998年生まれで現在20代後半、かつて世界一だった &lt;strong&gt;PewDiePie&lt;/strong&gt;（スウェーデン）は1989年生まれで30代半ばと、トップクラスは20代後半～30代が多い印象です。平均年齢も30歳前後と推測され、こちらも&lt;strong&gt;ミレニアル世代（20代後半～30代前半）が中心&lt;/strong&gt;といえます。一方、海外トップ層には&lt;strong&gt;年少のYouTuber&lt;/strong&gt;も目立ちます。例えば世界第2位の登録者を持つ &lt;strong&gt;Like Nastya&lt;/strong&gt;（ロシア出身・米国在住）は2014年生まれで現在わずか9～11歳程度と、「最年少のインフルエンサー」として知られます。彼女のような&lt;strong&gt;子どもYouTuber（いわゆるキッズ系）が海外では上位に食い込んでおり、他にも Vlad and Niki（幼い兄弟が出演するチャンネル）や Kids Diana Show など、児童が主役のチャンネルがトップクラスの登録者数を持っています。一方で40代以上&lt;/strong&gt;のYouTuberも海外には存在します。特に専門知識を活かしたクリエイターにこの傾向が見られ、例えば元NASAエンジニアの &lt;strong&gt;Mark Rober&lt;/strong&gt; は1980年生まれで現在45歳と中年層ですが、自身の科学実験チャンネルが登録者数数千万の人気を博しています。さらに、海外の「トップ100」には有名音楽アーティストの公式チャンネル（例えばシャキーラやテイラー・スウィフト等、30～40代の歌手）も含まれます。ただしこれらは厳密には「YouTuber」というより&lt;strong&gt;既存の芸能人&lt;/strong&gt;であるため、純然たるYouTuberに限れば20～30代が主体です。&lt;/p&gt;&#10;&lt;p&gt;以上をまとめると、&lt;strong&gt;日本・海外ともトップYouTuberの年齢層は20代が中心&lt;/strong&gt;で、次いで30代が多く、10代や40代以上は一部に留まります。日本では特に20代後半～30歳前後に集中し、海外では20代から30代前半に加えて &lt;strong&gt;10代以下の子供スターや40代の専門系YouTuber&lt;/strong&gt;も混在する点が特徴です。&lt;/p&gt;&#10;&lt;h2 id="年代別の傾向比較"&gt;年代別の傾向比較&#10;&lt;/h2&gt;&lt;p&gt;以下に日本と海外トップYouTuberの年齢層分布の概算を表に示します（上記の傾向と事例に基づく推定値）:&lt;/p&gt;&#10;&lt;table&gt;&#10;&#9;&lt;thead&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;年齢層&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;日本のトップYouTuber層 (概算)&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;海外(米国中心)トップYouTuber層 (概算)&lt;/th&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/thead&gt;&#10;&#9;&lt;tbody&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;10代以下&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;5％程度（例: キッズチャンネルの子供）&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;5～10％（例: Like Nastya 等子供YouTuber）&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;20代&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;約65％（大半が20代後半）&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;約50～60％（20代後半中心）&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;30代&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;約25％（30代前半が多い）&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;約30％（20代後半～30代前半が主力）&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;40代以上&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;5％未満（ごく少数）&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;5～10％（一部専門クリエイターや著名人）&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;p&gt;のデータにもあるように、日本では20代が圧倒的多数を占めています。一方海外では、例えば9歳のLike Nastyaや10代のTikTok出身クリエイター、あるいは40代のMark Roberのように、日本より&lt;strong&gt;両端の年齢層&lt;/strong&gt;の存在感がやや増す傾向があります。しかし両国とも&lt;strong&gt;中心世代は20代後半～30代前半&lt;/strong&gt;であり、特に多くの人気YouTuberが&lt;strong&gt;Z世代後半からミレニアル世代&lt;/strong&gt;に属しています。&lt;/p&gt;&#10;&lt;h2 id="類似点と相違点の分析"&gt;類似点と相違点の分析&#10;&lt;/h2&gt;&lt;ul&gt;&#10;&lt;li&gt;&lt;strong&gt;共通点（若年成人層の中心性）:&lt;/strong&gt; 日本・海外ともにトップYouTuberの&lt;strong&gt;平均年齢は20代後半前後&lt;/strong&gt;で、若年成人層が主流です。これはYouTubeが普及し始めた2010年代に10代～20代であった世代が、コンテンツ創作に乗り出して成功したケースが多いためです。視聴者層も10～30代が中心ですが、それに対応するように&lt;strong&gt;発信者側も20代が圧倒的多数&lt;/strong&gt;を占めています。両国のトップクリエイターには学生～20代前半で活動を開始し、そのままキャリアにしている例が非常に多く見られます。&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;日本の傾向:&lt;/strong&gt; 日本のトップYouTuberは&lt;strong&gt;大学生～20代半ばでブレイク&lt;/strong&gt;したケースが多く、 &lt;strong&gt;「ユーチューバー第一世代」と呼ばれるHIKAKIN（現在34歳）やはじめしゃちょー（30歳前後）らも当初20代前半で台頭しました。彼らが今30代になってきている一方、近年はTikTokなどショート動画出身の新世代（20代前半）も躍進しています。例として コムドット（男性5人組）は全員20代半ばで、数年前の結成当初は20歳前後でした。日本では10代のYouTuberは少なめ&lt;/strong&gt;で、トップ100に入るようなケースは主に親が運営するキッズチャンネルくらいです。また芸能人出身のYouTuberも増えていますが、多くは20～30代のタレントです（元SMAPの草彅剛など40代もいますが登録者数上位では少数）。総じて&lt;strong&gt;日本では若者中心で平均年齢はやや低め&lt;/strong&gt;と言えます。&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;海外（米国）の傾向:&lt;/strong&gt; 海外トップYouTuberも&lt;strong&gt;若年層主体&lt;/strong&gt;ですが、日本以上に多様な年代が活動しています。特に顕著なのが&lt;strong&gt;キッズYouTuberの存在感&lt;/strong&gt;で、Like Nastya（現在小学高学年）やVlad and Niki（幼児と児童の兄弟）などは世界的な人気です。彼らは親のサポート下とはいえチャンネルの「主役」であり、グローバルでは&lt;strong&gt;小学生以下でもトップクラスの影響力&lt;/strong&gt;を持ち得ることを示しています。一方で、米国発の長寿チャンネルでは開設当初若者だったクリエイターが&lt;strong&gt;現在30代半ば～40代&lt;/strong&gt;となってなお人気を維持している例もあります。例えば2000年代末から活動するゲーム実況者の先駆者 &lt;strong&gt;Markiplier&lt;/strong&gt;（1989年生まれ）は現在30代半ば、前述のMark Roberは40代半ばですが、いずれもトップレベルの登録者数を持続しています。さらに米国では&lt;strong&gt;チームやファミリーで活動するチャンネル&lt;/strong&gt;も多く、グループ内に年代差がある場合もあります（例：スポーツ系大企画で知られる &lt;strong&gt;Dude Perfect&lt;/strong&gt; はメンバーが30代前半～半ば）。総合すると海外トップYouTuberの年齢分布は日本と大枠では似通っていますが、&lt;strong&gt;児童から中年まで幅広い世代がトップ層に顔を出す点&lt;/strong&gt;で日本より分散していると言えます。&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h2 id="まとめ"&gt;まとめ&#10;&lt;/h2&gt;&lt;p&gt;日本と海外の人気YouTuberの年齢層を比較すると、&lt;strong&gt;共通して20代が中心&lt;/strong&gt;であるものの、&lt;strong&gt;日本ではより年齢層が集中し、海外では上下に広がりがある&lt;/strong&gt;ことがわかります。日本のトップYouTuberは主に20代後半～30代前半の若者・若手社会人世代（平成生まれ世代）が占め、10代や40代はごく一部です。一方、海外（米国を中心とするグローバル）では同じく20～30代が多数派ながら、&lt;strong&gt;9～10歳の子供から40代以上のベテランまで&lt;/strong&gt;が上位に存在し得る点で多様です。両者ともYouTube黎明期から活躍する“古参”の人気者は30代に達しつつあり、また新陳代謝で10～20代の新星が次々現れる構図は共通しています。全体として2020年代半ばのトップYouTuberの平均年齢は、日本・海外とも&lt;strong&gt;おおよそLate 20s（20代後半）からEarly 30s（30代前半）に位置すると考えてよいでしょう。今後もプラットフォームの成熟とともにトップクリエイターの年齢層がさらに多様化する可能性がありますが、現状では「若い大人」がYouTuber界の主役&lt;/strong&gt;である点に日本と海外の差異はほとんどありません。その中で、日本はやや若手集中、海外は年少・年長層の存在感も相対的に高いという違いが見られます。&lt;/p&gt;&#10;&lt;p&gt;&lt;strong&gt;出典:&lt;/strong&gt; 年齢分布データ（日本）、日本人YouTuber事例、海外YouTuber事例など。&lt;/p&gt;&#10;&lt;h2 id="リンク"&gt;リンク&#10;&lt;/h2&gt;&lt;ul&gt;&#10;&lt;li&gt;&lt;a class="link" href="https://yutura.net/news/archives/1448" target="_blank" rel="noopener"&#10; &gt;YouTuberの7割は20代-YouTuberの年齢分布 - YouTubeニュース | ユーチュラ&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;</description></item><item><title>主要SNSの利用者 年齢・性別 比較（日本 vs 世界）</title><link>https://ai.hack-le.com/%E4%B8%BB%E8%A6%81sns%E3%81%AE%E5%88%A9%E7%94%A8%E8%80%85-%E5%B9%B4%E9%BD%A2%E3%83%BB%E6%80%A7%E5%88%A5-%E6%AF%94%E8%BC%83%EF%BC%88%E6%97%A5%E6%9C%AC-vs-%E4%B8%96%E7%95%8C%EF%BC%89/</link><pubDate>Tue, 06 May 2025 17:14:13 +0900</pubDate><guid>https://ai.hack-le.com/%E4%B8%BB%E8%A6%81sns%E3%81%AE%E5%88%A9%E7%94%A8%E8%80%85-%E5%B9%B4%E9%BD%A2%E3%83%BB%E6%80%A7%E5%88%A5-%E6%AF%94%E8%BC%83%EF%BC%88%E6%97%A5%E6%9C%AC-vs-%E4%B8%96%E7%95%8C%EF%BC%89/</guid><description>&lt;h2 id="比較対象の概要"&gt;比較対象の概要&#10;&lt;/h2&gt;&lt;p&gt;本回答では、主要SNSである &lt;strong&gt;X（旧Twitter）&lt;/strong&gt; 、&lt;strong&gt;YouTube&lt;/strong&gt;、&lt;strong&gt;TikTok&lt;/strong&gt;、&lt;strong&gt;Instagram&lt;/strong&gt;、&lt;strong&gt;Facebook&lt;/strong&gt; のユーザー属性（年齢層・性別比）について、日本国内と世界全体での傾向を比較します。特に 「&lt;strong&gt;主要な利用年齢層&lt;/strong&gt;」 と 「&lt;strong&gt;性別比（男性/女性）&lt;/strong&gt;」 に注目し、&lt;strong&gt;最新のデータ（2023〜2025年）&lt;/strong&gt; を優先してまとめます。各SNSごとに日本と世界のデータを示した後、最後に属性の違いと日本と世界での使われ方の違いを分析します。&lt;/p&gt;&#10;&lt;h2 id="x旧twitter"&gt;X（旧Twitter）&#10;&lt;/h2&gt;&lt;ul&gt;&#10;&lt;li&gt;&lt;strong&gt;日本:&lt;/strong&gt; Xの利用者は10代から50代まで幅広く存在します。特に&lt;strong&gt;20代の利用率が非常に高く、約82%&lt;/strong&gt; にのぼります。10代も約65%が利用し、30代も60%超と高い水準です。40代でも約4割、50代でも3割台が利用しており、若者以外にも浸透しています。&lt;strong&gt;男女比はほぼ同程度&lt;/strong&gt;で、男性と女性で大きな差はありません（総務省調査では男性利用率44.3%、女性46.2%との報告もあります）。&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;世界:&lt;/strong&gt; 世界全体では、&lt;strong&gt;18～34歳の若年層がユーザーの約7割&lt;/strong&gt;を占め、特に25～34歳が最大の層です。13～17歳の利用はごく一部（全体の約2%）で、&lt;strong&gt;50歳以上は全体の7%程度&lt;/strong&gt;と日本より高齢層の割合が低くなっています。&lt;strong&gt;男女比は男性が約63.7%、女性が約36.3%&lt;/strong&gt; と男性ユーザーの方が多い傾向にあります。&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h2 id="youtube"&gt;YouTube&#10;&lt;/h2&gt;&lt;ul&gt;&#10;&lt;li&gt;&lt;strong&gt;日本:&lt;/strong&gt; YouTubeは日本国内で&lt;strong&gt;全世代に普及&lt;/strong&gt;しています。&lt;strong&gt;10代～40代では利用率が90%以上&lt;/strong&gt;と極めて高く、特に20代は97.2%とほぼ全員が利用しています。50代でも約8割近く、60代でも約66%が利用しており、主要SNSの中で最も幅広い年齢層に使われています。&lt;strong&gt;男女比はほぼ男女同数&lt;/strong&gt;で、大きな偏りはありません。&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;世界:&lt;/strong&gt; 世界的にもYouTubeは年代を問わず利用されています。&lt;strong&gt;18～34歳が全体の約37%を占めますが、35～54歳も約32%と存在感が大きく、中高年層まで幅広いユーザー層を持ちます。これは他SNSと比べても突出しており、各国で全ての年代層において利用率トップ&lt;/strong&gt;との報告もあります。&lt;strong&gt;男女比は男性約54%：女性46%&lt;/strong&gt; でやや男性が多い程度ですが、概ね男女バランスよく利用されています。&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h2 id="tiktok"&gt;TikTok&#10;&lt;/h2&gt;&lt;ul&gt;&#10;&lt;li&gt;&lt;strong&gt;日本:&lt;/strong&gt; TikTokは&lt;strong&gt;若年層中心のSNS&lt;/strong&gt;です。日本では&lt;strong&gt;10代の利用率が62.4%と突出しており、次いで20代も半数前後が利用しています（総務省データでは全体25.1%の利用率から推計）。30代以上になると利用率は大きく下がり、60代ではわずか13%に留まります。性別比は女性ユーザーがやや多く、男性の約22%に対し女性は28%が利用しているとの調査があります。つまり日本ではTikTokユーザーは若い女性&lt;/strong&gt;に多い傾向です。&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;世界:&lt;/strong&gt; 世界全体でもTikTokは若者に人気ですが、その主力はやや上の年齢層まで広がります。&lt;strong&gt;18～34歳が全ユーザーの6割超&lt;/strong&gt;を占め、特に25～34歳が最大の層です。一方で13～17歳のティーン層のデータは限定的ですが（広告データでは計上が限られるため）、18～24歳も約30%を占め依然大きな割合です。&lt;strong&gt;男女比は男性約55.7%：女性44.3%&lt;/strong&gt; と、世界全体では男性ユーザーの比率が日本より高くなっています。ただし各国によって差があり、TikTokは地域によって女性ユーザーが多数を占める場合もあります。&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h2 id="instagram"&gt;Instagram&#10;&lt;/h2&gt;&lt;ul&gt;&#10;&lt;li&gt;&lt;strong&gt;日本:&lt;/strong&gt; Instagramは&lt;strong&gt;若年層（10～30代）に人気&lt;/strong&gt;のSNSです。日本では&lt;strong&gt;20代の利用率が78.6%と最も高く、10代～30代が主なユーザー層です。40代以上でも利用者はいますが、50代で約51.7%とやや半数程度まで低下します（60代はさらに低いと推測されます）。特徴的なのは女性ユーザーの比率が高い&lt;/strong&gt;ことで、男性の利用率42.3%に対し女性は54.8%と女性が上回っています。一部には「女性ユーザー数が男性の約2倍」との指摘もありますが、少なくとも&lt;strong&gt;女性が男性より多い&lt;/strong&gt;ことは確かです。&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;世界:&lt;/strong&gt; Instagramは世界全体でも&lt;strong&gt;若者中心&lt;/strong&gt;ですが、そのユーザー属性は日本ほど偏っていません。&lt;strong&gt;18～34歳が主要層&lt;/strong&gt;（18～24歳が約31.6%、25～34歳が約33.0%）で、25～34歳が最大の割合を占めます。35歳以上も全体の35%程度おり、幅広い年代に利用されています。&lt;strong&gt;男女比は男性約52.7%：女性47.3%とほぼ均等に近いバランスです（むしろ僅かに男性が多い）。これは日本に比べ世界では男性ユーザーの比率が高い&lt;/strong&gt;ことを示しており、地域別に見ると欧米では女性優位、アジアや中東では男性優位など差異もあります。&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h2 id="facebook"&gt;Facebook&#10;&lt;/h2&gt;&lt;ul&gt;&#10;&lt;li&gt;&lt;strong&gt;日本:&lt;/strong&gt; Facebookは&lt;strong&gt;30～40代の社会人層に支持&lt;/strong&gt;されている傾向があります。日本では&lt;strong&gt;30代の利用率が45.7%で最も高く&lt;/strong&gt;、次いで40代がこれに続きます。一方、&lt;strong&gt;10代ではほとんど使われていない&lt;/strong&gt;のが大きな特徴です。20代も他SNS（XやInstagram）に比べると利用率が低く、Facebook離れが顕著です。&lt;strong&gt;男女比はやや男性が多く&lt;/strong&gt;、男性利用率34%、女性31%との報告があります。全体として日本のFacebookユーザーは&lt;strong&gt;中年層・男性寄り&lt;/strong&gt;と言えます。&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;世界:&lt;/strong&gt; Facebookは&lt;strong&gt;世界最大のSNS&lt;/strong&gt;だけあり、ユーザー層も世界全体では幅広いです。とはいえ中心は&lt;strong&gt;若い成人層（18～34歳で全体の過半数）&lt;/strong&gt; で、特に25～34歳が最大ボリュームゾーンです。18～24歳も約22%を占め、発展途上国を中心に若年層ユーザーも依然多い状況です。35歳以上も約4割存在しますが、高齢になるほど比率は下がっていきます。&lt;strong&gt;男女比は男性約56.7%：女性43.3%&lt;/strong&gt; と男性優位ですが、地域によって差が大きいプラットフォームです（例えば北米や東欧では女性ユーザーが過半というデータもあります）。&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h2 id="sns属性比較表日本-vs-世界"&gt;SNS属性比較表（日本 vs 世界）&#10;&lt;/h2&gt;&lt;p&gt;各SNSにおける主要なユーザー属性を、&lt;strong&gt;日本&lt;/strong&gt;と&lt;strong&gt;世界全体&lt;/strong&gt;で比較してまとめます（年齢層は特に利用者の多い年代、性別比はユーザー全体に占める割合）。数字は主な調査結果より引用しています。&lt;/p&gt;&#10;&lt;table&gt;&#10;&#9;&lt;thead&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;SNS&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;日本：主要な利用年齢層（利用率など）&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;日本：性別比（男性：女性）&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;世界：主要な利用年齢層&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;世界：性別比（男性：女性）&lt;/th&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/thead&gt;&#10;&#9;&lt;tbody&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;X（Twitter）&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;10代～50代に幅広く利用（&lt;strong&gt;特に20代：約82%&lt;/strong&gt; ）40代でも約4割が利用&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;ほぼ同数&lt;/strong&gt;（男性≒女性）&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;18～34歳が約7割（&lt;strong&gt;25～34歳最多&lt;/strong&gt;）&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;63.7%：36.3%&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;YouTube&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;全年代で利用率高（&lt;strong&gt;10～40代は90%超&lt;/strong&gt;、20代~97%）60代でも約66%利用&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;ほぼ同数&lt;/strong&gt;（男性≒女性）&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;幅広い年齢層（18～34歳約37%、35～54歳約32%）&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;54%：46%&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;TikTok&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;若年層中心&lt;/strong&gt;（10代：約62%、20代中心）高年層は低利用（60代：約13%）&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;女性多め&lt;/strong&gt;（男性22%：女性28%）&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;18～34歳が約66%（&lt;strong&gt;25～34歳最多&lt;/strong&gt;）&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;55.7%：44.3%&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;Instagram&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;若年層中心&lt;/strong&gt;（10～30代、20代：約79%）40代以上は利用減少（50代：約52%）&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;女性多め&lt;/strong&gt;（男性42%：女性55%）&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;18～34歳が約64%（&lt;strong&gt;25～34歳最多&lt;/strong&gt;）&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;52.7%：47.3%&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;Facebook&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;中年層中心&lt;/strong&gt;（30～40代、30代：約46%）10代はほぼ未利用&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;男性やや多い&lt;/strong&gt;（男性34%：女性31%）&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;18～34歳が約53%（&lt;strong&gt;25～34歳最多&lt;/strong&gt;）&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;56.7%：43.3%&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;p&gt;※日本国内の年齢別利用率は総務省「情報通信に関する現状報告」（令和5年版）等に基づく調査結果。世界の割合は各プラットフォームの広告ツールが公表する推計ユーザーデータ（2025年1月時点）に基づいています。世界データは18歳以上のユーザーが中心である点に留意してください。&lt;/p&gt;&#10;&lt;h2 id="まとめ分析日本と世界における違い"&gt;まとめ・分析：日本と世界における違い&#10;&lt;/h2&gt;&lt;p&gt;以上の比較から、各SNSごとに&lt;strong&gt;ユーザー属性の特徴と、日本と世界での違い&lt;/strong&gt;が浮き彫りになりました。&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;strong&gt;X（旧Twitter）の特徴:&lt;/strong&gt; 日本ではXは若者から中高年まで&lt;strong&gt;幅広い年代に利用&lt;/strong&gt;されています。匿名で気軽に情報発信・収集ができる特性から、日本では他のSNSにない役割で定着しており、男女問わず多くの人が利用する「オープン型SNS」の代表格です。一方、世界全体では&lt;strong&gt;若年成人（特に20代男性）に利用者が集中&lt;/strong&gt;し、ユーザー数に対して男性比率が高いです。日本におけるXの突出した人気は、&lt;strong&gt;国内での匿名文化や情報収集ニーズ&lt;/strong&gt;と合致したことが一因と考えられ、世界的な平均像とは異なる利用構造になっています。&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;YouTubeの特徴:&lt;/strong&gt; &lt;strong&gt;日本・世界ともに最も裾野が広いSNS&lt;/strong&gt;であり、年代別・性別の偏りが最も少ないプラットフォームです。日本ではLINEと並んで&lt;strong&gt;国民的インフラ&lt;/strong&gt;と言える存在で、世界的にもインターネットの普及と歩調を合わせるように利用者が拡大しています。男女比は日本では完全に均等、世界でもほぼ半々であり、&lt;strong&gt;老若男女問わず利用される動画プラットフォーム&lt;/strong&gt;として共通しています。若干の違いとして、世界全体ではインターネット普及率の関係で男性ユーザーが多めになる傾向がありますが、コンテンツ消費という観点では日本も世界も似た利用実態だと言えます。&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;TikTokの特徴:&lt;/strong&gt; &lt;strong&gt;若年層に特化したSNS&lt;/strong&gt;という点は日本も世界も共通していますが、その広がり方に差異があります。日本では特に10代での利用率が非常に高く、流行発信源として定着しています。20代でも人気なものの、30代以上では認知・利用がまだ限定的で、&lt;strong&gt;若年層の文化&lt;/strong&gt;という色合いが強いです。性別も日本では女性にやや偏ります。一方、世界全体では公式には18歳以上のユーザーが中心に計上されることもあり、&lt;strong&gt;ユーザーの中心は20代前後&lt;/strong&gt;と日本より少し高い年齢層までカバーしています。また男女比も&lt;strong&gt;日本より男性寄り&lt;/strong&gt;に出ています。これは各国のユーザープロファイルやデータ計測方法の違いによる部分もありますが、&lt;strong&gt;日本ではティーンの女子を中心に流行&lt;/strong&gt;し、&lt;strong&gt;世界ではもう少し幅広い若者層に拡大&lt;/strong&gt;している、と言えるでしょう。&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;Instagramの特徴:&lt;/strong&gt; &lt;strong&gt;ビジュアル重視のSNS&lt;/strong&gt;であるInstagramは、日本では&lt;strong&gt;若い女性&lt;/strong&gt;に支持されてきました。日本の利用者属性は女性比率が高く、他SNSと比べても女性ユーザーの存在感が大きいです。これはInstagramがファッション・美容・ライフスタイルなどの分野で情報発信ツールとして女性層に浸透しているためです。一方、世界全体では男女差はそれほど大きくなく、日本ほど「女性のSNS」とは位置付けられていません。また世界では地域によってInstagram利用者の性別比が変化し、例えば中東では男性が大半を占める一方、北米では女性利用者が過半数といった差もあります。年齢層はいずれも若者中心ですが、日本では50代以上の利用率がやや低めなのに対し、世界全体では新興国を中心に若干年齢層が広い場合もあります。総じて、&lt;strong&gt;日本ではInstagramは若い女性のカルチャーに根付いたSNS&lt;/strong&gt;であり、&lt;strong&gt;世界では性別を問わず若者に広く使われるSNS&lt;/strong&gt;といった違いが見られます。&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;Facebookの特徴:&lt;/strong&gt; Facebookは日本と世界で&lt;strong&gt;位置付けが大きく異なるSNS&lt;/strong&gt;です。世界的には今なおユーザー数最大級で、若年層から中高年まで利用される &lt;strong&gt;“デフォルト”のSNS&lt;/strong&gt; 的存在ですが、日本ではビジネス用途や特定コミュニティ向けに限られ、&lt;strong&gt;若者の日常的な選択肢から外れている&lt;/strong&gt;状況です。日本で10代・20代の利用率が低いのは、実名登録や公開範囲の感覚が日本の若者文化に合わなかったこと、代替となるSNS（LINEやX、Instagram等）が普及したことが背景にあります。また、日本ではFacebook利用者はやや男性が多くなっていますが、その差は世界平均と比べれば小さいものです（日本:男性約&lt;strong&gt;52%&lt;/strong&gt; 、世界:男性約&lt;strong&gt;57%&lt;/strong&gt; ）。むしろ日本では&lt;strong&gt;実名制ゆえにビジネスパーソン（男女問わず）に利用されやすい&lt;/strong&gt;側面があり、世界のような男女差は顕著ではありません。総括すると、&lt;strong&gt;Facebookは日本では中高年・ビジネス層に限定的に使われ、世界では老若男女に幅広く使われている&lt;/strong&gt;という大きな違いがあります。&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;以上のように、主要SNS5サービスについて、日本国内と世界全体での年齢層・性別のユーザー属性を比較しました。それぞれのSNSが持つユーザー層の違いは、各プラットフォームの特色や文化的受容の差を反映しています。マーケティングや情報発信の戦略を立てる際には、&lt;strong&gt;日本と世界におけるこうした属性の違い&lt;/strong&gt;を踏まえて、適切なSNSを選択・活用することが重要と言えるでしょう。&lt;/p&gt;&#10;&lt;p&gt;&lt;strong&gt;参考文献・出典:&lt;/strong&gt; 総務省「情報通信に関する現状報告」（令和4・5年）、DataReportal（2025年1月時点データ）、マイナビマーケティングラボ、その他各種調査より。各数値は出典元に基づく推計・調査値です。&lt;/p&gt;&#10;</description></item><item><title>「悪夢の民主党政権」はもう通用しない</title><link>https://ai.hack-le.com/%E3%80%8C%E6%82%AA%E5%A4%A2%E3%81%AE%E6%B0%91%E4%B8%BB%E5%85%9A%E6%94%BF%E6%A8%A9%E3%80%8D%E3%81%AF%E3%82%82%E3%81%86%E9%80%9A%E7%94%A8%E3%81%97%E3%81%AA%E3%81%84/</link><pubDate>Tue, 18 Mar 2025 02:30:01 +0900</pubDate><guid>https://ai.hack-le.com/%E3%80%8C%E6%82%AA%E5%A4%A2%E3%81%AE%E6%B0%91%E4%B8%BB%E5%85%9A%E6%94%BF%E6%A8%A9%E3%80%8D%E3%81%AF%E3%82%82%E3%81%86%E9%80%9A%E7%94%A8%E3%81%97%E3%81%AA%E3%81%84/</guid><description>&lt;p&gt;2025年3月18日、「悪夢の民主党政権」というワードがSNSのトレンド入りしました。しかし、その内訳を見てみると、かつてのように民主党政権を批判する投稿が大半だったわけではありません。むしろ、「まだそんなことを言っているのか」「今の自民党のほうがよほど悪夢だ」「民主党政権を経験した世代ですら今の自民党を支持していない」といった、 &lt;strong&gt;「悪夢の民主党政権」フレーズ自体を揶揄する声が多数を占めていました。&lt;/strong&gt;&lt;/p&gt;&#10;&lt;p&gt;かつては自民党支持者の間で有効な攻撃材料だったこの言葉が、今や逆効果になっているのです。なぜ、「悪夢の民主党政権」は通用しなくなったのでしょうか？&lt;/p&gt;&#10;&lt;hr&gt;&#10;&lt;h2 id="悪夢の民主党政権がトレンド入りした理由"&gt;「悪夢の民主党政権」がトレンド入りした理由&#10;&lt;/h2&gt;&lt;p&gt;「悪夢の民主党政権」というワードがトレンド入りした背景には、以下の流れがあったと考えられます。&lt;/p&gt;&#10;&lt;ol&gt;&#10;&lt;li&gt;&lt;strong&gt;自民党支持者の一部が、民主党系政党（立憲民主党など）を批判する目的で「悪夢の民主党政権」というワードを持ち出した。&lt;/strong&gt;&lt;/li&gt;&#10;&lt;li&gt;それに対して、「まだそんなことを言っているのか？」「今の自民党の方が悪夢だろ」という反発が大量に投稿された。&lt;/li&gt;&#10;&lt;li&gt;結果的に「悪夢の民主党政権」というワード自体がトレンド入りしたが、内容の大半は&lt;strong&gt;自民党批判&lt;/strong&gt;になってしまった。&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&lt;p&gt;つまり、このトレンドは民主党批判の勢いが増して起こったものではなく、 &lt;strong&gt;「今の自民党を擁護する材料がないから10年以上前の民主党を持ち出しているのでは？」という批判が多数派となった結果、逆に自民党の問題点が可視化される形になった&lt;/strong&gt;のです。&lt;/p&gt;&#10;&lt;hr&gt;&#10;&lt;h2 id="悪夢の民主党政権が通用しなくなった4つの理由"&gt;「悪夢の民主党政権」が通用しなくなった4つの理由&#10;&lt;/h2&gt;&lt;p&gt;かつては有効だったこのフレーズが、なぜ2025年の今では通用しなくなってしまったのでしょうか？ その理由を4つの視点から整理します。&lt;/p&gt;&#10;&lt;h3 id="1-時間が経ちすぎた"&gt;1. 時間が経ちすぎた&#10;&lt;/h3&gt;&lt;p&gt;民主党政権が終わったのは2012年のこと。そこから&lt;strong&gt;すでに10年以上&lt;/strong&gt;が経過しています。&lt;br&gt;&#10;10年前の政権の失敗を持ち出しても、それが&lt;strong&gt;今の自民党政権の擁護にはならない&lt;/strong&gt;という認識が広まっています。&lt;/p&gt;&#10;&lt;p&gt;また、民主党政権時代をリアルタイムで経験していない世代も増えており、 &lt;strong&gt;「民主党が悪かった」と言われても、それが現代の政治選択にどこまで影響を与えるのかは疑問&lt;/strong&gt;です。&lt;/p&gt;&#10;&lt;hr&gt;&#10;&lt;h3 id="2-今の自民党のほうが悪夢ではという声が大きくなった"&gt;2. 「今の自民党のほうが悪夢では？」という声が大きくなった&#10;&lt;/h3&gt;&lt;p&gt;かつて民主党政権を批判していた世代の中にも、「今の自民党のほうが悪い」と考える人が増えています。&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;物価高騰、増税路線、経済停滞&lt;/li&gt;&#10;&lt;li&gt;少子化対策の不十分さ&lt;/li&gt;&#10;&lt;li&gt;汚職や政治資金問題&lt;/li&gt;&#10;&lt;li&gt;長期政権による閉塞感&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;こうした問題に対する政府の対応に不満を持つ人が多く、「悪夢の民主党政権」と言われても、 &lt;strong&gt;「今の自民党はそれ以上に酷いのでは？」というカウンターが生まれるようになった&lt;/strong&gt;のです。&lt;/p&gt;&#10;&lt;hr&gt;&#10;&lt;h3 id="3-新しい選択肢が増えた"&gt;3. 新しい選択肢が増えた&#10;&lt;/h3&gt;&lt;p&gt;現在の野党は、立憲民主党だけではありません。&lt;strong&gt;国民民主党や日本維新の会など、民主党政権時代とは異なる勢力も台頭&lt;/strong&gt;しています。&lt;/p&gt;&#10;&lt;p&gt;そのため、「民主党政権の失敗」を持ち出しても、「それは立憲民主党の話であって、他の野党には関係ないのでは？」という指摘が成り立ちます。&lt;br&gt;&#10;野党全体を十把一絡げに「悪夢」と呼ぶこと自体が時代遅れになりつつあるのです。&lt;/p&gt;&#10;&lt;hr&gt;&#10;&lt;h3 id="4-過去の批判だけでは与党の正当化にならない"&gt;4. 過去の批判だけでは与党の正当化にならない&#10;&lt;/h3&gt;&lt;p&gt;政治は &lt;strong&gt;「現在」と「未来」を語るべきもの&lt;/strong&gt;です。&lt;br&gt;&#10;しかし、「悪夢の民主党政権」と言い続けることは、結局のところ「今の自民党政権を正当化できる実績がない」ことの裏返しでもあります。&lt;/p&gt;&#10;&lt;p&gt;本当に自民党が優れた政権運営をしているなら、「悪夢の民主党政権」と過去の話を持ち出す必要はないはずです。&lt;br&gt;&#10;むしろそれを持ち出せば持ち出すほど、「今の自民党は評価できる点がないのか？」という疑問を生む結果になってしまいます。&lt;/p&gt;&#10;&lt;hr&gt;&#10;&lt;h2 id="悪夢の民主党政権は逆効果に時代遅れのフレーズ"&gt;「悪夢の民主党政権」は逆効果に──時代遅れのフレーズ&#10;&lt;/h2&gt;&lt;p&gt;今回のトレンド入りは、「悪夢の民主党政権」というフレーズが&lt;strong&gt;もはや有効ではなくなっている&lt;/strong&gt;ことを証明したと言えます。&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;10年以上前の話を繰り返しても、多くの有権者には響かない。&lt;/li&gt;&#10;&lt;li&gt;「今の自民党の方が悪夢では？」というカウンターが強くなった。&lt;/li&gt;&#10;&lt;li&gt;過去の批判よりも「今どうするか」「これからどうするか」が重要。&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;この状況で「悪夢の民主党政権」と言い続けることは、もはや自民党支持者にとって逆効果でしょう。&lt;br&gt;&#10;これからの政治は、過去を持ち出すのではなく、&lt;strong&gt;現在の課題と未来のビジョンを語ることこそが求められる&lt;/strong&gt;のではないでしょうか。&lt;/p&gt;&#10;</description></item><item><title>自由民主が泣いている：SNSを潰したい自由民主主義、SNSにあやかりたい共産主義</title><link>https://ai.hack-le.com/jiyuuminshutou/</link><pubDate>Fri, 10 Jan 2025 20:10:31 +0900</pubDate><guid>https://ai.hack-le.com/jiyuuminshutou/</guid><description>&lt;p&gt;参考記事：&lt;a class="link" href="https://news.yahoo.co.jp/pickup/6525489" target="_blank" rel="noopener"&#10; &gt;共産党「SNSに強い党」掲げる - Yahoo!ニュース&lt;/a&gt;&lt;/p&gt;&#10;&lt;p&gt;近年、日本の政治状況において「自由民主主義」という言葉が形骸化していると感じる場面が増えています。特に、自民党がSNS規制を推進しようとする動きや、共産党がSNSを活用して支持拡大を図る姿勢は、民主主義の在り方について考えさせられるテーマです。&lt;/p&gt;&#10;&lt;p&gt;この記事では、私たちが議論した内容をもとに、「自由民主主義の本質とは何か」「日本における民主主義の課題」「そして、それを取り戻すために私たち国民がすべきこと」について掘り下げます。&lt;/p&gt;&#10;&lt;hr&gt;&#10;&lt;h3 id="1-自由民主主義を掲げる政党の矛盾"&gt;1. 自由民主主義を掲げる政党の矛盾&#10;&lt;/h3&gt;&lt;p&gt;自民党は「自由民主主義」を掲げながら、SNS規制を進めようとしています。これには表向きの理由として「誹謗中傷やフェイクニュースの対策」がありますが、実際には都合の悪い情報をコントロールしたいという意図が透けて見えます。&lt;/p&gt;&#10;&lt;p&gt;一方で、日本共産党は「SNSを通じて若年層に訴えかける」といった自由民主的な行動を取っています。皮肉なことに、共産党が現時点で自由民主主義的に見える一方で、自民党がむしろ共産主義的な統制の姿勢を示しているのです。&lt;/p&gt;&#10;&lt;p&gt;しかし、もし日本共産党が大きな権力を握れば、自民党と同じように規制に向かう可能性も否定できません。結局のところ、どの政党であっても権力を握れば抑圧的になるリスクがあるのです。&lt;/p&gt;&#10;&lt;hr&gt;&#10;&lt;h3 id="2-民主主義の本質"&gt;2. 民主主義の本質&#10;&lt;/h3&gt;&lt;p&gt;民主主義の本質は、どこかの政党や政府が提供するものではなく、&lt;strong&gt;一人ひとりの国民の自立した自由意思&lt;/strong&gt;によって成り立つものです。この考えを象徴するエピソードとして、戦後日本での民主主義再建期に、多くの市民が自発的に政治集会や議論の場を作り、憲法の理解を深めた動きが挙げられます。また、最近では、SNSを活用して市民が草の根的に政策を提案し、実際に地方議会で採用される例も見られています。これらの事例は、民主主義がまさに一人ひとりの行動から生まれることを示しています。&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;strong&gt;自由&lt;/strong&gt;：意見を発信し、他者の意見を受け入れる努力を通じて実現します。&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;民主&lt;/strong&gt;：選挙や議論を通じて権力をコントロールする仕組みを維持することで成立します。&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;政党が掲げるスローガンや政策だけに依存するのではなく、国民一人ひとりが「民主主義の担い手」であるという意識を持つことが重要です。&lt;/p&gt;&#10;&lt;hr&gt;&#10;&lt;h3 id="3-現代日本の民主主義の課題"&gt;3. 現代日本の民主主義の課題&#10;&lt;/h3&gt;&lt;h4 id="1-権力の集中と依存体質"&gt;(1) 権力の集中と依存体質&#10;&lt;/h4&gt;&lt;p&gt;長期政権のもとで、権力が一箇所に集中する状況が続いています。国民の多くが「政治は誰かに任せておけばいい」という姿勢を取っているため、抑圧的な政策が進んでも気づかない、あるいは受け入れてしまう傾向があります。&lt;/p&gt;&#10;&lt;h4 id="2-多様性の喪失"&gt;(2) 多様性の喪失&#10;&lt;/h4&gt;&lt;p&gt;SNS規制のような動きは、表現の自由や多様な意見の存在を脅かします民主主義の活力は多様な意見の対立や議論によって生まれるものであり、それを制限することは民主主義そのものを損なう行為です。&lt;/p&gt;&#10;&lt;h4 id="3-監視不足"&gt;(3) 監視不足&#10;&lt;/h4&gt;&lt;p&gt;政党や政府が抑圧的になるのを防ぐには、国民が日々の行動で権力を監視することが必要です。しかし、日本では「政治に無関心な層」が増え、監視機能が弱まっているのが現状です。&lt;/p&gt;&#10;&lt;hr&gt;&#10;&lt;h3 id="4-私たちにできること"&gt;4. 私たちにできること&#10;&lt;/h3&gt;&lt;h4 id="-権力を鵜呑みにしない"&gt;☑ 　権力を鵜呑みにしない&#10;&lt;/h4&gt;&lt;p&gt;政党や政府が掲げるスローガンや政策を精査し、批判的に考える姿勢を持ちましょう。「自由民主」を掲げる政党が本当にその価値を体現しているかを見極めることが重要です。&lt;/p&gt;&#10;&lt;h4 id="-多様な声を守る"&gt;☑ 　多様な声を守る&#10;&lt;/h4&gt;&lt;p&gt;SNSなどを通じて、表現の自由や多様な意見が失われないよう、規制の動きに敏感である必要があります。また、異なる意見にも耳を傾ける姿勢を持つことが大切です。&lt;/p&gt;&#10;&lt;h4 id="-政治参加の意識を高める"&gt;☑ 　政治参加の意識を高める&#10;&lt;/h4&gt;&lt;p&gt;選挙はもちろん、日常的に政治や社会問題に関心を持ち、発言や行動を通じて社会に影響を与える努力をしましょう。具体的には、SNSを活用して意見を発信したり、地域の議会や公共のイベントに参加して直接声を届けることが有効です。また、署名活動やオンライン請願を通じて政策に影響を与える方法もあります。さらに、信頼できる情報源をもとに政治に関する知識を深め、友人や家族と議論することで、社会の中で意識を共有することも重要です。&lt;/p&gt;&#10;&lt;h4 id="-権力の分散を支持する"&gt;☑ 　権力の分散を支持する&#10;&lt;/h4&gt;&lt;p&gt;政権交代や多党制を促進するための仕組み（選挙制度改革など）を求め、一党独裁的な状況を打破することが必要です。&lt;/p&gt;&#10;&lt;hr&gt;&#10;&lt;h3 id="結論自由民主は国民が為すもの"&gt;結論：自由民主は国民が為すもの&#10;&lt;/h3&gt;&lt;p&gt;「自由民主主義」は、決して政党が提供するものではありません。一人ひとりの国民が自立し、自由意思を持って行動することで初めて実現します。&lt;/p&gt;&#10;&lt;p&gt;どの政党が政権を握っても、権力の濫用を許さない仕組みを維持し、常に権力を監視する責任が私たちにはあります。&lt;/p&gt;&#10;&lt;p&gt;民主主義は、日々の選択や行動の積み重ねの中で育まれるものです。自由民主を掲げながらもその価値を損なう動きがある今だからこそ、私たち一人ひとりがその本質を問い直し、行動に移す時が来ています。&lt;/p&gt;&#10;</description></item><item><title>YouTubeチャンネルのRSSフィードURLを取得するPythonスクリプト</title><link>https://ai.hack-le.com/youtube-rss-url-python/</link><pubDate>Fri, 27 Dec 2024 13:57:23 +0900</pubDate><guid>https://ai.hack-le.com/youtube-rss-url-python/</guid><description>&lt;p&gt;この記事では、YouTubeチャンネルのメインチャンネルIDを取得し、それを利用してRSSフィードURLを生成するPythonコードを紹介します。スニペットをコア機能と応用例に分けて解説することで、目的に応じて簡単に再利用できる形を目指します。&lt;/p&gt;&#10;&lt;h2 id="必要なライブラリのインストール"&gt;必要なライブラリのインストール&#10;&lt;/h2&gt;&lt;p&gt;このスクリプトを動作させるには、以下のPythonライブラリが必要です。&lt;/p&gt;&#10;&lt;h3 id="インストールコマンド"&gt;インストールコマンド&#10;&lt;/h3&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;pip install requests beautifulsoup4&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ul&gt;&#10;&lt;li&gt;&lt;code&gt;requests&lt;/code&gt;: YouTubeページのHTMLを取得するために使用。&lt;/li&gt;&#10;&lt;li&gt;&lt;code&gt;beautifulsoup4&lt;/code&gt;: HTMLを解析して必要な情報を抽出するために使用。&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h2 id="コア機能-メインチャンネルidの取得"&gt;コア機能: メインチャンネルIDの取得&#10;&lt;/h2&gt;&lt;p&gt;YouTubeチャンネルのURLからメインチャンネルIDとRSSフィードURLを取得する関数 &lt;code&gt;get_main_channel_info()&lt;/code&gt; を紹介します。この関数を使えば、単一のURLに対して簡単にチャンネル情報を取得できます。&lt;/p&gt;&#10;&lt;h3 id="コードスニペット"&gt;コードスニペット&#10;&lt;/h3&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;requests&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="nn"&gt;bs4&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;BeautifulSoup&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;re&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;get_main_channel_info&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;youtube_url&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;try&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;# HTMLを取得&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;response&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;requests&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;youtube_url&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;response&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;raise_for_status&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="c1"&gt;# ステータスコードのチェック&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;html_content&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;response&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;text&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;# BeautifulSoupで解析&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;soup&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;BeautifulSoup&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;html_content&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;html.parser&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;# チャンネル名を取得&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;channel_title_tag&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;soup&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;find&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;meta&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;property&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;og:title&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;channel_title&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;channel_title_tag&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;content&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;channel_title_tag&lt;/span&gt; &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;不明なチャンネル&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;# canonicalタグを探す&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;canonical_link&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;soup&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;find&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;link&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;rel&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;canonical&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;canonical_link&lt;/span&gt; &lt;span class="ow"&gt;and&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;href&amp;#39;&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;canonical_link&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;attrs&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;canonical_url&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;canonical_link&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;href&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;# channel_idを抽出 (URL内に含まれる場合)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;channel_id_match&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;re&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;search&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;r&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;channel/([^/?&amp;amp;]+)&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;canonical_url&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;channel_id_match&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;channel_id&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;channel_id_match&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;group&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;rss_url&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;https://www.youtube.com/feeds/videos.xml?channel_id=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;channel_id&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;youtube_url&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;channel_title&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;channel_id&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;rss_url&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;# 必要な情報が見つからない場合&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;youtube_url&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;channel_title&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;不明なID&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;RSSフィードなし&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;except&lt;/span&gt; &lt;span class="ne"&gt;Exception&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="n"&gt;e&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;エラー: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;e&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;youtube_url&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;不明なチャンネル&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;エラー&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;エラー&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="使い方"&gt;使い方&#10;&lt;/h3&gt;&lt;p&gt;以下のように呼び出すことで、単一のYouTubeチャンネルURLから情報を取得できます。&lt;/p&gt;&#10;&lt;h4 id="サンプルコード"&gt;サンプルコード&#10;&lt;/h4&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;url&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;https://www.youtube.com/@GoogleDevelopers&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;result&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;get_main_channel_info&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;url&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;URL:&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;result&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;チャンネル名:&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;result&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;メインチャンネルID:&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;result&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;RSSフィードURL:&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;result&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;hr&gt;&#10;&lt;h2 id="応用例-コマンドライン入力とcsv保存"&gt;応用例: コマンドライン入力とCSV保存&#10;&lt;/h2&gt;&lt;p&gt;複数のYouTubeチャンネルURLをコマンドライン引数で受け取り、情報をCSV形式で保存するプログラムに拡張します。&lt;/p&gt;&#10;&lt;h3 id="コードスニペット-1"&gt;コードスニペット&#10;&lt;/h3&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;csv&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;sys&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;requests&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="nn"&gt;bs4&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;BeautifulSoup&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;re&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;get_main_channel_info&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;youtube_url&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;try&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;# HTMLを取得&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;response&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;requests&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;youtube_url&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;response&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;raise_for_status&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="c1"&gt;# ステータスコードのチェック&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;html_content&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;response&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;text&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;# BeautifulSoupで解析&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;soup&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;BeautifulSoup&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;html_content&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;html.parser&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;# チャンネル名を取得&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;channel_title_tag&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;soup&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;find&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;meta&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;property&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;og:title&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;channel_title&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;channel_title_tag&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;content&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;channel_title_tag&lt;/span&gt; &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;不明なチャンネル&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;# canonicalタグを探す&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;canonical_link&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;soup&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;find&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;link&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;rel&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;canonical&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;canonical_link&lt;/span&gt; &lt;span class="ow"&gt;and&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;href&amp;#39;&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;canonical_link&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;attrs&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;canonical_url&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;canonical_link&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;href&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;# channel_idを抽出 (URL内に含まれる場合)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;channel_id_match&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;re&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;search&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;r&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;channel/([^/?&amp;amp;]+)&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;canonical_url&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;channel_id_match&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;channel_id&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;channel_id_match&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;group&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;rss_url&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;https://www.youtube.com/feeds/videos.xml?channel_id=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;channel_id&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;youtube_url&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;channel_title&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;channel_id&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;rss_url&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;# 必要な情報が見つからない場合&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;youtube_url&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;channel_title&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;不明なID&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;RSSフィードなし&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;except&lt;/span&gt; &lt;span class="ne"&gt;Exception&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="n"&gt;e&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;エラー: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;e&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;youtube_url&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;不明なチャンネル&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;エラー&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;エラー&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;save_to_csv&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;output_filename&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;youtube_urls&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;with&lt;/span&gt; &lt;span class="nb"&gt;open&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;output_filename&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;mode&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;w&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;encoding&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;utf-8&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;newline&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="n"&gt;csv_file&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;writer&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;csv&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;writer&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;csv_file&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;# ヘッダー&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;writer&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;writerow&lt;/span&gt;&lt;span class="p"&gt;([&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;URL&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;チャンネル名&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;メインチャンネルID&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;RSSフィードURL&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;# 各URLについて情報を取得して書き込み&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;url&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;youtube_urls&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;row&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;get_main_channel_info&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;url&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;writer&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;writerow&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;row&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;main&lt;/span&gt;&lt;span class="p"&gt;():&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;# コマンドライン引数の処理&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="nb"&gt;len&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;sys&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;argv&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;使い方: python script.py 出力ファイル名.csv URL1 [URL2 URL3 ...]&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;sys&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;exit&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;# 出力ファイル名とURLリストを取得&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;output_filename&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;sys&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;argv&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;youtube_urls&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;sys&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;argv&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;:]&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;# 情報をCSVに保存&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;save_to_csv&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;output_filename&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;youtube_urls&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;チャンネル情報が &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;output_filename&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt; に保存されました。&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="vm"&gt;__name__&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;__main__&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;main&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="使い方-1"&gt;使い方&#10;&lt;/h3&gt;&lt;ol&gt;&#10;&lt;li&gt;このコードを &lt;code&gt;youtube_channel_info.py&lt;/code&gt; として保存します。&lt;/li&gt;&#10;&lt;li&gt;コマンドラインから以下のように実行します：&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;python youtube_channel_info.py 出力ファイル名.csv URL1 URL2 URL3 ...&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h4 id="例"&gt;例&#10;&lt;/h4&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;python youtube_channel_info.py channel_info.csv https://www.youtube.com/@GoogleDevelopers&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h4 id="実行結果"&gt;実行結果&#10;&lt;/h4&gt;&lt;p&gt;指定したCSVファイルに以下のようなデータが保存されます：&lt;/p&gt;&#10;&lt;table&gt;&#10;&#9;&lt;thead&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;URL&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;チャンネル名&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;メインチャンネルID&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;RSSフィードURL&lt;/th&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/thead&gt;&#10;&#9;&lt;tbody&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;a class="link" href="https://www.youtube.com/@GoogleDevelopers" target="_blank" rel="noopener"&#10; &gt;https://www.youtube.com/@GoogleDevelopers&lt;/a&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Google Developers&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;UC_x5XG1OV2P6uZZ5FSM9Ttw&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;a class="link" href="https://www.youtube.com/feeds/videos.xml?channel_id=UC_x5XG1OV2P6uZZ5FSM9Ttw" target="_blank" rel="noopener"&#10; &gt;https://www.youtube.com/feeds/videos.xml?channel_id=UC_x5XG1OV2P6uZZ5FSM9Ttw&lt;/a&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;hr&gt;&#10;&lt;h2 id="応用例-rssフィードを読み込んで内容を出力する"&gt;応用例: RSSフィードを読み込んで内容を出力する&#10;&lt;/h2&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;requests&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="nn"&gt;bs4&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;BeautifulSoup&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;re&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;feedparser&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;sys&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;get_main_channel_info&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;youtube_url&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;&amp;#34;&amp;#34;YouTubeのURLからメインチャンネルIDを取得&amp;#34;&amp;#34;&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;try&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;# HTMLを取得&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;response&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;requests&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;youtube_url&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;response&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;raise_for_status&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="c1"&gt;# ステータスコードのチェック&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;html_content&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;response&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;text&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;# BeautifulSoupで解析&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;soup&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;BeautifulSoup&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;html_content&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;html.parser&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;# チャンネル名を取得&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;channel_title_tag&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;soup&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;find&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;meta&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;property&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;og:title&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;channel_title&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;channel_title_tag&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;content&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;channel_title_tag&lt;/span&gt; &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;不明なチャンネル&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;# canonicalタグを探す&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;canonical_link&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;soup&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;find&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;link&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;rel&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;canonical&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;canonical_link&lt;/span&gt; &lt;span class="ow"&gt;and&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;href&amp;#39;&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;canonical_link&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;attrs&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;canonical_url&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;canonical_link&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;href&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;# channel_idを抽出&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;channel_id_match&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;re&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;search&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;r&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;channel/([^/?&amp;amp;]+)&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;canonical_url&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;channel_id_match&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;channel_id&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;channel_id_match&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;group&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;rss_url&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;https://www.youtube.com/feeds/videos.xml?channel_id=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;channel_id&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;channel_title&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;channel_id&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;rss_url&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;# 情報が見つからない場合&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;不明なチャンネル&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;不明なID&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;RSSフィードなし&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;except&lt;/span&gt; &lt;span class="ne"&gt;Exception&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="n"&gt;e&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;エラー: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;e&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;不明なチャンネル&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;エラー&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;エラー&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;fetch_and_display_rss_feed&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;rss_url&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;&amp;#34;&amp;#34;RSSフィードを取得して表示&amp;#34;&amp;#34;&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;try&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;feed&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;feedparser&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;parse&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;rss_url&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;title&amp;#39;&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;feed&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;feed&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s2"&gt;チャンネル名: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;feed&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;feed&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;title&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;else&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s2"&gt;RSSフィード情報を取得できませんでした。&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;entry&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;feed&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;entries&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;タイトル: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;entry&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;title&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;リンク: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;entry&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;link&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;公開日時: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;entry&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;published&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;-&amp;#34;&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="mi"&gt;40&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;except&lt;/span&gt; &lt;span class="ne"&gt;Exception&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="n"&gt;e&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;エラー: RSSフィードの取得中に問題が発生しました。エラー: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;e&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="vm"&gt;__name__&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;__main__&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;# コマンドライン引数の処理&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="nb"&gt;len&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;sys&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;argv&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;使い方: python script.py &amp;lt;YouTubeチャンネルのURL&amp;gt;&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;sys&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;exit&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;youtube_url&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;sys&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;argv&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;channel_title&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;channel_id&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;rss_url&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;get_main_channel_info&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;youtube_url&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;チャンネル名: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;channel_title&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;チャンネルID: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;channel_id&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;RSSフィードURL: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;rss_url&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;rss_url&lt;/span&gt; &lt;span class="o"&gt;!=&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;RSSフィードなし&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;fetch_and_display_rss_feed&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;rss_url&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;使い方&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;python youtube_rss_fetcher.py https://www.youtube.com/@GoogleDevelopers&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="解説"&gt;解説&#10;&lt;/h2&gt;&lt;h3 id="コア機能-get_main_channel_info-の仕組み"&gt;コア機能: get_main_channel_info() の仕組み&#10;&lt;/h3&gt;&lt;ul&gt;&#10;&lt;li&gt;&lt;strong&gt;HTMLの取得&lt;/strong&gt;: &lt;code&gt;requests&lt;/code&gt;ライブラリでYouTubeページのHTMLを取得。&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;BeautifulSoupによる解析&lt;/strong&gt;: &lt;code&gt;&amp;lt;meta&amp;gt;&lt;/code&gt;タグからチャンネル名、&lt;code&gt;&amp;lt;link rel=&amp;quot;canonical&amp;quot;&amp;gt;&lt;/code&gt;タグから正しいチャンネルIDを抽出。&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;正規表現&lt;/strong&gt;: &lt;code&gt;re.search&lt;/code&gt; を使い、URL内の &lt;code&gt;channel/&lt;/code&gt; に続くチャンネルIDを取得。&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h3 id="応用例のポイント"&gt;応用例のポイント&#10;&lt;/h3&gt;&lt;ul&gt;&#10;&lt;li&gt;コマンドライン引数を使用することで、複数のURLに対応。&lt;/li&gt;&#10;&lt;li&gt;CSV形式で保存することで、他のシステムやツールでの再利用性を向上。&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;hr&gt;&#10;&lt;h2 id="まとめ"&gt;まとめ&#10;&lt;/h2&gt;&lt;ul&gt;&#10;&lt;li&gt;単一のYouTubeチャンネルの情報を取得する場合は、&lt;code&gt;get_main_channel_info()&lt;/code&gt; を直接呼び出して利用。&lt;/li&gt;&#10;&lt;li&gt;複数のURLを処理し、結果をCSV形式で保存する場合は、コマンドライン引数を利用した応用版コードを活用。&lt;/li&gt;&#10;&lt;/ul&gt;&#10;</description></item></channel></rss>