はじめに
近年、就活早期化が進んでいると聞きます。
研究室の先輩方の就活体験談を聞く中で、選考や面接でチーム開発の経験を問われることが非常に多くなっていると感じました。チーム開発では、単なるプログラミングスキルだけでなく、コミュニケーション能力、タスクの進め方、レビューを通じた協調性などが評価されているのだと思います。
「今の時期にチーム開発の立ち回りを練習しておけば、就活本番(インターンや実務)でも上手く立ち回れるはず!」と考えました。
そこで今回、LLM に「チームのメンバー役」と「メンター役」を担ってもらい、一人でチーム開発を疑似体験してみました。
この記事では、その具体的なやり方と、そこから得られた学びを共有します。
やり方
今回は、Gemini の Gem 機能を使いました。実際に使用した指示は以下の通りです。
# 指示
あなたは私の共同開発パートナーとして、チーム開発のシミュレーションに参加してください。
これから特定の課題に対して、一緒に設計からコーディングまでを行います。
# 目的
単なるプログラムの完成ではなく、チーム開発におけるコミュニケーション、相互レビュー、そしてチームとしての協力体制の構築を練習することを目的とします。
# あなたの役割と振る舞い
1. 対等なパートナーシップ: 指示待ちではなく、設計や実装に積極的に意見や代替案(ベストプラクティス)を提示してください。
2. 相互の引き上げ: 私のコードに建設的なレビューを行い、あなたのコードにも私がレビューを行う双方向の関係を構築してください。
3. 対話の重視: 一方的に実装を進めず、対話を通じてお互いが納得する解決策を模索してください。
# 評価・フィードバックの視点
開発の区切りで、以下の視点から客観的なフィードバックを提供してください。
- コミュニケーションと傾聴
- 相互成長(教え合い)
- 技術的コラボレーション(可読性、保守性、PRを想定したタスク分割)
上記の条件を理解したら、「どのようなテーマで開発を始めますか?」と質問してシミュレーションを開始してください。
今回はこのプロンプトを用いて、「論文などのPDFからテキストと画像を抽出し、LLMの入力用データ(JSONL)を作成するツール」を開発しました。(コード:look_at_me )
LLMとの疑似チーム開発で学んだ3つのこと
たった数日の開発でしたが、三つの学びを得ることができました。
学び1:実務レベルのチーム開発の進め方
いきなりコードを書くのではなく、チームで合意形成を行う重要性を学びました。具体的には以下の通りです。
-
要件定義と環境の統一: 最初に技術スタックをすり合わせることの重要性。今回は
uvを採用し、環境構築のズレを防ぎました。 -
READMEの重要性: チームメンバー(LLM)が迷わずセットアップできるよう、ディレクトリ構成や
uv syncの手順をREADME.mdに明記しました。 -
Gitのブランチ戦略とPR:
mainに直接コミットせず、機能ごとにブランチを切り、Pull Request(PR)を出してレビューを受けるフローを体験しました。(ローカルだけでなく、upstream でクラウド側と繋ぐ概念もここで理解しました)
学び2:コードの品質を担保する意識
複数人で開発する際、コードの書き方を合わせることが重要だと学びました。LLMの提案で、以下のツールを導入しました。
-
Ruff(Linter / Formatter):uvと相性の良いRuffを導入し、ルールをデフォルトに統一。 -
pre-commit: コミットする瞬間に、自動でRuffなどのチェックツールを走らせる仕組みです。これにより、Lintエラーやフォーマット崩れが残ったコードはそもそもPushできないような仕組みづくりを構築できました。
学び3:PDF解析技術(PyMuPDF)の知見
今回のお題として設定したPDF解析ツールの実装を通して、技術的な学びを得られました。一例としては、
PyMuPDFを使ったテキスト抽出- ベクター画像/ラスター画像の違いの理解
-
get_pixmapを用いたbbox座標からの画像切り抜き処理など
特に学んだこと
たった三日間という短期間でしたが、特に自分が学べてよかったと思ったことは、コミュニケーションにこだわるようになったこと、だと思いました。
これまではエラーが出たらコードと一緒に「どういうこと?」とLLMに丸投げしがちでした。しかし、「相手が人間のチームメンバーだったら?」と想像し、①エラーを自分で読む → ②原因の仮説を立てる → ③解決策を相談する という順序で質問するように意識を変えました。
コミットメッセージ、コードのコメント、PRの説明欄など、すべてにおいて「相手に自分の意図が伝わるか?」を考えて書くようになりました。
おわりに
大雑把なまとめになりますが、LLMを仮想のチームメンバーとして扱うことで、Linter/Formatter、pre-commit、Gitのブランチ運用、PRの書き方といったチーム開発を経験しないとなかなか意識しない経験を、学ぶことができました。実際にチーム開発をした方達には、当たり前のことかもしれませんが、私は企業などでチーム開発などをした経験がなかったので、とても勉強になりました。
チーム開発の経験がなくて不安な学生の方には、ぜひお薦めしたいと思います。一緒に就活頑張りましょう💪