目次
はじめに
アルバイトとして大学のプログラミング講義で学生から提出されたプログラム課題の採点業務を担当しています。
約100人×数個の課題分だけプログラムの実行結果を見て採点を行う必要があるのですが、手作業でプログラムの実行確認を行うことはとても大変です。
調べてみたところ、プログラムの実行結果の取得をAutomatorによって自動化することができたので、その方法を記録として残します。
100個のC言語のプログラム実行結果を自動的に取得している画面の録画は以下のYouTube動画へアップロードしています。
https://youtu.be/GzCoYjB-FCM
本来は学生から提出された100個のプログラムを実行するのですが、動画では同じサンプルプログラム100個を実行しています。
MacのAutomatorをうまく使えば、大学のプログラミング課題の実行結果の取得を自動化するだけでなく、他のことにも応用できそうです。(ただ、使い勝手が難しいところもありました…。)
前提条件
パソコン: Mac OS Big Sur 11.5.2 (MacのAutomatorを使えるのであれば、他のバージョンでも問題ないと思います。WindowsではAutomatorが使えないので、今回の記事は参考になりません。)
プログラムの実行環境:Visual Studio Code (他のエディターでも対応できると思いますが、Automatorの自動化の際に、マウスのクリックが記録されないエディターがある可能性があるので注意が必要です。)
プログラミング課題の内容:今回はC言語の課題ですが、他の言語でも対応できると思います。出力結果の確認は、学生ごとにスペースの位置や改行などが微妙に異なっているため、目視で正しいかを判断します。(この作業は大変なので改善が必要ですね。)プログラムの実行結果のみを見て採点する方法です。
自動化するための手順
Visual Studio Codeで採点したいプログラムを開きます。今回は100個のC言語のプログラムを開きました。
100個のC言語のプログラム実行結果をVisual Studio Codeのターミナルで表示されるログに出力するのですが、出力した行数が1000を超えると上から順番に消されてしまうため、以下のサイトを参考に
「"terminal.integrated.scrollback": 10000,」と変更し、表示されるログの行数を10000などに変更します。
Automatorでは、「Visual Studio Codeのウィンドウをマウスでクリックする」ことの記録ができない(?)ため、Visual Studio Code上でプログラムを実行する・実行するプログラムを切り替えることなどを全てキー入力で行い、Automatorに記録させる必要があります。
MacのVisual Studio Codeでは、「Control + Shift + @」でエディタとターミナルを切り替えることができるのですが、Automatorの「Control + @」で別のショートカットキーが起動してしまい、キー入力の記録を受け付けてくれませんでした。
そこで以下の記事を参考に、エディタからターミナルを切り替えるショートカットキーを例えば「Control + Shift + 0」など他のショートカットキーと重ならない適当なキー入力に置き換えます。
以下の記事を参考に、Automatorでワークフローを作成します。
ワークフローは上記の画像のとおりになりました。
1つずつ操作の意味を簡単に説明します。
Option + Control + N:C言語のプログラムを実行します。
Shift + Control + 0:以前の手順で登録した「エディタからターミナルにフォーカスを切り替える」ショートカットキーです。
Command + V:C言語のプログラムを実行する際に入力として必要な文字列をペーストします。
Return:入力として必要な文字列を確定させ、C言語のプログラム上のfgetsで読み込ませます。
Shift + Control + 0:ターミナルからエディタにフォーカスを切り替えます。
Command + W:実行したC言語のプログラムを閉じます。
以上のワークフローを実行することによって、Visual Studio Codeのターミナル上に実行ログが追記されていきます。
おわりに
自動化によって、以下の画像のキー入力を行ってプログラムの実行結果を取得する作業を自動化することができました。
Automatorを実際に利用すると分かるのですが、思ったとおりに動いてくれないことが多く、なかなか大変です。
Visual Studio Codeで100個のC言語のプログラム実行結果を取得する方法は、他にあるかもしれないです。ご存じでしたら教えていただけると助かります!