えふじさんのブログ

十中八九殴り書きの記事。

enPiT BizSysD分野のワークショップに行ってきました

 どうもみなさんこんにちは。雪玉を作るときは徹底的に圧縮する、えふじです。

 タイトルにもある通り、先日盛岡で開催されたenPiT BizSysD分野のワークショップに参加してきました。enPiTやBizSysDに関しての説明は、前回の記事をご覧ください。

 今回はその体験記というか、所感というか、そんな感じのアレです。サクッと行きましょう。

 

 

正直見出しを分けるほどの内容はない

 2023年2月21日。大学の出張という名目で向かったのは岩手県立大学アイーナキャンパス。全国*1のBizSysD連携校代表14チームが集まる場の一角に、我々「判断が遅い!ズ(仮)」のブースはありました。

有明同人祭りよろしく島と壁がありました。配置は多分ランダムです。

 他チーム(他大学)のポスターセッションやプレゼンテーションを聞きながら思ったことを2つほど。

 

 まず1つ目は、同じBizSysD分野でも大学によって進め方がバラバラだったこと。1年次から基礎知識学習を積み重ねてる大学もあれば、3年次の3か月間だけで基礎知識学習を終わらせる大学もある。プロダクトの完成度を見る大学もあれば、プロセスや学んだことを重視する大学もある。Webアプリが主流だったり、ネイティブアプリが主流だったり。「同じBizSysDの枠組みの中でもこんなに違うんだ」と驚きました。やっぱり大学内でこもってないで外の世界を知るのって大事ですね。

 んで2つ目。学外の*2ステークホルダーが絡むとプロダクトの完成度が一気に上がるなぁと。ワークショップには自治体と協力したチームや、バス会社からGTFSデータをもらったチームも参加していました。そういったenPiT外のステークホルダーが存在したチームのプロダクトは、軒並み実用性が高いものだったという印象が残っています*3。やっぱり大学内でこもってないで外の世界を知るのって大事ですね。

 

 そんなこんなで半日間、盛岡で話を聞いたり話をしたりしてました。ワークショップの最後には表彰があり、判断が遅い!ズ(仮)は「チーム開発賞」なる賞を受賞しました*4。今までのチームビルディングプロセスやそこで得た学びが評価されたと思うと、まっこと光栄でごぜーます。

ワークショップ後の晩ご飯。誘ってくれた学生さん、場所を教えてくれた現地民さん、ありがとうございます。

 以上。他人の金で行く旅行は楽しい、えふじでした。

*1:文字通り北は北海道、南は沖縄でした。

*2:一般企業、公共機関、その他もろもろ

*3:我々のプロダクトが未熟というのもあると思いますが。

*4:他にはプレゼン賞、技術賞、アイデア賞、最優秀賞がありました。

enPiTに1年間参加してました

 どうもみなさんこんにちは。寝る時の姿勢と環境は想像以上に大事、えふじです。

 タイトルにもある通り、去年(2022年)の4月から今まで、約1年ほど「enPiT」なるプログラムに参加していました。大学の必修科目の1つとして受講し、最終レポートをブログでまとめてねとのことだったのでここにまとめております。「そもそもenPiTって何だよ」「1年間も何やってたんだよ」といった疑問に答えつつ、1年間受講生として参加していたenPiTを振り返っていきます。

 つまり、今回趣味の話は一切出てこないということです。

 

 

そもそもenPiTって?

 education network for Practical Information Technologies の略*1で、ざっくり言うと「実践的なIT教育」らしいです。「社会で通用するイノベーション人材を育成しよう!」って触れ込みで文科省予算で日本各地の大学が実施してるっぽいです。

www.enpit.jp

 enPiTの中にも4分野あり、私はそのうちの1つ「BizSysD(ビジネスシステムデザイン分野)」に参加してました。所謂PBL(Project Based Learning)形式の授業で、「身近な困りごとを解決するプロダクトをチームで開発する」といった内容でございます。

bizsysd.enpit.jp

 ちなみに学部生向けである以上私もBizSysD連携校のどこかにいることになりますが、あえてここでは伏せておきます。*2

 

何を作ったの?

 「青い栞」というWebアプリケーションをチームで作ってました。プロダクトとしては未完成です。

URL(PC推奨):https://aoi-shiori.netlify.app/

GitHubhttps://github.com/enpitut2022/aoi-shiori

何これ?

 青い栞のエレベーターピッチ(プロダクトの超ざっくりとした説明)を掲載します。

[青い栞] は
[旅行計画をイチから考えるのがめんどくさい]を解決したい
[旅行に行きたいがツアーで縛られたくない、でも自分であちこち調べるのは嫌だというわがままさん]向けの
[旅の栞提案アプリ] です。
これは [旅の骨組みを提案しそれをカスタマイズすること] によって、
[旅行会社のツアーや比較サイト、Visit A City] とは違って
[イチから計画を考える負担を減らしつつ、自由度の高い旅行計画の作成]
を実現できます。

 旅行に行きたいけど計画立てるのにあちこち調べるのは面倒、ツアーのプランを見てもなんかぱっとしない。そんなこと、あると思います。自分で計画立てられる方や計画なんざいらねぇって方はそのまま旅行してください。計画立てられない(面倒くさい)方向けのプロダクトです。

何がすごい?

 旅行会社のツアーや個人サイトのサンプルプランのように旅行計画を「提案」してくれる、それを踏まえて行きたくない場所を除外したり代わりの場所を追加したりと「カスタマイズ」できる。この「提案 × カスタマイズ」を1サイトで完結させ、旅行計画のたたき台を作れる点が青い栞の強みです。*3

どうやって使うの?

※現在は京都市にしか対応していません。京都旅行の体で説明します。

 

 まずアクセスすると以下のような画面になると思います。

 画面左上の列が現在のプラン(横スクロール可)、左下の列がスポットの追加候補(横スクロール可)、画面右側が現在のプラン内のスポットの場所となっています。

 画面を拡大して動いている様子をば。カードをドラッグ&ドロップで場所の入れ替え、追加、削除が行えます。また、現在のプランにあるスポットは画面右側の地図上にも表示されます。現在のプランのスポット間には、距離と徒歩移動時間が表示されます。

 余談ですが、先日青い栞のみを使って計画を立て、実際に京都へ1人旅に行ってきました。なかなか有意義な時間を過ごせました。

 

どんなチームだったの?

 私のいたチーム「判断が遅い!ズ(仮)」*4は、1年間のうち前半5人、その後2人out・1人inで4人のメンバーがいました。授業全体としてアジャイル開発、とりわけスクラムを導入した開発を行う方針だったため、判断が遅い!ズ(仮)もスクラムを導入してアジャイル開発*5をしていました。

 最終的なメンバーと役回りは以下のような感じです。

  • えびちゃん(開発者)
    • 前半は別のチームにいたけどチームが解散したため判断が遅い!ズ(仮)に参加。困りごとへの理解とアイデアの発想力がすごい。発言量も多く第二のPO(プロダクトオーナー)としてチームを引っ張ってくれました。何気にCSSに明るい。
  • えふじ(ScM)
    • そうです私です。アイデアの提案よりもメンバーの発言をまとめることが多かった印象。その他タイムマネジメントやホワイトボード(Miro)の整理等、ScM(スクラムマスター)として裏方作業を主に行っておりました。
  • ぬたひろば(開発者)
    • 発言量こそ他メンバーと比べて少ないものの、きわめて正確に的を得た意見を刺す猛者。えびちゃんとものけがアイデアを出し議論しつつ、私が適宜内容をまとめ上げ、ぬたひろばのクリティカルな発言で方向性が定まることもしばしば。終盤は積極的に発表役も引き受けてくれました。
  • ものけ(PO)
    • 開発力の塊にして、困りごとへの解像度がものすごく高いPO。メンバー内で最も開発経験があり、環境整備はじめ多大なお世話になりました。POとして積極的にアイデアを出したり、最終的な意思決定をしたり、チームの文化を作り上げたり。総じて多才。

 なお、一応POとかScMとか書いていますが、プログラミングには全員関わってます。あくまで開発者兼PO・開発者兼ScMといった具合です。

 

タイムラインで1年間を振り返る

 スクラムでは「スプリント」と呼ばれる単位で開発を行っていきます。そこで、スプリントベースで1年間を振り返っていきます。

前半(基礎知識学習 ~ 夏合宿)

 1年間の前半は、その大半を基礎知識学習(夏合宿以降で開発に必要な技術要素の自習)に費やしました。といっても私は授業でプログラミングをした程度の経験しかなかったため何をやったらいいか分からず、たまたまその時期勉強していたUE(Unreal Engine)の勉強をやってました*6

 そして迎えた夏合宿*7。5日間(プロダクトの開発は4日間)にわたり開発を行いました。メンバーは5人で、作ったプロダクトも今とは違うもの(メシレコ*8でした。

 チーム開発経験がゼロな中手探りで始まった開発。1日でできるタスク量の見積もり等に苦戦はしたものの、大きなアクシデントやトラブルはなくプロダクトを形にできました。メシレコで提供したい価値は全て実現できたため、大成功といっていいでしょう。

 ここからの学びとして「共通認識の領域は大きければ大きいほど開発がスムーズに行える」というものがあります。困りごとへの解像度やプロダクトの方向性等、開発に関わる部分の認識がメンバー間で揃っていたことや、作業中こまめに情報共有を行っていたからこそ、分業してもメンバー全員が同じ方向を向いて(同じ場所に向かって)作業できたのではないかと考えています。

後半・スプリント1 ~ 4(/15)

 メンバーの変更を経て後半戦が始まりました。メシレコがある種完成状態であったこともあり、困りごとを考え直して新しいプロダクトを作ることに決定。プロダクトの方向性を1日で定めて*9、メシレコの資産を最大限活用しつつ開発開始。滑り出しそのものは順調でした。

後半・スプリント5 ~ 8 (/15)

 スプリント4後のレビューを受けて、チームの中でどのような機能が欲しいか、より正確にはどのような価値を実現したいかが曖昧であることに気づきます。チーム内で原因を探った結果、そもそも掲げていた困りごとにメンバーのほとんどが共感できていなかったことが判明しました。共感できていないか、あるいは共感できるけどそこまで深刻に困ってないといった状態で方向性も曖昧なまま開発を続けるのは危険だというチーム内判断により、一旦開発を中断。2スプリントほど時間を使って困りごとを根本から見直し、プロダクトを新しく作ることになりました。この大幅なピボットを経て、ようやく青い栞の開発が始まります。

 なぜ大幅に方向性を変えることになったのか。ここで夏合宿の学びが効いてきます。ずばり理由は「共通認識領域が少なかったから」。夏合宿の場合は方向性の決定に1か月ほど*10時間をかけることができましたが、後半で方向性の決定にかけられた時間はわずか3時間程度*11。困りごとやプロダクトの共通認識、つまりチーム開発をする上での土台となる部分が脆弱であったがゆえに開発計画が崩壊したと言えます。過去4スプリント分の蓄積と2スプリント分の話し合いで土台を盤石にした上で開発に着手する。この期間は判断が遅い!ズ(仮)にとっての挫折、そして再起動のタイミングだったなと、今振り返って感じています。

後半・スプリント9 ~ 12 (/15)

 そんな経緯でついに始まった青い栞の開発。既に後半の開発期間も折り返したタイミング、他チームと比べてプロダクトの開発状況が遅れていることや、過去にサンプルコードをコピーして書いた、ロジックが分かっていない箇所でのバグ(通称「動く負債」)の解消に奔走し、毎スプリント進捗を生むのに必死でした。

 見通しが立たない状況の中でタスク分けが洗練されていき、さらにチーム内でenPiTの本質に触れるような名言が次々と生まれたこともありました。総じてこの期間でメンバー全員のチームオペレーション能力やアジャイル開発への理解がかなり深まったと思っています。

担当教員曰く「この時期にこの発言が出たのはすごい」のとこと。
後半・スプリント13 ~ 15 (/15)

 ようやく判断が遅い!ズ(仮)がスクラムチームらしく動けるようになってきました。共通認識を盤石に整えたおかげで洗練された分業を行えたり、レビューでもらった意見のうちプロダクトに反映させるものを選定したり。動く負債の解消もできて、今の青い栞の形に辿り着きました。紆余曲折経てチームが落ち着く場所に着地した、といった感想です。

 

1年間を通して学んだこと

 だいたい3つほどあります。えふじセレクションです。

対象ユーザーは誰なのか

 万人に刺さるプロダクトは難しいって話です。開発途中のプロダクトを先生やメンター、他受講生に触ってもらう機会が結構あります。そう言った様々なユーザから意見をもらえること自体は嬉しいのですが、当然意見の内容はバラバラです。そもそも困りごとに共感してない人、困りごとに共感はしてるけど解決法に納得してない人、解決法にも納得してるんだけど使う状況がこっちの想定と違う人……。まぁいろいろです。そういった多種多様な意見を全て受け入れるのではなく、「お前はこっちが想定してるユーザじゃない」と意見を切り捨てる勇気が大事だという学びです。他受講生はともかく先生やメンターの意見を切り捨てるのにはかなりの勇気が必要ですが、プロダクトが迷走するよりはよっぽどマシです。

心理的安全性の早期確保

 発言が活発でないと話が進まないよねって話です。開発にしろチームビルディングにしろ、意見の交換が起こらないと何も始まりません。作業に関する話から雑談まで、とにかく何でも言い合えるような雰囲気が大事だという学びです*12。これは「緊張が原因で本来のパフォーマンスが発揮できないなんてもったいない」という私個人の考えでもあります。ScM関係なく開発早期からなんでも言い合えるような雰囲気づくりに尽力しましたし、それが功を奏したとも思ってます。

 余談ですが、個人的に「心理的安全性」って言葉が嫌いです。あまりにもふわふわしてて実体がない。言葉の持つイメージが強すぎて具体的な内容が伴ってない気がするんです。パワーワードってやつです。心理的安全性はあくまで結果であって、それが先にくるような言葉じゃないと思ってます。お気持ち表明です。

共通認識領域の最大化

 もう何度も触れましたね。土台は盤石にしておきましょうって話です。意見を切り捨てるためには、チーム内でプロダクトに対する明確なビジョンが必要です。そのためにもチームメンバー全員の、困りごとやプロダクトへの理解水準は一定に保っておくべきだなという学びです。意見交流を活発にして、共通認識による土台を盤石に固めて、その上で開発するなり発表するなり意見をぶった斬るなりする。たぶんこの順番なんじゃないかって思ってます。

 

あとがき

 ここまで長々と書いてしまいました。最後まで見てくださった貴方、本当にお疲れ様です。正直チーム独自の取り組みについても触れようかと思いましたが、挙げてるとキリがないのでやめました*13

 PBLだの、アジャイルだの、スクラムだの、横文字がいっぱい出てきて困惑されている方もいるかと思います。大丈夫。私もそうでした。先に述べましたが、私の開発経験は授業でやっただけです。もちろん中には趣味でバリバリモノ作ってる人やハッカソン出まくってる人とかもいます。ですが私みたいに開発経験皆無で「でぷろいってなぁに?」って状態の人でも1年間やっていけます。

 これを読んでいる中に、もしかしたら来年度(2023年度)enPiTを受講しようか悩んでいる方がいるかもしれません。開発経験皆無のコミュ障な私でも1年間走り切れました。あなたなら大丈夫。メンターとして*14、あなたの受講を待ってます。

 以上。2022年度 enPiT 琉球大学筑波大学 PBL 成果発表会最優秀賞「判断が遅い!ズ(仮)」スクラムマスター、えふじでした。

*1:なんで略すと I が小文字になるんでしょうか。ちなみにテキスト表記はenPiT、ロゴはenpitとなぜか揺れてます。

*2:割とすぐわかるんじゃないでしょうか。IMAGINE THE FUTURE.

*3:未完成だけど

*4:(仮)まで含めて正式名称です

*5:アジャイルだのスクラムだのの説明は長いので割愛

*6:そして夏合宿以降UEは全く使わないという

*7:合宿と言ってますが泊りではありません。1 ~ 6限ぶっ通しの集中授業です。

*8:スマホ推奨。位置情報を基に付近の飲食店を1つずつ提案します。カードを上にスワイプして別の飲食店に切り替えられます。

*9:夏合宿の場合は事前に1か月ほど決める時間がありました。この差が後に効いてきます。

*10:正確には授業の関係で10コマちょっと

*11:授業2コマ分

*12:相手を不快にさせるような発言はご法度ですよ?

*13:この独自の取り組みが結構高評価をもらっている。

*14:あくまで予定

私的な創作をしながら考えたこと。

※この記事は、mast20 Advent Calender 2021 の3日目の記事です。

 2日目はYusukeさんの記事『トマトソース 』でした。

 

 どうもみなさんこんにちは。三度の飯よりコンテンツ消費、えふじです。

 ブログを書くのは初めてなので勝手が全然わかりません。幸いなことに文章を書くこと自体はそこまで苦じゃないので幾分か気楽ではありますが、雑多な文章を人に見せることなど無かったのでおそらく読みにくいだろうと思います。気軽に流し読みする程度の気持ちで読んでいただければ幸いです。

 ……と、ここまで注意書きという名の予防線を張ってきましたが、私かっったい文章書くの苦手なんですよ。ブログだからそこまでフォーマルじゃなくてもいいんでしょうけど、推敲を要するような文章書くのってカロリー消費するんですよね。なので結構砕けた感じでぽこぽこ書いていくつもりです。勢いが大事。ニチアサの赤鬼だって「ノリのいいほうが勝つ」って言ってたし。

 

 前置きが長くなってきましたので、自己紹介はあっさりと。とはいっても、私にこれといったポートフォリオはありません。何かの大会に出たというわけでもないですし、プログラミングなんて大学でやったのがほぼ全てです。あれですね。クサいセリフを使うのなら「ごく普通の一般人」ってやつですね。あとネタを挟まないと死んじゃう病に罹っています。レポート書いてるときでもたまーにやらかしそうになります。あぶねぇ。

 とまあ、こんな感じで突出した技術やらズバ抜けて豊富な知識やらがあるわけではないですが、その分肩の力を抜いて気軽に読めると思います。言い訳ってやつです。さすがにこれ以上長引かせると(主に私が)疲れてきてしまうと思うので、スパッと本題に入ります。と言っても話題2個しかありません。

MMDでお手軽3Dアニメーション

 さて最初の話題はこちら、MMD。おそらく多分皆さんどこかで見たことあるかと思いますし、見たことなくても聞いたことあるって方も多いかと思います。一応「MMDとはなんぞや」という方のために念のためMMDについての軽い紹介をば。

 MMD(正式名称:MikuMikuDance)は、3Dモデルを動かしてCGアニメを作れるソフトウェアです。樋口優さんが個人開発した無料で使えるツールです。あくまでCG動画作成ツールなのでモデリングはできません。3Dモデルはデフォで入ってるものを使うか、もしくはネットから拾ってきてください。日々新しいモデルがニコニコ辺りで公開されています。なお、MMDWindows専用ソフトです。MacユーザーはブートキャンプでWin動かすなりUnityにプラグイン入れるなりしてください。Mac用のMMD互換ソフトもあるので難しくはないはずです。

 実際にMMDの画面を載せてみます。

f:id:aktkszk000:20211127135253p:plain

 あにまさ式ミクさんです。リギングされたモデルのボーンを自分で操作して、それを現在指定しているフレームに登録していけば、あとは登録されたフレーム間の動きをMMD側で自動計算してくれます。分かる人向けに言うとキーフレーム補間です。

 一応公式HPのリンク張っときますね。

sites.google.com

 ここまでMMDについて紹介してきましたが、私は基本静止画ばっかり作ってます。Danceと名前はありますが、現在のフレームのイメージを画像で出力することができるんです。そもそも動画自体静止画の連続だしね。

 

 動画を作るにしろ静止画を作るにしろ、MMDで何か作品を作るときに欠かせないのが「エフェクト」。「通常は動画編集ソフトで後付けするような効果をMMD上でやってしまおう」というコンセプトでして、光源を追加したり、被写界深度を弄ったり、雨を降らせたり、影の描画規則を変えてしまったりと挙げればキリがありません。MMDを始めるためのスペックはかなり低いですが、質感を気にしだすと最終的にはマシンパワーで殴り合う世界になってきます。

 

 長さ的にここらへんで切り上げておかないと怒られそうなので、最後に直近で作った静止画を、途中経過を交えて紹介させて下さい。

f:id:aktkszk000:20211127145158p:plain

 まずは各ボーンを調整してポーズをつけてあげます。今回使用したのはRGM式金潟すぐみver.1.0です。

f:id:aktkszk000:20211127145426j:plain

 背景を用意して材質発光とセルフシャドウエフェクトをかけました。

f:id:aktkszk000:20211127150435j:plain

 画面全体にポストエフェクトをかけて雰囲気を調整。ついでにジェットエフェクト追加。

f:id:aktkszk000:20211127150553j:plain

 外部ソフト(確かAviutl)で色調補正して完成。4Kで出力して現在の壁紙になっております。ね?簡単でしょ?

 ……簡単なはず。

お借りしたもの

初音ミク:あにまさ様

・金潟 すぐみ ver.1.0:RGM様

・AutoLuminous、ExcellentShadow:そぼろ様

・HgSSAO、HgSAO:針金P様

・PostMovie:ビームマンP様

因数分解のすゝめ

 MMDでお腹いっぱいかもしれませんが、もう少しだけお話は続きます。MMDの時もそうでしたが、私は基本「既にあるものを使って何かを作る」ことが多いです。上の壁紙で使用したモデルも、元はスマホゲーム「アリス・ギア・アイギス」のキャラクターです。つまりあの壁紙はアリスギアの2次創作作品あるいは3次創作作品に当たるわけです。ここで厳密なn次創作について議論するつもりは無いので軽く流しますが、大切なのは「私が1次創作者になることは今までなかった」ということです。

 2次以降の創作を行う際に気にする要素の一つとして、「原作への理解」があると私は思ってます。特に原作のキャラを使ったオリジナルストーリーを考える場合などは原作への理解が重要になってくると思います。もっともこれは作品との付き合い方や自身の在り方、作る作品の内容や規模によって変わってきますのであくまで「気にする要素の一つ」です。

 私の場合、ストーリーを考えるような場合はかなり深い所まで原作を理解するように心がけていますし、創作を行わずとも気に入った作品は骨の髄までしゃぶりつくしたい性格です。トロコンしてようやくゲームクリアです。ストーリークリアとゲームクリアは違うのです。

 

 作品をより深く理解するための方法としてメジャーなものに、繰り返し読む(聞く、プレイするなどなど)というのがあると思います。「1回やっただけじゃわかんなかったけど、繰り返しやってみるとだんだんわかってきた」という経験は皆さんお持ちでしょう。「作品の理解」に明確なゴールはありませんので何回繰り返すかは人それぞれですし、あるいは「好きな作品だから繰り返し読んでて、気づいたら暗記してた」なんて人もいるかもしれません。

 そんな自分の好きな作品をより味わう方法として、私は「実際にそれを作ってみる」ことをお勧めします。ゲームであればなかなか難しいかもしれませんが、好きな書籍があったらそっくりそのまま自分の手で書いてみる(打ってみる)。好きな楽曲があったらそっくりそのまま自分で手打ちしてみる。好きな漫画があったらそっくりそのままコマを割ってみる。すると面白い具合に、今まで気づかなかった新しい発見がぽんぽん出てくるんです。今まで受け手の視点で見ていた作品を、擬似的ではあるけど作り手の視点に立って見ることになるわけですから新鮮さもダンチです。

 こうして視点を増やすことで、今まで気にしていなかったことを気にするようになる。なぜこの語を選んだのか。なぜここだけ音をずらしたのか。なぜこのコマを繋げたのか。そうやってより細かい要素にまで目を向けるようにようになると、より理解も深まるって話です。この「作品を細かく要素に分割する」ことを、個人的に「作品の因数分解」と呼んでいます。

 新しい視点を獲得すればその分だけ因数分解ができるので、視点を獲得する方法はおそらくいろいろあると思います。あくまで手っ取り早く視点を増やす方法の一つとして、実際に自分でイチからコピーを作ってみようというだけのことです。試しに手元にある愛読書を打ってみな、飛ぶぞ。

 ……「バットで物理的に」って意味じゃないからね?本は大切にね?

お疲れ様でした

 さて、そんな感じで mast20AdC の3日目でした。他の人はどのくらい書いたんでしょうね。私のは長いほうなのか短いほうなのか、ちょーーーっぴり気になります。現在時点で文字数は約3300。そこまで時間かからずに書けましたが、これはただ私の脳内で浮かんだ文をそのままアウトプットしてるだけだからです。クッソ長いチャットみたいなもんです。独り言です。とか言っている間に100文字増えました。そろそろ終わらせないとまた長くなりそうですね。だが私は謝らない。

 以上。最後まで殴り書きたっぷり、えふじでした。