Skip to content

ビルド情報をHTMLレベルで埋め込みたい #30

@saki7

Description

@saki7

背景

Kunaiの実装では、実は最初はレガシーなページの表示をしていて、後から色々と上乗せしています(JavaScriptを丸ごとオフにすると、本来の表示を見ることができます)。

現行の実装

今のkunaiでは、ページを表示した後に、常に最新のmdファイルをGitHubのリポジトリからフェッチしています。

https://github.com/cpprefjp/kunai/blob/69ee7acd3ef1cd6d367f7636f980acad7f0d43c6/js/kunai/meta/meta.js#L59-L77

Kunai::Metaでは、このmdファイルをMarkdownパーサでパースした上で、一部のメタ情報を抜き出してcpprefjpそのもののUX向上に使っています。

蛇足ですが、これはフェッチ自体に 250msec, パース&処理に 6msec ほどで済んでいるので、体感ではあまり感じないと思います。

情報1. ルートのコミットハッシュ

Kunai::Metaを実現するために使っている1つ目のビルド情報が、ルートのコミットハッシュです。

ルートのコミットハッシュは GitHub では Tree: に相当するので、 git clone をすることなく 1つのコミットハッシュで全てのファイルのスナップショットが取れます。


fadasda


今は単純に master をコミットハッシュとして使っているので、常にmasterが取得されます。タイムラグによってはcpprefjpのサイト全体が不定な動作をする可能性があります。

情報2. 現在ページのリポジトリ内相対パス

2つ目のビルド情報が、今見ているページのmdのオリジナルリポジトリルートからの相対パスです。これは今は、

https://github.com/cpprefjp/kunai/blob/69ee7acd3ef1cd6d367f7636f980acad7f0d43c6/js/kunai/meta/meta.js#L253

我ながら寒気がするような実装ですが、信じられないことに右上の「編集」ボタンのリンク先から取得しています。


改善案

実装としては、 base.html のテンプレートを

<head
  data-kunai-build-repo="cpprefjp/site"
  data-kunai-build-hash="3df4629d87cb4af43102b868cc224b7a6377d677"
  data-kunai-build-source="reference/bitset/flip.md"
>
  <!-- ... -->
</head>

このようにすれば、スマートに解決できると思います。

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions