GitHub - Rerurate514/tanni_simulator: 大学の単位修得状況シミュレーターです。複雑な進級・卒業要件を整理して、履修計画を立てやすくすることを目指しています。 · GitHub
Skip to content

About

大学の単位修得状況シミュレーターです。複雑な進級・卒業要件を整理して、履修計画を立てやすくすることを目指しています。

Resources

Stars

3 stars

Watchers

0 watching

Forks

Repository files navigation

tanni_simulator

大学の単位修得状況シミュレーターです。複雑な進級・卒業要件を整理して、履修計画を立てやすくすることを目指しています。

各コンポーネント解説

セレクタの説明

ユーザーが自分の所属や目標とする進級年次を選択するエリアです。

年度・学科

curriculum.metadata から取得した情報を表示します。 年度・学科にはyamlの数だけ表示されます。

image

このセレクタで使用するyamlを選択するまで、これ以降のコンポーネントは表示されません。

image

進級条件

curriculum.requirements のリストから選択します。

image

yamlのrequirementsの各カテゴリずつセレクタに表示されます。

image

サマリ

現在の進捗を視覚的に表示するカードです。 単なる合計ではなく、後述する「上限制御グループ」によって「卒業/進級に有効な単位のみ」がプログレスバーに反映されます。 yamlのmetadataで定義される年度や学科、学校が表示されます。

image

さらに、現在取得している単位の進捗を反映するプログレスバーも表示します。 これは要件チェックも含んでいて、yamlのrequirementsの各要件にtotal_credits_requiredが設定されているなら、その進捗と進級に必要な最低単位に対する修了割合も反映されます。画像ではtotal_credits_required: 124の進級条件を選択しているので、n / 124 単位と表示されています。

image

要件チェック

進級判定の詳細をリスト表示します。 合計単位数、カテゴリ別単位数、必修科目の履修状況を個別に判定し、すべてクリアで「進級可能」と表示します。

image

ここにはyamlで定義される細かい進級条件をクリアしているかどうかを表示します。

  • 専門と共用の合計最低履修単位を超えているか
  • 専門の最低履修単位を超えているか
  • 教養の最低履修単位を超えているか
  • 要件で定められる単位を履修しているか

もし、yamlの各要件のカテゴリでcheck_all_is_requiredがtrueの場合。 それまで履修していない必修科目をすべて表示します。

image

これは卒業の際にすべての必修科目を修了している必要があるためです。

image

単位選択テーブル

各科目をグリッド状に配置した、本アプリのメイン操作エリアです。

image

カードの説明

科目名、単位数、および特殊な制限状況を表示します。クリックすることで isCompleted 状態を反転させます。

image

各ラベルの説明

各科目に付与されるチップは、YAMLの以下の設定に基づいています。

必修科目

courses 内の is_required: trueになっている場合「必修」ラベルがつきます。

image
排他制御グループ

yamlのexclusive_groupsに各グループが決められます。 「AかBどちらか片方しか授業が履修できない」科目に表示されます。片方を選択すると、もう一方が自動で無効化される仕組みです。

image

これは例えば、 以下の画像の「表象文化論・現代社会論」は同時刻の授業のため、同時に履修できません。その状況をこのラベルで反映しています。

image
上限制御グループ

yamlのcredit_limit_rulesにて、その各ルールが定められます。 特別課外活動は6単位まで」といったルールを適用します。上限を超えて取得しても、サマリと要件チェックの「有効単位」には加算されない旨を説明します。

image

例えば、以下のyamlの時、

credit_limit_rules:
  - category_name: "専門教育科目"
    groups:
      - id: "limit-prof-extracurricular"
        name: "専門教育 特別課外活動"
        description: "特別課外活動Ⅰ〜Ⅵの合計で6単位まで算出可能"
        max_credits_allowed: 6
        course_ids: ["prof-61", "prof-62", "prof-63", "prof-64", "prof-65", "prof-66"]

そして以下の選択状態の時、

image

画像では、["prof-61", "prof-62", "prof-63", "prof-64", "prof-65", "prof-66"]がすべて選択されていますが、サマリのプログレスバーには6単位と表示されています。本来なら(1+1+1+2+2+2)で9単位と表示・加算されるべきですが、これがルールによって制限されています。制限される値はmax_credits_allowedにて決まります。このグループはmax_credits_allowed: 6となっているので6単位までになります。

これは学生便覧にもその旨が記述されています。

image

単位全消し

入力したデータをリセットし、別の進級シミュレーションを最初からやり直すための機能です。

image

内部的にはdeselectAll 関数を実行しているだけです。

主な機能

  • 単位管理: セメスターごとに並んだ科目カードをタップして、修得状況を切り替えられます。
  • 要件チェック: 選んだ進級・卒業条件をもとに、不足単位や未履修科目をその場で確認できます。
  • カリキュラム定義: YAML形式で学科ごとの科目情報や算出ルール(排他制御、算入上限など)を記述します。

アーキテクチャ

Layered Architectureで構成し、Riverpodで状態管理しています。

詳細は ARCHITECTURE_GUIDE を参照してください。

マスターデータ仕様

カリキュラムデータは assets/data/curriculum/ 以下のYAMLファイルで管理します。

主な設定項目

  • check_all_is_required: true : マスタ内の is_required: true 科目を必須チェック対象にします。
  • exclusive_groups : どちらか一方のみ算入する排他制御。
  • credit_limit_groups : 特別課外活動などの算入上限制御。

詳細は docs/MASTER_DATA_GUIDE.md を参照してください。

開発者向け情報

推奨環境

  • Flutter: 3.29.0 以上
  • Dart: 3.6.0 以上
  • Linter: very_good_analysis(Line length: 80)

セットアップ

# 依存関係の解決
flutter pub get

# コード生成(freezed, riverpod_generator, drift)
dart run build_runner build --delete-conflicting-outputs

# l10n生成
flutter gen-l10n

# 静的解析
flutter analyze

注意事項

YAML構造が定義と少しでも異なると正しく動作しません。更新後は flutter analyze でエラーがないか確認してください。

AIに手伝ってもらったこと

  • マスタデータ項目提案
  • Entitiesクラス設計
  • UIのリファクタ
  • 各クラスがアーキテクチャに合致したかどうか
  • YAMLのmapパース

About

大学の単位修得状況シミュレーターです。複雑な進級・卒業要件を整理して、履修計画を立てやすくすることを目指しています。

Resources

Stars

3 stars

Watchers

0 watching

Forks

Releases

Contributors

Languages