積雲が映像制作したMV『RANGEFINDER』公開中
専門88IO

チーム開発奮闘記

専門

10月から12月までの約3ヶ月、筆者は部活動のチーム開発チュートリアルとして掲示板サービスの開発を行っていました。

筆者のチームでは、

  • Server(2人)
  • Android(3人)
  • Web(2人)

の計7人での開発を行いました。(筆者はWebに含まれます。)

集団での開発が初めてということもあり、グダグダになってしまったことも多くなりました。これも良い経験のひとつと捉えて、備忘録を兼ねて愚痴っていきます。

どうか温かい目で読んで頂けると幸いです。

開発方針

本チュートリアルでは課題として、掲示板の

  • 投稿
  • 閲覧

機能の実装を目標としています。

新入部員は夏休みの間に、

  • Server(SQL…)
  • Android(kotlin)Web
  • iPhone(swift)
  • Web(React.js)

のチュートリアルのいずれかを受けており、3部門で1チームを組みました。

方針としては、

  1. 実装したい機能や完成イメージ等の共有
  2. API仕様書の作成
  3. 各自機能の実装(週1の進捗確認)
  4. サーバーとの接続テスト
  5. 修正
  6. 発表資料の作成

といった感じで進めていきました。

問題点

Android担当の内2名の意欲がない?

「あるある」ですかね。Androidアプリ開発のメンバーは一番多く3名いるのですが、内2人がパソコンを持ってプログラミングをしているところを見たことがありません。

進捗確認の場には来るのですが、常に3人で行動しており、「付いてきた」という印象を受けました。

GitLabの開発用リポジトリも更新されておらず、仕事を分担せずに1人だけで開発を行っていたようです。

開発における主導権がおかしい?

機能についての話し合いの段階で、Androidの主力の人が意見してくれました。(筆者が返信していますが、所感なので8割間違ってます。)

ここまでは良かったんです。以下、雲行きが少々怪しくなりました。

 

これ、全体での確認をとっていないんですよね。案の定、不備が露見して「投稿の編集」が行われています。これでは、どれが「最終的」なのかよく分からなくなります。

(文句を言ったアホは筆者ですが…)

また、データ構造に関してはServerの方が主導してくれると円滑に進むと思ったのですが、ここで話し合っているのはAndroidとWebの人です。最終的に決定しようとしたのはAndroidの人です。

この後、Androidの人が再度「決定版」と称して投稿を行いましたが、これも不備が多かったオチです。

Web間での理解度の隔たりを埋められない

Webの担当は筆者の他にもうひとりいるのですが、彼はアルバイト等で多忙なため実装の大半を筆者が行いました。

元々、「Material-UIを用いてログイン画面のUIを作り直して」と依頼していたのですが、そもそもGitの扱い方から理解が及んでいなかったようです。

また、「features/loginブランチを切ってGitLabにアップロードして」とお願いしたのですが、masterブランチにfeaturesというフォルダを新規作成して更新されたときはビビりました。

Webが機能やUIを全面的にAndroidに合わせようとした

これは筆者のやらかしです。

最初の話し合いでAndroidの方が「5ちゃんねるのような掲示板にしたい」と言っていたので、その方針に合わせてWeb側でも実装することにしました。この時点で半分脳死ですけどね。

なんせ、Web側は機能の実装に加えてUIをJSXで記述する必要があり、Material-UIについて学習しなければなりませんでした。一方、Android側ではAndroid Studioを用いたポチポチ部品を配置する方法を取ることができ、メンバーも3名いるからと油断していました。

そうです、実質1人だったのです。

そのせいか、Android側が作成したUIを一向に見せてくれません。(何回か「スクショを送ってください」とメンションを飛ばしてはみたのですが…)

最終的に@channelではなく、ピンポイント爆撃を行いました。

Androidと話が噛み合わない

上の続きです。筆者がAndroid側にお願いしたところ、返信がきました。

分かりますか。筆者の依頼と質問は、

  • (依頼)Android側で実装したUIのスクショの投稿
  • (質問)Android側で分業ができているか

であり、返答はUIの画像と質問への回答(Y/N)が望ましいです。

しかし、返答は「GitLabにアップロードしました、確認してください」でした。

会話できてませんよね。

そもそも、筆者がこの投稿を行った理由は、

  • GitLabのリポジトリが更新されておらずAndroidの進捗が不明である
  • Androidアプリの開発環境を持ち合わせておらず、UIの確認ができない
  • GitLabにAndroidのプロジェクトがあがっていない

というものです。

GitLabにアップロードされたところで、開発環境がないので、プロジェクトを読み込むことは出来ませんし、導入しても使い方が分かりません。そこまでの学習コストを支払うことを基とした発言だったのでしょうか。

それに関して返信をしたのですが返答がなかったため、Androidのチュートリアルを受けた友人(ロキ)に頼んで、プロジェクトを開いてもらいました。しかし、実行できません。落ちます。「学習して実行してみてね」の後に「実は動きませんでした」オチです。

そこで再度連絡をとったところ、ついに画像が送られてきました。(分業に関しては誤魔化されましたが …)

Serverとの情報共有不足

Androidからの情報提供に手を焼いていた頃、Serverの人との話し合いが上手く出来ていませんでした。(筆者が「Server側の実装は終わっている」と思い込んでいたのも原因のひとつです。)

11月下旬にServerの人に接続テストができるかと尋ねられました。「できる」と返信したものの予定日はドタキャンされ、接続テストは12月上旬まで持ち越されました。(発表は12月下旬です。)

ここで最大の問題発生です。Server側の実装がAPI仕様書と異なっていることが判明したのです。

Serverの2人は仕事の分担は出来ていたらしいですが、互いの実装範囲への理解が及んでおらず、齟齬が生じていることに気づかなかったそうです。

結局、発表が21日を迫る中、API仕様書の完成報告があがったのは16日でした。

API仕様書が機能していない

API仕様書の完成が最後の方になっている時点で機能しているかも怪しいのですが、この確定した仕様書のも多くの不備が見受けられたのです。

まあ、パスの修正忘れは許容範囲内です。直すだけですから。

しかし、ユーザー実装が出来ていなかった(出来たつもりでいた)ことが判明したのは痛いです。

Serverからログイン認証でアクセストークンが送られてくる訳ではありません。ただ、入力したユーザーとパスワードがデータベースに存在しているか分かるだけです。

つまり、ログイン状態におけるUIの変化、また投稿の可否はクライアント側(Android, Web)の実装にかかっているのです。これでは意味がありません。発表を1週間前に控えてユーザーの実装はなかったことになりました。

Server側がAPI仕様書を基に実装を行うのではなく、実装に合わせてAPI仕様書を変更していったことが原因かと思われました。

終わってないのに集まらない

API仕様書の確定後の修正を行った後(この時点でおかしいのは承知で)、サーバーとの接続テストを行いました。

Web側は通信部分のみのテストコードの動作を確認できたのですが、Android側の反応が好ましくありません。「できた」とも言いませんが「できない」とも言わないのです。筆者はデータ取得部分のコードの修正を行う必要があったので、他に手間をかける余裕がなかったのですが、多少の不安が残りました。

その上、発表資料の作成を誰かが行う必要があったのです。

発表日前日の昼に集まれるかどうか尋ねたのですが、ひとり不参加の返信の他にアクションが起こりません。この機になって大多数が未読でした。

結局、筆者は我慢できずにAndroidの開発に携わっていなさそうな方の2人に資料作成を押し付けました。責任の分担は行なえと。あわよくば部員の前での発表は君らがやれと。

発表当日にメンバーのほとんどが出席しない

前日に押し付けた発表資料の作成は押し付けた2人が完成させたようです。筆者はそのまま発表してくれるだろうと思い込み、資料を読んでいませんでした。(最悪、自分の担当分野は自分で話せばいいと考えていたというのも理由のひとつです。)

しかし、当日はAndroidの人がひとりも出席しなかったのです。

そのことに発表前になって気づきました。

急いで資料を読んだのですが、実装したUIのスクリーンショットが貼られているだけの簡素なものであり、実装した機能と書かれている欄にも齟齬が見受けられました。これではAndroid側の実装について説明できません。(Android側は頑なに進捗報告を渋ったので事前知識もそれ程ありませんでした。)

こんなんで誰が発表するんだ。誰が赤っ恥をかくんだ。

筆者です。

(実はServerの人もいたのですが、呼ばれた際にアクションを起こさなかったので気づきませんでした。)

最終的に、Android側の実装については誤魔化し、愚痴をつらつらと述べて発表を終わりました。

解決策

リーダーを決めることです。タスクは増えますが、全体の進捗を管理する立場が必要に思えました。

今回のチーム開発では各部門内での連携も十分にとれなかったため、チーム全体でも理想的な動きをすることができませんでした。筆者はちょっとしたプログラミングの経験はありますが、チーム開発は初めてだったので出しゃばらないようにしていました。

今回の問題点は皆が出しゃばらないように努めたことです。陰キャって多いね。

多少悪目立ちしても進捗の管理は行うべきだと学びました。

完成物

今回、Web側で実装したプログラムを筆者のGitHubにもアップしました。

GitHub - 88IO/react-bulletin-board: 部活のチュートリアルで開発した掲示板のフロントエンド
部活のチュートリアルで開発した掲示板のフロントエンド. Contribute to 88IO/react-bulletin-board development by creating an account on GitHub.

GitHub Pagesの設定も行ったので、以下のページから外観も確認できます。(もちろん、サーバーは立っていないので投稿はできません。また、表示しているデータはローカルのサンプルデータです。)

team-d 掲示板
Web site created using create-react-app

次は…

来年は約1年間、自分たちでプロジェクトを決めてチーム開発を行う予定です。

今回の4倍の時間をかけるのです。当然、チーム内の人間関係も重要になります。

筆者自身、日陰者なのでめっちゃビクビクしていますが今回の反省も踏まえて積極的に望む所存です。

コメント

タイトルとURLをコピーしました