初心者がDjangoによる6週間でチームビルディングからプロダクト公開までやるプロジェクトに参加した話

## はじめに

今回6週間でチームビルディングからプロダクト公開までやるプロジェクトに参加させて頂きました。
プロジェクトにおいて私が担当したことや特に学んだスキルなどは以下の通り個別に記事を書きましたのでそちらを参照してください。

[認証周りは甘く見ると痛い目を見るという話(django-allauthを使った認証を導入してみて編)](https://qiita.com/shitikakei/items/70d3e42b18f8fc4cc530)
[初めてVScodeを導入して作業をしたときの感想及び覚書](https://qiita.com/shitikakei/items/bb0120493ade32fe1072)
[Gitについて無知だったので体験したことをまとめます](https://qiita.com/shitikakei/items/272aa2b849c304ca5b9d)
[pandasと私がプロジェクトで担当した機能の話](https://qiita.com/shitikakei/items/3ceda0df5c697e1c2e2f)


ここではプロジェクト全体のことや作った成果物、及び私個人についての記事になります。

## 作ったもの
[リポジトリはこちら](https://github.com/shitikamiyako/Django_Project3)

プロジェクトの企画は[Saku731さん](https://twitter.com/digisaku710) によるものです。
参加者の中に現職会計士の方やデータサイエンティストを専攻されてる方がいらっしゃったことからWebスクレイピングを使った**投資信託サポートツール**を作ろうということで話が決まりました。

利用方法としては

1. 簡単なアンケートに答えて自分の投資タイプを知る
2. 会員登録

これだけです。

機能としては

- 投資タイプの簡単な自己分析
- 投資ポートフォリオの作成
- 投資ポートフォリオの分析
- ある銘柄に対してのリスク・リターンの似た銘柄の表示
- ある銘柄に対してその銘柄を持っているユーザーが他に持っている銘柄の表示
- ポートフォリオDBから人気の銘柄を取得(「実際に買われている銘柄」の人気度)
- 閲覧履歴DBから人気銘柄を取得(「よく見られている銘柄」の人気度)
- 投資信託閲覧履歴の追加

といったところが挙げられます。
以下いくつかのスクリーンショットになります。

<img width="960" alt="2020-07-06_03h30_32.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/428779/7b032f31-a465-888b-5be6-5e91015e26b3.png">
<img width="960" alt="2020-07-06_03h30_25.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/428779/30d25b12-9397-1c57-5adc-5def0b5b8e7a.png">
<img width="960" alt="2020-07-06_03h31_37.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/428779/7fedd67b-e660-2d7b-dfd9-fa72e7b3f9b0.png">
<img width="960" alt="2020-07-06_03h32_50.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/428779/4b131126-0710-e0cb-839a-dd1e338f5596.png">
<img width="960" alt="2020-07-06_03h33_27.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/428779/071add43-0941-cedf-411c-6dfab79f7f7f.png">



スクレイピングについては私は担当ではなく、スキルとしてもない部分なので詳しいことはわかりませんが

1. スクレイピング結果をCSV出力する
2. CSVをUtilでDBに登録
3. ローカルでDBに出力+GithubにPush

という形で実現しているそうです。
なぜかというと担当の方が諸事情でプロジェクトから離脱してしまい、この機能に限らずタスクがキャリーオーバーになってしまい結果、時間切れとなったしまっがゆえの苦肉の策という印象をMTGからは受けました。
引き継いだ方はかなり強い人でしたが時間が足りなかったみたいです。

なお、このプロジェクトに関しては上記URLの成果物はそのまま参加者が各々のポートフォリオとして就活・転職などに用いることが可能になっています。

参加者個人でEC2などでサーバーを立てて運用をしていくことになるので、そうなった場合は経緯を説明した上で採用者側に求められた場合は自分のリポジトリにクローンしたものを公開することはあるのかもしれません。

## 私について及びプロジェクトの参加の動機

#### 参加の動機

現在、未経験からWebエンジニアへの就職を目指しているのですが経歴と未経験というハンデから中々うまく行かない中である面接の中で

**「チームでの開発を経験していないとわからないことが沢山ある」**

という言葉を頂いたのと、個人で成果物を作るにもどういうプロダクトが他にあるのかとかそもそもどこまで作り込むのか……などといった疑問が実際にまがりなりにも成果物を自分で作ったときに少なからずあったので

**「チーム開発の経験とプロダクトのモデルケース及び開発手順についての知見を得たい」**

というのとちょうどPythonに興味はあったのでこの機会に触れてみるのがいいのではないか？ という思いで参加を決めました。

#### プロジェクトに参加するにあたっての私のスキルとやったこと

今回のプロジェクトは**Python及びDjangoを使ってのチーム開発**ということですが5月中旬のプロジェクト開始時における私のスキルは

[未経験からweb系エンジニアになるための独学履歴~初めてのポートフォリオ作成記録 製作記録編~](https://qiita.com/shitikakei/items/7b0e67af3a2258b53bb8)

この程度のものが作れる程度でした。

Python及びDjangoについてはプロジェクトの始まる1ヶ月前から勉強を初めて以下の記事程度のレベルでした。
[Python及びDjangoの学習履歴はこちらです](https://qiita.com/shitikakei/items/2c929dae5416c7aa2b4f)

それ以外の私個人については上記の記事で少し触れているので参照していただけると嬉しいです。

## プロジェクトの流れ

プロジェクトは全6週で行われ、その週の初めに毎度MTGがありそこで進捗の確認やタスクの調整などを行っていくという形式でした。
以下、大まかにその週毎にやったことを書いていきます。

#### 第1週(5/16～)

やったこと

- プロジェクトの全体説明
- プロジェクトのゴールの設定
- 個人目標設定シート記入
- プロジェクト開始前理解度チェック
- プロジェクトで開発するサービスの決定

ここで予想外に人数が集まったことと、集まった人たちが強い人ばかりだったのもあって当初やらないはずだったWebスクレイピングをガッツリやっていくという方向性のサービスに決定したので、
上記の他に設計担当の方はこの週は要件定義と設計を、PG担当や私のようなスキルに乏しい方はpandasの使い方の基本を覚えるような課題に取り組むということをやりました。


#### 第2~4週(5/23～)

やったこと

- タスクの割り振り
- 実装作業


ここから各々割り当てられた担当機能を実装していく工程でした。
私の担当は

- リスク・リターンが類似してる銘柄を抽出して表示をする機能
- この銘柄を持っている人がほかに持っている銘柄を抽出して表示する機能
- 認証機能(リリース時に本番環境でソーシャルログインの障害が発生してそれを解消できず、その部分はカット)
- 以上3機能の仮画面の作成
- 認証画面の清書(レスポンシブ・スマホ表示対応)

以上の3つです、各機能について個別の記事にてやったことを書いています。


#### 第5週(6/13)

やったこと

- 各画面の清書作業とリリースに向けての細かい部分の改修

私の担当は以下の通りです

- 認証に関わる画面(ログイン・アカウント作成・ログアウト確認画面)の清書

#### 第6週(6/20)

やったこと

- リリースに向けての最終調整

私の担当は以下の通りです。

- 作成ボタン押下時にセッションからアンケート結果を登録ユーザーに紐づけ

#### 第7週(6/27)

作業終了、最終MTGによる振り返り・感想戦


## プロジェクトで学べたこと

- チーム開発のプロセス
- GitHubを使ったチーム開発
- VScodeを使った開発
- pandasについてのスキル
- 要件定義・設計についての基礎知識及びプロセス
- PipEnvの基本的な使い方
- Djangoでの実装作業
- Djangoでのデータベース操作
- ドックストリングなどを含めたコードコメントのしきたり
- EC2環境の構築及びデプロイのやり方

最後に関しては説明を受けてもAWSについての前提知識が0なのとPipEnvでリポジトリを展開することへの理解が浅く、まだ自分ではやれてないないのでこれからそのあたりを詰めてからやっていこうと思います。

## やってみた感想

まず、実際にプロジェクトに取り組み始めて思ったことは

**自分があまりにもモノを知らなすぎる(特にGitHubやVScodeなどのインフラ周りの知識)**

ということでした。
今回参加者の方々はかなり強い方々ばかりだった上に、そもそも雪山を裸で登山するような状態で参加しているような私にとっては私が知らないことは向こうの常識のような状態だったので、圧倒的に戦力になっていないというプレッシャーがプロジェクトを通してものすごくありました。
これは別に参加者の方々が特別私に圧力をかけたとか、いじめをしたとかそういうことではなく、「役に立つどころかお手間を取らせてしまうことが多いな……」という私の罪悪感によるものです。
2~3月のあたりに就活のためになんどか企業様と面接をしましたが、その際に折に触れて

**未経験のエンジニアを雇うということはリスクが高すぎる**

**仮に採用したとしても、1年は最低でも下積み。でもその期間でも給料はもらうわけで、そうなると実際に現場の人たちに対して戦力に慣れていないことにプレッシャーを感じてだめになってしまうことが怖い**

というようなことを仰っていただいたのですが、なるほどこれはこういうことなのかというのを実感しました。
そんな中でもなんとか毎週せめて自分の担当した部分だけは遅れないように……とあくせくとやった結果、テックリードの方々の協力もあり、ソーシャルログイン部分だけが本番環境でエラーを出して削除ということになりましたが一応最低限の仕事だけはこなせた……と思いたいです。
概ね反省点や足りないところなどなどは今回の記事や個別の記事で書いたとは思いますが、それ以外で一つ心残りなのはテストコードを書く余裕がなかったなぁという点になります。
実際はテストはGitHub Actionsにおいて自動化してくださった方がいたのでそれで行われていたのですが、やっぱりそういう事ができるのはかっこいいなぁというのと、テストまでかけてようやく一人前という印象があるのでやはりそこまで手が回らない自分に歯がゆさを感じました。

といったように辛いことのように書きましたが、別に辛かったわけではなくプロジェクト自体はとても勉強になりましたし、何よりやっぱりチームでの開発を体験できたことはとても貴重で楽しいものでした。
Pull Requestなどで他の方が書いたコードが見れるのですが、実際自分が担当した機能でここどうやってるんだ？ ってところを参考にさせていただけたり、そもそもコードレビューを受けたこともなかったのでやることなすこと全部新鮮でした。

今後はこれをそのうちEC2環境にデプロイしなければならないのでそのための知識の補充を行いつつ、その際に今回のリリースでは省くことになったソーシャルログインあたりを復活させたり、もう少しユーザー情報周りを整備したり、そもそも今回ウェブスクレイピングはノータッチだったので、コードを眺めてどんなものか見てみるのもいいなと思っています。

あとは再度就活に向けて動いていかないといけないなといろいろ模索中です……就職について何かお声をかけていただければそれについては幸いです。

最後になりますが、私のような初心者もいいとこな人間でも快く受け入れて頂いた企画者、及びプロジェクト参加者の皆様、本当にありがとうございました。