学校のシステム作ってみました
一段落したので、開発中の生徒情報システム(おまけでカレンダーや有給管理機能も)についてまとめておきます。
いま使っている成績管理システムは有料のクラウドシステムですが、クラウドにありがちなサービス終了とか、一方的な値上げとかがあった際に、逃げ場がないと困るということで、自分で作れる目処を立てておきたいというのが作り始めた動機。最初は、とりあえず、ネット出願ができれば十分ということで、GoogleFormとGAS(GoogleAppAcript)で出願からネット決済まで作ったけど、時間に余裕があったので、今のシステムにない機能を作ってみようかとちょっと下調べ。
直近はLaravelで出退勤システムを作ったので、Laravelの最新バージョンを調べてる間に、Filamentという拡張パッケージを見つけてしまって、これを使った何か作ってみたくなってしまったw
Filament3.2だと、最後に使ったLaravel5(今回使ったのはLaravel11。この段階で1世紀遅れてるが)とはまったく別の言語と言えるくらい、Laravelでは面倒なbladeやroute用のファイルを作らなくても動いてしまう。DBのテーブルを用意すれば、とりあえず、1コマンドでDBの内容の一覧や入力用フォームができてします。これを修正していけば簡単。と思って作り始めたんですが、結果的に1から書いた方が早いんでがw
1から書くと言っても、いまやAI時代。作りたい内容をAIに放り込めばコードを書いてくれます。ま、そのまま動くことは少ないし、何度も訂正するように言えば、どんどん泥沼にハマっていって、とんでもないコードができてくるので、まだまだAIも適材適所が必要なんですが、それでもAIのお陰で学習コストも、開発時間も大幅に短縮できたのは間違いないです。
AIが作ったコードをそのまま動かして、想定通りの動作だと、そのまま使ってしまうんですが、そうすると、まったく何も学ばないので、応用が効かないし、次に同じような場面でもAIに聞かないと作れないという事態に。結果的に、遠回りの可能性もあるので、ちゃんと勉強するのは大事ですw
AIに任せていちばん助かったのは、今回は英語と中国語の多言語対応したので、英語と中国語の翻訳ファイルを作るのに、日本語だけ入ったファイルを投げれば、英語と中国語を補完したファイルを作ってもらえるのは便利。でも、翻訳が合ってる確信はないです。各種証明書の文面や科目名の翻訳も活躍してもらいました。
一番、助かるのは、バグを見つけてくれることかな。自分が書いたコードのバグって見つけにくいんですよね。やはり、自分では合ってるという先入観でコードを見るからか、誰かにみてもらった方が見つけてもらますが、一人だとだれにも聞けない。半角のピリオドが紛れてるだけでもエラーになるけど、その場所次第ではエラーメッセージはあてにならない。そんなきは、「このコード、どこ間違ってる?」って聞けば、さすがAI、即座に指摘してくれる。
AIの話はあちこちで聞けるので、本題に。作り始めたのが2024年の11月頃。年末年始の休みで一気に進んだが、ま、学校のシステムなので、4月から本格稼働というスケジュール感で、パイロット版、本番サーバーでのテスト、本番化という流れ。ちなにみ、まったく仕様書などのドキュメントやコード内のコメントなどはなしで、気分でどんどん機能を追加したり、変更したりで、当初の想定よりかなり大きくなったので、いい加減ドキュメントを残さないと思って、今回は新しい機能を追加したらメモだけは残しておいた。そのメモを頼りに機能をざっと見てみると、
・機能ごとにロールコントロール(誰がどの機能を使えるかを細かに設定可能)
・承認機能(単位認定、卒業判定、学校日誌、表彰、懲罰などは管理職へ承認依頼メールを自動送信。承認してもらうことでデータが確定)
・カレンダー(校務分掌的なプロジェクト単位でのタスク管理、個人用カレンダーと全体への公開機能、生徒・職員の誕生日、有給・出張など、指定したカレンダーだけを表示可能。選んだカレンダーは個人ごとにDBに保存。祝日はGoogleからもらって誕生日とともにキャッシュに。Googleの祝日って1年先までしかもらえないんですね)
・広報機能(全国の中高のデータから訪問した先の情報を入力・管理。小学校のデータも入れたら重すぎて削除w)
・生徒情報(生徒に関する気になる情報を入力。公開範囲を個人、グループで指定可能。個人情報なので閲覧権限を細かく設定可能にしました)
・復旧機能(間違えて、訂正・削除した場合に元に戻せる機能。必要だったかな?)
・履歴機能(誰がいつ、どこから、どんな作業を実施したかの記録)
・タグ機能(生徒や学校情報にタグを付けて共有できるように。修学旅行や体育祭のグループ分けなどで便利と思ったけど、使うのかな?)
・エクスポート機能(まだまだエクセルで管理したいという人もいるかなと思って、一応つけてみた)
・通信制課程機能(通信制の科目・履修・スクーリング・レポート・テスト機能・単位の承認・卒業判定)
・生徒の写真はちゃんとS3に入れてテンポラリURLに。いちいちサーバーに写真を取りに行くと重たいのでキャッシュにと思ったけど、そこはブラウザに任せたw
・ログインはGoogle一択。DBに登録されているユーザー以外はログイン不可。
・有給休暇(休暇の付与、消化状況、残り日数の管理)
・一覧表で使いたいカラムを自由に選択して、その状態をDBに保存。次回ログイン時も同じ状態で
・お気に入り機能で、選択した生徒は常に各自のトップ画面に表示(お気に入り機能と言ってるが、決してお気に入りの生徒を登録するのではなく、重点的に対応が必要な生徒を登録する機能ですね)
・証明書発行(とりあえず、成績単位修得・卒業・卒業見込み・在籍は日英対応、要録は日本語のみ)
・学校日誌(行事・休暇者はカレンダーから、生徒数などはDBからカウントするので、実質、何も入力しなくても完成。校長の承認機能も実装)
・一斉通知機能(ログイン時、ログイン中にメッセージを送れる。ま、エラー通知機能のおまけ)
・多言語対応(とりあえず、日本語・英語・中国語)
とりあえず、こんなところかな。また気が向いたらアップデートします。
追伸
本番化すると、当然ながらみんな使い始めました。本番化まで1ヶ月くらいはテスト期間を設けたけど、ほとんど誰も使わず、バグがないのかなって安心したたら、本番化と同時にバグがいくつも発覚。ま、バグがないなんてことはなく、想定の範囲内だからいいんだけど、プログラムって作るよりテストの方が地味で大変なので、みんなに使ってもらってバグ出ししようという目論見は失敗でしたw