Pythonの授業で、学生にJupyter Notebookの.ipynbファイルを提出してもらっています。
これまではMicrosoft Formsを使っていました。Teamsの「ファイル」で提出を受け付けようとすると、私が使っていた場所では、ほかの学生にも提出物が見えてしまうためです。
ただ、Formsで提出できるファイルの種類は限られています。そこで、学生には.ipynbの拡張子を.pdfに変えて提出してもらっていました。
今回はTeamsの「課題」で提出してもらったところ、.ipynbのまま受け取れました。さらに、提出されたノートブックを開いて、コードを実行することもできました。
この機会に、Formsで提出していたときのファイル名の一括変更についても調べ直しました。WindowsのrenとLinuxのmvでは、同じ*を使っても書き方が違います。
今回は、Teamsの課題でできたことと、ワイルドカードの使い方でつまずいたことを記録しておきます。
なぜFormsで提出していたのか
Teamsにはファイルを置く場所があります。しかし、私が授業で使っていた場所に提出物を置くと、学生がほかの人のファイルを見ることができました。
個別の課題の提出先として使うには気になるところです。
そこで、Formsのファイルアップロードを使って、学生から提出物を受け取っていました。
ただし、Formsのファイルアップロードで選べる種類は、Word、Excel、PowerPoint、PDF、画像、動画、音声などです。Jupyter Notebookの.ipynbは、その選択肢に含まれていません。
ipynbの拡張子をpdfに変えていた
Formsで提出してもらうために、学生にはファイル名の拡張子を変更してもらっていました。
課題.ipynb
↓ 拡張子を変更
課題.pdf
PDFに変換したわけではありません。ファイルの中身はJupyter Notebookのままです。
提出されたファイルを確認するときには、拡張子を.pdfから.ipynbへ戻していました。
少々力技ですが、この作業にも授業で扱える要素がありました。拡張子を変えてもファイルの中身は変わらないことや、コマンドで複数のファイル名を扱う方法を、学生に見せる機会になったからです。
Windowsのrenなら一括で変更できる
Windowsのコマンドプロンプトでは、次のように書けます。
ren *.pdf *.ipynb
*.pdfは、名前が.pdfで終わるファイルを指定しています。ここで使っている*がワイルドカードです。
複数のファイルの拡張子をまとめて変更できるので、学生にも「*を使うと、複数のファイルを対象にできる」と見せられました。
Linuxのmvでも同じように書ける?
Windowsで使ったあとなら、Linuxでも次のように書きたくなります。
mv *.pdf *.ipynb
ところが、これでは複数のファイルの拡張子を一括変更できません。
Linuxのシェルでは、*.pdfが一致するファイル名に展開されます。しかし、mvには、それぞれのファイル名に対応する.ipynbの名前を自動で作る機能はありません。
mvを使うなら、次のように一つずつ処理できます。
for file in *.pdf; do
[ -e "$file" ] || continue
mv -- "$file" "${file%.pdf}.ipynb"
done
*.pdfで対象のファイルを選び、${file%.pdf}で名前の末尾から.pdfを取り除いています。そこへ.ipynbを付けて、mvで名前を変更します。
同じ*が登場しても、WindowsのrenとLinuxのシェル+mvでは、ファイル名の一括変更の書き方が違うわけです。この用途では、Windowsのrenのほうが簡潔でした。
Teamsの課題にipynbを提出してみる
今回は提出先をTeamsの「課題」に変えてみました。
学生から.ipynbファイルを提出してもらい、提出物を開いてみると、ノートブックの中身を確認できました。さらに、コードのセルも実行できました。
「これなら、拡張子を変えずに提出してもらえる」
Formsを使っていたときの手順を思うと、うれしい発見です。
プログラミングの課題は、コードを読むだけでなく、実行して結果を確かめたいことがあります。提出物を開いた流れでそこまで確認できたのは便利でした。
Teamsでできることは、試して初めて分かることもある
Teamsの機能については、調べればドキュメントもあると思います。
ただ、Teamsの機能を体系的に学んでいなければ、「.ipynbを提出して、そのまま開いて実行できるか」と調べる発想自体が出てきませんでした。
Formsでの方法も、拡張子やワイルドカードを教える機会として悪くありません。一方で、毎回その手順が必要な課題なら、Teamsの「課題」は便利です。
まず使ってみて、今までの方法と比べる。今回はそこから、授業で使える機能を一つ知ることができました。
今後確認したいこと
今回分かったのは、私の環境では、Teamsの課題に提出された.ipynbを開いて実行できたということです。
どのアプリや実行環境で開かれていたのかは、改めて確認したいと思います。ノートブックで使うライブラリによっても、実行できる範囲が変わるかもしれません。
また、提出する学生の数が多いときに、確認や採点をどのように進められるかも試していきます。
AITRetry Lab メモ
Formsで提出していたときは、.ipynbを.pdfという名前に変えて受け取り、あとで元に戻していました。その作業は、拡張子やワイルドカードを学生に見せる機会にもなりました。
Teamsの課題では、.ipynbのまま提出してもらい、開いて実行できました。
提出方法を試し直したことで、Teamsの課題の使い道と、WindowsとLinuxでのワイルドカードの使い方の違いを知ることができました。今後も授業で使いながら、分かったことを追記していきます。


コメント