新作です。
— k1LoW (@k1LoW) 2026年8月27日
コーティングエージェントに1ページHTMLを書いてもらうことが多くなって、時に共有したくなることが出てきたので。
特定のリポジトリのパーミッションの範囲内でページを共有できるので安全便利。https://t.co/YWfSnRx40H
トリッキーなGitHubの使い方をしていますのでご利用は計画的に。
最近、コーディングエージェントに1ページのHTMLを書いてもらうことが増えました。
Pull Requestの変更点や、複雑なロジックを説明してもらったりなど。どれも一時的なものとして扱っていますが、Markdownで受け取るよりも、柔軟な描画が可能なHTMLでみた方がわかりやすいと感じています。私はそのためのSkill /one-page-html を用意していて、結構な頻度で使用します。
世の中にも、同じようなSkillやPluginがたくさんあるようです。
作成してもらったHTMLファイルは大抵、そのままブラウザで開いています。
ただ、時々チームにHTMLページをホスティングして共有したい場合があります。
当初は(私が所属しているテイラーが提供している)Tailor PlatformのStatic Website Hostingを使って共有していました(こういうとき自社プラットフォームを持っていると便利ですね!)。
これで全くもって十分だったのですが、もう少し汎用的なものが作れるかもと思ったらうまくできたので紹介します。
gh-share
gh-shareはローカルのファイルやディレクトリをリポジトリの権限の範囲で公開/共有できるGitHub CLIのエクステンションです。 gh extension install でインストールできます。
$ gh extension install k1LoW/gh-share
主な目的は、先ほども言ったように、1ページ分のHTMLの公開/共有です。
$ gh share pr123.html
基本はこれだけです。あとは待っていると、進捗が流れた後に共有用のURLが出ます。
$ gh share pr123.html Successfully uploaded pr123.html. ╔══════════════════════════════════════════════════════════════════... ║ Branch: https://github.com/k1LoW/octocov/tree/gh-share-staging (deleted) ║ Commit: https://github.com/k1LoW/octocov/commit/8f3c1d2a5b7e9f04c6a1b8d3e2f5a7c9b0d4e6f8 ║ Workflow: https://github.com/k1LoW/octocov/actions/runs/18234567890 ╚══════════════════════════════════════════════════════════════════... Artifact URL: https://github.com/k1LoW/octocov/actions/runs/18234567890/artifacts/456789
共有されたHTMLページやファイルは、そのGitHubリポジトリにアクセスできる人だけが閲覧できます。
ファイルを引数に(特にHTMLファイルを)渡すのが基本ですが、ディレクトリも渡せます。
$ gh share assets/
ファイルはそのままアップロードされ、ディレクトリは1つのzipファイルになります。
特定のリポジトリを指定して共有したいときは --repo を指定します。手元にGitリポジトリがなくても、動きます。
$ gh share --repo k1LoW/tbls report.html
アップロードが終わったらブラウザで開いてほしいときは --open オプションを追加してください。
$ gh share --open pr123.html
進捗やサマリはstderrに、共有URLだけがstdoutに出ます。なのでそのままパイプできます。
$ gh share pr123.html | pbcopy
URL以外の情報も機械的に扱いたい場合は --json があります。
仕組み
やっていることは少し変わっています。
gh-shareの出力URLから気づいている方もいるかもしれません。共有に使っているのはGitHub ActionsのWorkflow artifactsです。
Workflow artifactsはこの用途に都合のいい性質を持っています。ダウンロードにリポジトリへのアクセス権が必要なので、privateリポジトリならメンバーだけが見られます。retention policyで期限が来れば勝手に消えるので、一時的な共有物を掃除して回らなくてもよくなります。そして、リポジトリを使っている時点でそこにあるものなので、新たに用意するインフラはゼロです。
しかし、artifactを作るにはGitHub Actionsのワークフローを実行する必要があります。そしてワークフローは、そのワークフロー自身が存在するコミットでしか動作しません。
そこでgh-shareは、ステージング用のブランチ(デフォルトは gh-share-staging)をデフォルトブランチから作り、そこにpayload(共有するファイルやディレクトリ)と専用のワークフローをまとめてコミットします。pushをトリガーにワークフローが動いてartifactができあがったら、Artifact URLを出力後に(デフォルトの挙動では)ブランチを消します。
- gh repo view で対象リポジトリを解決する
- ステージングブランチがなければデフォルトブランチから作る
- payloadのblobとtreeをGit Database API経由で作る
- payloadとワークフローを1コミットにまとめてブランチを更新する
- ワークフローの完了を待ってartifactのURLを解決する
- ステージングブランチを削除する
ステージングブランチの操作に、ローカルのGitは一度も触っていません。すべてGitHub APIのblob / tree / commit / refを直接叩いて組み立てています。手元のリポジトリの状態がどうであっても、共有したいファイルさえあれば動きます。
1コミットにまとめているのにも理由があって、監視すべきコミットSHAが1つに定まりますし、1回の共有でワークフローが複数回起動する事故も防げます。
ワークフローのトリガーは .gh-share/payload-ref の1ファイルだけです。この設計のおかげで、後述するartifactの記録ファイルをブランチに書き足しても、余計なワークフローが実行されません。
artifactが消えても共有をやり直せる
artifactはretention policyで消えます。それは狙いどおりなのですが、たまに「あのHTMLページ、もう一度見たい」と思うことがあると思います。
そういったユースケースに対応するために、事前に --persist を付けて共有すると、ステージングブランチが消えずに残ります。
$ gh share --persist pr123.html
このとき、ブランチに .gh-share/artifacts/<artifact id>.json という記録が書かれます。artifact URLの末尾のIDから、それがどのpayloadから作られたのかを辿れる、という記録です。
そして --reshare にartifact URL(または末尾のID)を渡すと、その記録を読み込んでブランチ上のpayloadを再アップロードし、新しいartifact URLを発行します。
$ gh share --reshare https://github.com/k1LoW/gh-share/actions/runs/18234567890/artifacts/456789 $ gh share --reshare 456789
--persist を付けた場合、以降はステージングブランチはgh-shareによって消されることがなくなります。
後片付け
共有を繰り返していると、リポジトリにワークフローの実行履歴が蓄積していきます。後片付けをする場合は --purge オプションを使用します。
$ gh share --purge
これでgh-shareが作ったワークフローの実行履歴と、それに紐づくartifact、それから意図せず残ってしまったステージングブランチをまとめて消せます。なお、 --persist で残したブランチとデフォルトブランチは対象外なので、消えません。
まとめ
gh-shareを使うことで、コーディングエージェントが書いた1ページのHTMLを、そのリポジトリのメンバーにすぐに共有することができます。
gh-shareのメリットは、GitHub以外に何も不要なところです。すでにGitHub ActionsのWorkflow artifactsのストレージにアップロードしただけなので、アクセス制御や期限はリポジトリの設定がそのまま効きます。
似たようなことをやるツールとして toiroakr/mayfly があります。こちらはPull Requestとの連携や、残したいプレビューのGitHub Pages公開まで踏み込んでいるので、用途が近い方はあわせて見てみるとよさそうです。
是非使ってみてください。










