Slide 1

Slide 1 text

Shinichi kogiso UI/UXデザイナーLT会 #uiuxdesignerslt - 2020/09 TypeScriptではじめるUIデザイン

Slide 2

Slide 2 text

自己紹介

Slide 3

Slide 3 text

- 株式会社SmartHRに在籍 - プロダクトデザイングループ所属のカレー担当 - アジャイルとエンジニアリングとデザインが好き - ハンドルネームは@kgsi こぎそしんいち kgsi

Slide 4

Slide 4 text

罪 傲慢 憤怒 嫉妬 怠惰 強欲 暴食 色欲 SmartHRでのロール プロダクトマネージャー UXデザイナー UXリサーチャー UIデザイナー デザインエンジニア インフォメーションアーキテクト UIデザイナー、マネージャー 強欲 嫉妬 暴食 色欲 憤怒 怠惰 傲慢 メンバー fumiya versionfive oremega nao kgsi uknmr ouji プロダクトデザイングループのチームはそれぞれ「七つの大罪」を(以下略...

Slide 5

Slide 5 text

今回は小ネタ

Slide 6

Slide 6 text

UIの情報整理、どうしてます?

Slide 7

Slide 7 text

UIの情報整理、どうしてます? WFから情報を起こす

Slide 8

Slide 8 text

UIの情報整理、どうしてます? スプレッドシートの 仕様情報から

Slide 9

Slide 9 text

UIの情報整理、どうしてます? モデル図から落とし込む...等

Slide 10

Slide 10 text

UIの情報整理は難しい (こともある)

Slide 11

Slide 11 text

- 情報は視覚的な表現に囚われやすい - 一次情報だとUIに当てはめた場合に迷いが生じる(ことも) - 現状の画面の値を把握する際に整理がしにくい (ことも) UIの情報整理は難しい

Slide 12

Slide 12 text

- 設計前に正確な情報を把握しておきたい - エンジニアに意図を共通化して伝えられる情報「も」欲しい UIの情報整理は難しい 理想

Slide 13

Slide 13 text

UIの情報整理にTypeScriptを使ってみよう

Slide 14

Slide 14 text

UIの情報整理にTypeScriptを使う TypeScriptの特徴

Slide 15

Slide 15 text

- 強力な型(interfaceやtype)の表現力が使える - フロントエンドの設計に多用されるので相性が良い - エンジニアと共通言語として利用もできる UIの情報整理にTypeScriptを使う

Slide 16

Slide 16 text

実際にやってみた (面白そうなので)

Slide 17

Slide 17 text

思考ケースで紹介 (実画面は出しにくいので)

Slide 18

Slide 18 text

ケース1: 大まかなワイヤーと仕様が渡されたら

Slide 19

Slide 19 text

ケース1:大まかなワイヤーと仕様が渡されたら スプレットシートの情報を収集

Slide 20

Slide 20 text

interface RightFixedNote { NoteItems: 
 memoText?: sumit:
 } interface NoteItem { text?: date?: mail?: 
 edit: } ※interfaceで決められたお作法の上でUIに必要な値を整理する ケース1:大まかなワイヤーと仕様が渡されたら

Slide 21

Slide 21 text

※それぞれ値に思案をする。値に対して制約・どんな型が必要かを検討 interface RightFixedNote { NoteItems: NoteItem[]
 memoText?: string sumit: () => void
 } interface NoteItem { text?: string date?: Date mail?: string
 edit: () => void } // UIの本体構造 // メモのテキストが必要だよね(最大値は?) // 保存するボタンも必要 // 編集リストが並ぶ(最大いくつだろ) // 編集リストが構造 // 日付(可能ならフォーマットも決めておきたい) // メール(メールのフォーマットも決める?) // 保存・編集するボタンも必要 // 編集リストが並ぶ ケース1:大まかなワイヤーと仕様が渡されたら

Slide 22

Slide 22 text

interface RightFixedNote { NoteItems: NoteItem[]
 memoText?: string sumit: () => void
 } interface NoteItem { text?: string date?: Date mail?: string
 edit: () => void } ケース1:大まかなワイヤーと仕様が渡されたら

Slide 23

Slide 23 text

UIとして可視化し、Sketchなどで組み立てる interface RightFixedNote { NoteItems: NoteItem[]
 memoText?: string sumit: () => void
 } interface NoteItem { text?: string date?: Date mail?: string
 edit: () => void } アウトプット ケース1:大まかなワイヤーと仕様が渡されたら

Slide 24

Slide 24 text

ケース2: TSは も表現可能

Slide 25

Slide 25 text

※カレーライスを表現する。ちなみに値に日本語を使ってもエラーにならない interface カレーライス { カレールー: カレールー ライス: ライス } interface ライス { 米: 米の品種 水分: 水 | ミルクの種類 ホールスパイス?: ホールスパイス[] } interface カレールー { ホールスパイス?: ホールスパイス[] パウダースパイス?: パウダースパイス[] 野菜?: 野菜の種類[] 肉?: 肉の種類 水分?: 水 | ミルク 塩分?: 塩の種類   その他?: その他[] } ケース2: も表現可能

Slide 26

Slide 26 text

※typeも自由な表現が可能です。書き切れないので割愛 ケース2: も表現可能 type 米の品種 = '日本米'|'ジャスミンライス'|'バスティマライス'|'玄米'|'五穀米' type ホールスパイス = 'コリアンシード'|'シナモン'|'ベイリーフ'|'カルダモン'|'クローブ'|'クミン type パウダースパイス = 'コリアンパウダー'|'チリパウダー'|'パプリカパウダー'|'ターメリック' type 塩の種類 = '食塩'|'岩塩'|'ヒマラヤ岩塩' type 野菜の種類 = 'ズッキーニ'|'トマト'|'ナス'|'ピーマン'|'豆'|'じゃがいも'|'しょうが'|'ナス type 肉の種類 = '鳥肉'|'豚肉'|'マトン'|'水牛' type その他 = 'ヨーグルト'|'タマリンド'|'酢'|'カリフラワー'|'はちみつ' type 牛乳の種類 = '牛乳'|'ココナッツミルク'|'山羊の乳' ...以下略

Slide 27

Slide 27 text

ケース2: も表現可能 ?

Slide 28

Slide 28 text

アウトプット ※これはネタです ケース2: も表現可能

Slide 29

Slide 29 text

この手法の所感 ※個人の感想

Slide 30

Slide 30 text

- フロントエンドもやってるので割と違和感なく表現できた - 値や必要な要素のチェックを意識できる - 複雑なUIのリバースエンジニアリングなどにも使えそう - エンジニアとして感覚を忘れず設計できる(コードが書ける) この手法の所感

Slide 31

Slide 31 text

終 UIとコードは仲良しだよ ※弊社はTSも書きたい 好きなプロダクトデザイナーを募集中です