はじめに
Tipsでもなんでもありません。たんなる宣伝です
Ruby技術者認定試験のeラーニングサービスを始めました。REx(レックス)といいます。
https://rex.libertyfish.co.jp
Githubのアカウントがあれば簡単に始めることが出来ます
きっかけ
保守ばっかりやっているとつまらないので、自分の知識の棚卸しをかねていちから作ってみたかったので
新しいチャレンジ
このサービスは管理画面はありません。いまのところは。
おそらく私だけだと思いますが、サービスを作る場合に管理画面から作り始めて
フロントはもう疲れ果てているケースが多いです
eラーニングはどうしても作りたかったのでフロントから作り始めました。
で、肝心の問題なのですがどうやって管理しているかというとGithubでリポジトリを作って管理しています。
こうすることによるメリットは4つあります。
- マークダウンのプレビュー機能を作らなくていい
- 検索機能をつくらなくていい
- PRレビュー機能をそのまま使える
- 管理ページは見せないなど権限チェックを作らなくていい
できるだけミスが無いように問題を提供しようと思っていますので、
GithubのPRレビュー機能をそのまま使えるのはありがたいです
デメリットも2つあります。
- 問題ごとの識別子が振れない
- テーブルの親子の構造を表現できない
これらをどうやってクリアしたのか話していこうと思います。
識別子をどう振る問題
識別子はUUIDを利用するようにしました。UUIDが衝突する可能性はかなり低いのでPRがじゃんじゃん来てもコンフリクトが起きる心配が減りました
参考:https://qiita.com/ta_ta_ta_miya/items/1f8f71db3c1bf2dfb7ea
テーブルの親子構造をどうする問題
テーブルの親子構造はファイルを分けることで実現しました!
キャプチャにあるファイルはそれぞれ役割を持っています。
- default.yml その問題はSiverかGoldか答えの選択肢はどれかを定義
- exam_masters_description.md 問題文
- exam_masters_question.md 解説
- option_masters_sentence_1.md 選択肢1
- option_masters_sentence_2.md 選択肢2
- option_masters_sentence_3.md 選択肢3
- option_masters_sentence_4.md 選択肢4
ファイル名にも意味があり次のようになっています。
- 親テーブル
テーブル名_カラム名.md
- 小テーブル
テーブル名_カラム名_通し番号.md
テーブルとカラムはファイル名をパース、どの問題の更新/新規なのかはディレクトリ名で判断と言う風になんちゃって管理画面を実現しました
さいごに
Githubのリポジトリを管理画面として使ってみましたが目的に沿ってなかったりと銀の弾丸ではないと思います。むしろ管理画面で息切れしないための私だけの工夫ですが。。。
リリースすることが目標でしたので荒削りなところがありますが、
どうぞRExをよろしくです