Slide 1

Slide 1 text

カスタムフィールドでJSON Schema を使ってみよう 第22 回 redmine.tokyo 勉強会 「カスタムフィールドでJSON Schema を使ってみよう」 2022/5/28 tohosaku

Slide 2

Slide 2 text

自己紹介 tohosaku (github, twitter) 非IT 企業勤務。普段は Excel, Access, Powershell 社内にRedmine を導入したい 宣伝 REDMINE JAPAN のスタッフをやってます。 vol-3 開催にむけて月一でZoom 会議をやってます。 見学だけという方も歓迎しています。 次回は 6/1( 水) 20:00 開催予定。 https://connpass.com/dashboard/ で参加者を募集し ています。 第22 回 redmine.tokyo 勉強会 「カスタムフィールドでJSON Schema を使ってみよう」 2022/5/28 tohosaku

Slide 3

Slide 3 text

最初にまとめから カスタムフィールドに JSON 形式でデータを保存する仕組みを作ってみました。 データ定義を与えれば自動的にフォームを生成し入力を検証してくれます。 データ定義には、"JSON Schema" を使います。 第22 回 redmine.tokyo 勉強会 「カスタムフィールドでJSON Schema を使ってみよう」 2022/5/28 tohosaku

Slide 4

Slide 4 text

例えばこんな依頼があったとします。 今使ってる申請システム( 実はRedmine) に、入力できる項目を増やしてほしい。 申請者の家族を入力できるようにしてほしいです。 年齢、同居、職業もそれぞれ入力できるようにしてほしいです。 …… 現状、Redmine のカスタムフィールドには、複数項目を持ったデータを任意の件 数だけ記録することができません。さあどうする 第22 回 redmine.tokyo 勉強会 「カスタムフィールドでJSON Schema を使ってみよう」 2022/5/28 tohosaku

Slide 5

Slide 5 text

案1 カスタムフィールドをたくさん作ってがんばる。 cf_1 => 家族1_ 名 cf_2 => 家族1_ 年齢 cf_3 => 家族1_ 同居 cf_4 => 家族1_ 職業 cf_5 => 家族2_ 名 cf_6 => 家族2_ 年齢 cf_7 => 家族2_ 同居 cf_8 => 家族2_ 職業 cf_9 => 家族3_ 名 cf_10 => 家族3_ 年齢 cf_11 => 家族3_ 同居 cf_12 => 家族3_ 職業 cf_13 => 家族4_ 名 cf_14 => 家族4_ 年齢 cf_15 => 家族4_ 同居 cf_16 => 家族4_ 職業 cf_17 => 家族5_ 名 cf_18 => 家族5_ 年齢 cf_19 => 家族5_ 同居 cf_20 => 家族5_ 職業 とても辛い…… というか、行をもっと増やしてほしいとかに機動的に対処できない。 第22 回 redmine.tokyo 勉強会 「カスタムフィールドでJSON Schema を使ってみよう」 2022/5/28 tohosaku

Slide 6

Slide 6 text

案2 Excel を添付 これで凌いでいるケースもあるのでは? 第22 回 redmine.tokyo 勉強会 「カスタムフィールドでJSON Schema を使ってみよう」 2022/5/28 tohosaku

Slide 7

Slide 7 text

案3 view customize プラグイン と json-editor を使う json-editor とは? https://github.com/json-editor/json-editor データ構造の定義を "JSON Schema" で指定すると、自動的に入力フォーム を作成してくれる 入力検証もやってくれる 第22 回 redmine.tokyo 勉強会 「カスタムフィールドでJSON Schema を使ってみよう」 2022/5/28 tohosaku

Slide 8

Slide 8 text

実際の画面1 チケット作成/ 編集画面にフォームが表示されているところ。 第22 回 redmine.tokyo 勉強会 「カスタムフィールドでJSON Schema を使ってみよう」 2022/5/28 tohosaku

Slide 9

Slide 9 text

実際の画面2 入力結果が反映しているところ( 本番ではJSON は隠します) 第22 回 redmine.tokyo 勉強会 「カスタムフィールドでJSON Schema を使ってみよう」 2022/5/28 tohosaku

Slide 10

Slide 10 text

実際の画面3 プロジェクトカスタムフィールドに設定されている JSON Schema 第22 回 redmine.tokyo 勉強会 「カスタムフィールドでJSON Schema を使ってみよう」 2022/5/28 tohosaku

Slide 11

Slide 11 text

JSON Schema とは? https://json-schema.org/ JSON のデータ構造を定義するための規格。 JSON Schema そのものも JSON で記述します。 必須項目は? 項目は文字列か、数値か? 最大値、最小値はあるか etc. 何度かの改訂があって今は "Draft 2020-12" が最新 json-editor は、古い JSON schema (draft 4 。2013 年のもの) のみに対応。 古いけど、実用上必要なものはそろっています。 第22 回 redmine.tokyo 勉強会 「カスタムフィールドでJSON Schema を使ってみよう」 2022/5/28 tohosaku

Slide 12

Slide 12 text

Redmine で使うためには json-editor の表示やデータの保存は、view customize plugin で行います。 プロジェクトのカスタムフィールドとチケットのカスタムフィールドを一つずつ 用意します。 プロジェクトのカスタムフィールドを用意し JSON Schema を保存 編集権限があれば、プロジェクトごとに別々のスキーマを定義できる。 チケットのカスタムフィールドに結果をJSON として保存 第22 回 redmine.tokyo 勉強会 「カスタムフィールドでJSON Schema を使ってみよう」 2022/5/28 tohosaku

Slide 13

Slide 13 text

やってみた感想1 Excel 添付とちがってチケットを開くだけで明細が見られる。 カスタムフィールドの中身をプロジェクトごとに変えられる。 データ定義は決まっているので添付ファイル地獄よりはカオスにならない( 多 分) プロジェクト管理者にスキーマの管理方法を理解してもらえれば、システム 管理者がいちいちカスタムフィールドを増やしたりせずにすむ。 定義した Schema も次第に変遷していくことが想定されるので、最初からバ ージョン情報を追加しておくといった工夫が必要かもしれない。 第22 回 redmine.tokyo 勉強会 「カスタムフィールドでJSON Schema を使ってみよう」 2022/5/28 tohosaku

Slide 14

Slide 14 text

やってみた感想2 一つのアプリケーションで入力検証の仕組みが2 通りできることになる。あまり複 雑なことを json-editor にやらせようとしない方が無難。 Schema が JSON のままだとコメントが書けないので、フィールドは yaml にし ておいて読みこむときに、JSON にした方が良いかもしれない。 乱用を防ぐような仕組みは存在しないので、放っておくと凄いカオスになってし まうかも。 第22 回 redmine.tokyo 勉強会 「カスタムフィールドでJSON Schema を使ってみよう」 2022/5/28 tohosaku

Slide 15

Slide 15 text

Q&A 集計どうするの? 案1 データ保存時に集計対象となる金額合計や件数だけを別のカスタムフィールドに転記 する。 案2 Redmine 上での集計はあきらめて、SQL からjson の抽出、それを ruby や powershell な どで加工する。 第22 回 redmine.tokyo 勉強会 「カスタムフィールドでJSON Schema を使ってみよう」 2022/5/28 tohosaku

Slide 16

Slide 16 text

Q&A 入力結果を API から取り出したりできますか? JSON そのものをエスケープしてカスタムフィールドに保存しているだけなので、 API のJSON の一部になっているわけではありません。 API の該当部分のテキストをあらためて JSON としてパースする必要があります。 API のフォーマットがxml の場合であっても当然、この部分のデータは JSON とし て保存されています。 第22 回 redmine.tokyo 勉強会 「カスタムフィールドでJSON Schema を使ってみよう」 2022/5/28 tohosaku