Moodle extract Workflow : hkob の雑記録 (154)

はじめに

hkob の雑記録の第154回目は、Moodle からダウンロードしたファイルを適切な場所に自動的に展開する Moodle extract Workflow を解説します。

Moodle extract Workflow

私の授業では、moodle の課題の評価を実施しています。課題は zip としてまとめられてダウンロードすることができます。以前は、自分で展開して適切な場所に移動していたのですが、面倒になったのでスクリプトを作成しました。Workflow は以下のようになっています。実際にはただのスクリプトなのですが、いちいちターミナルを立ち上げるのは面倒なので、Alfred から起動しているだけです。

Moodle extract Workflow

Keyword は me としました。引数はありません。

Keyword trigger

ターミナルから実行することもあるので、その moodle_extract.rb スクリプトを Terminal command で呼んでいるだけです。

Terminal command action

ちなみに moodle_extract.rb は以下のようになっています。今年度の moodle の科目名には 25-XXX のように省略名を付けているので、XXX の部分を見て保存先のディレクトリを選択するようにしています。移動後に展開先のフォルダを開くので、その後にスペースキーをタイプするだけで、QuickLook が起動して課題をすぐに確認できます。

#!/usr/bin/env ruby
require "fileutils"
STORE_DIR = "/Users/hkob/Library/CloudStorage/Dropbox/by_kind/00.Lecture.localized/Lecture2025".freeze
DOWNLOAD_DIR = "/Users/hkob/Downloads".freeze

def extract(file)
  file =~ %r{^(.*)\/25-([^-]+)-(.*)\.zip}
  dir = Regexp.last_match(1)
  lec = Regexp.last_match(2)
  name = Regexp.last_match(3)
  p [file, dir, lec, name]
  system("open '#{file}'")
  sleep 3
  Dir.chdir "#{DOWNLOAD_DIR}/25-#{lec}-#{name}"
  # system("/Users/hkob/bin/ren2024.rb")
  move_dir = {
    "pr2" => "024.プログラミングII",
    "pr1" => "023.プログラミングI",
    "sd1" => "012.sd1.localized",
    "ip3" => "018.情報処理III",
    "exp1" => "022.情報システム実験実習",
    "db" => "025.データベース",
    "mp" => "017.マルチメディア処理6000",
  }[lec]
  dir = "#{STORE_DIR}/#{move_dir}"
  FileUtils.rm_rf("#{dir}/25-#{lec}-#{name}")
  FileUtils.mv("#{DOWNLOAD_DIR}/25-#{lec}-#{name}", dir)
  FileUtils.rm("#{file}")
  system(%Q[open "#{dir}/25-#{lec}-#{name}"])
end

Dir.glob("#{DOWNLOAD_DIR}/25-*.zip").each do |file|
  extract file
end

おわりに

moodle の科目名に適切なルールをつけることで、自動的にエビデンスとなる課題ファイルを適切なディレクトリに展開できるようになりました。ダウンロードした zip ファイルなども自動的に削除されるので、ダウンロードフォルダがゴミ置き場になることを回避できています。この課題ファイルをさらに効率的に閲覧し続ける仕組みを明日解説します。

hkob.notion.site