このページでは、Gitを使用して簡単にアップグレードできるMoodleのコピーを本番サーバ上で保守する方法について説明します。Moodleのコアコードをカスタマイズしている場合は、開発者向けGitガイドの手順に従うことをお勧めします。
Gitを最大限に活用するには、その基本概念を理解する努力をする価値があります。以下のセクションをご覧ください。他のバージョン管理システムに慣れている場合は、学習曲線がやや急に感じられるかもしれませんが、それだけの価値があります。
Gitの入手(Windows、OSX、Linuxなど)
Gitのダウンロードとインストールの方法については、https://git-scm.com/download をご覧ください。
使用しているOSに対応するGitをダウンロードしてインストールすれば、このドキュメントのgitコマンドはそのオペレーティングシステムで動作するはずです。
Moodleのブランチ名
Moodleの各リリースには、次のものがあります:
- git タグ:リリースのバージョン番号の前に文字
vを付けたものです(例:v5.1.0)。 - gitブランチ:例えば
MOODLE_503_STABLEで、そのメジャーリリースの存続期間中使用されます。
Gitタグは、Moodleの特定のリリースを識別するために使用され、公式リリース、ダウンロード可能なzipファイル、tarファイルなどのソースとなります。
本番のMoodleサイトでは、常にgitタグ(例:v5.1.0やv5.0.4)を使用して、公式にリリースされたバージョンを使用することをお勧めします。
各メジャーバージョンのブランチ、つまり5.3メジャーバージョンであればMOODLE_503_STABLEを使用することもできますが、一般的にはお勧めしません。新機能や改善は通常main開発ブランチにのみ加えられますが、メジャーバージョンのブランチには毎週更新が入り、それが本番環境に適さない場合があります。
注:ブランチ名のSTABLEという語は、そのブランチがMoodleのリリース済みバージョン用であることを示すためのものです。
重要:本番サイトには、アルファ版、ベータ版、リリース候補版、またはmainブランチのコードを使用しないでください。重大なバグが含まれている可能性があります。
Gitからのコードの取得
ここでは、コマンドライン版のGitについて説明します。ほとんどの場合、グラフィカルクライアントでも同じ機能が提供されており、用語にも同様の名前が使われています。詳細については、そのクライアントのドキュメントを参照してください。
公式のMoodle gitリポジトリは git://git.moodle.org/moodle.git にあります(公式クローンは https://github.com/moodle/moodle.git にあります)。ローカルチェックアウトを初期化するには、次のコマンドを使用します:
$ git clone -b v5.3.0 https://github.com/moodle/moodle.git /path/to/your/moodle/storage/area
-b v5.3.0オプションは、クローンの完了後にブランチまたはタグv5.3.0をチェックアウトするようgitに指示します。このオプションを省略すると、gitはデフォルトブランチであるmainをチェックアウトします。
- 最後の引数は、Moodleのインストールを格納するディレクトリへのパスです。
本番サイト用に独自のブランチを作成することも検討するとよいでしょう。以下のセクションをご覧ください。
重要:Moodle 5.1以降では、gitチェックアウトをウェブからアクセスできる場所に置かないでください。代わりに、次のいずれかを行ってください:
- Moodleインストールの
publicサブディレクトリを指すようにウェブサーバを設定する、または - シンボリックリンクなどの手法を使用して、
publicディレクトリをウェブルートに配置する
Composer:コードをクローンした後、Moodleのルートディレクトリからcomposer install --no-dev --classmap-authoritativeを実行して、Composerの依存関係をインストールできます。Moodle 5.3では、OAuth 2サーバなどの新機能を除き、Composerは任意です。「Moodleのインストール」ページのComposerの依存関係のインストールをご覧ください。
Moodleリリースの更新
ほとんどの場合、メジャーリリース間のアップグレード(例:5.2から5.3へ)でも、より新しいマイナーリリースへの更新(例:5.3.0から5.3.1へ)でも、この手順はほぼ同じです。
重要:アップグレードや更新を行う前に、必ずMoodleサイトの完全なバックアップ(コードとデータベースの両方)を取ってください。
重要:Moodleのルートディレクトリにvendor/ディレクトリがある場合は、コードを更新するたびに、アップグレードを実行する前に、Moodleのルートディレクトリからcomposer install --no-dev --classmap-authoritativeを実行してください。Composerの依存関係の更新をご覧ください。
Moodleのコアコードをカスタマイズしている場合は、代わりに開発者向けGitガイドの手順に従ってください。
カスタムプラグインをインストールしている場合は、アップグレード先のMoodleのバージョンと互換性があることを確認してください。これらのプラグインは個別に更新する必要がある場合があります。
現在使用しているバージョンの確認
現在使用しているMoodleのバージョンを確認するには、次のコマンドを使用できます:
# If you are following a major release branch:
git branch
# If you are using a git tag and are on Moodle 5.1 or later:
git log --oneline -1 public/version.php
# If you are using a git tag and are on Moodle 5.0 or earlier:
git log --oneline -1 version.php
gitタグを追跡している場合は、次のように表示されます:
➜ examplesite git:(eb47eff071) git log --oneline -1 public/version.php
eb47eff071 (HEAD, tag: v5.1.0) Moodle release 5.1マイナーリリースによるインストールの更新
現在インストールされているメジャーリリースの最新マイナーリリースにMoodleインストールを更新するには、Moodle gitリポジトリから最新の変更をフェッチし、適切なブランチまたはタグをチェックアウトするだけです。
マイナーリリースのアップグレード:gitタグを使用している場合
現在インストールされているメジャーリリースの最新マイナーリリースに切り替えるには、次のコマンドを使用できます(v5.3.xは、目的のリリースに対応するタグに置き換えてください):
cd /path/to/your/moodle
git fetch origin
git checkout v5.3.x
マイナーリリースのアップグレード:メジャーリリースのブランチを使用している場合
cd /path/to/your/moodle
git fetch origin
git rebase origin/MOODLE_503_STABLE
本番サイトの場合は、それでもアップグレードの手順(バックアップの取得を含む)を考慮してください。
より新しいメジャーリリースへのアップグレード
より新しいメジャーリリースにアップグレードする場合は、現在インストールして追跡しているリリースではなく、より新しいリリースを追跡するようgitインストールに指示する必要があります。
まず、現在インストールされているMoodleバージョンの最新マイナーリリースでインストールを更新しておく必要があります(上のセクションで説明したとおり)。これにより、より新しいMoodleバージョンの変更もダウンロードされます(ただし、まだ使用はされません)。
アップグレードを開始する前に、サイトをメンテナンスモードにするか、ウェブサイトを無効にしてください。
新しいメジャーリリースへのアップグレード:gitタグを使用している場合
gitタグを使用してより新しいメジャーリリースに切り替えるには、次のコマンドを使用できます(v5.3.0は、目的のリリースに対応するタグに置き換えてください):
cd /path/to/your/moodle/folder
git fetch origin
git checkout v5.3.0
メジャーリリースへのアップグレード:gitブランチを使用している場合
gitブランチを使用してより新しいメジャーリリースに切り替えるには、次のコマンドを使用できます(MOODLE_503_STABLEは、目的のリリースに対応するブランチに置き換えてください):
cd /path/to/your/moodle/folder
# Make a local branch for the newer release from the remote repo
git checkout -b MOODLE_503_STABLE origin/MOODLE_503_STABLE
ウェブサイトのフォルダには、より新しいMoodleバージョンのファイルが含まれるようになりましたが、Moodleのアップグレードを完了するには、ウェブブラウザからアップグレードを完了するか、コマンドラインのアップグレードスクリプトを使用する必要があります。
プラグインの移動も忘れずに!
Moodle 5.0以前からMoodle 5.1以降にアップグレードする場合は、インストールしたプラグインを/publicサブディレクトリ下の新しい場所に移動する必要もあります。これは、新しいMoodle 5.1のコードをチェックアウトしたときに自動的に行われるわけではありません。
Moodleプラグインのインストール
GitリポジトリからのMoodleプラグインのインストール
これは、他のGitリポジトリのプラグインをMoodleリポジトリに追加する方法の1つです。
例えば、Certificateモジュールを、そのGitリポジトリからMoodle 5.3にインストールするとします。
目的のプラグインのコードの場所(この場合はhttps://github.com/markn86/moodle-mod_certificate.git)を見つけたら、次のコマンドを使用できます:
$ cd /path/to/your/moodle/
$ git clone https://github.com/markn86/moodle-mod_certificate.git public/mod/certificate
これにより、Moodleインストール内に新しいディレクトリpublic/mod/certificate/が作成され、プラグインのGitリポジトリのコードが格納されます。
ここでMoodleリポジトリの状態を確認すると、Gitが追跡されていないディレクトリを報告していることがわかります:
$ git status
HEAD detached at v5.1.0
Untracked files:
(use "git add <file>..." to include in what will be committed)
public/mod/certificate/
nothing added to commit but untracked files present (use "git add" to track)
追跡されていないディレクトリをGitの除外リストに追加すると、このディレクトリに関する警告を止めることができます:
$ echo /public/mod/certificate/ >> .git/info/exclude
Gitリポジトリからインストールしたプラグインの更新
プラグインの更新をフェッチするには、プラグインのディレクトリに移動して、アップストリームから変更をフェッチする必要があります:
ここでMoodleインストールを更新するには、両方のGitリポジトリにアクセスして、アップストリームから変更をプルする必要があります。
$ cd /path/to/your/moodle/
$ cd mod/certificate
$ git fetch origin
$ git rebase
これらの行を含むシェルスクリプトをMoodleインストールのルートに作成しておくのは、とても良い考えです。そうしないと、メインのMoodleリポジトリ内にどのGitリポジトリがあるのかを忘れがちです。
Gitサブモジュールを使用したサードパーティ拡張機能のインストールと保守
Gitサブモジュールは、メインのMoodleリポジトリ内で外部のGitリポジトリを保守するための優れた方法ですが、Gitのより高度な概念です。
順を追って説明しますが、これらの手順に従うには、これらのコマンドが何を行うのかを理解しておくと役立ちます。
高度なオプションとコマンドについては、Git bookをご覧ください。
Gitサブモジュールについて質問がある場合は、まず上記のサイトをご覧ください。
既存のMoodleへの新しい拡張機能のインストール
例として、前のセクションのCertificateモジュールを使用します。
$ cd /path/to/your/moodle
$ git submodule add https://github.com/markn86/moodle-mod_certificate.git public/mod/certificate
Gitがリポジトリ内の2つの新しいファイルを報告していることに注目してください:
$ git status
# On branch MOODLE_500_STABLE
# Changes to be committed:
# (use "git reset HEAD <file>..." to unstage)
#
# new file: .gitmodules
# new file: mod/certificate
#
.gitmodulesファイルには、すべてのサブモジュールのローカルパスとURLが含まれています。
後でリポジトリをクローンする予定がある場合は、このファイルをコミットする必要があります(Gitサブモジュールを使用したMoodle開発環境のページをご覧ください)。
自動生成された設定では不十分な場合があるため、コミットする前に、プラグインのGitリポジトリの設定を必ず確認してください。
今後の更新のためには、リポジトリのMoodleバージョンに対応するリモートブランチを追跡しておくと便利です。
$ cd mod/certificate
$ git branch -avv
* main 345f5b1 [origin/main] Replaced deprecated function
remotes/origin/HEAD -> origin/main
remotes/origin/MOODLE_20_STABLE 1aa1040 Added option to print 'grade category' grade
remotes/origin/MOODLE_21_STABLE 1aa1040 Added option to print 'grade category' grade
remotes/origin/MOODLE_22_STABLE 1aa1040 Added option to print 'grade category' grade
remotes/origin/MOODLE_23_STABLE fe047de Check that the function exists rather than relying on the Moodle version
remotes/origin/MOODLE_24_STABLE 1051f7d CONTRIB-4892 Fixed the email to others functionality
remotes/origin/MOODLE_25_STABLE cdb221a CONTRIB-4946: Removed character from language file breaking AMOS
remotes/origin/MOODLE_26_STABLE 696802a Increased version
remotes/origin/MOODLE_27_STABLE d3c0379 Increased version
remotes/origin/MOODLE_28_STABLE fa8df83 Increased version
remotes/origin/MOODLE_29_STABLE 3f03740 Replaced deprecated function
remotes/origin/main 345f5b1 Replaced deprecated function
リモートリポジトリでmainがチェックアウトされているため、Gitはorigin/mainを追跡するブランチmainを自動的に作成しました。 そのため、適切なリモートブランチを追跡する新しいブランチを作成します。 もちろん、これはリモートリポジトリがそれらのブランチを提供している場合にのみ可能です。
$ git checkout -b MOODLE_29_STABLE origin/MOODLE_29_STABLE
Branch MOODLE_29_STABLE set up to track remote branch MOODLE_29_STABLE from origin.
Switched to a new branch 'MOODLE_29_STABLE'
$ git branch -D main
Deleted branch main (was 345f5b1).
mainブランチを削除する必要はありませんが、残しておいても役に立ちません。 実際、これらの設定はその後変更する必要はありません。
最後の手順は、変更をメインリポジトリにコミットすることです。
$ cd /path/to/your/moodle
$ git commit -a -m "New extension mod_certificate installed"
コミットに新しいGitサブモジュールの変更のみが含まれていることを確認する必要があります(-aはステージされていないすべての変更をコミットするため)。
Gitサブモジュールの保守
一連のサブモジュールの保守は非常に簡単です。 複数のサブモジュールがインストールされたMoodleリポジトリを考えてみましょう。 この例の拡張機能mod_mylittleextensionは、テストシナリオ用に作成された架空のプラグインであることに留意してください。 これは公式のMoodleモジュールではありません。すべてのサブモジュールを一度に更新するには、次のように入力します:
$ cd /path/to/your/moodle
$ git submodule foreach git pull
Entering 'block/coursefeedback'
Already up-to-date.
Entering 'mod/certificate'
Already up-to-date.
Entering 'mod/mylittleextension'
remote: Counting objects: 6, done.
remote: Compressing objects: 100% (4/4), done.
remote: Total 4 (delta 0), reused 0 (delta 0)
Unpacking objects: 100% (4/4), done.
From /local/repositories/mle
89d9eae..64c122d main -> origin/main
Updating 89d9eae..64c122d
Fast-forward
index.html | 9 +++++++++
version.php | 6 +++---
2 files changed, 12 insertions(+), 3 deletions(-)
create mode 100644 index.html
$ git status
# On branch MOODLE_29_STABLE
# Changes not staged for commit:
# (use "git add <file>..." to update what will be committed)
# (use "git checkout -- <file>..." to discard changes in working directory)
#
# modified: mod/mylittleextension (new commits)
#
コマンドgit submodule foreach [別のコマンド]は、すべてのサブモジュールリポジトリを順に処理し、[別のコマンド]で指定された内容を実行します。 この場合はgit pullです。 そのため、モジュールmylittleextensionが更新され、変更がコミットされるまでメインリポジトリはクリーンな状態ではなくなります:
$ git commit -a -m "Plugin updates"
Gitサブモジュールによるプラグインの保守には、更新プロセスを簡単にする以外の用途もあります。 より大規模には、複数の開発者が外部プラグインを手動で整理することなくMoodleの完全なコピーを持つ必要があるMoodleプロジェクトの保守に使用できます。 このトピックの詳細については、Gitサブモジュールを使用したMoodle開発環境のページをご覧ください。
Gitの高度な概念
独自のブランチの作成
コードを変更する予定がない場合でも、本番サイト用に独自のブランチを作成するのはとても良い考えです。そうしておけば、将来カスタマイズが必要になった場合に、Moodleのメインコードに影響を与えずにカスタマイズを行うことができ、公式のMoodleリポジトリから今後の更新を簡単にマージできます。
独自のブランチを作成するには、次のコマンドを使用します:
cd /path/to/your/moodle
git checkout -b myproductionbranch
myproductionbranchは任意の名前に置き換えることができます。その後、このブランチを使用して必要なカスタマイズを行うことができます。
アップグレード先のMoodleの新しいメジャーバージョンごとに、新しいブランチを作成することもできます。例:
git checkout -b 5.1-example.com
関連項目
- Gitを使用したWindowsへのインストール
- Mac向けGit
- Moodleのバージョン
- トラッカーのイシュー(MDL)の修正 / Moodleのフォーク / コードの貢献については、User:Sam_Hemelryk/My_Moodle_Git_workflow
- ベルリン工科大学のGit + Moodleの事例研究
- Moodleフォーラムのディスカッション
- 外部リソース