$30 off During Our Annual Pro Sale. View Details »

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

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

tohosaku

May 28, 2022
Tweet

Other Decks in Technology

Transcript

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

    View Slide

  2. 自己紹介
    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

    View Slide

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

    View Slide

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

    View Slide

  5. 案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

    View Slide

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

    View Slide

  7. 案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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  11. 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

    View Slide

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

    View Slide

  13. やってみた感想1
    Excel
    添付とちがってチケットを開くだけで明細が見られる。
    カスタムフィールドの中身をプロジェクトごとに変えられる。
    データ定義は決まっているので添付ファイル地獄よりはカオスにならない(

    分)
    プロジェクト管理者にスキーマの管理方法を理解してもらえれば、システム
    管理者がいちいちカスタムフィールドを増やしたりせずにすむ。
    定義した Schema
    も次第に変遷していくことが想定されるので、最初からバ
    ージョン情報を追加しておくといった工夫が必要かもしれない。
    第22
    回 redmine.tokyo
    勉強会 「カスタムフィールドでJSON Schema
    を使ってみよう」
    2022/5/28 tohosaku

    View Slide

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

    View Slide

  15. Q&A
    集計どうするの?
    案1

    データ保存時に集計対象となる金額合計や件数だけを別のカスタムフィールドに転記
    する。
    案2

    Redmine
    上での集計はあきらめて、SQL
    からjson
    の抽出、それを ruby
    や powershell

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

    View Slide

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

    View Slide