はじめに
この記事では、BlackをGitHub Actionsと統合する方法について詳しく説明します。
BlackのためのGitHub Actionsの設定
PythonコードをフォーマットするためにBlackを使用するGitHub Actionsを設定する手順は次の通りです。
- ワークフローファイルの作成
リポジトリ内に.github
という名前のディレクトリを作成し、その中にworkflows
という名前の別のディレクトリを作成します。workflows
ディレクトリ内にblack.yml
という新しいファイルを作成します。このファイルはワークフローを定義します。
- ワークフローの定義
black.yml
ファイル内で、ワークフローを定義します。以下はワークフローの構成例です。
name: Code Formatting with Black
on: [push, pull_request]
jobs:
format:
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v2
- name: Set up Python
uses: actions/setup-python@v2
with:
python-version: '3.x'
- name: Install Black
run: pip install black
- name: Check code formatting with Black
run: black --check .
この設定の詳細を見てみます。
- ワークフローの名前は「Code Formatting with Black」
push
とpull_request
の両方のイベントでトリガーされるformat
という単一のジョブがある- ジョブは最新のUbuntu上で実行される
- コードをチェックアウト
- Python 3.xをセットアップ
- Blackをインストール
- コードが適切にフォーマットされているかをチェックするために、Blackを実行
- ワークフローファイルをコミットしてプッシュ
.github/workflows/black.yml
ファイルをリポジトリにコミットし、GitHubにプッシュします。
$ git add .github/workflows/black.yml
$ git commit -m "Add Black formatting check workflow"
$ git push
ワークフローの結果の処理
ワークフローファイルをプッシュすると、GitHub Actionsは指定したイベント(この例ではプッシュとプルリクエスト)でワークフローを実行し始めます。Blackがコードのフォーマットが適切でないことを検出した場合、ワークフローはs失敗します。
- ワークフローが失敗した場合は、ローカルでBlackを実行してコードをフォーマットし、変更をコミットしてプッシュする必要があります。
$ black .
$ git add .
$ git commit -m "Format code with Black"
$ git push
- ワークフローが成功した場合は、コードがBlackのルールに従って適切にフォーマットされていることを意味します。
コードフォーマットの自動化
場合によっては、GitHub Actionsのワークフローの一部としてBlackを使用してコードフォーマットのプロセスを自動化したい場合があります。これは、コードがBlackのスタイルに準拠しているかどうかだけでなく、実際にコードを自動的にフォーマットし、変更をリポジトリにプッシュすることを意味します。
このアプローチは時間を節約できますが、注意して使用する必要があります。リポジトリへの変更の自動プッシュは予期しない結果を引き起こす可能性があります、特に複数の貢献者がプロジェクトで同時に作業している場合はさらに注意が必要です。
以下は、コードフォーマットの自動化のためのGitHub Actionsの設定手順です。
- パーソナルアクセストークンの作成
ワークフローから変更をリポジトリにプッシュするためには、GitHubのパーソナルアクセストークン(PAT)が必要です。PATには、GitHubユーザーとしてのアクションを実行するための権限が必要です。
PATを作成するには、GitHubの設定に移動し、「Developer settings」>「Personal access tokens」を選択します。「Generate new token」をクリックし、トークンに説明的な名前を付け、必要な権限を選択します。この使用例では、少なくともrepo
の権限が必要です。「Generate token」をクリックし、トークンを安全な場所に保存しておくことを確認してください。トークンはもう一度表示できません。
- PATをシークレットとして追加
次に、PATをリポジトリのシークレットとして追加して、GitHub Actionsからアクセスできるようにする必要があります。リポジトリの設定に移動し、「Secrets」>「New repository secret」を選択します。シークレットの名前(例:BLACK_FORMATTER_TOKEN
)を入力し、値としてPATを貼り付けます。
- ワークフローファイルの修正
ワークフローファイルを修正し、必要に応じてBlackでコードをフォーマットし、変更をプッシュするようにします。以下は修正されたワークフローの例です。
name: Automated Code Formatting with Black
on: [push, pull_request]
jobs:
format:
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v2
with:
token: ${{ secrets.BLACK_FORMATTER_TOKEN }} # Use the PAT to check out code
- name: Set up Python
uses: actions/setup-python@v2
with:
python-version: '3.x'
- name: Install Black
run: pip install black
- name: Format code with Black
run: black .
- name: Commit and push changes
run: |
git config --local user.email "action@github.com"
git config --local user.name "GitHub Action"
git commit -am "Format code with Black" || exit 0 # The exit 0 is used to prevent the workflow from failing if no changes are made
git push
- ワークフローファイルをコミットしてプッシュ
修正された.github/workflows/black.yml
ファイルをリポジトリにコミットし、GitHubにプッシュします。
$ git add .github/workflows/black.yml
$ git commit -m "Modify workflow for automated formatting"
$ git push
これらの手順を完了すると、ワークフローはコードのフォーマットをチェックするだけでなく、必要に応じてコードを自動的にフォーマットして変更をリポジトリにプッシュするようになります。