水曜日のクラブ(2025年9月)~テストコードと共通テスト対策~

水曜日のクラブ活動は、年齢層がちょっと高め。それに伴い、取り組む内容もちょっと高度です。

メニュー

  • 18時00分~18時30分 タイピング練習・アルゴロジック
  • 18時30分~21時00分 プログラミングなどなど各自の進み具合で

タイピング練習とアルゴロジック

タイピング練習とアルゴロジックはいつものとおりです。

無料タイピング https://manabi.benesse.ne.jp/gakushu/typing

寿司打 https://sushida.net/

水曜クラブのメンバーは、大体タッチタイピングができるようになりました。スピードも十分あるので、自分たちで補う程度です。

生成AIを使ってテストコードを書かせる

生成AIにかんたんなプログラムコードを書かせて、そのプログラムの品質を担保するテストコードを生成AIに書かせる演習をしました。

これ、反応がバラバラでした。

私なんかは、たいへん助かると喜んだものですが、中にはピンときていないメンバーもいました。ちょっと早かったかもしれません。

また、追々やります。

スクレイピングのコードを写経して、次にAIに書かせてみる

スクレイピングというテクニックがあります。WEBサイトから、必要な情報を集めるテクニックです。Pythonを使うと比較的簡単にスクレイピングが出来ます。わたしがPythonを覚えたのは、スクレイピングをしたいがために覚えたのが懐かしく思い出されます。

import requests
from bs4 import BeautifulSoup

# YahooトップページのHTMLを取得
url = "https://www.yahoo.co.jp"
res = requests.get(url)
res.encoding = res.apparent_encoding  # 文字化け防止

# BeautifulSoupで解析
soup = BeautifulSoup(res.text, "html.parser")

# h1タグのテキストをすべて抜き出す
h1_texts = [h1.get_text(strip=True) for h1 in soup.find_all("h1")]

# 抜き出したテキストをファイルに保存
with open("yahoo.txt", "w", encoding="utf-8") as f:
    for text in h1_texts:
        f.write(text + "\n")

さて、スクレイピングのコード自体は20行に満たないくらいです。これを読んで理解してから、今度は生成AIに同じコードを書かせてみます。サンプルのプロンプトを用意しておき、これを入力すると、生成AIがスクレイピングコードを書いてくれます。

あなたは優秀なPythonエンジニアです。以下の条件で、スクレイピングするコードを書いてください。

###条件

・Pythonファイルは、contents.pyとします。

・yahooトップページ(https://www.yahoo.co.jp)にアクセスします。

・yahooトップページの<h1>のテキストを抜き出します。

・抜き出したテキストは、contents_yahoo.txtとして同じフォルダに保存します。

・できるだけシンプルなコードにしてください。

・必要な情報は別途提供します。

このとき、プロンプトがそのままプログラムの仕様になっていることを確認しました。また、AIによってコードの書き方が変わることも確認しました。

AIを使わず、地力も鍛えます

生成AIは便利なのだけれど、頼り切るとコードを書く力・読む力を育むチャンスを逃します。車移動が多いと、筋力が育たないのと同じです。

ちょうど写経でバグがでたので、一緒に解決します。

写経ですから、根気よくコードを見比べていったら必ず解決します。といったものの、わたしも見落として見つけられなかったので、テクニックを使います。

どこまで動いているかを確認して、バグがある範囲を絞り込んでいくのです。いわゆるprintデバッグも使います。このような、「問題の部分を切り分けて考えるテクニック」を覚えると素早く問題解決できます。

実は、プログラム以外でもよくやるテクニックです。わたしも仕事で何度も取り組む上で、自然と鍛えられてきたのでしょう。これは、シェアしましょう。

情報科目の大学入試共通テスト対策をしよう

メンバーから、「大学入試共通テスト対策をしたい」と希望がありました。ならば、対策しましょう。

クラブとしては、2025年1月の共通テスト対策に取り組んだ実績がありますので、その知見をもとに対策をしていきます。

共通テストの問題構成は大問4問です。それぞれ問われる内容は、おおよそ以下のとおりです。

大問1知識を問う問題
大問2知識を問う問題
大問3プログラム言語の問題
大問4情報分析の問題

知識を問う問題は、覚えれば解けます。これは、わたしがとやかく言うまでもなく、覚えてください。

ただし、情報科目の場合、現実にリンクさせると覚えやすいところがあるので、そこはわたし達がフォローします。

プログラム言語の問題と情報分析は、理解が必要な問題です。こちらは、十分に理解しているわたし達に、考え方や解き方を聞くのが受験対策としては速いのです。

ということで、まずはプログラムから。

プログラムの問題のパターンは、おおよそ次のとおりです。

  • 現実の課題を解決するプログラムを書く
  • そのプログラムだと、十分でない仕様があるので追加修正を検討する
  • 仕様修正したプログラムを書く

その中で、問われやすいのは「条件」「配列(リスト)」「比較演算子」「インクリメント・デクリメント」「変数の意味」です。

基本に忠実というか、あまり複雑な問題はでません。これは共通テストの考え方でしょう。

本番では、擬似言語が出るので、次からは疑似言語で勉強していきましょう。なお、現役の高校の先生にもアドバイスをいただいています。ありがとうございます。

ROMとRAM

話の中で、ROMとRAMの違いがよくわからない、というか資料によって解説が違うので教えてほしい、といわれました。

CDとかDVDだと、以下の通りに解説してあります。わたしの理解もほぼこれでした。

  • ROM→Read Only Memory(媒体にデータが既に記録してあって、読み込むだけのメモリのこと)
  • RAM→Random Access Memory(テープなどの記録媒体と比較して、半導体メモリなどのように媒体上のデータにどこからでもアクセスできるメモリのこと)

こうやって整理すると、相対する概念ではないことがわかります。

で、スマホでは、ストレージのことをROMといいます。これ、何度も書き換え可能だし、ROMとは言えないですよね。不思議に思っていたのですが、特に調べもせずほったらかしにしていました。ちょうどいい機会なので知識をアップデートします。

スマホのストレージやUSBメモリも、実はランダムにアクセスできるメモリです。しかし、RAMとは言いません。古くからある半導体ROMで、紫外線や電圧印加でデータを書き換え可能なROMの後継です。不揮発性のメモリをROMというようです。不揮発性とは、電源を切ってもデータを保持するということです。

一方RAMは、本来の意味から外れて、もっぱら揮発性のメモリという意味で使われています。つまり、電源を切ったらデータが残らないメモリです。

これは、おそらく歴史的な経緯に基づきます。1970年以前のコンピューターのストレージは、不揮発性の磁気テープなどのSAM(順次アクセスメモリ)で、主記憶は揮発性の半導体のRAMだったのを引きずっているのでしょう。ストレージはSAMから半導体ROMに変わったけれど、主記憶はRAMのままという。まあ、なんとややこしい。勉強になりました。

電子工作でアイデア爆発!

さて、最後はラズpicoの写真。かんたんにいうと、自作Wiiコントローラーです。

パソコン側でラズpico側の傾き検知を利用したアプリを制作中です。完成が楽しみ。