(※本記事は2022年度夏季インターンシップに参加した福井工業高等専門学校4年の佐治瑠久さんによる寄稿です。)
2022年8月29日~9月1日、私はインターンシップの一環としてLED-Camp10に参加しました。この記事では、スクラムとUMLを用いたモデル駆動開発を実践した過程を深掘りしたいと思います。それから、皆さんはインターンシップにどのようなイメージを持っていますか?学生の場合、インターンシップに不安を感じる人も多いのではないでしょうか。私も実際にLED-Campに参加するまではインターンシップでうまくやっていけるのかとても不安でした。そういった不安を解消できるような情報も書いていきます。
チーム「大人の魅力」?
LED-Camp10の参加者は9名で、1チーム3人の3チームを作りました。チーム名は「大人の魅力」です。私たちのチームは他の2チームよりメンバー3人の平均年齢が高く、相手の意見を尊重する大人の魅力があふれるチームにしようという気持ちを込めました。 メンバー構成は、私(19歳)と大学院生の方(24歳)、社会人のかずきさん(25歳)です。役割は、私が大まかな開発を担当する「開発者」、大学院生の方がスクラムを主体的に進める「スクラムマスター」、かずきさんが開発の全体責任者である「プロダクトオーナー」を務めました。
大人なりのコミュニケーション「ティータイム」
私たちのチームはコミュニケーションを取るために、毎朝3人そろってティータイムをするというルールを作りました。ティータイムでは3人でお茶を飲みながら、自分たちの趣味や普段どういう仕事や学習をしているかなどについて話しました。お互いのことを深く知ることができ、関係性も良くなり、開発時に意見を出しやすくなりました。
このルールは単にコミュニケーションを取るだけでなく、全員そろって朝起きることで遅刻しないようにするという意図もありました。メンバーを知るために私が発案し、やってみませんかと問いかけたことで決まりました。LED-Campでは、自分から発言すること、メンバーを知ろうとする姿勢が求められると思います。 私は、年上の人たちとうまくコミュニケーションを取れるか心配でしたが、全員でカードゲームをする機会があるため、自然に年上のメンバーとも仲良くなることができました。
車型ロボットで競技会
競技説明
LED-Camp10では「競技会」に向けて、チームで車型ロボットのLED-Tank(図1)を開発します。競技会ではステージ(図2)を使用します。制限時間2分でステージの枠内に配置される8本の柱をステージ外に押し出し、点数を競います。リトライは一度だけ可能です。
点数配分
- 緑のラインより外に柱を押し出す場合:3点
- 赤のラインより外に柱を押し出す場合:1点
- 黒のラインより外に柱を押し出す場合:0点
- リトライなし:+2点

図1 LED-Tank
図2 競技ステージ
チームの作戦と得点、伸び悩んだ要因を分析
作戦:すべての柱をとにかく押し出す
この作戦は、①②を繰り返すことですべての柱を押し出すというものです。
① 柱を押し出した後にステージ中央に戻り
② 時計回りで柱を探索、柱を見つけたら押し出し再びステージ中央に戻る
制限時間が短いため、ステージ中央で探索することで速く柱を押し出す意図がありました。

得点
1回目:9点
2回目:11点
要因:LED-Tankにチームでは修正不可能なバグがあることに気づくのが遅かった
私たちのチームは、スプリントバッグログでLED-Tankが動く速さを調べることに時間を割きすぎてしまいました。チームのLED-Tankには、実行委員の方でなければ修正できないバグがあり、センサの値を取得してから指定した動作をするまでに大幅なタイムラグが生じていましたが、このバグに気づくのに遅れてしまいました。もっとリスクマネジメントが必要だったと思っています。 LED-Campには計画を綿密に立てる力も求められると思います。
開発の過程を紹介
astah* professional、m2tを使用したモデル駆動開発
LED-Tankの開発では「astah* professional」を使って余分な情報を落とし、視覚的に動作が分かるモデル図を作成しました。作ったモデル図を元に自動でソースコードを生成する機能がある「m2t」というプラグインを利用して開発します。C言語のprintfが理解できる程度で十分開発できるので、プログラミングに自信のない人もLED-Tankを動かせます。

各スプリントの内容と次へのトライ
各スプリントの最後に「KPT」を用いたふりかえりをします。KPTでは各自が次の内容を挙げてチームで共有します。
- Keep:続けたいこと
- Problem:問題点
- Try:次に意識して取り組みたいこと
私たちが各スプリントで実施したことと、TRYを紹介します。
- 第1スプリント
シミュレーター(Webots)で柱を一つ押し出した。
TRY:タスクを分業する - 第2スプリント
シミュレーターで柱を押し出した後にステージ中央に戻り、次の柱を探索させた。
TRY:各人の成果物を効率よくマージする - 第3スプリント
シミュレーターで第2スプリントの成果物をループさせた。
TRY:スプリントバックログの計画をより正確にする - 第4スプリント
シミュレーターですべての柱を押し出せるように、センサのしきい値を調整した。
TRY:ずっと解消できていなかった実物のLED-Tankでのしきい値を決めるタスクを消化する - 第5スプリント
実機でのしきい値、LED-Tankの速度を決めた
TRY:最後のスプリントを有効に活用する - 第6スプリント
バグを直す方法を試行錯誤した。
TRY:リスクマネジメントを大事にする
LED-Tankの開発を通して、リスクマネジメントの大切さを学びました。センサの読み取った値をログでしっかり確認すれば、より早期にバグに気づき実行委員の方に相談できたと思います。これから開発する機会があれば、リスクマネジメントを意識して取り組みたいです。
モデル駆動開発の強み、年長者とのチーム開発
スクラムでは開発やふりかえりの時間が決まっていて、開発に没頭しているとふりかえりをする時間が短くなってしまうことがあり、時間を管理する難しさがありました。 モデル駆動開発では、視覚的に分かることで各々の成果物を一つにまとめる際に非常にまとめやすく、その強みを感じられました。チーム開発では、これまで年上の人と開発する機会がなかったため、コミュニケーションをとる良い経験もできたと思います。
参考リンク
