enPiT筑波大学に参加してみて

※ この記事は2020年度enPiT筑波大学のレポートです。

## 経緯
2020年度のenPiTに参加し、6人のチームでAndroidアプリの開発をしました。

## 開発したシステム　「Twieasy」
私たちが開発したAndroidアプリ「Twieasy」(※筑波大生専用です)
![スクリーンショット 2021-02-10 13.21.11.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1098308/0b3254a0-e4fa-4a4f-5f08-12be64ed31e2.png)

筑波大学の講義について

- 講義の評価
- 講義の評価を見る

ことができます。
以下で開発したアプリのインストールとソースコードを見ることができます。

- [Twieasy インストール (apkファイル)](https://drive.google.com/file/d/17zG7jKLJ56hc4nUa7uRkNJC3U1GdHRm4/view)
- [github](https://github.com/enpitut2020/Twieasy)

## リーンキャンバス
### 顧客、顧客の課題
対象とする顧客は授業の負担を見積もりたい筑波大生です。
大学生は授業以外にもバイトやサークルなどやるべきことが多く、簡単だと思っていた授業が意外に難しく、課題に時間をかけられず単位を落とした、落としそう、なんてことがありませんか？

### 価値の実現
Twieasy では学生の講義の評価を確認することができ、課題にかかる時間を見積もることで、具体的な授業計画のサポートをします。

### 独自の価値提案
Twieasy にはTwitterやRakutenみんなのキャンパスとは異なり
アプリを利用してもらうことで確実に評価してもらえるのでデータが溜まってそれを提供できる．
認証システム上学生しかみられないので匿名性がある．
講義の評価が楽単か落単の２択なので評価しやすい，わかりやすい．
といった独自の価値があります。

## 開発したシステムの使い方概要

### アカウント作成&ログイン
アプリをインストールして初めて起動するとこのような画面が表示されます。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1098308/d474e0cc-95bd-28ac-61d0-a3fc29f22dd6.png" width="200">
メールアドレスに@s.tsukuba.ac.jp または @u.tsukuba.ac.jp のメールアドレスを入力して「認証コードを取得」ボタンを押すとそのメール宛に認証コードが送信されます。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1098308/91ceb57c-94cd-7059-2f58-53f89d7c4ca3.png" width="400">
パスワードと送られてきた認証コードを入力し、「アカウント作成」ボタンからアカウントを作成することができます。

既にアカウントがある場合は、「ログイン」ボタンからメールアドレスとパスワードを入力してログインすることができます。

@s.tsukuba.ac.jp または @u.tsukuba.ac.jp のアドレスを持っていないとアカウント作成することができないため、筑波大生専用のアプリとなっています。


### スワイプで授業の評価
無事、アカウントが作成させると授業評価を行う画面が表示されます。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1098308/bee51a0a-be34-7a14-92e4-8b75faba5ff7.png" width="200">
ここでは講義科目をスワイプして「落単」(単位取得が難しい、課題が大変)、「楽単」(難なく単位取得ができる、課題に比較的時間がかからない)の２段階の評価をすることができます。

表示される科目は学類と学年を入力してもらい、履修していそうな科目のみ表示する仕組みになっています。


### 授業の評価を見る、レビューを書く
左が講義一覧の画面で、右は講義の評価を見ることができる画面です。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1098308/340ccabf-abd7-4b1c-efdc-54ee0cc30b88.png" width="400">
講義画面では各ユーザーが評価した「楽単」と「落単」の割合や、講義の詳細情報、ユーザーが投稿した講義のレビューなどを見ることができます。

初回起動以外の通常でのアプリの起動時には講義一覧が表示されます。
講義一覧では各講義の「楽単率」を確認することができます。
各講義画面の「レビューする」ボタンから各講義のレビューを書いて投稿することができます。


## 期間中の自分の主な役割
開発では Kotlinの一部、solidity を書いてブロックチェーンのコントラクトを作りました。私の環境でのエミュレーターの起動が遅かったため Kotolin は他メンバーがメインで書いているのをサーポートする形で開発することが多かったです。
Kotlin は途中まで他のメンバーと一緒に書いていましたが、リファクタリングをしたあたり(12月)からついていけなくなりました。

短い時間の中での開発だったので、タスクや時間の管理は意識していました。カンバンの入力やタイマーの設定などです([afsdfsas](https://github.com/afsdfsas)さんが率先してやってくれて助かりました)。

## 開発プロセス
コミュニケーションや情報共有には Discord、Slack、miro を使用しました。
Discord で通話、画面共有しながら、画面共有している人がエディタを共有しながらコードを書き、他のメンバーは通話、チャットでサポートをするといった感じです。
チーム内で２つのグループに分かれてそれぞれ別の作業をすることが多かったです。

## 秋学期の各スプリントの個人的ふりかえり
### スプリント1
アプリのモックの作成と開発環境を整えました。
![スクリーンショット 2021-02-10 16.13.51.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1098308/db33823e-de7f-8dc7-1ff5-0e634cf5053d.png "モック")

このような図やスプリントの管理には miroを使っています。


### スプリント2〜10
実際にアプリ開発を始めました。初めて触れるKotlinに苦戦しながら少しずつ機能を実装していきました。
![スクリーンショット 2021-02-10 16.16.57.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1098308/fa4e96c1-d4a9-a317-33ce-237a12287adc.png)

講義一覧のデザインを考えている図です。

振り返ってみると手探りの状態で作業していたので１つ１つに時間がかかってしまいました。初めのスプリントの方でKotlinの勉強会を行うなどした方が良かったかもしれません。


### スプリント11、12
薄々感じていたリファクタリングの必要性を指摘され、時間をかけてリファクタリングを行いました。ここでリファクタリングを行ったことで開発スピードが速くなりました。



### スプリント13〜15
コントラクトの開発を行い、アプリと連結しました。これによってブロックチェーンをデータベースとして使いレビューの投稿、アカウント作成、ログインができるようになりました。
アプリ開発も続け、見やすく使いやすアプリになりました。

### スプリント16
最終発表のために発表資料の作成などしました。

## チームメンバーについて
各メンバーのチームでの役回りと貢献の個人的解釈です。

- [ryohei22](https://github.com/ryohei22)
Twieasy の提案者で開発への熱量が一番高かったと思います。スプリント前にやることをまとめてくれたのでスムーズに作業を開始することができました。
チームの意思決定に大きく貢献してくれました。

- [srfwt](https://github.com/srfwt)
いつの間にかメール認証の実装を一人でやってくれていました。
笑顔が可愛い。

- [LesserCold](https://github.com/LesserCold)
プロダクトオーナー
強い。何か困ったときはいつも聞いてました。
リファクタリングはほぼ全て担当してくれました。

- [Zn57](https://github.com/gen0x39)
チームの雰囲気が良くしてくれました。
Kotlinの開発をしてくれました。
自称JKの方です。

- [afsdfsas](https://github.com/afsdfsas)
秋学期からのチームの参加でしたが、とても頼りになりました。開発中でも一歩下がった立場から考えていて今何をすべきかを教えてくれました。

## 個人的振り返り
### オンライン開発の感想
初めてのオンライン開発でしたが、教員、メンターの方達のサポートもあり、ほぼオンサイトと変わらない環境だったと思います。

### ブロックチェーンの制約
私たちのチームは「ブロックチェーン縛り」をしていました。これは開発したシステムに必ずブロックチェーンを組み込むという制約です。そのためアプリを使う際には必ずEthereum ウォレットが必要でした。ブロックチェーンをどうシステムに組み込み、存在をユーザから見えないようにするか、チーム全員が頭を悩ませた結果、WebアプリではなくAndroidアプリを作ることになりました。最終的に時間がかかりましたがなんとか組み込むことができました。

### Android Studio 重すぎ
私の環境でのAndroid Studio のエミュレーターの起動に3分以上かかりました。最初はあまり気にしませんでしたが徐々にAndroid Studio開くことが嫌になっていきました。またスプリント毎の発表の際に発表者がPCスペックが高い人に偏ってしまい申し訳なかったです。今後、Androidアプリを作ることはないでしょう。

### スプリント以外のことはどこでやる?
スプリントごとに成果発表を行っていたため、無意識に何か成果を出さなければいけないと思いながら作業していました。そのため一度立ち止まって考えることが難しかったと思います。私たちはスプリントの中でリファクタリングを行いましたが、指摘されなかったら必要性を感じてはいても実行することはできなかったと思います。

### 開発のあれこれ
全体的にプロダクトの価値に与える影響が小さいタスクに時間をかけすぎたと思いました。ブロックチェーンは強みを活かさずに単にデータベースとして使ったので価値に与える影響は小さいですが、これを除いてもログインのところには時間をかけすぎたと思います。当初はサクッと終わらせるつもりで始めましたが想像以上に時間がかかりました。途中でもいいから諦めて別のタスクに集中すべきだと考えていましたが、チームとしては最善の選択をしたと思っています。

## 最後に
enPiT とても楽しかったです。私は準拠で夏合宿からの参加でしたが春から参加しかったと思いました。
書きながら楽しかった記憶とプロダクトへの想いが再熱しました。また開発したい！！