React(TypeScript)の構成でアプリを作成しました【課題その1】【PortfolioSite】

## はじめに

#### 学習するに至った経緯
2020年より、未経験からエンジニアへの転職を目指し、某プログラミングスクールへ通う。<br>入学後、『Ruby』を未経験から学ぶ人が多いのと『Ruby』の求人が思っていた以上に少ないので、<br> 卒業後、フロントエンドのエンジニアを目指す事に。
当初は、プロゲート,ドットインストール,Youtube,Udemyを使い学習をしていたが、<br> Todolistなどのアプリケーションをテキスト通りに作成できても、カスタマイズなど実装できない事に悩む。
その時に、youtubeを見て、アウトプット中心の学習で少しでも経験を積んで、今の状況を改善できればと思い、『フロントエンド塾』に参加する事に。

## 学習したスキル
- コンポーネント指向の理解
- Atomic Designの概念の理解
- Atomic Designの概念を理解した上での簡単なデザインスキル
- コンポーネント指向を理解した上でのUI構築スキル
- TypeScript+Reactの構成で、Applicationを開発するスキル
- GitとGitHubのプルリクエスト作成までの流れ及びコードビューの仕方

## 具体的な手順
- 参考としたいサイトを検索しAdobeXD or Figmaを用いてデザイン作成
- TypeScript×Reactの構成でlocal環境にアプリ作成
- localでポートフォリオサイト実装
- Githubにレポジトリを作成し適宜Push

## 完成品

https://kitou88c39.github.io/front_end_one/


## コンポーネント指向とは
- ソフトウェア開発において部品ごとに小さく分けて開発する考え方のこと。
- Reactはコンポーネント指向を前提として作られたライブラリで、Reactにおいてコンポーネントとは、
『マークアップなどの見た目とロジック機能を分離せず合わさったもの』もしくは、『構造・見た目・振る舞いをセットにして1コンポーネント』として定義。
- メリット：影響範囲が限定されるため、保守運用がしやすい。パーツの再利用がしやすく、拡張しやすい。
- デメリット：コンポーネントを分ける粒度、分け方が人によって異なる。

## Atomic Designとは（概念）
- コンポーネント単位で定義するUIデザイン手法。
- React、Vue用というわけではないがモダンJavaScriptと相性が良い。
- 原子⇨分子⇨有機体（生体）⇨テンプレート⇨ページという５つのレベルに分かれる。

◉５つのレベル
1.Atoms（原子）・・・ボタン、アイコン、インプットエリアなどの要素の最小単位。
2.Molecules（分子）・・・Atoms の集合体、アイコン付きのボタンや検索ボックスなど。
3.Organisms（有機体）・・・Atoms、Molecules の集合体。ヘッダーや検索エリアなど。
4.Templates（テンプレート）・・・Organisms の集合体。ページレイアウトなど。
5.Pages（ページ）・・・表示するページそのもの。

- 画面要素を５段階に分け、組み合わせる事でUIを実現。
- コンポーネント化された要素が画面を構成しているという考え方。
- React、Vue用というわけではないがモダンJavaScriptと相性が良い。
- メリット　：　同じプロジェクト内別プロジェクトでも利用できる。組み合わせ次第で色々なデザインが作れる。

## 課題その１をこなす上で苦労した点と苦労をどのように克服したか
- Webデザインをそもそも何の事かよくわからなかった。<br>
⇨ youtubeを見て、Figumaの使い方を勉強し、実際に自身で何個か作成し、デザインした物をコーディングしてみた。
- TypeScript×Reactの構成でlocal環境にアプリ作成。localでポートフォリオサイト実装。 Githubにレポジトリを作成し適宜Push。Prettierを導入。<br>
⇨ 下記の参考サイトを中心に学習をして、何度も試行錯誤をして課題を仕上げた。

## 課題その１：感想
- 自分が望んでいたアウトプット中心の学習が取り組めた。
- 教材を勉強しているだけでは出てこない言葉や技術を知るなど、幅広く経験が出来た。
- 当初は何の事かよくわからない事が多かったが、何度も検索して、試行錯誤を繰り返し、何とか到達することが出来たので良い経験を積む事ができた。

## 参考サイト
『コンポーネント指向とは』
[React初学者が必ず押さえておきたい考え方とは？【コンポーネント指向のフロントエンド】](https://www.i3design.jp/in-pocket/8854)
[理解しておきたいコンポーネント指向](https://qiita.com/nabepon/items/723dc53ad584b3457ea7)

『Atomic Designとは（概念）』
[もっと効率的にデザインできる！「Atomic Design」を紹介します](https://www.weblab.co.jp/staff/creator/7352.html)
[【Atomic Design】ってなんだろう](https://note.com/mhtcode/n/n49419507c9d1)
[フロントエンドエンジニアなら知らないと損！アトミックデザインのすゝめ](https://www.youtube.com/watch?v=Un0aoW0kNeE&t=658s)
[Atomic Design を分かったつもりになる | DeNA DESIGN BLOG](https://bit.ly/2zZNU6e)

課題をこなす上で苦労した点と苦労をどのように克服したか
[【実践】Webデザインはこんな感じで作る！ノーカット製作の流れ。](https://www.youtube.com/watch?v=XbMLnYGL2TA&t=392s)
【実践】HTML/CSSコーディングの流れ！ノーカット製作風景。
https://www.youtube.com/watch?v=jxIpYOOh-TU
https://www.youtube.com/watch?v=J9agaxgjnXc&t=486s
　[【初心者】Figma講座](https://www.youtube.com/watch?v=htmjI2wpfjY)
　[FigmaでWebカンプを作ろう！](https://www.youtube.com/watch?v=EdAz30Y8NMc)
[【React】React + TypeScriptの開発環境を作る（デプロイまで）](https://www.i-ryo.com/entry/2021/01/26/074007)
[【React】CSS ModulesでCSSとSass(SCSS)のローカルスコープを作る](https://www.i-ryo.com/entry/2020/12/11/065700)
　[How to set up Sass in your Create React App](https://www.youtube.com/watch?v=CmETVFVUWZw)
　[How to Deploy React App to GitHub Pages](https://www.youtube.com/watch?v=F8s4Ng-re0E)
[React × TypeScriptで作ったポートフォリオサイトをGitHub Pagesで公開してみる](https://qiita.com/kazama1209/items/868c09393007cc9b234f)
[create-react-appでSassやCSS-moduleを使う方法](https://qiita.com/yikeda6616/items/0e31a920d533d70c0bd9)
[【日本一わかりやすいTypeScript入門】ESLintとPrettierでコードの品質を高めよう](https://www.youtube.com/watch?v=R35LJL6a-p0)
[Prettierの使い方解説。フロントエンドで必須のコード整形ツールで、プログラミング学習の効率も上がります](https://www.youtube.com/watch?v=zoaIv5ifoPI)
[【初心者向け】TypeScript用にESLintとPrettierを導入する](https://qiita.com/y-w/items/dcf5fb4af52e990109eb)
[Prettierの導入方法　　フロントエンド開発で必須のコード整形ツール](https://ics.media/entry/17030/)
[React 最初からデプロイまで① GitHub Pages編](https://www.youtube.com/watch?v=Zb-JaSyVnyk&t=69s)
[create-react-appで作ったwebサイトからサンプルコードを漏れなく消す](https://qiita.com/ham0215/items/ed5649cc43004088ff04)