2025年6月29日日曜日

Google Colab でスクレイピングしてGoogle NotebookLMに読み込む

 流行りの Vibe Coding(ヴァイブ・コーディング) というのを試してみたい、ということで、日曜日の2時間ほどを費やし、Gemini と ChatGPT を使って挑戦してみました。

 自分は特段プログラミング能力があるわけではなく、7年ぐらい前に Python の入門書を2~3冊勉強した程度です。

 その程度の知識で何を作るか迷いましたが、「初めての Vibe Coding なのでまずは完成第一」、「自分で使いそうなもの」、という条件で考えた結果、今回は、内田樹さんのブログをGoogle Colab を使ってスクレイピングし、これまた流行りの NotebookLM に読み込めるようGoogleドキュメントに保存することにしました。

 繰り返しになりますが Python については入門書レベルの基本的な文法知識程度で、スクレイピングのスクリプトを自分で書いたことはありません。それでもこれぐらいのものならなんとかなるだろうと思ってはいましたが、結局、自分では1文字もスクリプトは書かずに済みました。

当初の目標

 今回目指したのは、

  1. 対象のサイトのブログ記事をスクレイピング
  2. 1年分の記事を1つのGoogleドキュメントにまとめて保存
  3. 作成したGoogleドキュメントをNotebookLM で読み込む

ということでして、主たる目標は、1と2を Google Colab で自動化するためのPythonスクリプトを生成AI を利用した Vibe Coding で作成することにあります。3は手動。

作業経過

 最終的にGoogleドキュメントにまとめて保存するのなら 同じ Google製の Gemini の方が向いているかと思い、当初は Gemini で作成しはじめましたが、なかなかうまくいかず。そのうち Gemini が「JavaScript を使った動的サイトなので Selenium を使う」みたいなことを言い出したので(あらかじめ確認していたソースは明らかに単なるHTML)、 ChatGPT の o3-mini-high に切り替えて完成させました。

 ただ、うまくいかなかったのは Gemini が悪いわけではなく、おそらくは私の指示の出し方が適切でなかったのだと思います。

 ChatGPT での作業は、当初の Gemini での経験を活かして、途中経過を print で出力して作業状況をわかるようにしてどこの処理がおかしいのかわかるようにした上で(Gemini では何も指示をしなくても自主的にそのようにしてくれた)、出てきた文法エラー表示を示して直してもらったり、GoogleドキュメントのAPI呼び出しが制限内に収まるようにウェイトを入れてもらったり、文字化けを直してもらったり、指定年だけスクレイピングできるように追加の仕様を指示したり、などなど延べ10回ぐらいのやり取りで無事完成。

反省点

 一番の反省は、実際にコードの作成を AI へ指示する前に、どのような指示をすればいいか AI 相手に相談すべきだったのではないか、ということです。指示に必要な要素を押さえた上で、最初から詳細に指示した方が、結局は時間がかからないのではないかと思います。 こういうのも経験ですな。

補足

Vibe Coding(ヴァイブ・コーディング) とは

 ChatGPT先生曰く、Vibe Codingとは、AI(特に大規模言語モデル、LLM)に自然言語で指示を出し、コーディング作業の主導権をAIに委ねる新しいプログラミングの手法です。2025年2月にOpenAIの共同創業者であるアンドレイ・カルパシー(Andrej Karpathy)氏によって提唱されたものだそうです。 従来のプログラミングが、開発者自身が一行一行コードを記述し、論理を組み立てていくスタイルであるのに対し、Vibe Codingは「こんな感じのものを作って」といった雰囲気や感覚(Vibe)、その場のノリを重視した対話を通じて開発を進めるのが特徴です。

NotebookLMとは
  • 要約・要点抽出: アップロードした資料を自動分析し、主要ポイントや質問候補、構造化されたブリーフを生成
  • 質問応答: 資料に基づいた質疑応答。出典部分も引用され、信頼性が高い。
  • アイデア生成・整理: 資料から新たな視点や関連性を提案し、FAQ、タイムライン、マインドマップ、ブレインストーミング支援などを展開
  • オーディオ概要(ポッドキャスト形式): AIホストふたりによる音声対話形式で資料を読み上げる「オーディオ概要」の生成
なぜ内田樹さんのブログを選んだのか

今回、内田樹さんのブログを対象としたのは、

  1. ブログ記事の内容が面白く大変示唆に富むものであること。
  2. 御本人が『私は自分のネット上のテクストについては著作権を主張していない。今書いているこの文章も含めて、ネット上に掲載されたものは誰でも使用できる「公共財」であるというのが私の考えである。』と述べられており、著作権的な心配がなかったこと。

というのが主な理由になります。

ちなみに、今回完成した NotebookLM で著作権と公共の福祉についての著者の考え方を問うと、次のような回答がありました。


著者の著作権と公共の福祉に関する考え方は、個人の表現の自由と知的活動が、最終的には社会全体の多様性、知識の共有、そして共同的な知の生成に貢献すべきであるという視点に深く根ざしています。著作権は個人の権利として保護されるべきではあるものの、その権利の行使が公共の利益を阻害するものであってはならないという思想が随所に示唆されています。

具体的には、以下の点が著者の考え方として挙げられます。

  1. 表現の自由と多様性の包容: 著者は「表現の自由」を単なる個人の権利行使に留まらず、「さらなる表現の豊かさ、多様性、開放性を目指す遂行的な働き」であると捉えています。文化は「クズ」の集積そのものであり、「『貧しい』のは漫画だけではない。文化は『クズ』の集積そのものなのである」と述べ、もし「表現の自由」というものがあるとするなら、それは「クズである自由」なのだと断言しています。そして、「文化の成熟にとって大切なのは『包容力』である。あらゆる愚行、あらゆる『クズ』をにこやかに受け入れることのできる文化の中からしか、本当に『豊かで、優れた』表現は生まれない」と強調しています。これは、著作権によって保護される表現の範囲が、一般に「優れている」とみなされる作品に限定されるべきではなく、多様な、時には未熟な、あるいは「クズ」と見なされがちな表現も等しく保護され、受け入れられることで、全体の文化が豊かになるという考えを示唆しています。一方で、他者を傷つけたり排除したりするヘイトスピーチのような表現は、「さらなる表現の自由」を志向していないため、「表現の自由」の名の下で語られるべきではないと明確に批判しています。これは、表現の自由の行使が、その本質的な目的(多様性と公共の場の創出)から逸脱した場合、その正当性が失われるという倫理的視点を示しています。
  2. 知と文化資本の公共性・共有性: 著者は、学術情報は「後続世代への贈り物」であり、「世界と人間の成り立ちについての有用な情報は全面的かつ無条件に開示されなければならない」という「知についての基本原則」があると考えています。これは、知が特定の個人や組織に囲い込まれるべきものではなく、社会全体で共有されるべき公共財であるという強い信念に基づいています。また、「文化資本」(例えば、本を読んだり、音楽を演奏したり、武道を練習したりすることによって得られる知性的・感性的な成熟)は、権力や財貨とは異なり、「与えても目減りすることがない」無尽蔵の富であると述べており、すべての市民にアクセス機会が開放されるべき「公共財」であると主張しています。この考え方は、著作権による過度な囲い込みや独占が、知識や文化の普及、ひいては社会全体の成熟を阻害する可能性があるという批判を含意していると解釈できます。図書館の役割についても、単に知識を誇示する場所ではなく、無限の知に触れることで個人の無知を自覚させ、学ぶことの喜びを教えてくれる場所として高く評価しています。書物を「異界への窓」と表現し、それが読者を「母語の檻」から解放し、知的な探求を促す力を持つとも述べています。これらすべてが、知と文化が公共的・共有的な性質を持つべきだという著者の根本的な立場を裏付けています。
  3. 表現の根源と共同的な知の生成: 著者は、哲学者たちが「話し始める」動機として、「サービス精神」「ノブレス・オブリージュ」「愛の過剰」といった他者への奉仕や配慮を挙げており、表現活動の根底に公共性や共同性があると考えています。真のコミュニケーションは、まず相手の「ノイズ」に敬意を持って耳を傾け、それを「メッセージ」として読み解く「聴くこと」から始まるとし、多様な意見が交わされ、議論されることで集団の知が豊かになることを強調しています。個人が「自分以外の誰も考えつかないことを考え、誰も言わないようなことを言い、自分以外に誰もできない技能を身に着け、自分以外に誰も知らない知識を習得」することこそが、集団を強くし、言葉を豊かにすると述べています。著作権が個人の創造活動を保護する目的は、単にその個人の利益のためだけでなく、最終的には、このような多様な表現や知見が生まれ、それが公共の場で共有され、議論されることで、共同体全体の知的なパフォーマンスが向上することにある、という含意が読み取れます。

0 件のコメント: