スマホアプリのUIデザインについて知っておきたいこと

# はじめに
スマホアプリのエンジニアとして、UIデザインについて知っておきたいことをまとめておきます。
自分用のリンク集のような意味合いが強いですがお役に立てば幸いです。

# 公式資料
一度は目を通しておきたい基本的で重要なドキュメントです。

### Apple
- [Human Interface Guidelines](https://developer.apple.com/design/human-interface-guidelines/)
 - 現在は英語版しかないようです
- [Apple Design Resources](https://developer.apple.com/design/resources/)
 - デザインツール用のテンプレートファイルなどがあります

### Google
- [Material Design](https://material.io/design/)
 - こちらも現在は英語版しかなさそう
- [Android のマテリアル デザイン](https://developer.android.com/guide/topics/ui/look-and-feel?hl=ja)
 - デベロッパー向けのガイド 

# 知っておきたい概念
エンジニアとしてここまで把握しておく必要はないかもしれませんが、デザイナーさんはこの辺りを踏まえてデザインを行っているはずです。

- UXの5段階モデル
 - [UXデザインにおける5段階モデルとは？](https://goodpatch.com/blog/elements-of-ux/)
 - [UXの5段階モデルにおける各段階での具体的なデザイン手法とは？](https://goodpatch.com/blog/how-to-design-the-elements-of-ux/)
- 情報設計
 - [Webデザインをする前に必要な情報設計とは](https://tree-file.com/web-design/information-design-webdesigner-should-consider/)
 - [情報設計に欠かせない。ユーザーのメンタルモデルを理解する、要素整理のフレームワーク](https://goodpatch.com/blog/latchandcardsorting/)
 - [Webデザインの核を担う“情報設計”を、見落としていませんか？](https://goworkship.com/magazine/information-architecture-designers/)
- LATCH
 - [LATCHとは？ データや情報を分類・整理する５つの方法](https://learn-tern.com/latch/)
- デザインシステム
 - [デザインシステムを正しく理解しよう。作り方・参考事例のまとめ](https://webdesign-trends.net/entry/9068)
 - [デザインシステムの定義と作成方法、導入事例](https://uxmilk.jp/72387)
 - [Airbnbのデザインシステムの構築](https://medium.com/@herulu/airbnb%E3%81%AE%E3%83%87%E3%82%B6%E3%82%A4%E3%83%B3%E3%82%B7%E3%82%B9%E3%83%86%E3%83%A0%E3%81%AE%E6%A7%8B%E7%AF%89-6491c7b920c0)
 - [UXエンジニアが知っておきたいデザインシステムの原則](https://goodpatch.com/blog/ux-engineer-design-system/)
- アトミックデザイン
 - [Atomic Design](http://atomicdesign.bradfrost.com/table-of-contents/)
 - [アトミックデザインとは？ コンポーネント単位で創るUIデザイン手法](https://goworkship.com/magazine/atomic_design/)
 - [もっと効率的にデザインできる！「アトミックデザイン」を紹介します](https://www.weblab.co.jp/staff/design/7352.html)

# UIデザイン要素
UIを実装するための要素について。デザイナーさんとも認識を合わせておく必要があります。

### 標準のUIコンポーネント
OSによって有無や呼び方の違いはあるものの、基本的なものは両OSに備わっています。
それぞれに用途についてのルールがあるのでそれを意識して使う必要があります。

| カテゴリ | コンポーネント | iOS | Android |
|:--|:--|:--|:--|
| ナビゲーション | ナビゲーションバー | Navigation bars | TopAppBar, BottomAppBar |
|  | タブバー | Tab bars | BottomNavigation |
|  | タブ |  | Tabs |
|  | ドロワー |  | Navigation drawer |
| バー | サーチバー | Search bars |  |
|  | ツールバー | Toolbars | AppBar |
| 操作・入力 | ボタン | Buttons | FloatingActionButton, Buttons |
|  | テキストボタン |  | TextButton |
|  | テキストフィールド | Text Fields | Text fields |
|  | チェックボックス |  | Checkboxes |
|  | スイッチ | Switches | Switches |
|  | ラジオボタン |  | Radio buttons |
|  | ピッカー | Picker |  |
|  | スライダー | Slider | Sliders |
|  | ステッパー | Steppers |  |
| リスト | リスト | Tables, Collections | Lists |
|  | テーブル |  | Data tables |
|  | カード |  | Cards |
|  | ページャー | Page Controls | ViewPager |
| 表示補助 | インジケータ | Progress Bars | Progress indicators |
|  | スピナー | Activity Indicators | Progress indicators |
|  | ダイアログ |  | Dialogs |
|  | アラート | Alerts | Dialogs |
|  | アクションシート | Action sheets, Activity Views | BottomSheet |
|  | トースト |  | Snackbars |
|  | ツールチップ |  | Tooltips |
|  | ポップオーバー | Popovers |  |

### カラー
色は重要な要素です。暖色、寒色で大きくイメージが変わりますし、警告色としての赤のように汎用的に意味を持つものもあります。
ブランドカラーを設定して有効的に使うこと、あるいはプライマリ・セカンダリカラーを決めて使い分けるなどを考える必要があります。
また、多用せず目的を持って使うことが重要です。

- [Color(iOS Human Interface Guidelines)](https://developer.apple.com/design/human-interface-guidelines/ios/visual-design/color/)
- [Color(Android Developers)](https://developer.android.com/reference/android/graphics/Color)

### フォント
システムフォントを使うかカスタムフォントを導入するか、大きさ、太さ、色などフォントについても考えることは多くあります。

- [System Fonts(iOS Human Interface Guidelines)](https://developer.apple.com/fonts/system-fonts/)
- [フォント リソース(Android Developers)](https://developer.android.com/guide/topics/resources/font-resource?hl=ja)

### イメージ
どのような画像をどこに置くか、というものはもちろんとして、用途やデバイスによってルールが色々決められておりこれを考慮する必要があります。

##### 解像度
- [Image Size and Resolution(iOS Human Interface Guidelines)](https://developer.apple.com/design/human-interface-guidelines/ios/icons-and-images/image-size-and-resolution/)
- [各種のピクセル密度をサポートする(Android Developers)](https://developer.android.com/training/multiscreen/screendensities)

##### アイコン
- [System Icons(iOS Human Interface Guidelines)](https://developer.apple.com/design/human-interface-guidelines/ios/icons-and-images/system-icons/)
- [App Icon(iOS Human Interface Guidelines)](https://developer.apple.com/design/human-interface-guidelines/ios/icons-and-images/app-icon/)
- [アイコン デザイン ガイドライン(Android Developers)](https://developer.android.com/guide/practices/ui_guidelines/icon_design?hl=ja)
- [Icons(Material Design)](https://material.io/resources/icons/?style=baseline)
- [Font Awesome](https://fontawesome.com/)

##### ストア用
- [App Store Connect ヘルプ](https://help.apple.com/app-store-connect/)
- [Marketing Resources and Identity Guidelines(Apple Developer)](https://developer.apple.com/app-store/marketing/guidelines/)
- [Google Play アイコンのデザイン仕様(Android Developers)](https://developer.android.com/google-play/resources/icon-design-specifications?hl=ja)

# デバイス
デバイスのサイズについてもUIデザインにとって重要な影響を与えます。
最近はアスペクト比にもいろいろなパターンがあり、複雑さを増しています。

- [Adaptivity and Layout(iOS Human Interface Guidelines)](https://developer.apple.com/design/human-interface-guidelines/ios/visual-design/adaptivity-and-layout/)
- [iPhone/iPad/Apple Watch解像度(画面サイズ)早見表](https://qiita.com/tomohisaota/items/f8857d01f328e34fb551)
- [Device Metrics(Material Design)](https://material.io/resources/devices/)
- [各種の画面サイズをサポートする(Android Developers)](https://developer.android.com/training/multiscreen/screensizes)

# ツール・サービス

### デザインツール
- [Sketch](https://www.sketch.com/)
- [Adobe XD](https://www.adobe.com/jp/products/xd.html)
- [Figma](https://www.figma.com/)

### バージョン管理
- [Abstract](https://www.abstract.com/)
- [Kactus](https://kactus.io/)
- [Versions](https://versions.sympli.io/)

### 共有（ハンドオフ）
- [Zeplin](https://zeplin.io/)
- [Avocode](https://avocode.com/)

### プロトタイプ作成
- [InVision](https://www.invisionapp.com/)
- [Prott](https://prottapp.com/ja/)
- [Flinto](https://www.flinto.com/)
- [Principle](https://principleformac.com/)
- [Origami Studio](https://origami.design/)
- [Framer](https://www.framer.com/)

### フロー図作成
- [Overflow](https://overflow.io/)
- [Whimsical](https://whimsical.com/)
- [guiflow](https://github.com/hirokidaichi/guiflow) 

# 参考

### 記事・サイト
- [iOS ヒューマンインターフェースの原則](https://qiita.com/usagimaru/items/9b55daa4d88b0bb98f38)
- [【翻訳してみた】マテリアルデザイン - モーションデザインを理解すること](https://note.com/ioriiwaki/n/n986a5ff00733)
- [UX MILK](https://uxmilk.jp/)
- [世界と日本のUX | BLOG](https://uxdaystokyo.com/articles/)

### 書籍
- [はじめてのUIデザイン](https://peaks.cc/books/ui_design)
- [モバイルデザインパターン 第2版](https://www.amazon.co.jp/dp/4873117038)
- [UXと理論で作る Webデザイン: デザイナーでなくてもわかる](https://www.amazon.co.jp/dp/B077D8NN3L)
- [UIデザインの教科書［新版］ マルチデバイス時代のインターフェース設計](https://www.amazon.co.jp/dp/B07KXNKRMM)
- [Web制作者のためのUXデザインをはじめる本 ユーザビリティ評価からカスタマージャーニーマップまで](https://www.amazon.co.jp/dp/B01N8TYF05)
- [デザイン入門教室［特別講義］　確かな力を身に付けられる ～学び、考え、作る授業～ (Design ＆IDEA)](https://www.amazon.co.jp/dp/B010CQDQMK)
- [ノンデザイナーズ・デザインブック［第4版］](https://www.amazon.co.jp/dp/B01LW1BC2L)
- [プロトタイピング実践ガイド スマホアプリの効率的なデザイン手法](https://www.amazon.co.jp/dp/B00MIM1KES)
- [みんなではじめるデザイン批評―目的達成のためのコラボレーション&コミュニケーション改善ガイド](https://www.amazon.co.jp/dp/B01J2OEYLU)
- [デザインの伝え方](https://www.amazon.co.jp/dp/4873117798)
- [Design Systems ―デジタルプロダクトのためのデザインシステム実践ガイド](https://www.amazon.co.jp/dp/B07PTXXK1S)