GitHubリポジトリの内容を 紙のように1つのファイル(PDF)or TXTで まとめてGPTに投げたい
以下の記事は、「いつでも最終盤のコードをコピペして実行できるようにしたい」という方に向けた、Node.jsベースのGitHubリポジトリ収集・PDF/TXT化ツールに関する解説記事です。
約10000文字と長いですが、最終コピペだけでできます。
プログラミングがわからなくてOKです!!!!!!!!!!
導入から仕組みの詳細、運用上の注意点、トラブルシューティング、そして実行手順を順番に解説していきます。本記事に掲載されているコードは、最後にコピペするだけでセットアップから実行まで一通りが完了します。
実行環境は、Node.js (バージョン18以上) / npm / git がインストールされた macOS / Linux / Windows(Git Bash など) を想定しています。
有料ノートで公開しても喜ばれるくらいに、なるべく丁寧に書きましたので、ぜひ最後までお読みいただき、コードを活用してください。
第1章: なぜ「日付付きファイル名」+「GitHubリポジトリのすべての階層を PDF / TXT でまとめる」のか
プログラミング学習やコードレビュー、あるいは法的なアーカイブ目的などで、GitHubリポジトリの内容を 紙のように1つのファイル(PDF)で まとめて見たいケースは多々あります。
しかし実際には、リポジトリごとにフォルダが深かったり、サブモジュールがあったり、バイナリファイルが混在しているなど、単純な手作業だと非常に大変です。
さらに、リポジトリをダウンロードした後、そのままアーカイブにしても「どの日付時点のコードか」がわからなくなりがちですし、ファイル名の衝突を防ぐために日付付きファイル名にしたいというニーズもよく耳にします。
そこで本記事では、Node.js のスクリプトを使い、GitHubリポジトリを丸ごとクローン → PDF と TXT にまとめて → 一時フォルダを削除 というところまで自動化しつつ、出力ファイル名に 「実行した日付 (yyyyMMdd)」 + 「GitHubのリポジトリURL (スラッシュを置換)」 を含ませる例を示します。
また、PDF 内にページ番号や行番号を入れず、素のコード(ただし簡易ハイライト)だけをまとめて見たい、というシンプルなニーズにフォーカスしました。
この記事を読めば、**「本日付で、任意のGitHubリポジトリを PDF / TXT にまとめて保管したい」**という用途で、すぐに活用できます。
第2章: 事前準備 〜 Node.js & Git, npm のインストール確認 〜
このスクリプトは、Node.js (バージョン18以上) と npm、そして git コマンドが必要です。
Node.js: 公式サイト( https://nodejs.org/ ) または nvm / Homebrew / apt などでインストールしてください。
npm: Node.js をインストールすると自動的に付属しています。
git: https://git-scm.com/ からダウンロード、または OS のパッケージ管理ツールなどで導入します。
バージョン確認コマンド
node -v
npm -v
git --version
上記がそれぞれ
Node.js 18.x 以上
npm 8.x 以上 (10.x でもOK)
git 2.35 以上
であれば十分です。実はもう少し古いgitでも動きますが、念のため最新版に近いものを使うことをおすすめします。
もし Windows であれば、Git Bash や WSL(Windows Subsystem for Linux) 上で本記事のスクリプトをコピペすれば問題なく動作するはずです。
第3章: どのような仕組みで「日付+リポジトリURL」ファイル名を実現するか
今回の記事で示すスクリプトは、以下のフローを踏んでいます。
作業用フォルダ を作成し、その中で npm init -y を実行して package.json を作る。
npm install で、highlight.js(コードハイライト用), pdfkit(PDF出力用), simple-git(リポジトリをクローンするため), tsx(TypeScript実行ツール), typescript(型定義やtscなど) をインストールする。
大きな1つの TypeScript ファイルを作る。この中では以下を実装:
REPO_URL: クローンしたい GitHub URL
実行時の 日時(yyyyMMdd) を取得し、それとリポジトリURLを組み合わせてファイル名を決定
simpleGit().clone(...) で TEMP_DIR にリポジトリをダウンロード
PDFDocument を生成し、行番号やページ番号を付けずに、ハイライト結果のみ PDF に書き込む
TXT にも元ソースコードを連結する形で保存
バイナリファイル(画像や動画など) は Base64 文字列として PDF/TXT に書き込むか無視
クローンした一時フォルダ(TEMP_DIR) を削除
最終的に、YYYYMMDD_リポジトリURL置換.pdf と YYYYMMDD_リポジトリURL置換.txt が手元に残る。
たとえば、2025年01月18日に https://github.com/browser-use/browser-use をクローンしたなら、20250118_browser-use_browser-use.pdf
20250118_browser-use_browser-use.txt
が生成されるわけです。
これらを一括してコピペで動作可能にするため、本記事の最後に** Bash スクリプト**をまとめています。
第4章: スクリプトの詳細解説
4-1. Bash スクリプト内でやっていること
最後に貼り付けるコードは、主に以下のステップを自動実行します。
mkdir sample-repo2pdf_dateUrl cd sample-repo2pdf_dateUrl
まずは「sample-repo2pdf_dateUrl」というフォルダを作成し、その中へ移動します。
npm init -y
対話なし(-y)で package.json を生成します。必要最低限の情報が入った JSON が作られます。
npm install highlight.js pdfkit simple-git tsx typescript
highlight.js: 構文ハイライト
pdfkit: PDF 生成用
simple-git: GitHub リポジトリを clone するため
tsx: TypeScript を直接実行できるツール
typescript: TypeScript 自体(型定義やtscコンパイラなども含む)
cat << 'EOF' > repo2pdf_and_txt_dateUrl.ts
として、repo2pdf_and_txt_dateUrl.ts というファイルに対して、EOF〜EOF の中身を一気に書き込む、という仕組みです。この中に REPO_URL やファイル名日付のロジックなどが詰まっています。
chmod +x repo2pdf_and_txt_dateUrl.ts
でスクリプトに実行権限を付与し、
npx tsx repo2pdf_and_txt_dateUrl.ts
を呼び出すことで、一連の動作が開始し、最終的に PDF と TXT が生成されます。
いわば「自動的にリポジトリをダウンロード → PDF/TXTにまとめる → 一時フォルダを消す」という流れを一気にやってくれるわけです。
4-2. TypeScript コード内の主要ポイント
スクリプト本体 repo2pdf_and_txt_dateUrl.ts では、
const now = new Date(); で yyyy, mm, dd を取り出し yyyyMMdd 形式にまとめる
REPO_URL.replace(/^https:\/\/github.com\//, "") で "https://github.com/" を削除し、スラッシュ(/)をアンダースコアに差し替える
PDF の行番号やページ番号は付与せず、単純に highlight.js の結果(HTMLタグを除去しただけ) を doc.text(...) で描画
TXT には元ソースをまるごと書き込み
バイナリファイル(0x00 を含むファイル) には Base64 文字列を出力する
という点がポイントです。
PDF のレイアウトをもっと凝りたい場合は、pdf.moveDown() や pdf.fillColor() などを細かく調整すると、色付きハイライトを再現することもできます。
一方、行番号やページ番号がない分、シンプルに「オフラインで一通りのコードをパラパラめくって読む」用途に合っています。
第5章: 実行後のファイル確認方法
スクリプト実行が完了すると、
YYYYMMDD_~~.pdf (バイナリの場合はBase64が含まれる)
YYYYMMDD_~~.txt (純粋なソースコードをすべて連結)
の2つのファイルが、カレントディレクトリ内に生成されます。
GitHubリポジトリが大きい場合、PDF も大容量になりがちです。また、動画ファイルや音声ファイルが混ざっているケースでは Base64 部分が巨大になりますので、環境によっては PDF ビューアが重くなることもあります。
その場合は IGNORE_EXTENSIONS に ".mp4", ".wav", ... などを増やして、完全に無視させると良いでしょう。
また、実行後に tempRepo_for_browser_use というフォルダが一瞬生成されますが、最後にスクリプトが fs.rmSync(...) で削除しているので、最終的には手元に残りません。リポジトリを保存したい場合は、その削除部分をコメントアウトすると良いでしょう。
第6章: 応用例 〜 リポジトリURLの変更や拡張子フィルタ 〜
もし別のリポジトリをクローンしたい場合は、記事末尾のスクリプト中の
const REPO_URL = "https://github.com/browser-use/browser-use";
を、任意のURL(例: "https://github.com/example-user/example-repo") に書き換えていただければOKです。
また、たとえば画像ファイルもPDFに貼りつけたい場合などは、isBinaryFile() の判定部分を柔軟に変更して、画像であれば PDF に画像として埋め込む、動画は無視、などの分岐をつけることも可能です。pdfkit には doc.image() メソッドがあるので、PNG / JPG などに限って埋め込むスクリプトにする拡張も面白いでしょう。
IGNORE_EXTENSIONS の配列に拡張子を追加すれば、任意のファイルをPDF出力対象から外せます。コンパイル済みファイル(.exeや.classなど) を無視したり、大容量のアセットを省いたりする場合に便利です。
第7章: トラブルシューティング
「npm install でエラーが出た」
Node.js や npm のバージョンが古い場合があります。18以上の Node.js を使っていることを再確認してください。
Windows の場合、npm のキャッシュを削除や管理者権限での実行が必要になるケースも稀にあります。
「PDF ファイルを開いたら文字化けした」
pdfkit は基本的に英数字や一部の記号に最適化されています。もし日本語フォントを PDF 内に埋め込みたい場合は、doc.registerFont() や doc.font() のパス指定などで日本語フォントを読み込み、utf8 を明示的に使ってあげる必要があります。
本記事のサンプルは英語圏のソースコードを想定しているため、日本語を含むソースの場合に PDF 上で文字化けする可能性があります。その場合はフォントファイルを読み込むなどの追加実装をご検討ください。
「GitHub リポジトリが大きすぎて時間がかかる or PDF が重い」
大容量のリポジトリを対象とする場合、クローンや PDF 生成に相応の時間がかかります。
IGNORE_EXTENSIONS や IGNORE_NAMES を増やし、ビルド成果物や画像・動画等をスキップすると軽量化できます。
「バイナリファイルを Base64 で保存するのをやめたい」
記事中のスクリプトで isBinaryFile() 判定が真になったら何もしないように書き換えればOKです。
たとえば pdf.text("[Skipping binary file]") のみ書き込み、TXT には何も書かない、などの設計もできます。
第8章: 実行権限と Windows 環境の注意点
本記事は Bash 形式でまとめています。macOS や Linux であれば「コピペ実行」で問題ないのですが、Windows ではコマンドプロンプト(cmd)がそのままでは bash スクリプトを解釈できません。
Git Bash や WSL (Windows Subsystem for Linux) 上であれば、本記事をそのまま実行可能です。
それ以外の場合、repo2pdf_and_txt_dateUrl.ts ファイルを作ってから npx tsx repo2pdf_and_txt_dateUrl.ts と打つなどの方法でも問題ありません。
「できるだけ簡単に、コピペ一発で動かしたい」のであれば、WindowsユーザーにもGit Bashなどの利用を推奨します。
第9章: コードのライセンス・再配布について
本記事で示すスクリプトは、ほぼすべてMITライセンス相当で配布可能なものです。
ただし、インストールする各種パッケージ(highlight.js, pdfkit, simple-gitなど) はそれぞれ独自のライセンスを持っていますので、運用の際には各ライブラリのライセンス表記を確認してください。
個人利用や社内利用であればほぼ問題ありません。
また、有料ノートや企業向けの資料として再配布する場合でも、スクリプト自体はMITライセンスですのでご自由にアレンジが可能です。
第10章: 実際にコピペで実行できる、最終盤のコード一覧
それでは最後に、「いつでも最終盤のコードをコピペして実行」できるようにまとめた Bash スクリプトを掲載します。
macOS / Linux / Windows (Git Bash/WSL) 環境 であれば、以下を 一括コピー→ターミナルに貼り付け→Enter するだけで完了します。
実行すると、以下の処理を行います:
sample-repo2pdf_dateUrl というフォルダを作る → cd で移動
npm init -y → npm install で必要ライブラリを導入
repo2pdf_and_txt_dateUrl.ts ファイルに記事中の TypeScript コードを生成
それに実行権限を付与して npx tsx repo2pdf_and_txt_dateUrl.ts でスクリプトを走らせる
YYYYMMDD_リポジトリURL置換.pdf と .txt ができる
クローンした一時フォルダを削除
これで「リポジトリがPDF/TXT化された状態」を得られます。もしリポジトリURLを変えたい場合は、最後に生成される repo2pdf_and_txt_dateUrl.ts 内の REPO_URL を編集するだけです。
▼ ここからすべてコピーしてください#!/usr/bin/env bash
1) 作業用ディレクトリを作成 & 移動
mkdir sample-repo2pdf_dateUrl
cd sample-repo2pdf_dateUrl
2) package.json を自動生成 (対話なし)
npm init -y
ここから先は
Amazonギフトカード5,000円分が当たる
この記事が気に入ったらチップで応援してみませんか?