i Cubed Systems Engineering blog

株式会社アイキューブドシステムズの製品開発メンバーが、日頃のCLOMO開発の様子などを紹介します。

初めてのチーム開発

はじめに

アイキューブドシステムズでXamarin iOSアプリ開発を担当しているhuong-i3です。

2022年6月に入社しました。入社前に独自勉強し、個人アプリを作ったレベルですが、入社後初めてチーム開発することになりました。

今回アイキューブドシステムズでチーム開発して体験したGitの使い方やチームの動き方について話したいと思います。

プロジェクトの概要

入社後、1ヶ月の研修が終わった後にOJTとしてプロジェクトに入りました。

開発対象アプリはiOS版とAndroid版が存在します。開発効率の向上、アプリの品質を上げるため、Xamarinを採用し、Xamarin.iOSから開発しています。

Xamarin は .NET を使用して、iOS、Android、Windows 向けのアプリケーションをビルドするためのオープンソースのプラットフォームです。Xamarin.iOSを使用すると、C#言語とVisual Studio for MacやVisual StudioのIDEでネイティブのiOSアプリケーションを作成することができます。

私が参加した時点はプロジェクトが進行中の状態で、チームメンバーは私を含めて7名でした。

プロジェクトの動き方

アジャイルフレームワークのスクラム(Scrum)を利用してプロジェクトを進めます。1スプリントが2週間です。毎日チーム内ミーティングがあり、隔週の金曜日にスプリントレビューとスプリントプランニングを行います。

チーム内ミーティングは各メンバーが担当している課題の状況を共有します。実装の品質を高めるため、課題対応が終わったら、クローズする前に担当者がチームの前で動作確認し、漏れがないかチームで最後の確認をします。 スプリントレビューは終わったスプリントの生産性、起こった問題や改善できたことをまとめて共有します。 スプリントプランニングは次のスプリントで各メンバーの対応する課題を決めます。 フルリモートなので、もちろんTeamsで通常にやりとりしていますが、ミーティングで顔合わせて「一緒に仕事をしている」と共感できると思います。

課題はJIRA、資料はConfluence、コードはGitHubで管理されます。

プロジェクトの環境構築

チーム開発なので、同じコードを共通して、同じ設定、同じ動きをすることが大切です。

プロジェクトの範囲が広く、またMacbookのみ開発するメンバーとWindows+Macbook組み合わせ開発するメンバーがいます。既に環境構築ガイドがあり、よくあるエラーが記載するトラブルシューティング資料があって助かりました。

チーム開発で初めての体験

マージコンフリクト

初課題を作業して、ワクワクしながらプルリクエストを出したとたん、GitHubの自動チェックで「This branch has conflicts that must be solved」(このブランチには解決しなければならない競合があります)とのエラー。 自分が一生懸命コードを書いている間に他のメンバーも同じく頑張っているので、同じ箇所のコードが修正されたエラーです。一つずつ確認してどうすれば良いか決めて修正するしかありません。一人開発はこういう競合対応がありませんでした。

開発課題対応フローを紹介します。

Squash and mergeは、プルリクエスト(PR)を一つのコミットにまとめるので、メインのブランチから見やすくなります。

競合を対応するとき、Gitコマンドを使うと難しくて、GUIのあるツールを使う方が楽だとアドバイスしてもらい、Sourcetreeを使うことにしました。画面でコードの変更が確認できるので、わかりやすいです。

余計なコードをコミット

GitHubにアップロードしたくないファイルは.gitignoreで定義されますが、開発中時々IDEが自動生成したファイルを意識がなくコミットしてしまい、プルリクエストしたら「不要なファイルを消してくだい」との指摘を受けました。個人開発の時は気にせず全てコミットしていました。

共通コードベースなので気をつけないと不要なファイルがどんどん増えてしまいますね。プルリクエストを出すとき、自己レビューしてGitHubに不要なファイルやコードをアップしてないかもう一度確認するようにしました。

テストコード

本プロジェクトはxUnitという単体テストフレームワークを使っています。テストケースを書くのに時間がかかりますが、毎回修正が入る時自動で一括検証できるので、品質を確保できるし、開発者としても安心してコーディングできます。

上手くテストコードを書けるようにUdemyでオンラインコースを受ける予定です。

プロジェクトの構成

本プロジェクトは前のプロジェクトから継承して構成を改修されています。アーキテクチャや他のアプリにも共有できる機能の共通化も配慮しながらやっていきます。 クリーンアーキテクチャとMVVMの組み合わせでより依存性を減らしてテスタビリティ(テスト容易性)を向上することを期待しています。 その代わりコードの量は増えてしまうため、理解して上手く使えるまで時間がかかりそうです。私の場合、コードを書く場所を間違えたり、考えすぎて余計なコードを書いたりしたことがあります。プルリクエストのレビューで指摘と説明をしてもらって理解した上で修正しました。

アーキテクチャの本だけ読むより読みながら実際のコードを理解する方が積極的に勉強できます。

おわりに

一人でコツコツ調べてコーディングするより、チームでもっと大きなプロジェクトの開発ができ、悩んでいる課題について相談できる仲間がいて嬉しいです。 さらに、話したオンラインコースや参考書籍は会社側の負担で利用できます。

一緒にコーディングを楽しむ仲間を探しています。興味のある方ぜひ一度面談をしてみてください。