GitHub の Wiki で子ページを一覧化する

※ やりたいことはまだ途中なんですが、キリがよくなったのでいったんまとめています

やりたいこと

GitHubWiki を書くと、サイドバーに積み上がっていきます。 これは増えすぎると隠れてしまうので、一覧で表示されればいいなと思います。

やったこと

Wiki はそれ自体もリポジトリを clone することが可能です。 Wiki ページの右下で URL を確認できます。

f:id:ryu_rand:20190712151949p:plain

今回の場合だとこんな感じです。 https://github.com/ryuj/Unity.wiki.git

確認したところ、生成したページが .md ファイルとして存在します。 トップページは Home.md です。 なので、以下のように対応を考えます。

  • Home.md 以外の .md ファイルをリンクのフォーマットで出力する
  • 出力結果をリストにして Home.md へ上書きする

上記に対応したスクリプトは以下です。 これを実行すれば、Home.md に子ページの一覧を作成できます。 (Ruby は思いつくまま書ける感じが好きですが、Ruby ぽく書けているのかは未知数)

HOME_FILE = "Home.md"

def main
    html = ""
    Dir.glob("*.md").each do |file|
        next if file == HOME_FILE

        base = File.basename(file, ".md")
        s = "* [#{base}](./#{base})\n"
        html << s
    end
    
    File.open(HOME_FILE, "w") { |io|  
        io.puts html
    }
end

main

できていないこと

現状、スクリプトを手動で実行しなければ一覧化できません。 Wiki はブラウザ等で編集することが多いと思います。 なので、ブラウザ等で編集された際に上記スクリプトを動かして Home.md を更新する、というのがベストです。

git log で確認したところ、ブラウザからの編集もコミットログで残っているため、おそらく普通に push を検知できれば行けそうです。 未確認ですが、このあたりはおそらく webhook で対応できるのでは、と予想してます。(あとでやる、つもり、、、)