NaClの完山です。
昨年に引き続き、今年のインターンシップもオンライン開催でした。
2回目のオンライン開催ということで、
オンラインの利点と欠点が見えてきたインターンとなりました。
昨年のインターンやRuby合宿で好評なので、今年もシューティングゲーム作成で実施する運びとなりました。
今回は当初想定していた人数から減ったため、特別にNaClの新人社員2名を加えた3チームで実施しました。
以下のスケジュールで開催しました。
また今回のインターンシップも去年に倣ってdiscordを利用して開催しました。
開発の現場でも用いられるこちらのゲーム開発用のチャットですが、やはりboostをしないと通信制限などから画面共有やカメラ機能が十全に使えない事が多々ありました。
今後は要検討かなと思います。
今年はインドの学生さん2名と島根大学への留学生さん1名、島根大学の学生さん1名、松江高専の学生さん2名の
計6名の方々にご参加頂きました。
6名ということで、1チームでやるか2チームでやるか悩みましたが、ボイスチャット上で活発的な意見交換をするには5名より多い場合は難しいと判断し、2チームに分けることとしました。
加えて、NaClの若手エンジニアが2名参加できる運びとなりましたので、インターンのいい刺激になってくれればとNaClチームを混ぜての3チーム体制でインターンを進めることとなりました。
今回はインドの学生さんにご参加して頂きました。言語の壁が出来てしまうということで昨年に引き続き、松江市国際交流員のAarti Daasさん(通称ソラちゃん)にご参加いただきました。
私が英語が上手く話せないので、Aartiさんには大変お世話になりました。ありがとうございました。
さて、さっそく1日目の内容に入ります。
去年の経験を岸野さんに 2021年夏季オンラインインターンシップでまとめて頂いてますので、それを参考にまずはgithubやサンプルプログラムの簡単な説明から入ることにしました。
最初に、今のご時世ではオフでの交流会などは難しいので、顔合わせの場所(皆さんのことを知れる場所)があった方が良いということで、皆さんに質問したい内容を書いてもらってランダムで選んだそれを自己紹介してもらうというサイコロ自己紹介をアイスブレイクにしました。
ボイスチャットでは発言が混線してしまうので、テキストチャットでその盛り上がりを魅せました。
さて、2日目に入ります。
この日になると各班、特色が強く出ました。
まずチーム1ですが、この班は多くのサービスを使って製品開発をするレベルでの実装をし始めました。
Notionで仕様決定とタスク分解、各種仕様やデザインについてのフィードバックを書き出して進めていました。
デザインはFigmaで設計していました。
このチームは、プロレベルで開発できるインドの方2名とIT分野は初心者な留学生の構成でしたが、結果として、
インドの方が留学生の方にプログラミングや開発の仕方を教えながら進めるとともにお互いの意見を尊重しているという感じで、疑似的に職場体験をしているようなチームでした。
言語の壁は顕著で、Aartiさんにサポートに入って頂いたり、テキストチャットをベースに話しながら、記録を残しつつ学習していく形でした。
私もNaClのトアさんと仕事をしますが、トアさんは日本語がベテランなので、今まで言語の壁を仕事中に感じたことがありませんでした。
言語の壁がある開発現場などがあった場合はこういった形になるのか。と私自身がすごく勉強になるチームでした。ちなみに、インドの方々はgithubはproユーザでした。(課金しなくては...。)
次にチーム2です。チーム1ほど顕著ではなく、平均的ではありますが、優秀な人たちの集まりという印象です。
皆さんフレンドリーにボイスチャットで話しながら進めていく形で、この日はconflict問題にぶつかっていました。
その結果、作業方針を変えて、マップを分けての開発を行おうという話になったようです。
そうすれば、それぞれのマップでその人の特徴が出る上に、別ファイルでの開発なので、共用ライブラリ以外の編集で衝突は起きず、開発時間を短縮できるというナイスアイディアでした。
今回は残念ながら5日間しか取れないので、時間削減して如何にいいものを作るかという発想に至れるのはとても勉強になります。
conflictを効率的に解消するためにbranchを分け、PullRequestを作成してもレビューに時間はかかり、conflict修正に時間はかかるものです。それを機能の品質を担保しつつ、時間短縮する方法に気づいているのはとてもいい学びだと思います。
そして驚いたのが、複数人で画面共有しながら、コーディングを進めていたところでしょうか。全員が同じような修正をするところがあり、共有で使うライブラリの開発がありますが、その段階で、ペアプログラミングをするのは効率的だと思いました。
仕様も人によって欲しい機能は変わりますし、無駄に悩んで、時間を使うことは減ります。
そして、発言が活発になれば、全員にとっていい刺激になります。
こういったことを自発的に行えるのは優秀なチームだと思います。
そして我らがチーム3ですが、
NaCl 石原さんはDxRubyで数々ゲームを作成されてるので、お手の物といった形でした。
NaCl 鈴木さんと協力して、かわいいゲームを作っている形です。
こちらから具体的なお願いをし損ねてしまって申し訳なかったですが、お手本になって頂きたいという発言から、意図をくみ取って頂き、Team3用のチャンネルで活発的に進捗を報告いただいてました。
Githubを使ったIssueで管理するなどを実際に見てもらいながら他の班にマネできるようにということで、分かりやすく進めてもらえたと思います。
こうして恐ろしく順調に2日目が終了しました。
私の出番はいつ来るのだろうか...。というほどの優秀さでした。
さあ折り返しとなりまして、3日目に突入しました。
各班2日間でかなり順調に進んでおり、木曜日には完成出来そうという感じが見て取れました。
各チーム追加要素を実装計画に入れてきた感じです。
この日は Rubyの生みの親 まつもとゆきひろ氏(通称 Matz) による質問会がビックイベントです。
去年はコードを見てもらったのがとても好評だったとのことで、今回もそういう感じかなと想定でしたが、
今年は質問の質と数がとても良く、時間いっぱい(少しオーバーしながらも) Matzのお話をしっかり聞ける回でした。
コードを見てもらうよりもMatzのことをたくさん知れるとても良い会だったと私は思います。
特にインドの方々は質問を複数回されるほど楽しみにされていたようで、良い会になって何よりでした。
私の「ディスプレイは何枚がベストですか」というしょうもない質問で時間を使ったのが申し訳ないです。
個人的に質問の中で面白かったと思ったのは、
「Crystalについてどう思うか」と「今までで一番大変だったこと」です。
今まで一番大変だったことという質問は一見して普通の質問ですが、だからこそ回答が興味深い内容となったのではないかなと思います。
先日TwitterでRuby会議の時の質問で一番嬉しかったことを質問したら子供が生まれた時と答えていたというものを見ましたが、定番の質問に対する回答は結構面白いのかもしれないなと思いました。
結構面白質問が多くて、もっと時間を取りたかったなと思いましたが、インターン参加した方々にはぜひRuby会議やRWC等に参加してもらえればありがたいです。
長くなりましたが、Discordは調子が悪いので、GoogleMeetで行ったMatz質問会の写真です。
さて、舞台も大詰めです。
5日目は午後から発表会となるので、一日は資料作りと発表会となることでしょう。
実質、最後の実装日となります。開発計画は3日目の時点で大体出来る感じが見えていたので、
とても順調に、後は追加機能の実装がメインといった感じでした。
この日は特にもくもく会をしている感じはありましたが、午後からチーム2に動きが見られまして、
ゲーム名やゲームの遷移画面、音楽について話し合っていたのでしょう。活発的な議論が見られました。
この日は特に質問に答えるタイミングがなかったですね。
最終発表日となりました。
Team1, Team2, Team3 それぞれが5日間で作り上げた(とは思えない)ハイクオリティなものを見せて頂きました。
Team1は何でも全て自作の絵・音楽・ストーリーらしく、3キャラ、3タンクから選択可能で、2種類のゲームを楽しめるようになっていました。正直、インディーズゲームとして出しても良いレベルです。
DxRubyでwavを流すと途中でゲームが落ちるという問題に最終日悩んでいました。
vAudioのruby用ラッパーを作られている方がおられたので、これを使ってどうかと提案しましたが、再生に使用する音源をグローバル変数でloadするだけで解決できたみたいでよかったです。
以下は、Team1の発表画面です。
Team1のインドのお二人はインドから参加されていましたが、白板を使ってブレインストーミングをされていたみたいです。
最後に我らがTeam3です。
このチームはNaCl2人組チームです。
お二人ともデザインセンスが良いので、とても出来栄えのいいものでした。
カメラから出る光の線の表現とか面白いですし、部屋の中を逃げ回る猫を撮影して、
SNSにあげるというゲーム設定も素敵でした。
開発過程など、良きお手本になれたかなと思います。
もう少し他のチームとの交流の時間を設けるべきでしたので、そういう時間をスケジュールに組み込みたいですね。
次回開催はそういった点も工夫してみるといいかもしれません。(このスケジュール取りが一番難しそうですが。)
さて、そんなこんなで皆さんの発表会は終わりました。
とても優秀な方々で今回の難易度設定は明らかに間違っていました。
今後もこのレベルの方々が来られることを考えて、事前のスキルチェックを出来る環境かもしくは途中で難易度を上げられる環境を用意できればいいなと思いました。
それと、そういったことをスムーズにできる用に積極的にコミュニケーションを取れる環境づくりが大切ですね。
作業状況をずっと監視するのは難しいですし(さすがに息苦しい)、何か工夫したいですね。
一番簡単にできるのはやはり、PRレビュー会でしょうか。
この後、交流会として、Team3のお二方や会社についての質問時間を設けました。
30分ほどの短い時間ではありましたが、最後に質問会が出来たのは良かったです。
今後もこういう時間を差し込まなければいけませんね。
結構急に決まったものだったので、お二人には大変な思いをさせました。
来年はあらかじめスケジュールを用意しておかないとかもしれません。
私はプログラミングに対して、完全な素人なので、ゲーム開発中に、色々な問題が出てきました。その時、完山さん、岸野さんは私の質問を素早く回答してくれました。Aarti Daasさんは色々通訳してくれました。メンバーはコードの方色々手伝ってくれました。私はとても感謝しています。
私は今回のインターンシップに参加して様々なことを学ぶことが出来ました。DXRubyでは前使った時とは別の文を知ることができ、githubは初めて利用したので教わること全てが初めて学ぶものでした。
自分にとって初めての共同開発経験だったので、それ故想定外のことがたくさんありましたがそれを経験できてよかったです
本インターンで一番問題となったのはコミュニケーションロスです。
最初の想定としてはRuby合宿と同様に、質問がたくさん飛んでくるであろうと思っていました。
そのため、質問待機場所でずっとメンターが待機し、質問があったらすぐに飛んでいく予定で、また話している内容を聞きに回るようにする想定でしたが、想定よりもはるかに優秀な方々が来たので、質問が来なかったですね。
そして、基本的には黙々と作業を進めながら、困ったことがあったらメンバー同士で話し合うというスタイルでやっていたので、下手に入ると作業の邪魔になりそうで、なかなか割り込めなかったです。
これはボイスチャットとして、Discordがあまりにも効率的に作られ過ぎているのが問題でした。
必要な時だけ話せるという機能なので、作業に集中しているかどうかが一目でわかるわけでもなく、気軽に話しづらい状況を作っていたのかなと思いました。
また、気軽に話せるタイミング・交流会をスケジュールに組み込んであげればよかったです。
全員を巻き込んだPRレビューとかいいですよね。特に今回はTeam3が特設であったので、大きな修正のマージ前に開くように促せば面白そうでしたね。
せっかくGithubでやっているので、色々な意見を集めたり、なぜこういう風に実装するのかを話し合えれば、勉強になったと思います。
また、インターンの難易度や満足度が気になる所です。
何か要望があれば事前に集めたり、題材決定するときも満足できるものを事前に調査できれば良いなと思いました。