Skip to main content

Hugo の開発に貢献する

Hugo は、オープンソース コミュニティからの貢献に大きく依存しています。

はじめに

Hugo はオープンソース プロジェクトであり、その 貢献者  の仕事によって生きています。 未解決の問題  がたくさんあり、 Hugo をさらに素晴らしいものにするために、あなたの協力が必要です。 プロジェクトの開発に貢献するために、 Go の達人である必要はありません。

前提条件

この貢献ガイドは、初心者の方のお役に立てればと思い、ステップ バイ ステップで進めています。そのため、以下のことのみを想定しています。

  • Git またはオープンソース プロジェクト全般が初めての方
  • Hugo のファンで、プロジェクトに貢献することに熱心な方

で Hugo コミュニティに連絡してください。

Go をインストールする

Go のインストールには数分しかかかりません。 マシンで Go を起動して実行するには、複数のオプションがあります。

Go のインストール ガイドに従うのに問題がある場合は、すべてのプラットフォームのセットアップを含む Go ブートキャンプ  を確認するか、Hugo ディスカッション フォーラム  の Hugo コミュニティに連絡してください。

ソースから Go をインストールする

最新の安定版 Go をダウンロード  し、公式の Go インストールガイド  に従ってください。

Go のインストールが完了したら、すべてが正しく動作していることを確認しましょう。ターミナル (Windows の場合は、コマンドライン) を開き、以下のように入力します。

go version

以下のような内容がコンソールに表示されるはずです。 ここでのバージョンは、このページの最終更新時点での Go の最新版を反映していることに注意してください。

go version go1.12 darwin/amd64

次に、GOPATHインストールガイドの説明に従って  設定したことを確認します。

GOPATHecho $GOPATH で表示することができます。 空ではない文字列が表示され、たとえば以下のような、Go のワークスペースへの有効なパスが含まれているはずです。

/Users/<yourusername>/Code/go

Homebrew で Go をインストールする

macOS ユーザーで、マシンに Homebrew  がインストールされている場合、Go のインストールは以下のコマンドで簡単にできます。

install-go.sh
brew install go

GVM 経由で Go をインストールする

より経験豊富なユーザーは、Go Version Manager  (GVM) を使用できます。 GVM を使うと、同じマシン で異なる Go のバージョンを切り替えることができます。 初心者の場合は、おそらくこの機能は必要ないでしょう。 ただし、GVM を使えば、いくつかのコマンドを実行するだけで、新しくリリースされた Go のバージョンに簡単にアップグレードできます。

GVM は、Hugo の開発を長期間追跡している場合に特に役立ちます。 Hugo の将来のバージョンは通常、最新版の Go でコンパイルされます。 遅かれ早かれ、最新の状態に保ちたい場合はアップグレードする必要があります。

GitHub アカウントを作成する

コードを投稿する場合は、GitHub にアカウントが必要です。 www.github.com/join  にアクセスし、個人アカウントを設定します。

システムに Git をインストールする

Hugo の開発に貢献するには、コンピューターに Git がインストールされている必要があります。 Git を教えることは Hugo ドキュメントの範囲外ですが、Git の基本を学ぶための優れた参考文献を探している場合、どこから始めればよいかわからないなら、Git book  をお勧めします。 このドキュメントには、Git コマンドの簡単な説明が含まれています。

Git は、ソースコードの変更を追跡するための バージョン管理システム  です。 Hugo は、機能を拡張するために使用される小さなサードパーティ パッケージに依存しています。 私たちは車輪の再発明をしたくないので、それらを使っています。

Go には get というサブコマンドが同梱されており、作業環境を構築する際にこれらのパッケージをダウンロードしてくれます。パッケージのソースコードは Git で管理されています。 get はパッケージのホストの Git サーバーとやりとりして、依存するパッケージをすべて取得します。

ターミナルに戻り、Git がすでにインストールされているかどうかを確認します。 git version と入力して Enter キーを押します。コマンドがバージョン番号を返した場合は、このセクションの残りをスキップすることができます。 そうでない場合は、Git の最新版を dさうんろーど  して、この インストール ガイド  に従ってください。

最後に、Git が正常にインストールされているかどうか、git version で再度確認します。

Git グラフィカル フロントエンド

Git を操作するための GUI クライアント  がいくつか存在します。 すべてのクライアントがすべての OS で利用できるわけではありませんし、もしかしたら使い方が異なるかもしれません。このため、コマンドはどこでも同じなので、コマンドラインの使用方法を文書化します。

システムに Hub をインストールする (オプション)

Hub は、GitHub と連携するための優れたツールです。そのメインサイトは、 hub.github.com  です。 この小さな Git ラッパーを自由にインストールしてください。

Mac では、以下のように、Homebrew  を使用して Hub  をインストールできます。

brew install hub

以下のコマンドを実行し、Bash のエイリアス  を作成して、git と入力すると実際に Hub が実行されるようにします。

echo "alias git='hub'" >> ~/.bash_profile

以下のコマンドを実行して、インストールを確認します。

git version 2.21.0
hub version 2.10.0

作業用コピーを設定する

リポジトリの作業用コピーをコンピューター上のローカルに設定します。 ファイルのローカルコピーは、編集してコンパイルし、最終的に GitHub にプッシュすることになります。 主な手順は、リポジトリのクローンを作成し、フォークをリモートとして作成することです。

リポジトリをクローンする

GOPATH が設定されていることを前提としています (不明な点がある場合は、上記のセクションを参照してください)。 次に、Hugo リポジトリをコンピューターにコピーする必要があります。 これは「リポジトリのクローン」と呼ばれます。 GitHub の ヘルプページ  に、簡単な説明があります。

Hugo の master リポジトリ  をクローンすることにします。コミット権がないので、直感に反するように思えます。しかし、Go のワークフローでは必要なことなのです。 master のコピーで作業し、その変更を GitHub の自分のリポジトリにプッシュします。

そこで、以下のコマンドを実行することにより、新しいディレクトリを作って、その master リポジトリをクローンしてみましょう。

mkdir $HOME/src
cd $HOME/src
git clone https://github.com/gohugoio/hugo.git

Hugo 0.48 以降、Hugo は Go 1.11 に組み込まれている Go モジュールのサポートを使用してビルドします。 最も簡単な方法は、GOPATH 以外のディレクトリに Hugo をクローンすることです。

そして、クローンしたディレクトリで以下のコマンドを実行し、Hugo の依存関係をインストールします。

cd $HOME/src/hugo
go install

Hugo は、いくつかの便利なビルドとテストのターゲットを mage  に依存しています。もしまだ持っていないなら、以下のコマンドを実行して入手してください。

go install github.com/magefile/mage@latest

リポジトリをフォークする

この用語に慣れていない場合は、GitHub の ヘルプページ  に以下のような簡単な説明があります。

手動でフォークする

GitHub の Hugo リポジトリ  を開き、右上の [Fork] ボタンをクリックします。

Fork button

ここで、GitHub 上でフォーク リポジトリを開き、フォークのリモート URL をコピーします。以下の操作では Git が使用するプロトコルとして、HTTPS と SSH のいずれかを選択することができます。 よくわからない場合  、HTTPS は常に動作します (そこで、HTTPS を選択します)。

Copy remote url

ターミナルに戻り、最後の手順で複製した master リポジトリのディレクトリに移動します。

cd $HOME/src/hugo

Git は、以下のコマンドにより、コピーしたリモート URL を追加して、フォークが存在することを認識する必要があります。

git remote add <YOUR-GITHUB-USERNAME> <COPIED REMOTE-URL>

Hub を使用してフォークする

あるいは、Git ラッパーである Hub を使うこともできます。 Hub を使うと、以下のように、リポジトリのフォークが簡単にできます。

git fork

上記のコマンドは、GitHub に自分のアカウントでログインし、現在作業しているリポジトリのフォークを作成し、それをリモートとして作業コピーに追加します。

信頼するが確認する

以下のコマンドを実行し、既知のすべてのリモートをリストして、すべてがうまくいったかどうかを確認しましょう。

git remote -v

出力は、以下のようになります。

digitalcraftsman    [email protected]:digitalcraftsman/hugo.git (fetch)
digitalcraftsman    [email protected]:digitalcraftsman/hugo.git (push)
origin  https://github.com/gohugoio/hugo (fetch)
origin  https://github.com/gohugoio/hugo (push)

Hugo の Git 貢献ワークフロー

新しいブランチを作成する

決して “master” ブランチに対して開発してはいけません。開発チームはそのブランチに対するプルリクエストを受け付けないでしょう。その代わり、説明的な名前のブランチを作成し、そのブランチで作業してください。

まず、以下のコマンドを実行し、常に master リポジトリから最新の変更をプルする必要があります。

git checkout master
git pull

これで、以下のコマンドにより、追加用の新しいブランチを作成できます。

git checkout -b <BRANCH-NAME>

自分がどのブランチにいるのかは、 git branch で確認できます。 すべてのローカル ブランチのリストが表示されるはずです。現在のブランチには、小さなアスタリスクで示されます。

ドキュメントに貢献する

おそらく、Hugo のドキュメントに貢献し始めたいと思うでしょう。もしそうなら、以下のステップのほとんどを無視して、新しくクローンしたリポジトリ内の /docs ディレクトリに集中できます。 cd docs を使用して、ディレクトリを Hugo ドキュメントに変更できます。

Hugo の組み込みサーバは、 hugo server で起動できます。 ブラウザのアドレスバーに http://localhost:1313  と入力して、ドキュメントを参照します。 サーバーは、コンテンツを変更するたびにページを自動的に更新します。

あなたのような人々の寛大さによって Hugo ドキュメントがどのように構築、整理、改善されているかについての詳細は、個別の Hugo ドキュメント貢献ガイド を作成しました。

Hugo をビルドする

コードベースに変更を加えている間は、以下のコマンドにより、バイナリをビルドしてテストすることをお勧めします。

mage hugo

上記のコマンドは、リポジトリのルートにバイナリ ファイルを生成します。

バイナリを $GOPATH/bin にインストールする場合は、以下を実行します。

mage install

テスト

コードベースへの変更が意図しない副作用を引き起こすことがあります。あるいは、期待通りに動作しないこともあります。ほとんどの関数は、独自のテストケースを持っています。テストケースは、 _test.go で終わるファイルにあります。

以下のようにして、コマンドを確認します。

mage -v check

テストをパスします。

書式設定

Go コード スタイルガイドは独断的かもしれませんが、誰がコードを書いたかに関係なく、コードベースが同じように見えることを保証します。 Go には、独自の書式設定ツールが付属しています。 以下のコマンドにより、スタイルガイドを追加で適用してみましょう:

mage fmt

追加を行ったら、変更をコミットします。 コード貢献ガイドライン  に従っていることを確認してください。

# 変更されたすべてのファイルを追加します
git add --all
git commit --message "YOUR COMMIT MESSAGE"

コミットメッセージは、コミットがどのように行われるかではなく、コミットが何を行うか (機能 XYZ の追加など) を説明する必要があります。

コミットを修正する

コミットメッセージがコード貢献ガイドラインを満たしていないことに気づいたり、いくつかのファイルを追加することを忘れてしまったりしていませんか? 問題ありません。Git は、そのような問題を修正するために必要なツールを提供します。 以下の 2 つの方法は、よくあるケースをすべてカバーします。

あるコマンドが何をするものなのかわからない場合は、そのままコミットしてください。後でプルリクエストの中で、あなたのコミットを修正できます。

最後のコミットを修正する

たとえば、最後のコミットメッセージを変更したいとします。 以下のコマンドを実行し、現在のメッセージを置き換えます。

git commit --amend -m"YOUR NEW COMMIT MESSAGE"

以下のコマンドにより、コミットログを見て、変更を確認します。

git log
# q で終了します

最後のコミットを行った後、何かを忘れてしまった可能性があります。 この場合、新しいコミットを作成する必要はありません。以下のコマンドにより、最新の変更点を追加し、目的のコミットにマージするだけです。

git add --all
git commit --amend

複数のコミットを修正する

これはもう少し高度です。 Git では、対話的に リベース  コミットできます。 つまり、コミット履歴を書き換えることができます。

git rebase --interactive @~6

コマンドの最後にある 6 は、変更すべきコミットの数を表します。エディターが開き、直近の 6 つのコミットメッセージのリストが表示されるはずです。

pick 80d02a1 tpl: Add hasPrefix to the template funcs' "smoke test"
pick aaee038 tpl: Sort the smoke tests
pick f0dbf2c tpl: Add the other test case for hasPrefix
pick 911c35b Add "How to contribute to Hugo" tutorial
pick 33c8973 Begin workflow
pick 3502f2e Refactoring and typo fixes

上の例では、このチュートリアルのコミットのうち、最後の 2 つのコミット (Add "How to contribute to Hugo" tutorial) をマージします。 コミットを “squash” できます、つまり 2 つ以上のコミットを 1 つにマージできます。

すべての操作はコミットメッセージの前に書き込まれます。 “pick” を操作に置き換えてください。この場合、squash、または、略して s になります。

pick 80d02a1 tpl: Add hasPrefix to the template funcs' "smoke test"
pick aaee038 tpl: Sort the smoke tests
pick f0dbf2c tpl: Add the other test case for hasPrefix
pick 911c35b Add "How to contribute to Hugo" tutorial
squash 33c8973 Begin workflow
squash 3502f2e Refactoring and typo fixes

また、最後から 3 番目のコミットのコミットメッセージを書き換えたいと考えています。 コード貢献ガイドラインによると、プレフィックスとして “docs:” を忘れています。 コミットを書き換える操作は reword (または、ショートカットとして r) と呼ばれます。

最終的には、以下と同じような設定になるはずです。

pick 80d02a1 tpl: Add hasPrefix to the template funcs' "smoke test"
pick aaee038 tpl: Sort the smoke tests
pick f0dbf2c tpl: Add the other test case for hasPrefix
reword 911c35b Add "How to contribute to Hugo" tutorial
squash 33c8973 Begin workflow
squash 3502f2e Refactoring and typo fixes

エディターを閉じます。 新しいタブで再び開く必要があります。 テキストは、マージする必要がある (別名 “squashed”) 最後の 2 つのコミットに対して、新しいコミットメッセージを定義するように指示しています。 CTRL+S でファイルを保存し、エディターを再度閉じます。

最後に新しいタブが開きます。 新しいコミットメッセージを入力し、再度保存してください。ターミナルにはステータス メッセージが表示されるはずです。うまくいけば、以下が表示されます。

Successfully rebased and updated refs/heads/<BRANCHNAME>.

コミットログをチェックして、すべてが期待通りになっていることを確認してください。 エラーが発生した場合は、git rebase --abort でこのリベースを中断できます。

コミットをプッシュする

GitHub 上のフォークにコミットをプッシュするには、プッシュ先を指定する必要があります。プッシュ先は、リモートとブランチ名で定義します。 先ほど、フォークのリモート URL が GitHub のハンドル名 (私の場合は、 digitalcraftsman) と同じであることを定義しました。 ブランチは、ローカルのものと同じでなければなりません。 これにより、対応するブランチを簡単に識別できます。

git push --set-upstream <YOUR-GITHUB-USERNAME> <BRANCHNAME>

これで、Git は宛先を認識しました。 次にコミットをプッシュするときは、 git push と入力するだけです。

最後のステップでコミット履歴を変更した場合、GitHub はプッシュの試行を拒否します。 これは、コミット履歴が同じでないために、新しいコミットを通常通り追加できないことによる安全機能です。 このプッシュを明示的に強制するには、git push --force と指定します。

プルリクエストをオープンする

たくさん前進しましたね。よくできました。 このステップでは、いよいよ追加した内容を提出するためにプルリクエストをオープンします。ブラウザで、GitHub の Hugo master リポジトリ  を開きます。

“New pull request” (新しいプルリクエスト) と書かれた緑色のボタンが見つかるはずです。しかし、GitHub は賢いので、おそらく下のベージュ色のボックスのようなプルリクエストを提案してくるでしょう。

Open a pull request

新しいページでは、あなたのプルリクエストの最も重要な情報が要約されています。下にスクロールしていくと、すべてのコミットが追加されていることがわかります。すべてが期待通りに表示されていることを確認し、“Create pull request” (プルリクエストを作成する) をクリックします。.

貢献者ライセンス同意書に同意する

最後になりましたが、貢献者ライセンス同意書 (CLA) に同意する必要があります。 新しいコメントがプルリクエストに自動的に追加されます。 黄色のバッジをクリックし、契約に同意して、GitHub アカウントで自分自身を認証します。 数回クリックするだけで、一度だけ実行する必要があります。

Accept the CLA

自動ビルド

GitHub Actions ワークフローを使用して、ビルドとテストを行います。これは、OS (macOS、Windows、Ubuntu) と Go のバージョンの組み合わせにまたがるマトリックス ビルドです。ワークフローは、プルリクエストを提出することでトリガーされます。 初めて貢献する場合、ワークフローはプロジェクト メンテナーの承認が必要です。

何から始めるか?

この貢献ガイドをお読みいただき、ありがとうございました。 またすぐに GitHub でお会いできることを願っています。 あなたが貢献できる 未解決の問題  がたくさんあります。

バグを発見した場合や、Hugo を改善するための新しいアイデアをお持ちの場合は、お気軽に issue をオープンする  をご利用ください。ご連絡をお待ちしております。

Git と Go を学ぶための追加リファレンス