【Git】GitHub ActionsでWikiを自動管理 - j-komatsu/myCheatSheet GitHub Wiki

GitHub ActionsでWikiを自動管理し、キーワード辞書を活用したカテゴリ分けを実現する方法

GitHub Wikiを自動管理し、ページをカテゴリ分けすることで、効率的に情報を整理できます。本記事では、GitHub Actionsを活用してWikiを管理しつつ、キーワード辞書を使ってページを分類する具体的な方法を紹介します。


方法の概要

  1. GitHub Wikiリポジトリをクローンする。
  2. キーワード辞書を使ってページをカテゴリ分けするスクリプトを作成する。
  3. GitHub Actionsを設定して、自動化する。

1. Wikiリポジトリを取得する

GitHub Wikiは独立したGitリポジトリとして管理されています。

手順

  1. WikiページのURLにアクセスします。

    • URL形式: https://github.com/<username>/<repository>/wiki
  2. Wikiリポジトリをクローンします。

    git clone https://github.com/<username>/<repository>.wiki.git
  3. クローンしたフォルダに移動します。

    cd <repository>.wiki

2. キーワード辞書を活用したカテゴリ分けスクリプトの作成

キーワード辞書を使用して、Wikiページのタイトルを自動的にカテゴリ分けするスクリプトを作成します。

JSON辞書の作成背景と役割

  • 背景: Wikiのページタイトルはさまざまな内容を含むため、一定のルールに基づいて整理する必要があります。
  • 役割: JSON形式の辞書は、カテゴリとそれに対応するキーワードを明確に定義し、分類を自動化するための入力データとして機能します。

必要ファイルの配置場所

  • keywords.json: キーワード辞書のファイル
    • 配置場所: Wikiリポジトリのルートディレクトリ(例: <repository>.wiki/keywords.json)。
  • generate_index.py: インデックス生成スクリプト
    • 配置場所: Wikiリポジトリのルートディレクトリ(例: <repository>.wiki/generate_index.py)。
  • .github/workflows/wiki-index.yml: GitHub Actionsの設定ファイル
    • 配置場所: ルートリポジトリ内の.github/workflows/ディレクトリ。

JSON形式のキーワード辞書

以下は、スクリプトで使用するキーワード辞書の例です。

{
    "Gitコマンド": ["Git", "branch", "commit", "push", "merge", "rebase", "clone", "pull", "fetch"],
    "Linuxシステム": ["Linux", "shell", "bash", "command", "cron", "chmod", "chown", "grep", "awk", "sed", "systemctl"],
    "プログラミング": ["Python", "Java", "JavaScript", "コード", "プログラム", "関数", "クラス", "オブジェクト", "ライブラリ", "モジュール"],
    "データベース": ["SQL", "MySQL", "PostgreSQL", "MongoDB", "データ", "クエリ", "スキーマ", "テーブル", "カラム", "インデックス", "ビュー"],
    "ネットワーク": ["TCP/IP", "HTTP", "HTTPS", "DNS", "プロトコル", "ポート", "ファイアウォール", "ロードバランサ", "VPN", "Ping"],
    "クラウド": ["AWS", "Azure", "GCP", "クラウド", "コンテナ", "Kubernetes", "Docker", "Lambda", "EC2", "S3", "CloudFront"],
    "セキュリティ": ["暗号化", "SSL", "TLS", "ファイアウォール", "認証", "認可", "セキュリティグループ", "IAM", "脆弱性", "ペネトレーションテスト"],
    "その他": []
}

スクリプトとの関係

  • 読み込み: スクリプトはload_keywords()関数を通じて、このJSONファイルを読み込みます。
  • 処理: タイトル内のキーワードをマッチさせ、対応するカテゴリに分類します。
  • 出力: 分類結果を元にINDEX.mdを生成します。

スクリプト例(generate_index.py

import json
import os

# キーワード辞書の読み込み
def load_keywords(file_path):
    with open(file_path, "r", encoding="utf-8") as f:
        return json.load(f)

# カテゴライズ関数
def categorize(title, keywords):
    for category, words in keywords.items():
        if any(word.lower() in title.lower() for word in words):
            return category
    return "その他"

# インデックス生成
def generate_index(base_path, keywords):
    index = {}
    for file in os.listdir(base_path):
        if file.endswith(".md"):
            title = file.replace(".md", "")
            category = categorize(title, keywords)
            index.setdefault(category, []).append(title)

    with open(os.path.join(base_path, "INDEX.md"), "w", encoding="utf-8") as f:
        for category, pages in sorted(index.items()):
            f.write(f"## {category}\n")
            for page in sorted(pages):
                f.write(f"- [{page}]({page.replace(' ', '%20')}.md)\n")

3. GitHub Actionsを設定する

GitHub Actionsを使って、Wikiページのインデックス生成を自動化します。

Actions設定ファイル

以下の例では、GitHub ActionsがWikiリポジトリをチェックアウトし、スクリプトを実行してINDEX.mdを更新します。

Actions設定例(.github/workflows/wiki-index.yml

name: Update Wiki Index

on:
  push:
    branches:
      - main
  schedule:
    - cron: '0 0 * * *'  # 毎日深夜に実行

jobs:
  update-index:
    runs-on: ubuntu-latest

    steps:
      - name: Checkout Wiki
        uses: actions/checkout@v3
        with:
          repository: '<username>/<repository>.wiki'
          path: 'wiki'

      - name: Set up Python
        uses: actions/setup-python@v4
        with:
          python-version: '3.x'

      - name: Install Dependencies
        run: pip install -r requirements.txt

      - name: Generate Index
        run: python wiki/generate_index.py wiki

      - name: Commit and Push Changes
        run: |
          cd wiki
          git config --local user.name "github-actions[bot]"
          git config --local user.email "github-actions[bot]@users.noreply.github.com"
          git add INDEX.md
          git commit -m "Update Wiki Index"
          git push

補足: 初回セットアップ

Personal Access Tokenの設定

GitHub ActionsがWikiリポジトリにアクセスできるようにするため、Personal Access Tokenを設定します。

手順

  1. GitHubの「Settings > Developer settings > Personal access tokens」からトークンを作成します。

    • スコープ: repo
  2. トークンをGitHub Secretsに追加します。

    • リポジトリの「Settings > Secrets and variables > Actions」からWIKI_TOKENとして登録。
  3. Actions設定ファイルで以下を追加します。

    with:
      token: ${{ secrets.WIKI_TOKEN }}

ファイルのプッシュと自動生成の流れ

以下の3つのファイルを正しい場所に配置し、リポジトリにプッシュすることで自動生成が行われます。

  1. keywords.json: キーワード辞書のファイル

    • 配置場所: <repository>.wiki/keywords.json
  2. generate_index.py: インデックス生成スクリプト

    • 配置場所: <repository>.wiki/generate_index.py
  3. .github/workflows/wiki-index.yml: GitHub Actionsの設定ファイル

    • 配置場所: ルートリポジトリ内の.github/workflows/ディレクトリ

手順

  1. ファイルをステージングしてコミットします。

    git add keywords.json generate_index.py .github/workflows/wiki-index.yml
    git commit -m "Add files for Wiki automation"
    git push
  2. GitHub Actionsがトリガーされ、generate_index.pyが実行されます。

  3. 自動的にINDEX.mdが生成され、Wikiリポジトリに反映されます。


結果

  • GitHub ActionsがWikiページを監視し、変更があれば自動でINDEX.mdを生成します。
  • インデックスには、キーワード辞書を基にカテゴリ分けされたページが一覧表示されます。

インデックス例

# インデックス

## Gitコマンド
- [Gitの基本コマンド](Gitの基本コマンド.md)

## Linuxシステム
- [Linuxで使える便利なシェルスクリプト](Linuxで使える便利なシェルスクリプト.md)

## プログラミング
- [Pythonを使ったデータ分析](Pythonを使ったデータ分析.md)

結論

GitHub Actionsとキーワード辞書を組み合わせることで、Wiki管理が効率化され、インデックス生成やページの分類を自動化できます。 この記事を参考に、ぜひ自動管理を始めてみてください!

⚠️ **GitHub.com Fallback** ⚠️