フロントエンドのコーディング課題６選-このフロントエンドの課題、実装できますか？

>こちらの記事は、[Indrek Lasn](https://medium.com/@indreklasn?source=follow_footer--------------------------follow_footer-) 氏により2019年 10月に公開された『 [Here Are 6 Front-End Challenges to Code](https://medium.com/better-programming/here-are-6-frontend-challenges-to-code-9952190c97cc) 』の和訳です。
本記事は原著者から許可を得た上で記事を公開しています。
著者Twitter https://twitter.com/lasnindrek




フロントエンドの開発はストレスが多く難しい作業ですが、練習すれば技術をマスターすることができます。

自ら進んで鍛錬と努力をすれば、フロントエンド開発の場面で問題を解決することのエキスパートとなることができるでしょう。

優れたフロントエンド開発者になるために効果的な方法の１つは、単純にできるだけ多くの課題に取り組み、解決することです。

フロントエンド開発の達人になるために、今日から解き始めることができる6つの課題を紹介します。
ではさっそく、実装すべき６つの課題はこちら。


# 1. クレジットカードフォーム

スムーズで見た目の良いマイクロインタラクションを持つ、クレジットカードフォームです。
数値の書式設定やバリデーション、そしてクレジットカード種別の自動検出機能があります。
Vue.jsで書かれており、また完全にレスポンシブです。

[ここ](http://codepen.io/JavaScriptJunkie/pen/YzzNGeR)で実際に見ることできます。
![](https://miro.medium.com/max/800/1*pwVhnOs4CohLUcmu3I4Z6A.gif)

クレジットカードフォーム — https://github.com/muhammederdem/credit-card-form

この課題の解決を通して学べること

- フォーム処理とバリデーション

- イベントリスナーの処理（たとえば、フォームの値が変更されると、クレジットカードに変更後の値が表示されます。）

- ページ上の要素（特にフォームに重なるクレジットカード）の表示および配置方法の理解


# 2. 一から作る棒グラフ

棒グラフは、カテゴリデータを、それらが表す値に比例した高さまたは長さの長方形の棒で表します。

棒グラフは縦または横にプロットできます。縦棒グラフ は折れ線グラフと呼ばれることもあります。
*(原文)A vertical bar chart is sometimes called a line graph.

![](https://miro.medium.com/max/800/1*37uCN6y1WyLukxwCadhWRw.gif)

この課題の解決を通して学べること

- 構造化されたわかりやすい方法でデータを表示する

- オプション：`<canvas>`要素の使用方法と、`<canvas>`要素を使った画面要素の描画方法

[ここ](https://www.worldometers.info/world-population/world-population-by-year/)で、年ごとの世界人口のデータを見ることができます。


# 3. Twitterハートアニメーション

2016年頃、Twitterはツイートのいいねのためにこの素晴らしいアニメーションを導入しました。
2019年の今でも、まだイケてるので、自分で作成してみませんか？

![](https://miro.medium.com/max/480/1*mdijyUaqeu48ORAw9QPBBA.gif)

Twitterのツイートのいいねアニメーション

この課題の解決を通して学べること

- `keyframes` CSS属性の仕組み

- HTML要素の操作およびアニメーション方法

- JavaScript、HTML、およびCSSの組み合わせ方


# 4.検索機能を持ったGitHubリポジトリ

特に凄いことはありません。GitHubのリポジトリは、基本的には見た目を良くした、ただのリストの一種です。
 
すべきことは、リポジトリを表示し、ユーザーがリポジトリをフィルタリングできるようにすることです。

[公式のGitHub API](https://developer.github.com/v3/)を使用して、ユーザーごとにリポジトリを取得します。

![](https://miro.medium.com/max/2618/1*PAPNqs_dj7Jd9RkqSXYlbw.png)
GitHubプロファイルページ — https://github.com/indreklasn

この課題の解決を通して学べること

- APIからデータを取得する方法

- APIからのデータを表示する方法

- 各検索に関連するデータをフィルタリングして表示する方法


オプション：もし課題に取り組みたい場合は、GraphQLで作られた[v4 API](https://developer.github.com/v4/)を使用してください。

GraphQLを学びたい場合は、[私の以前の記事](https://medium.com/better-programming/how-to-setup-a-powerful-api-with-graphql-koa-and-mongodb-339cfae832a1)を参照してみてください。


# 5. Redditのようなチャットルーム

チャットルームは、簡単で楽しく使用できるため、コミュニケーション手段として人気です。
しかし、現代のチャットルームを実際に可能にしているのは何でしょうか？WebSocketsです！

![](https://miro.medium.com/max/1130/1*AdNcS-2KHOGCuiZmEcKtRA.png)

この課題の解決を通して学べること

- WebSocketの使い方と、リアルタイムな通信およびデータ更新方法

- ユーザーのアクセス許可レベルの仕組み（たとえば、チャットチャンネルの所有者は`admin`権限を持ち、ルーム内の他のユーザーは`user`権限を持ちます。）

- フォームのバリデーションと処理—メッセージを送信するためのチャットボックスは`input`要素であることを忘れないでください。

- さまざまなチャットルームの作成および参加方法

- ダイレクトメッセージとその仕組み。ユーザーは他のユーザーとプライベートに会話できます。基本的には、2人のユーザー間にWebSocket接続を確立する必要があります。


# 6.ストライプナビゲーション

このナビゲーションのユニークな点は、コンテンツに合わせて形を変えてポップオーバーコンテナです。

従来の新規のポップオーバーを完全に開閉する動作とは対照的に、エレガントに形状が変化します。

![](https://miro.medium.com/max/862/1*SSCs0AjDiZbWcY9Fa6NDMQ.gif)

ストライプナビゲーション

この課題の解決を通して学べること

- CSSアニメーションと画面遷移を組み合わせる方法

- コンテンツをクロスフェードし、ホバーされている要素に`active`クラスを適用します

- 最初は自分で試してみてください。ただ、もし助けが必要な場合は、[ステップバイステップのガイド](https://lokeshdhakar.com/dev-201-stripe.coms-main-navigation/)が載っているこの投稿を確認してください。


# まとめ

読んでくれてありがとうございます。-コーディングしたくなるような面白いものが見つかったなら幸いです。
 
コーディングが上手になるのに近道はないということを覚えておいてください。

作業に取り掛かり、そしてできるだけ多くのものを作ってコーディングスキルを高めてください。

もし面白いものが見つからなかった場合は、下記の投稿にさらにもっとアイデアが載っているので確認してみてください。

[The Secret to Being a Top Developer Is Building Things! Here’s a List of Fun Apps to Build!](https://medium.com/better-programming/the-secret-to-being-a-top-developer-is-building-things-heres-a-list-of-fun-apps-to-build-aac61ac0736c)
[The Best Front-End Hacking Cheatsheets — All in One Place](https://medium.com/better-programming/modern-frontend-hacking-cheatsheets-df9c2566c72a)

# 関連記事
[180日でWeb開発者になる方法(コンピューターサイエンスの学位なしで)](https://qiita.com/baby-degu/items/a06bddd1a61b7d907a55#%E9%96%A2%E9%80%A3%E8%A8%98%E4%BA%8B)

# 翻訳協力
Original Author:  **[Indrek Lasn](https://medium.com/@indreklasn?source=follow_footer--------------------------follow_footer-)** 
Thank you for letting us share your knowledge! 

この記事は以下の方々のご協力により公開する事が出来ました。
改めて感謝致します。
選定担当: yumika tomita
翻訳担当: @satosansato3
監査担当: @nyorochan 
公開担当: asuma yamada


# ご意見・ご感想をお待ちしております
今回の記事は、いかがだったでしょうか？
・こうしたら良かった、もっとこうして欲しい、こうした方が良いのではないか
・こういったところが良かった
などなど、率直なご意見を募集しております。
いただいたお声は、今後の記事の質向上に役立たせていただきますので、お気軽にコメント欄へ投稿ください。
みなさまのメッセージをお待ちしております。