大学の単位修得状況シミュレーターです。複雑な進級・卒業要件を整理して、履修計画を立てやすくすることを目指しています。
ユーザーが自分の所属や目標とする進級年次を選択するエリアです。
curriculum.metadata から取得した情報を表示します。
年度・学科にはyamlの数だけ表示されます。
このセレクタで使用するyamlを選択するまで、これ以降のコンポーネントは表示されません。
curriculum.requirements のリストから選択します。
yamlのrequirementsの各カテゴリずつセレクタに表示されます。
現在の進捗を視覚的に表示するカードです。
単なる合計ではなく、後述する「上限制御グループ」によって「卒業/進級に有効な単位のみ」がプログレスバーに反映されます。
yamlのmetadataで定義される年度や学科、学校が表示されます。
さらに、現在取得している単位の進捗を反映するプログレスバーも表示します。
これは要件チェックも含んでいて、yamlのrequirementsの各要件にtotal_credits_requiredが設定されているなら、その進捗と進級に必要な最低単位に対する修了割合も反映されます。画像ではtotal_credits_required: 124の進級条件を選択しているので、n / 124 単位と表示されています。
進級判定の詳細をリスト表示します。 合計単位数、カテゴリ別単位数、必修科目の履修状況を個別に判定し、すべてクリアで「進級可能」と表示します。
ここにはyamlで定義される細かい進級条件をクリアしているかどうかを表示します。
- 専門と共用の合計最低履修単位を超えているか
- 専門の最低履修単位を超えているか
- 教養の最低履修単位を超えているか
- 要件で定められる単位を履修しているか
もし、yamlの各要件のカテゴリでcheck_all_is_requiredがtrueの場合。
それまで履修していない必修科目をすべて表示します。
これは卒業の際にすべての必修科目を修了している必要があるためです。
各科目をグリッド状に配置した、本アプリのメイン操作エリアです。
科目名、単位数、および特殊な制限状況を表示します。クリックすることで isCompleted 状態を反転させます。
各科目に付与されるチップは、YAMLの以下の設定に基づいています。
courses 内の is_required: trueになっている場合「必修」ラベルがつきます。
yamlのexclusive_groupsに各グループが決められます。
「AかBどちらか片方しか授業が履修できない」科目に表示されます。片方を選択すると、もう一方が自動で無効化される仕組みです。
これは例えば、 以下の画像の「表象文化論・現代社会論」は同時刻の授業のため、同時に履修できません。その状況をこのラベルで反映しています。
yamlのcredit_limit_rulesにて、その各ルールが定められます。
特別課外活動は6単位まで」といったルールを適用します。上限を超えて取得しても、サマリと要件チェックの「有効単位」には加算されない旨を説明します。
例えば、以下の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"]そして以下の選択状態の時、
画像では、["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単位までになります。
これは学生便覧にもその旨が記述されています。
入力したデータをリセットし、別の進級シミュレーションを最初からやり直すための機能です。
内部的には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 analyzeYAML構造が定義と少しでも異なると正しく動作しません。更新後は flutter analyze でエラーがないか確認してください。
- マスタデータ項目提案
- Entitiesクラス設計
- UIのリファクタ
- 各クラスがアーキテクチャに合致したかどうか
- YAMLのmapパース
