会社でGitHub Enterpriseを利用しており、Issueに添付されたファイルを一括でダウンロードして処理する、という自動化の要件が生まれました。 一見簡単そうに思えたこのタスクですが、結果的にGitHubの仕様上の壁に突き当たりました。今回は、その経緯と最終的な結論を共有します。
GitHubのIssueには、画像やドキュメントファイルなどをドラッグ&ドロップで簡単に添付できます。この添付ファイルを、CI/CDパイプラインやバッチ処理の中でプログラムから自動的にダウンロードすることが目的でした。
添付ファイルのURLは、以下のような形式で取得できます。
https://[GHE_HOSTNAME]/user-attachments/files/[FILE_ID]/[FILENAME]
Personal Access Token (PAT) を使えば認証できるだろうと考え、以下の方法を試しました。
gh
) を使う方法まずはgh
コマンドでAPI経由のアクセスを試みました。
# gh apiで直接URLを叩いてみる
gh api --method GET "https://[GHE_HOSTNAME]/user-attachments/files/12345678/sample.docx" > ~/Downloads/sample.docx
# 結果: 404 Not Found
# gh: HTTP 404: Not Found (https://[GHE_HOSTNAME]/api/v3/user-attachments/files/12345678/sample.docx)
curl
とPATを使う方法次に、PATをAuthorizationヘッダーに含めてcurl
で直接リクエストを送ってみました。
curl -H "Authorization: token [YOUR_PAT]" -L -o sample.docx "https://[GHE_HOSTNAME]/user-attachments/files/12345678/sample.docx"
# 結果: 404 Not Found
いずれの方法も404
エラーとなり、ファイルをダウンロードできませんでした。
PATのスコープが不足しているのか、あるいは全く別のAPIエンドポイントが存在するのか、ドキュメントを探しても明確な答えが見つからなかったため、GitHubサポートに問い合わせてみることにしました。
サポートから非常に明確な回答が得られました。結論から言うと、
「現状、Issue添付ファイルのダウンロードはAPIでサポートされていない」
とのことです。
サポートからの回答の要点は以下の通りです。
サポートからの回答(原文):
We apologize for the confusion caused. Currently, the API does not support the issue attachment feature, which means attachments cannot be added or retrieved programmatically. Instead, access control is tied to a valid browser session and does not support the use of Personal Access Tokens (PATs), OAuth Apps, or GitHub Apps, which are used for API access. As a result, downloading attachments is only possible through the browser interface.
We’ve received similar feedback regarding an attachment API endpoint and we’ve added your report as a +1 to the existing internal tracking Issue; however, we can’t say if or when new functionality may be available. At this point, we can only recommend that you keep an eye on the GitHub Blog and the Changelog for related updates. We understand this may be frustrating and wish we had better news to share, but we’re afraid we don’t at this time.
GitHub Issueに添付されたファイルをAPI経由で自動ダウンロードしようとする試みは、仕様上の制約により実現不可能であることがわかりました。
同様の機能要望は多くのユーザーから寄せられているようで、GitHub側も機能改善の候補として内部でトラッキングしているとのことです。しかし、具体的な実装時期は未定のため、現時点では「ブラウザから手動でダウンロードする」または「添付ファイルではなく、Gitリポジトリ内でファイルを管理する」といった代替案を検討する必要がありそうです。
将来的なアップデートに期待しつつ、GitHub BlogやChangelogを定期的にチェックするのが良いでしょう。
同じ問題で時間を溶かしてしまう方が一人でも減れば幸いです。
以上、GitHub Issueの添付ファイルをAPIでダウンロードしたかった、現場からお送りしました。