Share
Embed
DNCL2 to Python 変換パッケージ meizen 利用マニュアル
大学入学共通テスト「情報I」の問題中で使用されるプログラミング言語風の擬似言語「共通テスト用プログラム表記」(便宜上、DNCL2とする)をPythonに変換して実行できるようにしたPythonパッケージ「meizen」の概要と授業内での使用方法、パッケージの強みなどをまとめたマニュアルです。
学校教員の方に向けた授業への導入資料となっています。
Keita Sanefuji
March 14, 2024
Transcript
48 slides
-
DNCL2 to Python 変換パッケージ meizen 利用マニュアル 實藤 敬太 / Keita
Sanefuji sane21.edu[at]gmail.com 近畿大学教育情報学研究室と 共同で研究開発を行っております 共通テスト用プログラム表記を便宜上,DNCL2と表記しています。 -
meizenとは • できること • DNCL2をPythonに変換して実行できる • 動作環境 • Python3.10以上 •
配布場所 • https://github.com/sane21/meizen • 目的 • 高校生のプログラミング学習支援 • 共通テスト「情報I」対策 • 情報科教員の授業支援 Pythonで開発したパッケージ(ライブラリ) -
開発したライブラリ システム概要・関連技術 変換 実行 利用 生 徒 教 員 作成
共有 実行 •DNCL2 共通テスト内の言語 •Python3.10 翻訳パッケージの主体 •GitHub パッケージの管理, 公開 •Google Colaboratory 開発パッケージの実行環境 •Google Classroom 実行環境の共有 -
導入のメリット • Google Classroom内での運用が可能 • Google Colaboratory上で動作するため、 Classroomを経由した配布や管理が容易 • 他のPythonのパッケージとの連携が可能
• 画像認識や機械学習、Web開発などをDNCL2で記述、実行可能 • 生徒の学習工数を削減できる • 既存の言語(Python, Javaなど)でプログラミングを学習するSTEPを DNCL2に置換できる • 生徒は変換後のPythonの知識は不要で実行可能 • エラー対応など必要に応じてPythonを参照することも可能 -
利用方法例 • Google Colaboratory内のPythonバージョンは「3.10.12」 • meizenが問題なく利用できる • Colabの旨味 • Google
Classroomで管理 • 全生徒に同一の実行環境を提供 • プログラムとその解説などを 一つのファイルにまとめて記述 • 変更の記録を遡って確認 • 詳細なColab上での利用方法やClassroomとの連携方法は後述 Google ColaboratoryでDNCL2を実行 -
Google Colaboratoryのファイルの配布 • 次頁よりGoogle Colaboratory上でmeizenを活用し DNCL2を動作させたもののファイルを公開し共有します • 学校教育の用途に限り、複製、自由な改変を許可します • 使用者は次の連絡先まで
氏名、所属、使用ファイル、使用用途、メールアドレス をご連絡いただくようお願いいたします • 連絡先 實藤 敬太 E-mail : sane21.edu[at]gmail.com -
Google Colaboratoryでの利用方法 • ファイル名は分かりやすいものにしてください • Colab内では一つの処理のかたまりを「セル」として扱います • 「+コード」でコードのセルを追加 • Pythonのプログラムやターミナルコマンドなどを実行
• 「+テキスト」でテキストのセルを追加 • 文書による説明や解説を記述 • マークダウンやHTMLでの装飾が可能 -
Google Colaboratoryでの利用方法 • パッケージ「meizen」をpipで管理するパッケージとして GitHubからインストールします • コードセルにおいて「!」を行頭につけると UNIXコマンドを使用できます • コードセルに次のように記述して実行してださい
!pip install git+https://github.com/sane21/meizen.git -
Google Colaboratoryでの利用方法 • パッケージをランタイムにインポートします • 次のようにコードセルに記述し実行してください import meizen インストールとインポートが不安な場合は •
次のコマンドでインストールの可否を確認できます !pip show meizen • 次のコードでimportの可否を確認できます meizen.print_if() -
Google Colaboratoryでの利用方法 • DNCLで記述したファイルを用意します • コードセルに次のように記述して実行してください %%writefile ファイル名.dncl プログラム •
必ず「〇〇.dncl」としてください • 新規作成で「Writing ファイル名」、 上書きで「Over writing ファイル名」と表示されます -
Google Colaboratoryでの利用方法 • プログラムを記述したらこれを実行します • コードセルに次のコードを実行してください meizen.run(filename=“自分で設定したファイル名”) • filenameには前頁で自身の設定したファイル名にします •
この際に拡張子は除いたファイル名にしてください • e.g. %%writefile sample.dncl とした場合 filename = “sample” • これにより、「ファイル名.dncl」を実行できます • 内部処理としては 「ファイル名.dncl」を変換して 「ファイル名.py」を作成してそれをsubprocessで実行しています -
基本機能 関数 • DNCL2をPythonに変換する : build • DNCL2をPythonに変換し実行する : run
• DNCL2をPythonに変換し実行結果を文字列で評価する : exam_str • DNCL2をPythonに変換し実行結果を正規表現で評価する : exam_re クラス • 変換や実行の結果を外部出力するためのクラス : Logger -
関数 • 引数 • filename : 必須, str型, 変換したい.dnclファイル名 •
path : 任意, str型, 変換したいファイルの存在するディレクトリパス(初期値:”./”) • log : 任意, Logger型, 記録保存用のクラス (初期値:None) • 処理 • path+filename+”.dncl”のファイルを読み取り • 字句、構文を解析し結果に基づき、path+filename+”.py”に書き込む • path+filename+”.py”が存在しない場合は作成し、存在する場合は上書きする • LogにLoggerが存在する場合、 実行時刻、変換前の.dnclファイルの内容、変換後の.pyファイルの内容を log_Logger.name_Logger.date.mdに書き込む build -
関数 • 引数 • filename : 必須, str型, 変換したい.dnclファイル名 •
path : 任意, str型, 変換したいファイルの存在するディレクトリパス(初期値:”./”) • log : 任意, Logger型, 記録保存用のクラス (初期値:None) • 処理 • path+filename+”.dncl”のファイルを読み取り • 字句、構文を解析し結果に基づき、path+filename+”.py”に書き込む • path+filename+”.py”が存在しない場合は作成し、存在する場合は上書きする • その後、subprocessでpath+filename+”.py”を実行する • LogにLoggerが存在する場合、 実行時刻、変換前の.dnclファイルの内容、変換後の.pyファイルの内容、 実行の標準出力、エラー出力をlog_Logger.name_Logger.date.mdに書き込む run -
関数 • 引数 • filename : 必須, str型, 変換したい.dnclファイル名 •
answer : 必須, str型, 実行結果の評価に用いる文字列, 完全一致でTrueとなる • path : 任意, str型, 変換したいファイルの存在するディレクトリパス(初期値:”./”) • log : 任意, Logger型, 記録保存用のクラス (初期値:None) • 処理 • path+filename+”.dncl”のファイルを読み取り • 字句、構文を解析し結果に基づき、path+filename+”.py”に書き込む • path+filename+”.py”が存在しない場合は作成し、存在する場合は上書きする • その後、subprocessでpath+filename+”.py”を実行する • 実行結果を、answerと比較して結果を表示する • logにLoggerが存在する場合、 実行時刻、変換前の.dnclファイルの内容、変換後の.pyファイルの内容、 実行の標準出力、エラー出力をlog_Logger.name_Logger.date.mdに書き込む exam_str -
関数 • 引数 • filename : 必須, str型, 変換したい.dnclファイル名 •
answer : 必須, str型, 実行結果の評価に用いる正規表現, 完全一致でTrueとなる • path : 任意, str型, 変換したいファイルの存在するディレクトリパス(初期値:”./”) • log : 任意, Logger型, 記録保存用のクラス (初期値:None) • 処理 • path+filename+”.dncl”のファイルを読み取り • 字句、構文を解析し結果に基づき、path+filename+”.py”に書き込む • path+filename+”.py”が存在しない場合は作成し、存在する場合は上書きする • その後、subprocessでpath+filename+”.py”を実行する • 実行結果を、answerと比較して結果を表示する • logにLoggerが存在する場合、 実行時刻、変換前の.dnclファイルの内容、変換後の.pyファイルの内容、 実行の標準出力、エラー出力をlog_Logger.name_Logger.date.mdに書き込む exam_re -
クラス • フィールド • name • コンストラクタ • 引数 •
name : 必須, str型, ユーザ名。記録を出力するファイル名に使用する。 • 処理 • 引数をフィールドに代入する • ユーザ名と作成時刻を記入した記録用のファイルをカレントディレクトリに作成する • get_file() • 引数なし • 記録しているファイル名とそのパスを一つの文字列で返す。 • 記録したファイルのダウンロードなどに利用できる。 Logger -
研究協力のお願い • 収集したデータは研究・開発の用途にのみ用いる • 個人情報は一切保持しない • データは厳重に管理する • 収集するデータは次の通り •
Google formによるアンケートを予定 • 配布する教材を用いた教員の感想 • 配布する教材を用いた生徒の感想 • Google Colaboratory内で保存される記録の提出を予定 • 配布する教材内で生徒が入力、実行したプログラムに関する記録 研究に関連するデータの取り扱いについて -
研究協力のお願い • 実習開始時 • Logger型変数を定義, 引数でユーザ名を要求する • ユーザ名は出席番号やその他の生徒個人と一意に紐づいた文字列であることが 好ましい •
同一の生徒のデータが識別できれば良いため、暗号化されていても構わない 実行データ保存の手順 1 -
研究協力のお願い • 関数実行時 • 必ず、引数にlog=Logger型変数を設定すること • 実習終了時 • 記録ファイル(.md)を ダウンロードし、Google
Classroom等で提出させる • このmdファイルを 送信していただきたい 実行データ保存の手順 2