# バージョン管理

## バージョン管理の本質

バージョン管理の本質は、ソフトウェアコードの変更を追跡し、管理するプラクティスです。これは現代のソフトウェア開発における基盤となる要素であり、チームがプロジェクトの進化を記録し、必要に応じて以前の状態に戻すことを可能にし、より効果的にコラボレーションできるようにします。バージョン管理の重要性は単なる変更追跡にとどまらず、実験が奨励される環境を育み、望ましくない変更があったとしても元に戻せるという安心感を提供します。これは、複雑さの管理、信頼性の確保、そして開発チーム内でのコラボレーションを円滑にするために非常に重要です。

## なぜバージョン管理が重要なのか

* **履歴と責任**: 誰がいつどのような変更を行ったかの履歴を保持し、開発プロセスに責任と透明性を追加します。
* **コラボレーション**: 複数の開発者が個別または共有の開発ファイルで作業することを可能にします。
* **リスク軽減**: 以前のバージョンに迅速に戻る機能を提供し、開発における中断や重大な後退のリスクを軽減します。

## Devinのバージョン管理に対するアプローチ

Claris FileMakerにおけるバージョン管理の従来の課題を理解した上で、Devinはバージョンやブランチの管理をシンプルかつ直感的に行えるシステムを導入しています。

### ブランチ

Devinにおけるブランチは、開発ファイルの分離されたコピーとして機能し、<ファイル名>\_<ブランチ>.fmp12という形式で名前が付けられます。各プロジェクトにはデフォルトのブランチがあり、これを「`main`」と呼びます。基本的な考え方としては、メインファイルに直接変更を加えるのではなく、異なる目的に応じて新しいブランチを作成します。たとえば、開発用のブランチは「`dev`」と呼ぶことができます。

<figure><img src="https://content.gitbook.com/content/yVoWYDKPRZW9z9KzLOvL/blobs/wtxGJtOK5VO5fCtv0Kst/Branching3.jpeg" alt=""><figcaption><p>Devinでのファイルのブランチ作成</p></figcaption></figure>

そして、開発用ファイル（`dev`ファイル）が安定して十分にテストされたと感じた場合（[参照](https://docs.devin.fm/jp/ji-neng/tesuto)）、それを`main`（または別のブランチ）に[リリースする](#rirsu)ことができます。こうすることで、`main`は常に最新の安定した開発ファイルのバージョンを表すようになります。

プロジェクトワークスペースのモジュールタブでは、開発者はプロジェクトに含まれるすべてのファイルの概要を見ることができます。ファイルをクリックすると、すべてのチームメンバーによって実行されたブランチ、バージョン、リリース履歴の視覚的なグラフが表示されます。

<figure><img src="https://content.gitbook.com/content/yVoWYDKPRZW9z9KzLOvL/blobs/Yo0HKqsbEsu8XDzVG52E/Branches3.jpeg" alt=""><figcaption><p>モジュールのブランチと関連するバージョンの概要</p></figcaption></figure>

{% hint style="info" %}
開発ファイルをプロジェクトに追加すると（[「.fmp12ファイルをプロジェクトに追加する」](https://docs.devin.fm/jp/gaido/projects/modules/add-a-module)を参照）、そのファイルのコピーが自動的にメインブランチに配置され、\_main.fmp12という名前が付けられます。ブランチ名の付いていない元の開発ファイルはDevinによって使用されず、手動で削除することができます。
{% endhint %}

### バージョン

Devinは、ブランチ化された`fmp12`ファイルを開発の各段階でスナップショットとして保存することで、バージョン管理を行います。これらのスナップショットはgitのコミットに相当しますが、クローンまたはブランチ化されたファイルの完全なバックアップとして機能します。このスナップショットは、ファイルの安定した段階の重要なマイルストーンやバックアップとして機能し、簡単にバックアップを保存したり、進捗を記録したり、必要に応じて以前のバージョンに戻すことができるように設計されています。

<figure><img src="https://content.gitbook.com/content/yVoWYDKPRZW9z9KzLOvL/blobs/FjrZSh7adc435T3pVMGs/Versioning4.jpeg" alt=""><figcaption><p>Devinでのバージョン保存</p></figcaption></figure>

プロジェクトワークスペースのブランチビューでは、選択されたブランチのすべてのバージョンが表示されます。

<figure><img src="https://content.gitbook.com/content/yVoWYDKPRZW9z9KzLOvL/blobs/PdIKk2bB0aYNyn8lCy0h/VersionHistory.jpeg" alt=""><figcaption><p>選択されたブランチのバージョン履歴</p></figcaption></figure>

### リリース

Devinのリリースプロセスは、任意のブランチから他のブランチに変更を統合するための方法を提供します。他の開発エコシステムで一般的な、複数のブランチのコード変更を統合する伝統的なマージ（gitなどで行われるもの）は、Clarisテクノロジーの制約によりFileMakerでは現在のところ実現できません。その代わりに、Devinのリリース機能は、ソースブランチのファイルでターゲットブランチのファイルを単純に置き換えるという仕組みになっています。

<figure><img src="https://content.gitbook.com/content/yVoWYDKPRZW9z9KzLOvL/blobs/ZGdWZusZ8guzljIXrlu5/Releasing3.jpeg" alt=""><figcaption><p>Devinでのバージョンのリリース</p></figcaption></figure>

ブランチビューでバージョンを選択すると、スナップショットに関する詳細情報が表示されるサイドバーが開き、バージョンを別のブランチにリリースするなどの操作を行うためのボタンが表示されます。

<figure><img src="https://content.gitbook.com/content/yVoWYDKPRZW9z9KzLOvL/blobs/8gsJ5xFV97TUzRa0V1o0/release7.jpeg" alt=""><figcaption><p><code>dev</code>ブランチの1.3を<code>main</code>ブランチにリリースする</p></figcaption></figure>

このアプローチはまだブランチのマージをサポートしておらず、並行して複数のブランチで作業するという概念も実現できませんが、Clarisテクノロジーが対応次第、これらの機能を強化していくことをお約束します。これらの機能が実装されるまでは、プロジェクトの中心的な情報源として主要な開発ブランチを指定し、テストや実験など一時的な用途には他のブランチを使用することをお勧めします。
