git rebaseマスターガイド - 履歴を美しく保つテクニック
gitの履歴がぐちゃぐちゃで恥ずかしい...そんな悩みを解決!インタラクティブリベースを使って、プロフェッショナルなコミット履歴を作る方法を実例とともに解説します。
リモートワークが当たり前になった今、開発チームのコミュニケーションはより重要になっています。円滑なチーム運営のコツを実体験とともにお話しします。
「優秀なエンジニアが集まれば、良いプロダクトができる」
これは、私が新卒でエンジニアになった頃に信じていた考えでした。しかし、10 年以上チーム開発に携わった今、この考えは半分正しくて、半分間違っていることがわかります。
確かに技術力は重要です。しかし、どんなに技術力の高いエンジニアが集まっても、コミュニケーションが機能していないチームでは、良いプロダクトは生まれません。
数年前、ある web アプリケーションの開発チームに参加したときのことです。技術的にはとても優秀なメンバーが揃っていました。
プロジェクトが始まって 2 ヶ月ほど経った頃、フロントエンドとバックエンドの api の仕様認識にズレがあると発覚しました。
フロントエンド側の認識:日付フォーマットは YYYY-MM-DD
バックエンド側の実装:日付フォーマットは MM/DD/YYYY
このズレに気づいたのは、本番リリースの 1 週間前。急遽修正作業に追われ、リリースが 2 週間延期になりました。
原因は、「当然こうだろう」という思い込みと、詳細仕様の確認不足でした。お互いに優秀だったからこそ、「相手もわかっているだろう」という過信があったのです。
コロナ禍でリモートワークが始まった当初、私たちのチームでは大きな問題が発生しました。
普段なら気軽に相談していた新人の B さんが、一人で抱え込んでしまったタスクがありました。オフィスなら表情や様子で「困っている」とわかったはずですが、リモートワークではそのサインを見逃してしまいました。
結果的に、B さんは 3 日間同じ問題で悩み続け、最終的にタスクが大幅に遅れることになりました。
「もっと早く相談してくれれば…」という後悔が残りました。
これらの経験を通じて、チーム開発でのコミュニケーションには 3 つの重要な側面があるとわかりました。
現在のチームでは、以下のルールを設けています:
Daily Standup(毎日15分)
Weekly Review(毎週30分)
設計判断の記録
これらを Slack + Notion で管理し、いつでも誰でもアクセスできるようにしています。
情報共有で注意しているのは適切な粒度です。
❌ 細すぎる共有:「ファイルを保存しました」 ❌ 粗すぎる共有:「機能を実装しました」 ✅ 適切な粒度:「ユーザー登録機能のバリデーション部分を実装。メールアドレスの重複チェックと強度確認を追加」
チームには様々な専門性を持つメンバーがいます:
それぞれが異なる「言語」を話すため、翻訳者の役割が重要になります。
例えば、デザイナーから「この画面遷移をもっとスムーズにしたい」という要望があったとき:
デザイナーの意図:ユーザビリティの向上 エンジニアの解釈:アニメーションの改善?パフォーマンスの最適化?
このギャップを埋めるために、私たちは具体例とユーザーストーリーで説明するようにしています。
技術的な判断をするとき、結論だけでなく理由も共有することを心がけています。
❌ 「Reduxを使います」
✅ 「複雑な状態管理が必要なので、Reduxを使います。
Context APIも検討しましたが、パフォーマンスの観点から
Reduxの方が適していると判断しました」
これにより、チーム全体で判断基準を共有でき、一貫性のある意思決定ができるようになります。
一番大切なのは、「わからない」と言える環境です。
私たちのチームでは、以下のようなルールがあります:
実際、私も新しい技術領域については「わからないので教えてください」と素直に聞くようにしています。リーダーがそうすることで、チーム全体に「質問 OK」の雰囲気が生まれます。
失敗やミスが起きたとき、犯人探しではなく改善策の検討に焦点を当てます。
「なぜこのバグが起きたのか?」 ↓ 「どうすれば同じバグを防げるか?」
この視点の転換により、チームメンバーは失敗を隠すのではなく、積極的に共有するようになりました。
リモートワークでは、雑談の機会が激減します。しかし、雑談こそ信頼関係の基盤になります。
私たちは以下の取り組みをしています:
Virtual Coffee Break(週2回、30分)
Pair Programming Time
リモートワークでは、非同期コミュニケーションが重要になります。
チャンネル設計
#dev-frontend
/ #dev-backend
:技術的な相談#random
:雑談#standup
:日次の進捗共有#decisions
:重要な意思決定の記録スレッド機能の活用
絵文字リアクション
簡単なリアクションでも、相手に「見たよ」「理解したよ」が伝わります。
多くのエンジニアは、コミュニケーションを才能やセンスの問題だと考えがちです。しかし、私の経験では、コミュニケーションは技術として学習・改善できるスキルです。
× 相手の話を聞きながら、反論を考える
○ 相手の話を最後まで聞き、理解に努める
× 「でも」「しかし」から始める
○ 「なるほど」「確かに」から始める
PREP法を意識する:
SBI法を活用する:
例:「昨日のミーティングで(状況)、Aさんが積極的に質問してくれたおかげで(行動)、みんなの理解が深まりました(影響)」
この記事を書きながら改めて思うのは、技術力とコミュニケーション力は対立するものではないということです。
むしろ、高い技術力を持つエンジニアこそ、その知識を適切に共有し、チーム全体の技術力向上に貢献する責任があります。
そして、良いコミュニケーションがあるチームでは:
これらの相乗効果により、個人としてもチームとしても、より大きな成果を生み出すことができます。
明日からできる小さなことから始めてみませんか?同僚に「お疲れさま」の一言を伝える、困っている人に「何か手伝えることはありますか?」と声をかける、そんな小さなコミュニケーションが、やがてチーム全体の生産性向上につながっていくはずです。
この記事は個人的な体験と学習に基づいています。チームやプロジェクトによって最適なコミュニケーション方法は異なりますので、参考の一つとしてお考えください。