ポートフォリオを更新しました

Tech Wednesday, February 4, 2026

ポートフォリオを1年ぶりに更新しました。以前のものは、next.jsをstatic site generatorとして利用していましたが、今回はAstroを利用して構築しました。 以前のポートフォリオ Astroでは、テンプレートが配布されているので、こちらを利用しました。

記事の更新に関して、CMSを利用しようかと考えましたが、Github Issueを利用して記事を管理できそうだったので実装してみました。

実装した内容

具体的には、Github Actionsを経由して、publishラベルが付与されたIssueを閉じると、記事が自動生成される仕組みを実装しました。 また、画像については、issue内でアップロードした画像を自動的にコミットして、記事内で利用できるようにしました。

ワークフローの内容は以下の通り。

name: Issue to Article

on:
  issues:
    types: [closed, labeled]

# 同時実行を抑止して、コミット衝突を避ける
concurrency:
  group: issue-to-article
  cancel-in-progress: false

permissions:
  contents: write
  issues: read

jobs:
  convert:
    # publishラベルが付いていて、Issueがcloseされている場合のみ実行
    if: |
      contains(github.event.issue.labels.*.name, 'publish') &&
      github.event.issue.state == 'closed' &&
      (github.event.issue.author_association == 'OWNER' ||
       github.event.issue.author_association == 'MEMBER' ||
       github.event.issue.author_association == 'COLLABORATOR')

    runs-on: ubuntu-latest

    steps:
      - name: Checkout repository
        uses: actions/checkout@v4
        with:
          fetch-depth: 1

      - name: Set up Python
        uses: actions/setup-python@v5
        with:
          python-version: '3.12'

      - name: Install dependencies
        run: pip install requests

      - name: Run conversion script
        env:
          ISSUE_NUMBER: ${{ github.event.issue.number }}
          ISSUE_TITLE: ${{ github.event.issue.title }}
          ISSUE_BODY: ${{ github.event.issue.body }}
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
        run: python .github/scripts/issue_to_article.py

      - name: Commit and push changes
        run: |
          git config user.name "github-actions[bot]"
          git config user.email "github-actions[bot]@users.noreply.github.com"
          git add src/content/articles/ public/images/articles/
          if git diff --staged --quiet; then
            echo "No changes to commit"
          else
            git commit -m "Add/Update article from issue #${{ github.event.issue.number }}"
            git push
          fi

こんな感じで、workflow内でpythonスクリプトを実行して、記事の生成と画像のダウンロードを行っています。

わざわざCMSを導入しなくても、Github Issueを利用して記事管理ができるので、スマホからでも投稿できるので便利になるはず。