enPiTの振り返り

enPiTの振り返り

※この文章は、授業レポートとして執筆・公開されたものです。


通年実験科目「enPiT」の期末レポートの一環として、1年間の振り返りを書き記しました。この記事がenPiTの受講を悩んでいる本学後輩の方々の参考に少しでもなれば、幸いに思います。

#enPiTとは

favicon of www.enpit.jpfavicon of www.enpit.jp
enPiT「成長分野を支える情報技術人材の育成拠点の形成(enPiT)」は、ビッグデータ·AI分野、セキュリティ分野、組込みシステム分野、ビジネスシステムデザイン分野における高度IT人材の育成を目指しています。大学・企業界の協力体制のもとで推進されるリアリティの高い講義や演習など、特色あるプログラムを通じて実社会においてイノベーションを起こすことができる人材を輩出します。
favicon of enpit.coins.tsukuba.ac.jpfavicon of enpit.coins.tsukuba.ac.jp
enPiT-BizSysD × 筑波大学成長分野を支える情報技術人材の育成拠点の形成 ビジネスシステムデザイン分野
favicon of note.comfavicon of note.com
ミルクボーイがenPiTを説明したら|paca全enPiT Advent Calendar 2020、7日目は今年度筑波大学enPiTのメンター村上がお送りします。 adventar.org 序章 内海「どうも〜どうも ミルクボーイです〜」 内海&駒場「お願いします〜 ありがとうございます〜」 内海「あ〜ありがとうございます〜 ねっ 今畑で採れたオクラを1本いただきましたけどもね」 内海&駒場「ありがとうございます〜」 内海「こんなん なんぼあっても良いですからね」 駒場「一番良いですからね」 内海「ね〜有難いですよ ほんとにね」 駒場「入れておきましょう

少し古いですが上記のnote記事に概要がとてもキャッチーに分かりやすくまとめられています。「インタビューやレビューによる反復開発を主眼に置いたチーム開発を通して、 身近な困り事を解決する為のプロダクトを作り上げる講義」がenPiTであると言えるでしょう。

#授業スケジュール

enPiTの授業スケジュールは年度や大学によって異なるようです。2023年度の筑波大学におけるenPiTの1年間は、以下の流れで進みました。

#春学期

最初の3ヶ月間は、自己学習が中心となります。学習内容に決まりはなく、各自が興味のある分野を自由に学習します。また、学外からゲスト講師を招いた講演会が定期的に開催され、アジャイル開発やGitの基礎を学習しました。

夏休みの序盤には、6日間のチーム開発合宿 [1] があります。「身近な困りごとを解決するプロダクト」をテーマに、チームを組んでで企画から開発までを行います。プロダクトの趣旨や使用する技術スタックもすべてチームで決定する必要があり、非常にやりがいのある6日間でした。最終日には成果発表会があり、合宿を通じて学んだことのプレゼンテーションや、プロダクトの展示をします。

#秋学期

春学期の合宿と同様に、チームでプロダクトを開発します。一部チームメンバーの変更もありますが、基本は同じメンバーで開発を行います [2] 。合宿で開発したプロダクトを白紙に戻すのも、一からプロダクトを作り直すのも自由です。1月の中旬には最終成果発表会があり、1年間を通して学んだことのプレゼンテーションや、プロダクトの展示をします。

以下、夏休みの合宿から最終成果発表会にかけて、開発したプロダクトやチームのこと、1年間を通して学んだことに重点を置いて話したいと思います。

#チームメンバー

私達のチームは春学期は6名、秋学期は7名と、比較的多めの人数でプロダクトを開発しました。

  1. A氏(PO/プロダクトオーナー)
    • 開発の各段階で責任を持ち、最終的な判断を下すプロダクトオーナーとしてチームを引っ張ってくれました。発表も基本的にA氏が中心となって取りまとめてくれて、とても頼れるリーダーでした。
  2. B氏(SM/スクラムマスター)
    • 時間や進捗を管理し開発が円滑に進むようチームを主導するスクラムマスターとして、チームに規律をもたらしてくれました。人数が多いチームで統率を取るのが難しい中最後まで完走できたのはB氏のおかげです。
  3. C氏
    • 高い開発力を持ち、フロントエンド・バックエンド問わずいろいろと実装してくれました。受け持ったタスクを時間内に爆速で仕上げる職人で、新しい機能を追加する際の土台の多くはC氏が用意してくれたため、他のメンバーも円滑に引き継いで作業できたと思います。
  4. D氏
    • C氏同様に高い開発力を持ち、フロントエンド・バックエンド問わずいろいろと実装してくれました。細かいところに色々手が回り、メンバーの中で誰よりも多くコーディングをしてくれたのは確実にD氏です。プロダクトの細かい部分は彼の手によって支えられています。
  5. E氏
    • とてもノリが良くチームの士気を高めてくれました。プロダクトのロゴを作ったりスタートページを実装したりと、縁の下の力持ちでもあります。
  6. F氏
    • チームの再編に伴い秋学期から加入してきました。とても学習意欲が高く、自分から率先してタスクを引き受け卒なくこなす姿からは見習う部分が多くありました。
    • デザイン周り全般の設計、加えてフロントエンドを担当しました。

簡潔に書きましたが、私達のチームは他のチームの何倍も和気あいあいとしていて、常に笑いの絶えないチームでした。チームでは

という共通認識の下で開発を進めました。心理的安全性の担保を重要視し、自分の悩みや考えを一人で抱え込まずに誰もが気軽に質問・議論できる雰囲気の中で開発できたのは、本当に素晴らしいことだったと思います。加えて、合宿中にはメンバーの車でランチに出かけたり、開発時には時たまメンバーが差し入れを持ってきてくれたり、学期末には打ち上げを開いて交流を深めたりと、ゆるやかで心地のよい関わりが総じてプラスに働きました。

#開発したプロダクトについて

「TsukuGei」という、筑波大学芸術専門学群(以下、「芸専」)の学生の方々向けの作品ポータルサイトを開発しました。

TsukuGei
TsukuGei

顧客:芸専の作品に興味があり、作者さんを知りたい・応援したいと思っている人。また、芸専の学生であり、作品をもっと多くの人に見てもらいたい・知ってもらいたいと思っている人。

問題:芸専の実習的な講義は履修が芸専の学生のみに限られるものが多いです。そのため、芸専の方々の作品を見れる機会は卒展や芸術祭などの一部期間に限られてしまい、芸専の作品を知る機会はそこまで多くありません。学生の方々が個別にSNSを通して作品の発信をしているケースもありますが、SNSの世界は広くて見つけ出すのが大変です。

解法:芸専の方々の作品を集約したポータルサイトを作り、作品を一箇所でまとめて見れる場を提供します。芸専の学生はサイトに登録することで作品を自由に発信することができ、芸専の作品に興味がある人も迷うことなく作品を見ることができます。同時に、作品の購入サイトやSNSへとつなぐハブの役割を期待することができます。

対象となる顧客・問題・解法を上のように定義してプロダクトを開発しました。ベーシックなSNSと同じように作品の投稿・削除・通報・一覧表示、作品に対するいいね・コメントの投稿機能を備え、加えて作品に使った画材や作品の詳細な解説を書ける説明欄や、作品の購入リンク項目を登録できる仕様、作品のランダム表示機能 [3] なども実装しました。

#活動の変遷

#自己学習期間

ブラウザ拡張機能の作成や、Node.jsの学習に取り組みました。学習はかなり自由で、Unityでゲーム開発をする人や人工知能でおしゃべりBOTを作る人なども見られました。受講生の自由な活動から触発されてやる気が出た部分も多々あり、かなり有意義な時間でした。

#合宿

チームで「TsukuGei」を開発しました。アジャイル的な考えにチームのみんながまだ慣れておらず、聞きたいことを聞くためのレビューの仕方に苦労した合宿でした。開発期間も少なく毎日が忙しく本当にあっという間でした。投稿・削除・閲覧機能を実装して最低限の形としてプロダクトを提供できたところで、合宿は幕を閉じました。

#秋学期

#スプリント1(1~3週)

一旦開発の進捗を少し遅らせ、大学で11月序盤に開催される芸術祭で広報活動をするべくNotionでの特設サイトの制作に力を入れました。「広報のためだけにわざわざ自前でプロダクトを作るのはコストパフォーマンスが悪い」と判断して、既存のサービスを使用して特設サイトを作りましたが、そんな割り切った判断が案外評判が良くて驚きました。特別な例かもしれませんが「価値を提供できるのなら既存のサービスを使用しても構わない」ということを知れたのは良かった反面、広報で得られた成果は芳しいものとは言えませんでした。芸専の方々の一部にはプロダクトを知っていただけましたが、広範囲に広めることは出来ませんでした。

#スプリント2(4~6週)

芸専側の意見を芸術祭で多く回収するつもりでいたのに対して予想以上に意見を得ることが出来なかったため、プロダクトの方針にブレが生じました。いいね機能の実装などの進捗はありましたがクリティカルに進んだ部分は少なかった印象です。チームとしての共通認識を再確認するためにも議論をする時間を増やし、芸専側のニーズをこちら側で探って芸専の教授のもとへ相談しに行くということになりました。

#スプリント3(7~9週)

芸専の教授のもとへ、POとSMの2名がインタビューに伺い、貴重なご意見を数多くいただきました。当初、私たちは「大学の名を冠した芸専向けのポートフォリオサイトへと方向転換すべきか」と迷っていました。しかし、教授からは「芸専のポートフォリオは独自性が高く、テンプレートに当てはめるのではなく、自ら1から制作して個性を表現するものが多い。そのため、テンプレート型では十分な価値提供にはならない」と明快なご指摘をいただき、大変ありがたい経験となりました。そのほかにも、芸専ならではの視点から多くのご助言をいただき、最終成果物に向けてやるべきことの方針を明確に定めることができた、学びの多い期間でした。

#スプリント4(10~12週)

溜まっていたタスクをうまく振り分けてプロダクトの総仕上げを行いました。開発練度の成熟具合も最高潮に達し、最後の短い期間ながら、通報機能やスタートページの追加、CMSとの連携など、多くの機能を盛り込むことができました。また、最終成果発表会に向けて各々の感じたことを話し合い、プレゼン資料をまとめ上げました。

#全体を通した振り返り

#当事者の意見の重要性

enPiTの1年間は当事者の意見の重要性を身にしみて理解した1年間であったと感じます。私達が選んだテーマはレビューをもらう上で非常に難しいものでした。というのも、「作品を投稿する芸専側」と「作品を見るユーザ側(非芸専側が主体)」の2つのユーザが存在し、両者からレビューをもらう必要性があったためです。特に「芸専の学生」は情報学群生向けに開講されているenPiTの授業内には居ないため、意見をもらうのにとても苦労しました。

などと、芸専側の意見を汲み取れるように活動しましたが、振り返ってみるとやはり十分な量の意見を得られたとは言えず、芸専側のニーズに十分にフィットした他に変わりが存在しないような価値提供が出来たとは言い難いプロダクトになってしまいました。

そのような中でも芸専の学生の意見を反映できた一例として、「いいね数やコメントが作者のみにしか見えないという、情報の半隠匿実装」があります。我々のプロダクトにおけるいいねやコメントは他のSNSとは異なり、受け取り手である作品の作者本人からしか見ることが出来ません。これは「一般的なSNSではいいね数が可視化されるので、作風が似ているのに自分に比べて沢山のいいねがついている作品を見てしまうと、少し辛くなってしまう」という、実際に芸専の学生の方から寄せられた意見を元にした実装です。

一方で興味深いことに、授業内でのレビューでは一転して「なぜ他のSNSのようにいいね数が見れないのか?」という意見が多く挙げられました。レビュワーの方々に対しては芸専側のコンテクストに基づいてあえてこのような実装をしているのだと説明することで、納得していただけました。

授業内レビューでの意見は、そもそも我々のプロダクトに興味がない――芸専の作品や芸専への応援に興味がない――人の意見を含むものです。そのため、得られるレビューは良くも悪くも万人に共通する感性に基づくものが多く見受けられました。例えば「いいね数が見られた方が良い」という意見は、一般的な感覚としてはもっともらしく妥当な提案です。しかしながら、「それが本当に困っている顧客の課題を解決する実装なのか?」を考えると、万人に共通するもっともらしい意見に応じて、いいね数を表示させれば良いというわけでは必ずしもありません。プロダクトを求めている顧客、すなわち当事者の意見を反映させることが重要です。単に多数意見をそのまま反映するのではなく、スコープを当事者に絞り、当事者ならではのコンテクストで語られた意見に大きな価値を置くべきであるのだと、強く実感しました。

総じて、「様々な属性を持つ集団から意見をもらう際は、多く得られた意見が必ずしも価値提供につながるとは限らない」という難しさを感じました。

#技術力格差への向き合い方

enPiTでは様々なバックグラウンドを持つメンバーが集まってチーム開発をするため、個々の得意な部分・不得意な部分がまちまちです。「プロダクトの進捗の為には技術的背景を多く持つ人が多くのタスクを受け持ったほうが効率が良い」一方で、「チームの成長の為には全員がまんべんなくタスクを受け持った方が良い」という、進捗と成長の2つの視点から生じるジレンマは、多くのチームが直面した課題であったと思います。

私達のチームも、プロダクトの詳細な機能を作る段階に入ってからこの問題に直面しました。話し合いの上「プロダクトの開発も重要であるが、それ以上に我々一人一人がenPiTを通して技術的に成長することが重要である」という結論にいたり、「技術的背景を多く持つ人があえて特定のタスクを持たず、他のタスクを持っている人の元を回りながらヘルプやアドバイスをする」という形式を導入しました。開発スピートが少し遅くなって毎週のレビューでの報告量は減少してしまいましたが、かわりに

と、両者にとって良い開発体験になりました。総合的に得られたメリットのほうが多く、技術力に差のあるチームでは技術リーダーが一旦手を止めて全力でサポートに回ることが、有力な手法なのだと実感しました。

#初学者がモダンな技術を扱う難しさ

脇にそれる話ですが、このブログはAstroというwebフレームワークを用いて、年のはじめから1ヶ月ほどかけ、合間にちまちまと作り上げたものです。Astroの現在(2024年2月)の最新versionは4.3.5ですが、およそ1年ほど前のversionは2.0でした。私がブログを作るうえで当たり前のように使っているAstroの便利な機能も、1年前には公式にサポートされていなかったものが多く、もし1年前にこのブログと同等のものをAstroで作ろうとしていたらおそらく完成までに倍以上の時間がかかっていたことでしょう。モダンな技術の変遷は目まぐるしいものであり、「情報系の仕事に就くということは、最新の情勢をキャッチアップするために一生勉強をし続けないといけない、勤勉者の世界なんだなぁ」と思うところであります。

enPiTの授業では使用技術スタックは自由に決めることができるのですが、私の所感としては例年モダンなフレームワークを用いたweb開発が多く感じられます。ゆえに、enPiTもモダンな技術の変化の影響を大きく受ける授業です。現に、私達のプロダクトではwebフレームワークとしてNext.jsを採用しましたが、ちょうどApp Routerのルーティングが安定版扱いになった時期であり、最新のApp Routerを用いるか旧来のPages Routerを用いるかで話をした覚えがあります。

モダンな技術が発展するほど、私達がめんどくさく思う難解な概念は透明度を増し、そんな難しいことを考えなくても良い、誰もが高度なことをより簡単に効率よく開発できる環境が成熟していきます。一方、それは私のような初学者からしては難しい部分でもあり、プロダクトを作るような複雑な処理をしようとした途端、その透明性故にどこから手をつけていいのかが分からないことがしばしばありました。「分からない言葉を調べたら、その説明文にも分からない言葉がたくさんあり、その言葉を調べたら、さらに分からない言葉が…」が長く続くことがあり、この透明な部分に対する知識量の違いが、技術的背景を多く持つ人と初学者との格差の本質的な部分なのだと思います。

enPiTの最初、春学期の自己学習期間というのはこのような技術を扱う上での準備期間であったはずです。しかし振り返って見ると、この時間はチュートリアルを通して単にモダンな技術をキャッチアップする時間ではなく、「モダンな技術の枠組みを飛び越え、自分が限られた時間を通して考えるべき対象を、透明な部分の中から取捨選択するための準備期間」であったのだろうなぁと感じます。先ほど述べたように初学者にとっては分からない概念が無限のように存在するのに対し、enPiTに充てられる時間には限りがあります。その様な中からうまく取捨選択をするためには、チーム単位での強みを生かすべきです。既存のスケジュールではなく、先んじて始めの方にチームを組んでプロダクトの像を作り、必要な技術スタックを見据え、合宿に向けてチーム単位で相談し合いながら学習を進める授業設計にした方が良いのではないかと思いました。

#終わりに

紆余曲折あったenPiTの講義でしたが、本当に実りのある1年間になりました。こうして無事プロダクトを形あるものとして仕上げて完走し、最終レポートまでたどり着けたのは、教職員・メンターの方々およびレビューをくださったenPiT受講生・芸専の学生の皆様、なによりもチームのメンバーのおかげであると心から思っています。チームの中で私だけが別の学部であり、完全アウェーなチームで最初はうまく馴染めるか不安でした。しかし、そんな不安がまるでなかったかのように毎授業本当に楽しいひと時の連続であり、他学部の人間をあたたかく受け入れてくださったチームの皆様にはとても感謝しています。本当にありがとうございました。

情報学群の後輩の方々。もし興味が湧きましたらenPiTを受講し、ぜひとも世の中の困り事を解決するプロダクトを作って喜びを分かち合いましょう。皆様にも実りあるenPiTライフが訪れることを心から願っています。


#脚注

  1. 合宿という名を冠していますが、どこかに旅行するわけではなく全日大学内で行われます。

  2. 春学期のみ履修の学生が一部存在するため、若干のチーム再編があります。

  3. YouTubeのショート動画のように、作品をランダムに1つずつ表示して一期一会の出会いに重きを置いた機能

enPiTの振り返り

slimalized, 2024/02/22