enpitという授業をお勧めします。

はじめまして、筑波大学情報科学類の亮太sixteenと申します。
この記事は、私が筑波大学で受講したenpitという授業の体験記です。
これは一応授業の最終レポートに位置付けられています。ですが、かつての私と同じような、開発とかに興味はあるけど本当に何も知らないとか、プログラミング全然わからないけどアプリとか作ってみたいとか、そういう人たちのニーズに応えられたらと思います（そういう人たちがここに辿りつくかはわかりませんが）。筑波大学情報科学類の宣伝になれたら光栄です。事実よりも感情優先で書いていきます。
# enpitってなに
enpitとは、「プロジェクト型学習(Project Based Learning, PBL)を基軸に、学生がチームを組んで自律的に自分達のテーマの具現化を目指します。チームでのプロダクト開発を通じて、チーム運営や、ユーザが本当に必要としているものを掘り下げる技術を体験します。」とのことです。詳しくは[こちら](https://enpit.coins.tsukuba.ac.jp/)
私は、筑波大学の授業でenpitを受講しました。学部の実験にあたるやつですね。
# enpit参加の動機
実験の割り振りは人があふれた場合成績で選考されるとのうわさがあったので、成績が悪い私はあふれる側だろうと思っていましたが、実験の紹介を見ていて一番やりがいを感じられそうなenpitに希望を出しました。その希望が通ったので、うれしかったです。
# 具体的に何をしたか
時系列順に大雑把に書くと、4~6月で自己学習、7，8月で１回目のプロダクトづくり、10~1月で2回目のプロダクトづくりという感じです。ここからは、それぞれどんなことをしたかを書いていきます。
## 自己学習
　これは、夏からのプロダクトづくりに備えて、生徒各自で開発などを行うというものでした。私は、情報科学類という学類に在籍しながら、プログラミングや開発の知識と経験がほぼ0に等しかったので、[progate](https://prog-8.com/)というプログラミング言語やその他開発に関連する技術のチュートリアル的なものをこなす日々が続きました。アプリを作るなんて遠い世界の話だと思っていましたが、これに出会えてその世界がぐっと近づいてきました。これを教えてくださった先生、メンターの方々には感謝してもしきれません。興味だけあって経験と知識がない人は、やるのをお勧めします。ある程度は無料で、途中からお金がかかるというよくあるタイプですが、月額1000円らしく、友達は1000円払っちゃったからやるしかないメンタルになっていいといっていました。自分は課金する勇気なかったです。
　なんやかんやでとりあえずアプリを作りたいというマインドになり、せっかくなら自分の好きな麻雀に関するアプリを開発をしようと決めました。そのために、またチュートリアル的なものをやり始めました。チュートリアルばっかやるのは初心者の典型例ですが、これ書いてる人は本当に初心者だったんだなと信憑性が増しますね。俺も初心者！とかいいながらちゃっかり競プロとかやってる人よくいるので、注意しましょう。（競プロって何なのかは、大学2年生になって初めて理解しました。）そのチュートリアルとは[こちら](https://zenn.dev/wkb/books/node-tutorial)です。簡単に言うと、Node.jsを使ってWebアプリを作ろうというものです。このページの言うとおりにしていると、アプリを実際に作ってみることが出来ました。簡単なTODOリスト作成アプリでしたが、完成したときはゲームが作れたくらいうれしかったのを覚えています。さて、自己学習の発表の日になったのですが、前日から、エラーの連続で結局麻雀アプリを表示できませんでした。そのため、このチュートリアルに少し手を加えたものを見せることになってしまいました。発表の班で、自分のと比べてアプリの未熟さに驚いただろうに、麻雀の話で盛り上がってくれた皆様、ありがとうございました。麻雀のアプリは、大学在籍中で完成させようと今現在意気込んでいます。
## アジャイル開発
　自己学習の話が長くなってしまいましたが、これはあくまでも準備です。序章です。本番はここからになります。チーム開発についてです。5，6人でチームを作ってプロダクトを開発していきます。これに関しては、同じ悩みを抱えた人たちで集まって、その悩みを解決するためというモチベーションで開発をしていきました。その開発で用いられたのが、アジャイル開発というものです。聞いたことない方はよくわからないと思いますが、要は、機能単位（例えばログイン機能を付けるなど）で計画や設計、開発、テスト、フィードバックという小さいサイクルを繰り返し、最終的な完成に近づけていくというものです。興味があれば調べてほしいと思います。私が感じたこの開発の良い点は、小さいサイクルであるため、開発の柔軟性が増すということです。この話は授業内で何度か聞いた話ですが、お客様のニーズと、実際に作ったプロダクトに違いがないよう、出来るだけお客様に寄り添った開発を行えるのだそうです。アジャイル開発の話はここで終わりにしますが、非常にためになる話だったし、仕事をするにあたって必要なことをとても多く学べました。これは、ほかの実験にはないものかと思うので、おすすめポイントです。
## プロダクトづくり1回目　～初心者ってやっぱり大変だねえ～
　やっと本題になりました。チーム開発の話です。1回目は、自分の健康状態が知りたいという悩みを解決するため、便によって健康状態を把握しておすすめの食事を紹介するというアプリを作りました。チーム編成としては、院生3人と学群生2人です。うわあ院生だと思いました。正直。なんか怖いイメージがあったんですね。でも、途中であった対面での開発のときに一緒にご飯を食べていい人たちだとわかりました。偏見はなくしていくべきですね。これからの自分の目標にしたいと思います。院試の話とかも聞けて、非常に良い機会となりました。
　開発はというと、実際何もできなかったみたいなもんでした。コードや開発の仕組みを理解するのがやっとでした。初心者であることを心底後悔しました。自己学習もうちょいちゃんとやっていればと思ったし、なによりチームのみんなに申し訳ないという気持ちが強いです。コードを自分だけで書くことはできないから、開発の難しさを考えて意見をすることが出来ないんですよね。当然意見する機会は減っていきます。でも頑張りました。自分が自分の価値を見出せなくなったら終わりですからね。そして何とかやり切りました。
　と、ここまで書いて、ちょっと正直に書きすぎたかもなと反省し始めています。ですが、噓を書くのもなんか違うので、さらけ出していきます。先生がたへ、チーム編成は、出来るだけ同じ学年か学群生だけと院生だけのチームにした方がよいのではないかと提言をしておきます。開発作り中の周りの環境が違うのは結構きついです（就活があるかないかとか）。enpitを受講しようか迷っている初心者の皆様は、こんな感じならやめようかと思ったかもしれません。しかし、ここから巻き返していけると思うので、最後まで読んでいただけるとありがたいです。

## コラム①　～心理的安全性～
　皆さんは、心理的安全性という言葉を知っていますでしょうか。簡単に言うと、誰かが発言しにくいという状態を避けるということです。これは、enpitの大きな目標の一つでもあります。大々的に心理的安全性を保つコツや、大切さを説いてくれていました。心理的安全性の確保の大切さ。これは、私以上に感じた人は受講者の中でいないのではないでしょうか。この考え方は、企業などでよく考えられている心理学用語らしいですが、良く考えたら心理的安全性が確保されるべき場面なんて全てですよね。誰かが発言を遠慮してしまうような話し合いは、うまくいくわけがありません。
　私は、心理的安全性を確保するためにだれでもできることが一つあると思います。それは、人の話を否定から始めないことです。先日、とあるツイートでこんな友達は嫌だというテーマの最優秀賞が、人の話を否定から入る人でした。ということは、嫌だなと思う人がたくさんいるということですね。これは、知識や経験に差がある人たち同士の話し合いでは如実に表れてきます。知識や経験が乏しい側の人が話を否定から入ることはまずありません。否定から入る可能性があるとすれば、知識や経験がある側の人たちです。そして、心理的安全性の大切さを感じるのは、知識や経験がない側の人です。すれ違ってしまいジレンマですね。これが、なかなか心理的安全性が担保されない理由です。さて、ここらへんでいったん閉めます。長くなりそうなので。心理的安全性の話はこの後も出てくるので、頭の片隅に置いておいてください。

## プロダクトづくり2回目　～初心者も捨てたもんじゃない～
　さあ、1回目のチームは解散しました。理由はプロダクトに未来を感じなくなったからです。方向性が、とか言っていたらバンドの解散みたいだねと言えたのですが、そんなことはなかったです。2回目は、新しいチームに移籍しました。一人で移籍しました。移籍先は、6人中2人が抜けたという状況でした。新加入選手は私一人です。さすがに最初は緊張しました。プロの移籍はこんな感じなのかと思いました。なので初顔合わせのとき非常に緊張しましたが、みんな優しくて、すぐ仲良くなれました。開発1回目のときもそうでしたが、悪い人なんてなかなかいないんですよね。人生捨てたもんじゃないです。チーム構成は、大学生5人です。1回目とだいぶ違いますね。そりゃそうです。それを知ってて移籍したので。大学生同士で開発をしてみたくなったのが正直な移籍の理由です。
　そして、開発が始まりました。元していた開発を新しく作り直すという方針になりました。そのため、最初はどんなことをしていたのを私だけが知らない期間がありました。ですが、質問しても丁寧に教えてくれました。初心者の私も、少しずつ意見を言う自信を取り戻していきました。プロダクト造り2回目は、最近ということもありよく覚えているので、詳しく書いていきます。
### 開発したもの
　開発したのは、運動が三日坊主になってしまう人向けのアプリです。その名も(走れ三日坊主)[https://musclepowerapp.pythonanywhere.com/]です。クリックして確認してもらえればと思います。スマホ対応です。アプリの簡単な説明はこちらです。
` ` ` 走れ三日坊主は運動の三日坊主を解決したい運動の三日坊主を自覚している人向けの運動用SNSです。これは同じ時間帯で毎日運動したい人たちのグループの中でステータス(運動しているか否か)などを共有することによって、LIBRARY(運動共有アプリ)や継続する技術(習慣化アプリ)とは違って同じ時間帯で毎日運動したい人が相互に支え合いながら無理なく運動できる環境の構築 を実現できます。` ` ` 
これは、EVP（エレベーターピッチ）というものです。覚えておくとよいと思います。
### 開発の優先順位
　この開発では、非常に細かいPBLを作っていきました。PBLはプロダクトバックログの略です。簡単に言うと、プロダクトの開発にあたり実装する機能などを細かくタスクみたいな感じで書いていくんですね。それに優先順位をつけてそれに沿って開発をしていくんです。アジャイル開発の基本だと思います。ですが、優先順位をつけるのが非常に困難なんです。このチームは特にそこに注力したと思います。優先順位づけは、良さそうな機能を最初に作るという一見簡単なソートのように見えます。しかし、良い機能とは何でしょうか。ログイン機能はさすがに良さそうな機能ですよね。ゲームとかしたことあればわかると思います。しかし、私たちは優先順位がそんなに高くないと結論付けました。なんなら、ログイン機能っぽいものは最終的に付けましたが、本格的なものはつけませんでした。では何を考えて優先順位をつけるのでしょうか。その答えはまだ明確にはなっていません。ですが私は、開発側がお客様にアピールしたい特徴と、ユーザーがありがたいな、使いやすいなというように価値を感じる特徴を二つ持ち合わせている機能順だと考えます。
　実をいうと、ユーザが価値を感じられる機能順に実装していくのが常識のようです。開発未経験の方々は知っておくとよいと思います。どんなにたくさんの機能を持ち合わせた実装でも、ユーザーがいらなくねって感じたらその時点でその実装の価値はなくなります。それを基に私たちのチームも優先順位を考えていきました。しかし、ある先生からの言葉が優先順位の考え方を変えていきます。その言葉は、このアプリならではの価値があんまユーザーは感じられなくない？です。確かに、と思いました。それを聞いて、私たちが感じてほしい価値の部分である、みんなで運動を共有している感を出すための機能の優先順位を上げていきました。
###　開発2回目の感想
めちゃくちゃ楽しかったです。対面でみんなと話すのも楽しかったし、discordで雑談するのも、開発をするのも楽しかったです。本当にいい人たちばかりでした。心理的安全性の小話で話しましたが、否定がないんですねこのチームは基本的に。みんなの意見を取り入れたうえで、その意見の良しあしをみんなで考えるという感じでした。そのため、初心者の私も意見を言いやすかったし、話し合いも活発になりました。
## コラム②　～心理的安全性を確保するために～
開発1回目で心理的安全性の難しさを知り、2回目で心理的安全性の確保の仕方を学びました。そんな私から、初心者側ができる心理的安全性の確保のための動き方を紹介します。それは、臆さず質問をするということです。あれ？質問できたらすでに心理的安全性確保できてない？と思った方もいると思います。そうではないんです。確保される前から、意識的に質問をするようにするんです。1回目で私は、その行動をあまりしなかったことを後悔しています。2回目のときに玄人のチームメンバーから聞きましたが、開発において、初心者の意見は、新しい視点として非常に良い意見であるそうです。それを言われて私は救われた気持ちになりました。とはいえ、ただ質問をするだけではだめです。理解して、自分のものにしたり、新しい意見を考えることを怠ってはいけません。ただでさえ初心者なんだから、そのくらいはしないとですよね。
　ここでまた、質問をしてもうざがったり厄介者扱いしたりする人はいるのではないかという意見があると思います。それは私も思います。ですが、そんな人は人の上に立ったりまとめたりする資格はないと思っています。人の意見を聞かずチーム開発をしている人は、勝手にやっていればいいと、そういう考えになりました。だってそんな人はほとんどいないのですから。

♯ まとめ
　途中から、先生方というよりも、ほかの人たちに向けての書き方になってしまったことをお許しください。
　enpitで私は、チーム開発とはどういうものかを学びました。上に書いてきたとおり、つらいこともあったし、うれしいこともありました。その中で、これから仕事で開発をしていくときにどのようなことに気を付ければよいのか、重要なことは何なのかを実体験で理解することが出来ました。達成感とか、喜びとか、そういうのを授業で感じられること自体まれだと思います。それがenpitの良いところだと思います。学びは数えられないほどありましたが、その中で一つ、誰かが言っていたことを紹介します。チーム開発で一番大切な言語は、いろいろなプログラミング言語ではなく、日本語であるということです。結局はコミュニケーションなのです。私がこの授業で一番学んだ心理的安全性の話も、それにつながってくると思います。お客様も人で、開発するのも人で、それでいてコミュニケーションがなかったらうまくいくわけがありませんよね。
　最後になりますが、幾度となくわかりにくい振り返りツアーをしてしまったにもかかわらず、温かいフィードバックくださった先生方、メンター方、そして何より、こんなに初心者な私を受け入れ、一緒に開発を共にしてくれたプロダクト1回目、2回目のメンバーの方たちに感謝を述べて、この体験記を締めさせていただきます。1年間、本当にありがとうございました！！！！

# おまけ
高校生のみんな、こんな授業があるなら筑波大学に入ろうと思ってくれたらうれしいです。この授業を履修できるのは、情報科学類と、情報メディア創生学類です。受験先の候補になってくれればと思います。お待ちしております。
筑波大在学生1，2年のみんな、3年になったらこの授業のことを聞く機会があると思うので、ぜひenpitを受講してみてください。貴重な体験ができると思います。