reference / github-gist

GitHub Gist のファイル形式
詳細解説

Gist が受け付けるファイル形式、マークアップのレンダリング、シンタックスハイライト、Raw 表示、Embed の仕組みを、実践的な視点からまとめた技術リファレンスです。

1. Gist で扱えるファイルの基本

GitHub Gist は、テキストベースのスニペット(断片)を手軽に共有するためのサービスです。リポジトリほど重厚な管理機能はありませんが、バージョン管理、フォーク、コメントなどの GitHub らしい機能を備えています。

要点: Gist は「テキストファイル」を前提としています。バイナリファイルも一部アップロード可能ですが、表示・扱い方が大きく異なります。

1.1 テキストファイル形式(主要)

1.2 バイナリファイル形式(制限付き)

2. ファイル名と拡張子の重要性

Gist は、ファイル名(特に拡張子)をもとに「このファイルは何の言語か」を自動判定します。これは GitHub 本体と同じく github/linguist というライブラリによって行われます。

拡張子判定される言語ハイライトMarkdown レンダリング
.mdMarkdownGFM ソース自動で HTML レンダリング
.pyPythonPython 構文なし(コードとして表示)
.jsJavaScriptJS 構文なし
.jsonJSONJSON 構文なし
.txt または拡張子なしPlain textなしなし
.yml / .yamlYAMLYAML 構文なし
注意: 拡張子を間違えると、シンタックスハイライトが適用されません。たとえば Python コードを script.txt として保存すると、ただのテキストとして表示されます。

3. Markdown(.md)の扱い

Gist 上の Markdown ファイルは、GitHub Flavored Markdown(GFM) として解釈されます。これは標準的な Markdown に、以下の GitHub 独自拡張を加えた仕様です。

3.1 GFM で利用できる主な記法

3.2 Markdown の表示モード

Gist の Markdown ファイルには、通常「Raw」「Code」「Preview(Rendered)」の切り替えが存在します。デフォルトではレンダリング済み HTML が表示されますが、右上の Raw ボタンでソースを、そのままのテキストで取得できます。

ファイル例: README.md
表示URL: https://gist.github.com/{user}/{gist_id}
Raw URL: https://gist.githubusercontent.com/{user}/{gist_id}/raw/README.md

4. シンタックスハイライトの仕組み

Gist のシンタックスハイライトは、GitHub 本体と同じく github/linguist によって行われます。言語判定は以下の順序で行われます。

  1. 拡張子マッピング: .rb → Ruby、.go → Go など、拡張子と言語の対応表を参照
  2. ヘッダー解析: Shebang(#!/usr/bin/env python3 など)がある場合、それを優先して言語を判定
  3. コンテンツヒューリスティック: ファイル内容の統計的特徴から言語を推定(拡張子がない場合など)
  4. .gitattributes オーバーライド: リポジトリの場合と異なり、Gist では .gitattributes は基本的に使えません
ヒント: Gist では .gitattributes による言語指定オーバーライドは効かないため、正しい拡張子を付けることが最も確実な方法です。

4.1 対応言語例

Linguist は 700 以上の言語をサポートしています。主要なものを以下に示します。

言語拡張子備考
Python.py .pywインデントベース、Shebang でも判定可能
JavaScript.js .mjs .cjsNode.js 用も同様
TypeScript.ts .tsxJSX 構文にも対応
Ruby.rb .erbShebang #!/usr/bin/env ruby も有効
Go.go拡張子のみで確実に判定
Rust.rsCargo.toml も別ファイルとして認識
HTML.html .htmタグ構文でハイライト
CSS / SCSS.css .scss .sassプリプロセッサも区別
Shell.sh .bash .zshShebang 判定が有効
SQL.sql主要な方言に対応
DockerfileDockerfile(拡張子なし)ファイル名一致で判定
MakefileMakefile(拡張子なし)ファイル名一致で判定

5. Raw 表示と URL 構造

Gist の各ファイルには、ブラウザ上で見える表示用 URL と、プログラムから直接取得するための Raw URL が存在します。

5.1 URL パターン

【Gist ページ(HTML)】
https://gist.github.com/<ユーザー名>/<GistID>

【特定ファイルの Raw(テキストそのまま)】
https://gist.githubusercontent.com/<ユーザー名>/<GistID>/raw/<ファイル名>

【リビジョン指定 Raw】
https://gist.githubusercontent.com/<ユーザー名>/<GistID>/raw/<commit-sha>/<ファイル名>

5.2 Raw 表示の特徴

セキュリティ: Raw URL は直接ファイル内容を返すため、機密情報を含む Gist を誤って公開設定にしないよう注意が必要です。検索エンジンにインデックスされることもあります。

6. Embed(埋め込み)の仕様

Gist は他の Web ページに埋め込むための Embed 機能を提供しています。これは <script> タグによる埋め込みと、iframe 的な挙動を組み合わせた仕組みです。

6.1 Embed 用コード

<script src="https://gist.github.com/<ユーザー名>/<GistID>.js"></script>

6.2 Embed の挙動

6.3 ファイル指定 Embed の例

<!-- 特定ファイルのみ埋め込み -->
<script src="https://gist.github.com/user/abc123.js?file=config.json"></script>
用途: 技術ブログやドキュメントで「実行可能なサンプルコード」を読者に提示する際、コピペしやすく、かつ見た目も整うため広く使われています。

7. 複数ファイル Gist(Multi-file Gist)

1 つの Gist に複数のファイルを含めることができます。これは「スニペット集」や「設定ファイル一式」の共有に便利です。

7.1 制限事項

7.2 典型的な使い方

8. バージョン管理と Diff

Gist は Git リポジトリとして裏で管理されています。そのため、編集履歴(リビジョン)の差分表示が可能です。

8.1 リビジョンの仕様

8.2 Git 操作

Gist は Git リポジトリなので、SSH または HTTPS で clone し、ローカルで編集後に push することも可能です。

# Gist を clone
git clone [email protected]:<GistID>.git

# 編集後に push
git add .
git commit -m "update config"
git push origin main

9. 非公開・公開の設定と可視性

設定意味検索結果URL 共有
Public誰でも閲覧可能検索エンジン・GitHub 検索に表示URL を知っていれば誰でもアクセス
SecretURL を知っている人のみ閲覧可能検索結果には表示されないURL を共有した相手は閲覧可能
重要: Secret Gist は「検索に出ない」だけで、URL が漏れると誰でも閲覧できます。パスワードや API キー、機密情報の保存には絶対に使用しないでください。

10. まとめとベストプラクティス

10.1 ファイル形式選択の指針

10.2 セキュリティ

10.3 活用シーン

結論: Gist は「軽量なコード・テキスト共有ツール」として非常に強力です。ファイル形式と拡張子を正しく使いこなすことで、シンタックスハイライト、Markdown レンダリング、Embed などの機能を最大限に活用できます。