【随時更新】見習いサーバーサイド エンジニアのためのスパルタ特訓ドリル

# はじめに

このドリルはプログラミング学習社に向けた特訓ドリルになります。

初心者向けの教材は一通り勉強したけど、特に作りたいアプリがあるわけじゃない。
そんなWEBエンジニアの見習いのためにこのドリルを作成しました。

スキルアップに後輩の課題に活用してください。

プログラミングのスキルを上げるためにはコードを書くしかありません！
このマインドを大切にして、学習や仕事に取り組んでみてください。

# ドリル本編

## 認証編

### メールアドレス/パスワード認証

#### 基本的なメール/パスワードでの新規登録/ログイン機能 ★☆☆

- メールアドレスとパスワードで新規登録できる
- 登録したメールアドレスとパスワードでログインできる

定番中の定番ですね。ライブラリを使ってサクッと実装しましょう！

#### メールで確認認証　★★☆

- 新規登録後に登録アドレス当てにメールを送信
- 送信されたメールのリンクを押したら登録完了

登録したメールアドレスが本人のものか確認する機能ですね。
多機能なライブラリなら簡単に実装できるかも知れません。

#### パスワード変更 ★★☆

- 新しいパスワードを設定できる
- ただし、現在のパスワードを入力も必須

乗っ取り防止のため現在のパスワードの入力の必須に挑戦しましょう！

#### パスワード忘れた時の再設定 ★★☆

- 登録したメールアドレスを入力
- パスワード更新ページのリンクをメールアドレス当てに送信
- 新しいパスワードを設定できる

こちらも定番の機能ですね！

### SNSログイン

#### SNSログイン ★☆☆

- Facebook/Google/Twitter/Lineで新規登録/ログインできる

#### メール/パスワード認証との共存 ★★☆

- SNSまたはメールアドレスで新規登録/ログイン

どんなDB設計にするかは色々な工夫ができそうですね

### 電話番号認証

#### 電話番号認証 ★★☆

- 電話番号を入力
- SMSで認証コードを送信
- 認証コードを登録したら、登録完了

WEBというよりかはアプリによくある認証方法ですね。
外部APIを使う流れになりそうですね

## SNS編

### ツイート機能

#### ツイート投稿 ★☆☆

- 文字制限をつける(140とか)
- 改行ができる
- 絵文字が入力できる
- URLがリンクになる

こだわると意外と難しいツイート機能、余裕があったらOGタグ表示などにも挑戦してみよう

#### ハッシュタグ ★★☆

- ハッシュに続いて単語を投稿するとタグとして登録できる
- ハッシュタグはリンクになる
- リンクに飛ぶとそのハッシュタグを含むツイート一覧が表示できる

twitterやinstaで定番のこちらの機能、初めての正規表現に最適！

#### いいね機能 ★☆☆
- ツイートに対していいねできる
- 誰がいいねしたかわかる
- ツイートのモデルに総いいね数を管理する

パフォーマンスを意識して、ツイートのモデルにいいね数を管理しよう！

#### 画像添付

##### 1つだけver　★☆☆
- ツイートと一緒に表示
- 小中大など複数にサイズで保存する
- 画像をクリックしたら、拡大してプレビューできる

##### 複数枚ver　★★☆
- 4つまで1つのツイートに画像を添付できる

### フォロー

##### フォロー機能　★★☆

- 他のユーザをフォロー・解除できる
- タイムラインにフォローしているユーザだけのツイートを表示する
- フォロー一覧を見れる
- フォロワー一覧を見れる
- ユーザモデルにフォロー数、フォロワー数を管理する

ここで多対多のリレーションをマスターしよう！

### ブロック

##### ブロック機能
- 他のユーザをブロック・解除できる
- ツイート一覧にブロックしているユーザを表示しない
- ブロックしたユーザは自分のプロフィール画面を表示できない

多対多のリレーションの復習！

### DM機能

##### 1対1のメッセージ★★☆

- メッセージを送信できる
- 既読機能
- 画像を添付できる
- ファイルを添付/ダウンロードできる

##### グループでのメッセージ　★★☆

- グループを作って、複数人で上記のメッセージ機能ができる

##### リアルタイム化　★★★

- リアルタイムにメッセージを確認できる

ここまできたら、中級者！


## ECサイト編

#### ユーザ/管理ユーザ　★★☆
- ユーザ、管理ユーザの複数ユーザのユーザ管理

ユーザ、管理ユーザを同一モデルで管理するか、別モデルで管理するか
コントローラをどのように管理するか、色々なやり方を試行錯誤してみましょう！

### 管理ユーザ向け

#### 商品出品　★☆☆

- 商品名、画像、値段、在庫を設定して商品を出品できる

既存サービスの項目などを参考に自分なりに項目を追加すると勉強になると思います！

####　カテゴリ機能 ★★☆

- カテゴリを1~3階層で設定できる
- 商品にカテゴリを設定できる

少し特殊なリレーション関係になるこの機能、是非挑戦してみましょう！

### ユーザ向け

#### 商品検索　★☆☆

- 商品名で検索できる
- カテゴリで絞り込みができる

初めての検索機能、初めての方はライブラリで、慣れてきたら自前で実装するのもありでしょう！

#### ショッピングカート機能　★★☆

- カートに入れるで欲しい商品を管理できる
- カートから商品を削除できる

こちらも定番の機能ですね。
そろそろ実装に慣れてきたのでは？

#### 決済機能　★★☆

- ショッピングカードの商品をクレジットカードで決済できる
- 購買履歴を確認できる

こちらも外部サービスを活用して実装してみましょう！
有名なとこだとStripeやPayjpなどがあります。

## シェアリングエコノミー編

スペース貸し出しのシェアリングエコノミーを題材にしましょう

### ホスト向け

####　身分証確認　★★☆

- 身分を確認できる書類をアップロード出来る
- 管理画面で承認できる

C2Cサービスの定番ですね。身分情報を自身のDBで管理する場合、慎重にならないといけないですね。
外部サービスで管理するのも手かもしれません。

####　銀行講座登録　★★☆

- 銀行口座を登録できる

余裕があったら、サジェスト機能や正しい銀行コードか確認するバリデーションも実装してみましょう！

####　スペース登録　★☆☆

- 名前、複数画像、住所で登録できる

###　ユーザ向け

####　スペース検索 ★★☆

- 住所から絞り込みができる
- 値段で絞り込みができる

#### 決済機能 ★★★
- スペース予約時に決済できる
- スペースのレンタル料に加えてサービス手数料(10%)を追加する
- レンタル料はホストに振り込まれる
- サービス手数料はサービス運営に支払われる

こちらも外部サービスを活用して実装してみましょう！
有名なとこだとStripeやPayjpなどがあります。

#### レビュー ★☆☆
- レンタル後にスペースにレビューできる
- 星五段階とコメントを追加できる

こちらもC2Cでは定番の機能ですね。
サクッと実装してみましょう！


# 追記

随時、いい課題が見つかったら追加していこうと思います。
また、これを追加して欲しいなどの要望も大歓迎です！
要件が不十分なところもあるので、気長に管理していきたいと思います。
楽しいプログラミング学習になることを願っております！