OYASHIRO

履修チェッカーの使い方

履修チェッカーを利用する方法・注意点などについて

2025-02-09

著者: Oyashiroboy

履修チェッカーの使い方

前提

成績公開後にしか使えません。また、他の方が作られたツールとは違い、私は単位を自動計算するところまでしか作っておりませんので、ご承知ください。 次の学期がこれでいいのかをチェックする、またどの授業がおすすめかを調べる等の機能は要望があり次第開発するので、私に連絡をください。また、学部学科についても、履修の手引がないため他学部は対応していません。もし希望があれば、連絡していただければ作ります。福祉・心理コースは他に作りたいものがなかったときにクラスの勉強として作る可能性がありますが、Webサイト版まで持ってこれるかとなると更に可能性が下がります。連絡いただければすぐに作ろうとは思っております。

注意点

今回のプログラムは、私がRubyのチェリー本を読み終わってから1.5日程度で一気に完成させております。テストファースト開発ではなく、デバッグもプリントを使ったもので済ませておりますので、バグが考えられます。 自身で計算した確認用ツールとしてお使いいただき、もしバグがあればご連絡ください。 私はまだRuby学習中なので、各種副専攻、各種プログラム、COCなどへの対応が即座には組めませんでした。各種プログラムは学務情報システムでまとめて見れますので、併せてご確認ください。

Web版使い方

Web版はRubyコードを Gemini2.0 Pro を用いて生成AIによりJavaScriptに変換したものです。Rubyコードでも正確性は保証できませんが、こちらは私がコードを解読できてすらおりませんので、理解した上でお使いください。

データをコピーする

まず、学務情報システムにアクセスします(要学内LANまたはVPN) その後、上部の学生情報を開きます。 学務情報システム学生情報

上部のタブから 学生情報のタブ

以下のように成績情報を選択します 学生情報‐成績情報

すると、こちらのような成績が一覧となった表があると思います。 この黄色で囲った真ん中の表の部分を全てマウスなどのドラッグでなぞり、コピーしてください。 この表の部分を全て含んでいれば問題ないと思います。 上部の緑のところや、下部の教育プログラムの文字などが入っていても(少なくともRuby版では)不具合が確認できておりません。成績表の部分が入っていれば大丈夫です。 成績画面

履修チェッカー側

コピーしたら、履修チェッカーを開き、入力フォームの中に貼り付けてください。 履修チェッカー その後下の計算ボタンを押すと、自動で計算が実行されます。

終わりに

Ruby版が長くなってしまうので、先に書いておきます。 ご自身で計算された後の確認として用いるにはとても便利かと思われます。ご活用いただけましたら幸いです。 機能の追加依頼などありましたら、学習として実装してみようと考えているので、お気軽に連絡ください。

Ruby版の使い方

特に説明しませんが、ご自身のパソコンにインストールされたRubyでコードを実行すれば動きます。 こちらのほうは私がコードを理解した上で実装しているのであまり問題が起きにくいと思います。 私はRuby3.4.1を用いていますが、古いバージョンでも動く可能性があります。 入力の部分を改変することで、ブラウザー内でRubyが動かせるサイトでも動く可能性が多少ありますが、私には実装できませんでした。

class CalcCredits
  @@subject_hash = {
    "英語": /A0A..../,
    "第二外国語": /A0[BCDE]..../,
    "健康スポーツ・芸術・文化": /B(0B)|(9A)..../,
    "情報科学": /C0A1000/,
    "データサイエンスの誘い": /D0[AB]1000/,
    "人文社会科学分野": /E0[AB]..../,
    "自然科学分野": /F0[AB]..../,
    "学際分野": /G0[AB]..../,
    "社会人力育成科目": /H0A..../,
    "学部共通科目": /R0...../,
    "身体コース科目": /R3...../,
    "福祉コース科目": /R2...../,
    "心理コース科目": /R1...../,
    "全学開放科目": /Z....../,
    "身体地域実践": /R33..../,
    "共通基盤": /R02..../,
    "地域社会": /R03..../,
    "人間理解": /R04..../,
    "全学共通教育科目": /[ABCDEFGH]....../,
    "自由科目計算用": /......./,
  }
  @@graduate_hash = {
    "英語": 4.0,
    "第二外国語": 4.0,
    "健康スポーツ・芸術・文化": 2.0,
    "情報科学": 2.0,
    "データサイエンスの誘い": 2.0,
    "人文社会科学分野": 4.0,
    "自然科学分野": 4.0,
    "学際分野": 2.0,
    "社会人力育成科目": 0.0,
  }
  @@must_subjects = {
    "人間科学入門セミナー": /R010100/,
    "人間科学地域実践入門": /R010220/,
    "人間科学概論": /R020100/,
    "地域包括ケア概論": /R030100/,
    "老齢学": /R340100/,
    "栄養学": /R340200/,
    "運動生理学": /R340500/,
    "病理学": /R360100/,
    "健康衣料素材学": /R360400/,
    "健康科学総合演習": /R370600/,
    "卒業研究": /R900000/
  }
  def initialize(rawdata)
    @rawdata = rawdata
    @credits = Hash.new(0) # @creditsが初期化され、nilエラーが解消    Hash.new(0)でデフォルト値0のハッシュを作成    存在しないキーへのアクセス時も0が返される byCopilot
  end
  def db_convert
    @@db=@rawdata.map do |row|
      row.split(/\t/)
    end
    puts "取り込み完了"
  end
  def calc_credit_subject
    @@subject_hash.each do |key,value|
      @credits[key] = 0
      matched_subjects = @@db.select { |subject| subject[4] =~ value && subject[11] == "合" }
      matched_subjects.each do |subject| 
        @credits[key] += subject[6].to_f  
      end
      
      puts "#{key}計算済み(#{@credits[key]})"
    end
  end
  def graduate_credit
    @@graduate_hash.each do |key,value|
      if @credits[key] >= value
        puts "\e[32m取得終了!#{key} : #{@credits[key]}単位\e[0m"
      else 
        puts "\e[31m#{key}:あと#{value - @credits[key]}単位足りません(現在#{@credits[key]}単位)\e[0m"
      end
    end
  end
  def calc_mast_credits
    @@must_subjects.each do |key,value|
      matched_subjects = @@db.select { |subject| subject[4] =~ value && subject[11] == "合" }
      matched_subjects.each do |subject| 
        @credits[key] += 1
      end
      if @credits[key] >= 1
        puts "\e[32m#{key}:単位取得済み!\e[0m"
      else
        puts "\e[31m#{key}:未取得の可能性\e[0m"
      end
    end
  end
  def course_choice
    if @credits[:身体コース科目] >= 58
      puts "身体選択履修済み"
    else
      puts "\e[31m身体選択を終えるまであと#{58 - @credits[:身体コース科目]}単位(必修含む)(現在#{@credits[:身体コース科目]}単位)\e[0m"
    end
    if (@credits[:身体コース科目] - 58 + @credits[:学部共通科目] - 22 + @credits[:全学開放科目] + @credits[:心理コース科目] + @credits[:福祉コース科目]) >= 12
      puts "学部選択履修済み"
    else
      puts "\e[31m学部選択を終えるまであと#{70 - @credits[:身体コース科目]}単位(学部・身体必修分含む)(現在#{(@credits[:身体コース科目] - 58 + @credits[:学部共通科目] - 22 + @credits[:全学開放科目] + @credits[:心理コース科目] + @credits[:福祉コース科目])}単位)\e[0m"
    end
    if @credits[:身体地域実践] >= 4
      puts "身体地域実践履修済み"
    else
      puts "\e[31m身体地域実践を終えるまであと#{4 - @credits[:身体地域実践]}単位(必修含む)(現在#{@credits[:身体地域実践]}単位)\e[0m"
    end
    if @credits[:共通基盤] >= 6 && @credits[:地域社会] >= 4 && @credits[:人間理解] >= 4
      puts "学部共通選択履修済み"
    else
      puts "\e[31m学部共通選択を終えるまであと共通基盤が#{6 - @credits[:共通基盤]}単位、地域社会が#{4 - @credits[:地域社会]}、身体地域実践が#{4 - @credits[:人間理解]}(必修含む)\e[0m"
    end
    if @credits[:全学共通教育科目] >= 32
      puts "全学共通教育科目履修済み"
    else
      puts "\e[31m全学共通教育科目を終えるまであと#{32 - @credits[:全学共通教育科目]}単位(必修含む)\e[0m"
    end
    if @credits[:自由科目計算用] >= 126
      puts "自由科目履修済み"
    else
      puts "\e[31m自由科目を終えるまであと#{126 - @credits[:自由科目計算用]}単位(必修など全て含む・間違いの可能性)\e[0m"
    end
  end
end


puts "成績データを入力してください(入力終了は空行を入力):"
records = []

while (line = gets.chomp) != ""
  records << line
end

my_raw_db=CalcCredits.new(records)
p "取り込み中"
my_raw_db.db_convert
p "取得単位数計算機"
my_raw_db.calc_credit_subject
p "全学共通科目チェック"
my_raw_db.graduate_credit
p "人科・身体必修チェック"
my_raw_db.calc_mast_credits
p "選択チェック"
my_raw_db.course_choice