投稿

8月, 2026の投稿を表示しています

Gitトラブル対処法:commit、reset、revertの違いを徹底解説するガイド

致命的なバグ、コミット前の後悔。Gitでつまずいた時の「救命」トラブルシューティングガイド Gitは開発における最強の味方ですが、その強力さゆえに、「あれ?戻せない?」「このファイルどうした?」といった思わぬ落とし穴にはまることがあります。本記事では、多くの開発者が一度は経験する、コミットやブランチ操作に関する「事故」をリカバリーするための実戦的な対処法をご紹介します。 1. 「やりたいことをUndoしたい」時の2つの選択肢:reset vs revert 最も混乱しやすいのが、「間違ったコミットを取り消す」操作です。この場合、使用するコマンドによって結果が全く異なるため、目的を明確にすることが重要です。 Scenario A: コミット自体を存在しなかったことにしたいとき(開発途中のデータ削除など) まだ共有しておらず、純粋にローカルの履歴から取り除きたい場合に使用します。これはコミットされた内容そのものを巻き戻すのではなく、「コミットという記録」を消去します。 注意: git reset --hard は非常に強力なコマンドです。実行すると、指定した時点以降のローカルでの未コミット・コミット済みの作業は全て消滅しますので、本当に元に戻して問題ないか二度確認してください。 基本的な使い方: git reset --hard [ターゲットのコミットID] Scenario B: 過去の変更を無効化し、履歴に残したいとき(公開済みバグ修正など) すでにリモートリポジトリにプッシュしてしまい、「この変更は元に戻すべきだった」という場合がこれにあたります。`revert` はその名の通り「取り消す (revert)」動作を行います。変更自体は撤回しますが、その記録(コミット)として履歴に残るため、チームでの作業において安全性が高い方法です。 git revert [対象のコミットID] 2. 「未コミットだが重要なデータ」を一時保管する方法:Stashing 今まさに進めている機能Aが中途半端で、急遽、別のバグ修正Bに取り組まなければならない状況はよくあります。しかし、ファイルを全てコミットするほどではない...そんな時に役立つのが git stash です。 Stash(スタッシュ)とは、「作業中の変更を一旦、一時的な...

システム結合テスト設計の落とし穴と理想のアプローチ:スタブ・モック活用術

システム結合テストの「設計」に潜む落とし穴と理想のアプローチ システムが複数のコンポーネントから成り立っている現代のアプリケーションにおいて、単体テスト(Unit Test)だけでは絶対にカバーしきれない領域が存在します。それが「結合(Integration)」部分です。 しかし、「統合テストを回す」ことがゴールではありません。「どう設計するか」こそが最も重要な課題となります。網羅的に全てのパスを通すような万能なテストは、それ自体が巨大で手入れのしにくいお荷物になりがちです。 なぜ結合テストの設計は難しいのか 最大の難しさは「依存関係(Dependency)」と「状態管理(State Management)」です。Aコンポーネントが正常に動作しても、Bコンポーネントとのインターフェース定義や想定されるエラーケースを知らない限り、本当にシステムとして動くかどうかは検証できません。 多くのチームが陥りがちな罠は、「単なる機能の実行確認」で満足してしまう点です。それは結合テストというよりも「エンドツーエンドな操作の流れを辿ったデモ」に近いものになりがちです。設計フェーズでは、この視点の転換が必要です。 理想的な統合テスト設計のための3つの柱 1. テスト範囲の特定(契約の確認) まず、どの「境界線(Boundary)」が最もリスクが高いかを特定します。この境界線とは、異なるサービスやコンポーネントがデータをやり取りするインターフェースのことです。 データベースアクセス層のロジックフロー 外部API呼び出し(決済システムなど)の仕様準拠 データ形式の変換処理(JSONからDBスキーマへの対応など) 単に「機能が動くか」ではなく、「このインターフェースを越えて渡されたデータが、規定のルールに従っているか」という視点でテストケースを作成してください。 2. テストパターンの選択(スタブとモックの適切な使用) 結合テストといっても、すべての外部依存を本番環境に繋げて検証する必要はありません。ここでは「分離」がカギとなります。 スタブ (Stub): 外部システムからの入力データや成功応答など...