doc-nav-extractor

https://github.com/self-taught-code-tokushima/doc-nav-extractor

対応するドキュメントサイトのナビゲーションから、そのドキュメントのリンクを抽出します。

導入方法

1. ダウンロード・展開

GitHub のサイトからダウンロードし、適当なフォルダで展開します。 ⚠️インストール後も削除はできないので、ダウンロードフォルダでは展開しないでください。

2. Chrome の拡張機能の開発者モードを有効化

Chrome の設定や、拡張機能のウィンドウから、「拡張機能を管理」のページに移動します。 ロケーションバーに chrome://extensions/ を入れても移動できます。

拡張機能のページの右上に「デベロッパーモード」のトグルがあるので有効化します。

有効化すると、「パッケージ化されていない拡張機能を読み込む」というボタンが出てきます。

ボタンをクリックし、先程ダウンロードして展開したフォルダ (manifest.json があることを確認) を選択します。

すると以下の拡張機能が出てきます。

使い方

動画にもある通り、Unity や Unreal Engine のドキュメントサイトを開き拡張機能のボタンを押すと、以下のようにウィンドウが出てきます。

「全階層を展開してリンクを取得」ボタンを押すと以下のように JSON, Markdown, CSV 形式でのコピーが可能になります。

各フォーマットの活用方法

CSV

最もシンプルな構造です。

depth (階層)text (タイトル)url
0Unity 6.4 User Manualhttps://docs.unity3d.com/6000.4/Documentation/Manual/UnityManual.html
depth,text,url
0,"Unity 6.4 User Manual","https://docs.unity3d.com/6000.4/Documentation/Manual/UnityManual.html"
1,"Documentation versions","https://docs.unity3d.com/6000.4/Documentation/Manual/ManualVersions.html"
0,"What's new in Unity","https://docs.unity3d.com/6000.4/Documentation/Manual/WhatsNew.html"
1,"New in Unity 6.4","https://docs.unity3d.com/6000.4/Documentation/Manual/WhatsNewUnity64.html"
1,"New in Unity 6.3","https://docs.unity3d.com/6000.4/Documentation/Manual/WhatsNewUnity63.html"
0,"Get started","https://docs.unity3d.com/6000.4/Documentation/Manual/get-started.html"
1,"Get started with Unity","https://docs.unity3d.com/6000.4/Documentation/Manual/get-started-with-unity.html"
1,"Install and upgrade","https://docs.unity3d.com/6000.4/Documentation/Manual/install-and-upgrade.html"
2,"Install Unity","https://docs.unity3d.com/6000.4/Documentation/Manual/GettingStartedInstallingUnity.html"
3,"System requirements for Unity 6.4","https://docs.unity3d.com/6000.4/Documentation/Manual/system-requirements.html"

Google Spreadsheet 等で開いて url だけをコピーすることもできます。

以下のように VS Code の CSV 系の拡張を入れれば、表計算ソフトにいれる手間が省けます。

CSV/JSONを扱う際にオススメのVSCode拡張機能 VSCode - Qiita

JSON

入れ子構造になっていて、人間が読むには適していませんが、特定のデータを抽出するのに向いています。

{
  "text": "Unity Building Blocks",
  "url": "https://docs.unity3d.com/Manual/building-blocks.html",
  "children": [
    {
      "text": "Introduction to Unity Building Blocks",
      "url": "https://docs.unity3d.com/Manual/building-blocks-introduction.html",
      "children": []
    },
    {
      "text": "LiveOps Building Blocks",
      "url": "https://docs.unity3d.com/Manual/building-blocks-liveops.html",
      "children": [
        {
          "text": "LiveOps Building Blocks prerequisites",
          "url": "https://docs.unity3d.com/Manual/building-blocks-liveops-prerequisites.html",
          "children": []
        },
        {
          "text": "Player Accounts Building Block",
          "url": "https://docs.unity3d.com/Manual/building-blocks-liveops-player-accounts.html",
          "children": []
        },
        {
          "text": "Achievements Building Block",
          "url": "https://docs.unity3d.com/Manual/building-blocks-liveops-achievements.html",
          "children": []
        },
        {
          "text": "Leaderboards Building Block",
          "url": "https://docs.unity3d.com/Manual/building-blocks-liveops-leaderboard.html",
          "children": []
        }
      ]
    },
    {
      "text": "Multiplayer Services Building Blocks",
      "url": "https://docs.unity3d.com/Manual/building-blocks-multiplayer.html",
      "children": [
        {
          "text": "Multiplayer Services Building Blocks prerequisites",
          "url": "https://docs.unity3d.com/Manual/building-blocks-multiplayer-prerequisites.html",
          "children": []
        },
        {
          "text": "Multiplayer Sessions Building Block",
          "url": "https://docs.unity3d.com/Manual/building-blocks-multiplayer-sessions.html",
          "children": []
        },
        {
          "text": "Matchmaker Session Building Block",
          "url": "https://docs.unity3d.com/Manual/building-blocks-multiplayer-matchmaking.html",
          "children": []
        }
      ]
    }
  ]
}

jq を使って、特定のカテゴリ内(上記の LiveOps Building Blocks の子どもだけ欲しいなど) だけを抽出するには以下のようなクエリが使えます。。

.. | objects | select(.text == "LiveOps Building Blocks") | .children[] | .. | objects | .url

> jq '.. | objects | select(.text == "LiveOps Building Blocks") | .children[] | recurse(.children[]) | .url' .\sample.json
"https://docs.unity3d.com/Manual/building-blocks-liveops-prerequisites.html"
"https://docs.unity3d.com/Manual/building-blocks-liveops-player-accounts.html"
"https://docs.unity3d.com/Manual/building-blocks-liveops-achievements.html"
"https://docs.unity3d.com/Manual/building-blocks-liveops-leaderboard.html"

VS Code を使っていれば、jq に関する拡張もあるので、より簡単に試せます。

jq Playground — JSON Filter Notebook - Visual Studio Marketplace

文法に困ったら、以下を参照してもいいですし、AI に質問すると手っ取り早いと思います。 とほほのjq入門 - とほほのWWW入門