スクリプト開発という動的な環境において、頻繁な更新と共同作業の中で効率性と一貫性を維持するのは容易ではありません。このプレゼンテーションでは、スクリプトの共同作業におけるGitソフトウェアの威力を示し、誤った削除、バージョン管理、手動バックアップの煩わしさといったよくある問題に対する解決策を紹介します。
Gitはチームワークに欠かせないツールであり、複数のメンバーが同時にプロジェクトに取り組むことを可能にします。Gitでは、すべての変更が自動的にバージョン管理され、堅牢な履歴が提供されるため、チームは変更内容を簡単に追跡、元に戻す、レビューすることができます。さらに、Gitの自動バックアップ作成機能により、作業内容はリアルタイムで保護され、データ損失のリスクを排除し、全体的な生産性を向上させます。
JMP on Gitは、私たちが推進したい行動喚起です。Britta Silbersackと申します。Roche Diagnosticsに所属し、JMPのスクリプトソリューションを使って科学者をサポートするのが私の仕事です。この活動を始めた頃、Rocheのコンサルタントとして働いていたBerndと出会いました。そして今回、このプレゼンテーションのために再会しました。
ベルント・ハイネンです。JMPの元シニアシステムエンジニアとしてご存知の方もいらっしゃるかもしれません。現在はコンサルタントとして働いており、お客様が統計を理解し、応用できるようサポートしたり、JSLを使ったコーチングを行っています。そんな折、ブリッタと出会いました。以前、プログラミングについて話し合った際に、JSL開発にGitリポジトリの利用を推奨するのは良いアイデアだと考えました。
Gitとは? Gitは分散型バージョン管理システムです。JSLスクリプトをGit管理者フォルダに保存すると、スクリプトの管理や作業効率化に役立つ様々な機能が利用できます。スクリプトのスナップショットを様々な時点で取得するだけです。バックアップの整理、バージョン管理の実行、共同作業のサポート、作業内容のドキュメント化などに役立ちます。
Gitのメリットを最大限活用できるのは、一人でプログラマーとして働いている時です。その場合、インフラはそれほど必要ありません。バックアップ用にリモートサーバーにコピーを保存しておくことをお勧めします。Gitの真の力は、共同作業環境において発揮されます。チームメンバーは同じプログラムで作業し、それぞれのバージョンをリポジトリにプッシュして、作業を統合することができます。Gitはあらゆるものの背後にあるマシンであり、ネイティブ通信はコマンドラインインターフェースを介して行われます。Git用のGUIを提供したり、機能を拡張したりするアドインも数多く存在します。
特徴的なワークフローを短い動画でご紹介します。Gitのトレーニング動画ではなく、Gitユーザーへのモチベーション向上を目的としています。Gitとの連携を実際に体験していただくために、簡潔ながらも十分な情報量となるよう努めています。JSLでのプログラミング、Gitへのスクリプトの登録、スナップショットとは何か、リポジトリの役割、同じスクリプトの異なるバージョンをマージする方法など、様々な側面に焦点を当てていきます。
まずはブリッタのラップトップ画面から見てみましょう。彼女はGitのホスティングオプションの一つであるGitLab Cloudにアクセスします。彼女は新しいグループを作成し、気楽に過ごしながら、他のユーザー(今回の場合は私を)をグループに招待します。ほんの数クリックで完了です。このグループに、彼女は「TryGit」という新しい空のプロジェクトを作成します。デフォルトの設定を入力し、プロジェクトを作成したら、ここにあるリンクをコピーしてラップトップに戻るか、ラップトップのローカルで作業します。この例で使用しているGUIであるGit Extensions(多くの拡張機能があります)を使って、彼女はリンクを貼り付け、リポジトリをクローンまたはコピーします。これで、彼女のラップトップに空のワークスペースが作成されます。
さて、彼女はJMPでJSLスクリプトを書き始めます。書き終わったら、Gitで管理されているフォルダに保存します。そして、コミット(スナップショット)を作成し、現在の状態をGitLabのWeb上のリポジトリにプッシュまたはアップロードします。
さて、ベルントのノートパソコンを見てみましょう。彼はGitLabでリモートワークをしています。私がワークグループを作成したとき、ベルントはGitからメールを受け取りました。興味を持った彼は、リモートリポジトリへのリンクをクリックしました。プロジェクトを検索してみましたが、当時はまだコンテンツはありませんでした。彼はリンクもコピーし、同じ手順を踏んでいました。SSHで暗号化されたURLからリポジトリのクローンを作成し、そのクローンをノートパソコンのどこに保存するかを決めます。リポジトリに表示されている名前をフォルダに設定し、開きます。
予想通り、空のワークスペースが表示されました。ところが、また緊急の電話がかかってきたので、Berndに作業の続きを頼みました。JSLコードをアップロードすると、彼はプロジェクトの現在の状態をプル(ダウンロード)しました。JMPで開いてプログラムを拡張し、同じファイルに変更を保存しました。その後、Git Extensionに切り替えて新しいブランチを作成しました。これにより、Gitが変更を追跡できるようになります。現在の状態をコミットまたは保存すると、Berndはプログラムが追加された場所を確認できます。彼はリポジトリにも状態をプッシュしました。「チェック」をクリックし、GitLabに切り替えました。Web上で新しいブランチが表示されました。彼はこのブランチにフォーカスを設定し、新しいマージリクエストを作成しました。
マージリクエストでは、Brittaさんをレビュアーとして指名し、メッセージを送信しました。すると、このメッセージ、つまり情報は自動的にメールで届きました。今、彼女のラップトップで確認しています。彼女はメールを受け取り、リンクをたどってリポジトリにアクセスし、マージリクエストを確認しました。彼女はそこへ移動し、内容を読み、確認し、最後に私の変更を承認しました。Gitで変更箇所が表示され、マージが完了しました。
これで、2つの異なるブランチがメインブランチに再び統合されました。さて、Brittaが再びプロジェクトに戻り、私たちは別々のタスクを並行して進めることにしました。プルによって、両方のコンピューターで同じ開発基盤が確立されます。Brittaの作業例で、彼女が新しいブランチを作成する様子がわかります。これにより、Gitが彼女の変更を追跡できるようになります。私も自分のコンピューターで同じことを行います(ここには示していません)。そして、全員が自分のバージョンのプログラムでプログラミング作業を続けます。
私たちはそれぞれプログラムのコミットまたはスナップショットを作成します。前回のスナップショットとの差分がハイライト表示されていることに注目してください。ブランチをリポジトリにプッシュします。
ブリッタはノートパソコンでウェブ上のリポジトリを確認し、両方のブランチが存在することを確認しました。彼女は自分のブランチにコメントを付け、マージリクエストを作成して私をレビュアーに指名しました。
ベルントのノートパソコン。彼は現在リモートワーク中です。ベルントはウェブにアクセスし、マージリクエストを開いて承認しました。メインブランチに切り替え、プログラムの新しい状態をノートパソコンにプルし、フォーカスを自分のブランチに設定してマージを開始しました。メインブランチをFit a Modelブランチにフィットさせたいのですが、なんと、競合が発生しています。
状況を緩和するツールもいくつかあります。Berndはmeldツールを使って、プログラムの異なるバージョンを統合しています。ここでは多くの差異を確認できます。変更点を簡単に特定し、重複を削除し、いくつかの部分を挿入し、その他の部分をコピー&ペーストできます。彼は異なる変更を保存し、再度コミットして、プログラムをプッシュします。これで、現在のバージョンのプログラムをプルし、両方の部分を含む完成したプログラムを実行できるようになりました。
JMPユーザーにとって特に注目すべき点の一つは、開発プロセス全体とその現状を可視化できる点です。これはGit本来の機能ではありませんが、Gitにインタラクティブなユーザーインターフェースを提供する数多くのツールの一つとして提供されています。
結論として、Gitはセットアップが簡単でユーザーフレンドリーです。バックアップも楽々、堅牢なバージョン管理機能も備え、スクリプト作成における同僚との共同作業も容易です。Gitの使い方、メリット、そしてアクセシビリティについて、少しでもご理解いただけたでしょうか。さあ、今すぐ、あるいは職場に戻ったら、Gitを使い始めましょう。