芥川龍之介が「蜘蛛の糸」を発表して百年。高二の秋の文化祭,クラスの仮装行列のテーマが 蜘蛛の糸だった。お釈迦様の極楽タワーの竹を近所から切り出し,地獄の焔と煙の絵を描いた。犍陀多に続いて蜘蛛の糸(登山部の赤いザイル)に群がる地獄の亡者だったころ。
2026年10月22日木曜日
PHPの脆弱性
2026年10月16日金曜日
イコールアース図法
2026年6月4日木曜日
MediaWiki(4)
MedieWiki(3)からの続き
Q(koshix):日本語Wikipediaの物理学者記事にあるテンプレートやモジュールのうちで主要なものを,自分のMediaWikiサイト,Fisica Wiki に移植するプロジェクトの件です。codexにお願いして,koshi@mba2020 ~ % ls -al jawiki-template-testtotal 208drwxr-xr-x 17 koshi staff 544 5月 1 13:40 .drwxr-x---+ 131 koshi staff 4192 5月 5 16:40 ..-rw-r--r-- 1 koshi staff 464 5月 1 11:17 articles.txt-rw-r--r-- 1 koshi staff 749 5月 1 13:41 core_export_pages.txt-rw-r--r-- 1 koshi staff 659 5月 1 13:02 export_pages.txt-rw-r--r-- 1 koshi staff 7912 5月 1 12:58 extract_template_dependencies.py-rw-r--r-- 1 koshi staff 8317 5月 1 11:29 extract_templates.py-rw-r--r-- 1 koshi staff 1614 5月 1 13:01 make_export_pages.py-rw-r--r-- 1 koshi staff 1956 5月 1 12:53 make_module_list.py-rw-r--r-- 1 koshi staff 3488 5月 1 13:33 make_template_export_pages.py-rw-r--r-- 1 koshi staff 307 5月 1 12:59 modules_needed.txt-rw-r--r-- 1 koshi staff 2866 5月 1 13:08 README.md-rw-r--r-- 1 koshi staff 17 4月 30 22:37 requirements.txt-rw-r--r-- 1 koshi staff 1345 5月 1 12:19 template_dependencies.csv-rw-r--r-- 1 koshi staff 2284 5月 1 13:35 template_pages.txt-rw-r--r-- 1 koshi staff 18146 5月 1 11:54 template_usage.csvこんな状況になっています。自分がなにをしたか,してもらったかが,よくわからなくなっているので,状況を整理して,現在の進行状況がどうなっているか,これからどうすればいいか,を教えてください。必要があれば,それぞれのファイルや現在のFisica Wikiの内容を確認してお知らせすることが出来ます。どうぞよろしくお願いいたします。A(ChatGPT):状況はかなり整理できます。結論から言うと、いまの jawiki-template-test は、日本語Wikipediaの物理学者記事を材料にして、Fisica Wikiへ移植すべきテンプレート・モジュールの候補リストを作るための作業ディレクトリになっています。ただし、ここにあるファイルだけを見るかぎり、これはまだ「移植そのもの」ではなく、主に次の段階まで進んだ状態です。・第1段階:物理学者記事を調べる・第2段階:それらの記事で使われているテンプレートを抽出する・第3段階:そのテンプレート群に必要な関連テンプレート・モジュールを推定する・第4段階:日本語Wikipediaの特別:データ書き出しに渡すページ一覧を作るここまでは、かなり進んでいます。一方で、Fisica Wiki側に何が実際に取り込まれていて、何がまだ赤リンク・Luaエラー・TemplateStylesエラーになっているかは、この一覧だけではまだ確定できません。ファイルごとの意味は、おそらく次のようになります。articles.txt は、調査対象にした物理学者の記事名リストです。たとえば「ハンス・ベーテ」「ニールス・ボーア」「湯川秀樹」のような記事名が入っているはずです。ここが出発点です。extract_templates.py は、articles.txt にある記事を日本語Wikipediaから取得して、それぞれの記事中に現れるテンプレートを抽出するスクリプトだと思われます。その結果が template_usage.csv です。template_usage.csv は、どの記事でどのテンプレートが使われているかを記録した表です。Fisica Wikiに物理学者記事を移すとき、どのテンプレートが頻出するかを見るための中心的な資料です。extract_template_dependencies.py は、テンプレートがさらに別のテンプレートやモジュールを呼んでいないかを調べるスクリプトです。Wikipediaテンプレートは単体では動かず、内部で {{Ifempty}} や {{Citation}} や #invoke:Citation/CS1 などを呼ぶため、この依存関係の抽出が重要です。template_dependencies.csv は、その依存関係の表です。たとえば「テンプレート:Cite web は モジュール:Citation/CS1 を必要とする」といった情報が入っているはずです。make_module_list.py は、依存関係の中から モジュール: 名前空間のものだけを抜き出すためのスクリプトでしょう。modules_needed.txt は、必要と推定されたLuaモジュール一覧です。サイズが307バイトなので、かなり小さいリストです。過去の経緯から考えると、モジュール:Citation/CS1 系、モジュール:Arguments、モジュール:If empty、モジュール:String、モジュール:TableTools、モジュール:Yesno あたりが入っている可能性があります。make_template_export_pages.py は、必要なテンプレートを日本語Wikipediaの「特別:データ書き出し」に渡しやすいページ名リストへ整形するスクリプトだと思われます。template_pages.txt は、移植候補のテンプレートページ一覧です。サイズが2284バイトなので、ある程度の数があります。make_export_pages.py は、テンプレートとモジュールなどを合わせて、最終的なエクスポート対象ページ一覧を作るスクリプトでしょう。export_pages.txt は、最初に作ったエクスポート用ページリストだと思われます。core_export_pages.txt は、より絞り込んだ「主要部分だけ」のエクスポート用ページリストだと思われます。名前から見ると、全候補ではなく、Fisica Wikiでまず動かすべき中核テンプレート・モジュールをまとめたものです。README.md は、Codexが作った作業説明書です。ここに実行手順や前提が書かれているはずです。まず読むべきファイルです。requirements.txt はPythonスクリプトに必要なライブラリです。17バイトなので、たぶん requests など最小限だけでしょう。現時点の進行状況を、作業フェーズで言うとこうです。1.まず、分析用ツール群は作られている。これはすでに達成されています。extract_templates.py、extract_template_dependencies.py、make_export_pages.py などがそろっているので、Codexは「日本語Wikipediaからテンプレート使用状況を調べ、移植候補リストを作る」ための小さな道具立てを用意したことになります。2.次に、物理学者記事に使われるテンプレート候補も抽出済みです。template_usage.csv、template_dependencies.csv、template_pages.txt、modules_needed.txt が存在するので、少なくとも一度は処理が走っています。3.さらに、日本語WikipediaからXMLエクスポートするためのページ一覧も作成済みです。export_pages.txt と core_export_pages.txt があるので、次の作業はこれを使って日本語Wikipediaの「特別:データ書き出し」からXMLを取得し、Fisica Wikiの「特別:データ取り込み」で取り込むことになります。(中略)これからやるべきことは、いきなり再インポートではなく、まず「現在地の棚卸し」です。まずMac側で、次のコマンドを実行して内容を確認してください。(後略)
python - <<'PY'
import requests
API_URL = "https://nucleus.sakura.ne.jp/wiki/api.php"
text = """
これは仮リンクのテストです。
{{仮リンク|Test Person|en|Test person}}
"""
r = requests.get(API_URL, params={
"action": "parse",
"format": "json",
"contentmodel": "wikitext",
"text": text,
"prop": "text",
"formatversion": "2",
}, timeout=30)
data = r.json()
html = data.get("parse", {}).get("text", "")
print(html[:3000])
PY
2026年5月25日月曜日
OpenAI Codex
2026年4月21日火曜日
ヒマワリ
放送大学の自然科学の授業で,岸根順一郎さんが向日葵の種の配列のシミュレーションを見せていた。自然は黄金比を選んでいるというわけだ。バラメタを少し変えるといろいろな模様が出現する。
Q(koshix):Jupyter環境で,次のJulia プログラムをつくってください。 向日葵の種(塗りつぶした色つき小円でよい)の分布が 1粒ずつ内側から充足されていくインラインアニメーション。 これで意味が分かりますか? なるべく簡素で高速なものにしてください。
2026年3月30日月曜日
Claude Code
❯ 日本語でもできますか?⏺ はい、もちろんです!日本語で対応できます。何かお手伝いできることはありますか?❯ a,b,c を入力したら,二次方程式の解を出力するコードをお願いします。⏺ 何の言語がご希望ですか?Python で書きます:⏺ User answered Claude's questions:⎿ · 使用する言語はどちらがよいですか? → Python⏺ プログラム:(回答略)実行例:(回答略)判別式 D = b² - 4ac の符号によって3パターンに分岐しています。❯ このプロンプトから実行できますか?⏺ はい、できます!例として a=1, b=-5, c=6 で実行してみます。⏺ Read 1 file (ctrl+o to expand)⏺ 正常に動作しています。3パターンすべて正しく出力されました。別の値で試したい場合は「a=, b=, c=__ で試して」と言ってください。❯ a=1, b=2, c=3⏺ Read 1 file (ctrl+o to expand)⏺ 結果: real = -b / (2 * a)- 判別式 D = 2² - 4×1×3 = 4 - 12 = -8 < 0 → 虚数解-{x1 = -1.0 + √2 i ≈ -1.0 + 1.4142i- x2 = -1.0 - √2 i ≈ -1.0 - 1.4142i
2026年3月28日土曜日
pdf2md
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
# pdf2md.py
import sys
from pathlib import Path
import shutil
import tempfile
import opendataloader_pdf
def main():
if len(sys.argv) != 2:
print("使い方: python pdf2md.py input.pdf")
sys.exit(1)
pdf_path = Path(sys.argv[1]).expanduser().resolve()
if not pdf_path.exists():
print(f"ファイルが見つかりません: {pdf_path}")
sys.exit(1)
if pdf_path.suffix.lower() != ".pdf":
print(f"PDFファイルを指定してください: {pdf_path}")
sys.exit(1)
with tempfile.TemporaryDirectory() as tmpdir:
opendataloader_pdf.convert(
input_path=[str(pdf_path)],
output_dir=tmpdir,
format="markdown"
)
src_md = Path(tmpdir) / f"{pdf_path.stem}.md"
dst_md = pdf_path.with_suffix(".md")
if not src_md.exists():
print(f"Markdownファイルが生成されませんでした: {src_md}")
sys.exit(1)
shutil.move(str(src_md), str(dst_md))
print(f"作成完了: {dst_md}")
if __name__ == "__main__":
main()
2025年11月27日木曜日
JSONとTOON
2025年11月24日月曜日
AI対話計数ツール
Q(koshix):自分のブログの一月分のデータ(pdfファイル)のテキストを分析したいと思います。(1) 毎日のブログで,生成AIとの対話を使っているかどうかを調べます。(2) 当月の1-31日(月末)の各日について,使っていれば○,そうでなければ△のリストを出します。 例えば,以下のような形式のリストのcsvファイルになります。 2023-12 1,○ 2,△ ・・・(3) 日付の区切りは例えば,2 0 2 2 年 1 2 ⽉ 2 ⽇ ⾦ 曜 ⽇,のようなものになります。 ・pdfファイルは当月の末日から初日に向かって並んでいます。 ・pdfファイルの初日以降に前月分のブログがある場合がありますが無視してください。
(4) 判定条件は以下のとおりです。・生成AI発言を使っている場合は,Q: A: の構造が段下げの状態で含まれている。 大文字小文字は区別せずに,{Q,Q Users,Users,Q(koshix): }などと対応する{A,A ChatGPT,ChatGPT,A(ChatGPT-5):} など につづくテキストのブロックがある。 ・ChatGPT-5 のところには,ChatGPT,Gemini,Claude,Perplexity,Grok,DeepSeek,Qwenなどの文字列を含んだ各バージョンの名称が入ることがある。 ・それ以外の要素は加味しなくても良い。(5) これを実行するpythonスクリプト名を ai.py とすれば,コマンドラインで ai.py 2025-10.pdf とかai.py 2024-*.pdf などとすれば,2025年10月分のファイルの分析や,2024年の1月から12月のファイルの分析がワイルドカードでできるようにします。(6) 上記の例で結果出力は,2025-10.csv,2024-01.csv 〜2024-12.csv (12ファイル) が得られます。複数月を指定した場合は,それぞれの月の○の数を集計したものの 月別リストを summary-2024.txt などとしてまとめ出力してください。(7) 見本ファイル(2023-05.pdf)とコメント付きの正解のcsvテキストを添付(省略)します。質問があれば教えてください。A(ChatGPT-5 Thinking,24秒):意図:(回答略)できること:(回答略)スクリプトと実行例:(回答略)使い方:(回答略)実装の要点(抜粋):(回答略)既知の限界と調整ポイント:(回答略)追加の検証や、「この月のこの日が××のはず」などの正解表に合わせた誤判定修正(パターン拡張や閾値変更)もすぐ対応します。まずは上記 ai.py と 2023-05 の結果をご確認ください。Q(koshix):(1) 28,○ と 30,○ が再現できていません。その理由を教えてください。(2) csvファイルの末尾に○の数の集計値を与えてください。(3) 有る年度の複数のpdfファイルを対象にした場合,summary-2023.txtのようなまとめファイルをください。それは,各月名と○の数がならんだcsvファイルです。 2023-01, 5 2023-02, 9 ・・・ 2023-12, 10 などのようなものです。A(ChatGPT-5 Thinking,17秒):ありがとうございます。ご指摘の3点、以下の通り対応しました。(1) 28,○ と 30,○ が再現できていなかった理由(回答略)(2) CSV の末尾に ○ の集計値を追加(回答略)(3) 年度まとめファイル summary-YYYY.txt(回答略)更新済みスクリプト(rev2):ai.py を差し替え済みです。ダウンロードしてそのままお使いください。スクリプト:Download ai.pyサンプル出力(今回のPDFに対する再解析結果)2023-05.csv(末尾に 合計○ を追加済み)summary-2023.txt(CSVスタイル)必要なら、Q/Aラベルの追加(例:質問/回答、ユーザ の表記揺れ、モデル名の拡張など)や、「Q→Aの順序」判定の厳格化/緩和(例えば同一行Q/Aを○とみなす等)も即調整します。Q(koshix):ほとんどよくなりましたが,どうして6が○になりますか。△のはずですが。A(ChatGPT-5 Thinking):ご指摘ありがとうございます。原因の分析と修正を反映しました。なぜ「6」が誤って○になったのか誤判定の典型パターンが当たっていました:「Q&A(イベント案内・章タイトル)」型:本文中に “Q&A” や “Q & A” の語があり、同じ日の本文内に “ChatGPT” 等のモデル名が登場するだけで、「Q→A の対話」と誤認。ラベルなしの一般語:User(ユーザー)や ChatGPT が見出しや説明文中に現れるだけでも、(緩め過ぎた rev2 の)正規表現が「Q/Aラベル」とみなしてしまう。つまり 「Q(やUser)+ … + ChatGPT」 の単なる共起を、「行頭の話者ラベルによる Q→A 対話」と誤解するケースがあり、6日が○に転んでいました。対策(rev3)(回答略)ダウンロード(回答略)仕様の最終確認(回答略)もし「この日も○/△が違う」といった箇所があれば、その日の**短い抜粋(スクショでも可)**をお知らせください。検出器をピンポイントで微調整します。Q(koshix):30が○から△に変わりました。これはなぜですか。テキストを添付します(略)。A(ChatGPT-5 Thinking,9秒):原因はシンプルです。rev3 で検出条件を“行頭ラベル+コロン必須”に厳格化したため、30日の本文にあるUser(単独行、コロンなし)ChatGPT(単独行、コロンなし)という**「見出し型の話者ラベル(コロンなし)」**が Q/A ラベルとして認識されなくなったからです。添付テキストはまさにこの形式で、各ラベルの次の行から本文が始まっています。そのため rev2 では○、rev3 では条件を満たせず△になりました。どう直せば 30 日が○に戻るか(最小変更)(回答略)必要であれば、この修正を組み込んだ ai.py (rev4) をすぐにお渡しします。Q(koshix):ai.py(rev4)をください。A(ChatGPT-5 Thinking):お待たせしました。rev4 を作成して動作確認済みです(5月の○の合計は10に変化:6日=△のまま、30日=○に復帰)。スクリプト本体,検証出力,年次まとめ,rev4の要点など(回答略)
2025年11月23日日曜日
ブログ保存ツール
Q(koshix):私は,https://koshix.blogspot.com に2018年12月から毎日ブログを掲載しています。このデータを月単位でpdfファイルとしてダウンロードしたいと考えています。例えば https://koshix.blogspot.com/2025/09/ とすれば,2025年9月分のデータにアクセスすることができます。ところで,この場合9月21日までが1ページにまとまって出力されますが,それを越える部分(9月20日以前)は,ページ末の「前の投稿」からたどる必要があります。これによって,次の1ページで9月1日までのデータにアクセスすることができます。ブログの分量によっては,1月分が1ページで収まる場合もありますが,今のようにそうでない場合もあります。おおむね2ページで収まると考えています。さて,このような状況で月単位のpdfファイルを取得するのですが,実際に試してみると1ページのpdfの後半には連続したブランクページがたくさん含まれているようです。できればこの空白を取り除いた上で,1ページ目ともしあれば2ページ目(これも空白を取り除く)をつなげた1本のpdfファイルにまとめてほしいのです。ファイル名は例えば,2025-09.pdf などとなります。このような仕事をコマンドラインから実行するプログラムを作ってください。そのプログラム名を blgpdf とすれば,blgpdf 202506 202509のようにすれば,2025年6月から2025年9月までの4つのファイル(6月,7月,8月,9月)が得られるようにしたいのです。ここまでで何か質問はありませんか。なければあらためて依頼のゴーサインを出します。A(ChatGPT-5 Thinking,35秒):ありがとうございます。要件は把握しました。実装前に最小限だけ確認させてください(全部 “はい/いいえ/短文” で返せます):1.依存ツール:wkhtmltopdf(HTML→PDF化)+ Python パッケージ PyMuPDF(空白ページ検出と削除)を使ってよいですか?・macOS(Homebrew)で brew install wkhtmltopdf、pip install pymupdf を想定しています。2.空白ページの扱い:文中に紛れ込んだ“実質的に真っ白なページ”も削除対象にしてよいですか?(末尾に連なる白紙だけでなく、途中にあっても除去)3.出力場所:デフォルトは「カレントディレクトリ」に YYYY-MM.pdf を保存でよいですか?(例:./2025-09.pdf)・もし希望があれば --outdir オプションを付けます。4.レンダリング待ち:Blogger の遅延読み込み対策として、wkhtmltopdf --javascript-delay 2000(2秒待ち)を入れます。既定で問題なければこの設定で進めます。(必要なら秒数を指示ください)5.2ページ目URLの検出:月ページ下部の “前の投稿 / Older posts” リンク(search?updated-max= を含む)を自動検出して拾う方式で問題ないですか?(テーマ依存のラベル文言差は無視し、URLパターンで判定します)OK でしたら、すぐに blgpdf(単一ファイルのPythonスクリプト、CLI)をお渡しします。例:blgpdf 202506 202509 → 6〜9月を順に取得・白紙除去・結合・保存。Q(koshix):1 yes 2 no 3 yes 4 yes 5 yes これですすめてください。どうぞよろしくおねがいします。A(ChatGPT-5 Thinking,20秒):了解です。ご指定どおり進めます。(以下略)Q(koshix):空白ページの除去が全くできていないので,2000ページものpdfが出力されていました。 なんとかなりませんか。A(ChatGPT-5 Thinking,23秒):原因は、wkhtmltopdf が実体のない要素や印刷用 CSS の影響で“見た目は白紙だが内部的には何かがある”ページを大量に吐き出し、以前の「テキスト/画像/ベクターの有無」判定では白紙と認識できなかったことにあります。(以下略)Q(koshix):やはりうまくいかないのですが,dpiを増やしたり閾値を大きくするのは逆効果ではないのですか?A(ChatGPT-5 Thinking,32秒):ご指摘のとおり、「DPIを上げる」「閾値(white_ratio)を大きくする」は白紙判定を“厳しく”する方向なので、見えない微小ゴミ(細い罫線・1pxの影・アンチエイリアス・不可視要素のにじみ)を拾ってしまい、白紙とみなせなくなる=逆効果になりがちです。(以下略)Q(koshix):だいぶよくなりました。ところが,1ページで収まらない場合に,ページ末尾の「前の投稿」で過去のページを辿る必要があるのですが,ページ末尾の「次の投稿」の方の未来のページを辿ってそれを2ページ目として採用している場合が見受けられます。なんとかなりませんか。A(ChatGPT-5 Thinking,28秒):了解です。2ページ目は必ず「前の投稿(= Older posts = 過去方向)」だけを辿るようにロジックを強化しました。(以下略)Q(koshix):常に前の投稿へを参照するようになっていませんか。目標月の1日までが1ページ内に収まっていれば,前の投稿へのリンクを辿る必要がない場合もあるのですけど。A(ChatGPT-5 Thinking,19秒):助かりました。ご指摘の通り、「1ページ目にその月の1日が含まれている場合は“前の投稿”を辿らない」条件を厳密に入れました。・・・以下延々と別のエラーコードの修正で格闘を続けた・・・・・・2020/06 がうまくダウンロードできない状態が続く・・・Q(koshix):(venv) koshi@mba2020 ~ % ./blgpdf 202006 -vFile "/Users/koshi/./blgpdf", line 248dil = ( ^SyntaxError: '(' was never closedA(ChatGPT-5 Thinking,17秒):ごめん、私の括弧ミスでした(dil = ( 行)。膨張処理のところをシンプルに書き直して、構文エラーを解消した完全版を置いておきます。これに差し替えてください。・・・結局 2020/06 の問題の方は解決しなかった・・・・・・ChatGPTでも単純なプログラムのミスを犯すのだった・・・
P. S. 10/21 brew upgrade にエラーが出ていたので,ChatGPT-5 の指示を受けながら,brew cleanup, brew update, brew upgrade, brew doctor を繰り返してエラーを潰していった。その過程でwkhtmltopdf が使えないことがわかり,代替として提示された chromium もだめだといわれた。仕方がないので再び ChaatGPT-5 に相談して上記プログラムの修正を図ったところ,brew とは関係なしに,python -m pip install playwright pymupdf requests beautifulsoup4 と python -m playwright install chromium の環境を使った修正版が使えることになった。こちらの方が数式が保持されていてうれしい。
2025年11月20日木曜日
元素周期表3D
Q(koshix):ありがとうございます。 node も npm もbrew でインストールされていました。 自分は初心者であり,htmlとかcssとかjavascriptは何となくわかりますが, node, npm, mpx, Next.js + React + TypeScript + Tailwind + Three.js が何を意味しているかを概念的に把握できていません。申し訳ないのですが,よくわかるようにこれらの要点や注意点を解説していただけませんか。A(ChatGPT-5):(長々と説明された後)あなたのための短いアナロジー・HTML → 家の骨組み・CSS → 壁紙・装飾・JavaScript → 家の仕掛け(自動ドア・照明)・Node.js → 家を作る工場のようなもの・npm → 工場で使う工具や材料(React / Next / Three のパッケージ店)・React → 家の“部品”をモジュール化して大量生産・Next.js → 部品を組み合わせて「街」を作るシステム・Tailwind → スタイルを一瞬で貼る装飾セット・Three.js → 3D ホームシアター設備
2025年10月8日水曜日
関数電卓ウェブアプリ
Q(koshix):Appleの計算機を参考に関数電卓のウェブアプリを作ってください。 2つ画像があるのは1st関数リストと2nd関数リストを表現しています。(1) 背景は薄い空や海のような自然で流れるような水色にしてください。(2) 本体のボディはシルバーにして,ボタンとの違いをはっきりさせます。(3) 表示部分は液晶的な背景にモダンな文字デザインにします。(4) 有効数字は別列スイッチで6桁(単精度)と12桁(倍精度)の切り替え式に。(5) 同様に角度の単位のラジアンと度のも別列スイッチで切り替え式に。(6) %キーはやめてバックスペースキーBSにしてください。BSは一つずつ順に前の計算/入力状態に戻していくキーになります。(7) mc m+ m- mr はMC M+ M- MR と表示して区別できる薄緑色にしてください。(8) Rand は rnd と表示します。(9) EEキーは数字キーと同じ色に,Degキーは先ほどの%を盛ってきます。(10) 2nd ボタンは色を変えて,押した状態では 1st と表示するようにして下さい。(11) 計算式が薄いグレーの小文字で計算結果表示の上に出続けるようにしてください。(12) 最上段の選択ボタンと関数電卓型のボタンは不要です。ココまでの指示内容でで質問があればお願いします。よければ了解としてください。その後,こちらで進めてくださいという指示を出します。
2025年8月22日金曜日
プログラミング教育2025
Q(koshix):小学校のプログラミング教育において重要なことは「プログラミング的思考」を育成することだといわれています。 ところが,その定義が手続き型プログラミング言語の仕組み の表層をなぞるようなものでしかありません。具体的な実践例も 子供たち創造力を引きだすようなものにはなっていないと思います。問題はコンピュータの利用において,これを単なる受け身の メディア再生機(YouTubeとゲーム)でなくて主体的に創造するための「ツール」として活用することにあるのではないかと思います。 プログラミング教育はその一部を構成できると思いますが, 一方でプログラミングなしで,通常のアプリケーションの 活用だけでも同等のことが実現できるのではないでしょうか。 この論点のついての分析と評価をお願いします。A(ChatGPT-5):(回答略)Q(koshix):私の問題意識は,プログラミング的思考を育成するという目標設定それ自身がおかしいのではないかということです。目標はあくまでも創造的な「ツール」としてコンピュータを活用できるようになることです。そのなかにプログラミングという要素があることには全く依存がありません。アプリ中心であることにこだわっているわけでもありません。AI時代を迎えるにあたっての基本的な考え方の問題です。その辺があなたにうまく伝わっていないような気がします。A(ChatGPT-5):(回答略)Q(koshix):いやここまでで結構です。どうもありがとうございました。 放送大学の「小学校プログラミング教育(導入編)」という授業の内容を徹底的に批判してほしいのですが,たぶんあなたはそれにアクセスできないでしょうから無理ですね。A(ChatGPT-5):(回答略)Q(koshix):(添付ファイル:koshix.blogspot.com の「小学校プログラミング教育」から)小学校プログラミング教育とプログラミング的思考についてのこのブロガーの記事を年代順に把握理解してその主張を報告してください。A(ChatGPT-5):(回答略)Q(koshix):「教育政策の批判軸」 と 「創造的活用へのシフト」 という2本の柱で整理し、論説の形で分かりやすく説得的な日本語の文書にしてください。A(ChatGPT-5):(回答略)Q(koshix):添付のテキストの内容も加味して,教育関係者向けの提言書スタイルのわかりやすく説得的で詳しい文章にまとめてください。A(ChatGPT-5):(回答略)Q(koshix):分かりやすさを優先したためか,文章の深みに欠けています。箇条書きはなるべく減らした上で,深く思考を紡いだ長めの文によって論理を尽くして問題点をえぐり出してください。A(ChatGPT-5):提言書(ChatGPT-5 + koshix)「プログラミング的思考」から「創造的コンピュータ活用力」へ——AI時代の小学校情報教育を設計し直す序小学校へのプログラミング教育導入は、「プログラミング的思考」という新奇だが曖昧な標語のもとに制度化された。だが、この標語は教育の最上位目的を示す理念としては脆弱で、しばしば“手段の目的化”を招き、現場に形式主義をもたらしている。むしろ目標は、子どもがコンピュータを自らの創造のための道具として使いこなし、情報を構想・生成・編集し、社会に働きかける力を培うことに置かれるべきである。この観点は、当初の政策決定過程のねじれや、現場で観察された実践の限界、そしてAIの到来によって一層鮮明になった。1.概念輸入のねじれと制度文言の劣化「コンピューテーショナル・シンキング(CT)」の輸入に端を発する議論は、当初、学習の設計・分解・抽象化といった広い知的実践を射程に入れていた。しかし政策化の局面で、用語は「プログラミング的思考」へと統一され、その意味内容は「意図した処理を実現するために、動きの組合せを記号で設計し、改善する」といった、手続き型プログラミングの表層に引き寄せられてしまった。ここで理念は二重に脱力する。第一に、目標を「思考法」に格下げすることで、子どもが道具を握って世界に関わるという行為のダイナミズムが霧散する。第二に、学ぶべき思考の実体がプログラミング言語の構文・制御構造の擬似体験に化け、学びの “中身” が希薄化するのである。このねじれは、政策文言の可搬性(どの学校でも言い回しだけは一致させられる)を優先した結果でもあったが、その代償として、子どもの創造的な営みを正面から扱う大胆さを失わせた。2.形式主義が生む現場の負担と不均衡「思考の育成」という抽象目標は一見、現場の裁量を広げるように見える。だが実際には、汎用教材で短時間に達成度を “見える化” する設計が横行し、キャラクターを一定の手順で動かすことが “学習の証拠” へとすり替わる。こうした授業で子どもが得るのは、コードの意味理解やシステム設計の経験ではなく、与えられたブロックの正しい並べ替えにすぎない。制度はその “達成” を評価しやすく、教員は達成形式を整えるための下準備に追われる。設備や研修のリソースが乏しい学校ほど、形式主義に依存する傾向は強まり、結果として教育機会の格差は拡大する。制度化の当初から、この副作用は鋭く指摘されていたし、現場感覚としても重くのしかかってきた。3.教育目標の取り違え——“思考”という名の空洞化決定的な問題は、「プログラミング的思考」という語が、手段の記述様式(記号列・制御構造)を “思考” に見立て、学習目標を手段側へ引き倒してしまったことである。子どもが学ぶべきは、コンピュータを介して世界に関わるための “作る・直す・伝える” というプロセスの統御であり、その中にプログラミングという選択肢が含まれるかどうかは、課題や道具選択の問題であって本質ではない。現行定義は、まさにこの順序を逆転させる。したがって、「手続き型の表層をなぞる定義では創造性が引き出されない」という批判は、的確であるだけでなく、政策の前提に遡る根本的な再審を促す。そしてこの批判は、単なる理念論にとどまらない。実際の授業は「迷路を解く」「キャラクターを動かす」といった課題に収束しやすく、子どもの関心や社会的文脈に接続されにくい。ここで子どもが体験するのは、世界に向けて “何かを成し遂げる” ための設計ではなく、正規解に収斂する “模倣の段取り” である。4.反証としての実践——Scratchが示した“道具としての広がり”他方、同じプログラミングの枠内でも、Scratchの拡張機能群とIoT連携は、授業が閉じた画面内の模倣から、音・身体・空間・外部データへと開かれうることを示した。ここでは、プログラミングは “コードを書く行為” というより、表現や探究のための “場づくり” として機能しうる。つまり、子どもの手に渡る道具箱が十分に多様で、課題が生活世界や学びの他領域に接続されているとき、プログラミングは創造のための媒介となる。この経験は、当初の懐疑を訂正し、目標が “思考のラベル” ではなく “創造の実践” であるべきことを、実証的に裏づけた。重要なのは、ここで価値を生んでいるのが「プログラミング的思考」なる抽象ではなく、道具の拡張性と課題設計の社会的・表現的接地だという点である。5.AI時代が要請する転回——命令記述から振る舞い誘導へ生成AIの普及は、コンピュータとの関わり方を「手続きの逐語的記述」から「振る舞いの誘導・評価・統合」へと劇的にシフトさせた。ここでは、プロンプトという高位の仕様を投げ、出力を批判的に吟味し、他のツールと組み合わせて目的の表現や解決に仕立て直すことが核心となる。つまり “作る” ことの意味が、コードの細部に宿るのではなく、道具の選択・役割分担・検証・再設計の循環に宿る構造へと変わったのである。したがって、教育の目標は「プログラミング的思考」の育成ではなく、「コンピュータを創造のために使いこなす統合的能力」の涵養に再定義されねばならない。そして、この能力はプログラミングを必須としない。ローコードやノーコードの環境、さらにはアプリの高度な機能だけで、十分に同等の学びが成立する局面は多い。鍵は、ツールの等価的な編成と批判的運用にあり、どの記法を採るかは従属的な決定である。6.政策言語を書き換える——“道具としての創造”を最上位目的に以上を踏まえると、政策文書は次のように言い換えられるべきだ。すなわち、「小学校段階では、子どもがコンピュータとAIを創造のための道具として主体的に活用し、情報を収集・生成・編集・表現する一連の営みを設計・実行・省察できるようにする」。この目標のもとでは、プログラミングは “取りうる手段の一つ” として位置づけられ、課題の性質と子どもの発達段階に応じて、アプリ、センサー、生成AI、データ可視化、メディア編集などと等価に選択される。評価も「正しく動くコード」から離れ、課題設定の妥当性、ツール選択の理由、失敗の記録と修正、成果の社会的・表現的意義といったプロセスの可視化へと移行する。こうして初めて、授業は “やったこと” のチェックから、“何を成し遂げたか” “どう変えたか” の探究へと質的転換を果たす。7.実装への視座——授業設計・評価・教員支援実装の要は三つある。第一に、課題を生活世界の問題や他教科の学びに接地させ、アウトプットを “誰かに届く表現” として設計すること。第二に、AIと人間の役割分担を明示化し、出力の根拠・限界・改変の痕跡を残すことで、子どもに “作ることの説明責任” を教えること。第三に、教員の専門性を「コード知識」ではなく「学習のオーケストレーション」に振り向け、ローコード/ノーコード教材やプロンプト例、失敗事例集を共有資産として整備することである。これらは、リソース差を埋め、形式主義に陥りやすい学校ほど “実質” へと近づけるための制度投資でもある。結語私たちが守るべき順序は単純である。第一に目的、次に手段。目的は、子どもがコンピュータを用いて世界に働きかける創造の主体になること。手段は、プログラミングであれ、アプリであれ、AIであれ、課題に応じて選び、組み合わせ、検証し、やり直すこと。いま必要なのは、「プログラミング的思考」という抽象の上塗りではなく、“道具としての創造” を最上位に置く政策言語への転換である。そこに立ち返るとき、授業は再び、生きた学びになる。子どもは、手続きの模倣者ではなく、技術と表現を編む設計者として教室に現れるだろう。


