
2026/01/30 6:11
**製品のようにドキュメントを構築する**
RSS: https://news.ycombinator.com/rss
要約▶
Japanese Translation:
Summary
Scour のドキュメントは、単なる静的な API 参照や SDK ガイドではなく、動的でユーザー中心のリソースとして設計されています。ログイン状態に応じて変化するライブ検索バー、トグル、およびリアルタイムのトピック推奨機能を埋め込み、ユーザーがドキュメント内で直接コンテンツをフィルタリングできるようにしています。このインタラクティブなアプローチは、Hacker News(フロントページに掲載されていない投稿のライブ検索バー付き)、Reddit、Substack、および arXiv などのセクションでも同様に反映され、読者はドキュメントページから直接カテゴリを検索したり購読したりできます。
「Interests」ページでは、ランダムでユーザーが追加したトピック一覧が表示され、1つをクリックするとそのコンテンツページへ遷移します。ログイン済みのユーザーは、ドキュメント内でリアルタイムにトピック推奨(例: “Graphic Design”)を受け取り、コンテンツフィルタリングなどの設定もドキュメントページから直接変更できます。
これらコミュニティからのフィードバックにより、Scour のランキングアルゴリズムに関する詳細な説明が追加され、将来のアップデートでは “MASH stack” コンポーネントを使用したライブ例を強化することが目指されています。
個人ユーザーと広範な開発者エコシステムの両方にメリットをもたらすために、Scour はパーソナライズされた推奨とインタラクティブツールをドキュメントに統合し、Rust の
axum‑extra TypedPath トレイトを通じてリンクロトリスクを低減しつつ、開発者に即座に関連情報へのアクセスを提供します。本文
2026年1月29日
Stripe は「アプリケーションのように感じさせる」設計で、従来型のユーザーマニュアルよりも優れた製品ドキュメントを提供していることで有名です。先週は Scour のドキュメント作成と執筆にほぼ専念し、その成果に自信を持っています。
インタラクティブドキュメント
Scour は SDK や API ではなく、個人化されたコンテンツフィードです。
コードやコピー可能なスニペットの代わりに、実際に動くインタラクションをそのままドキュメント内で構築しています。
Hacker News の隠れた宝石を探す
Hacker News 読者向けガイドは私のお気に入りの一つです。起源として「自分の興味に関連する投稿を、数千件中でフロントページに載らないものから抽出できるツール」が欲しかったことを語ります。
ガイド内には、フロントページに掲載されていない HN 投稿を検索するライブサーチバーが組み込まれています。
ぜひ試してみてください! 隠れた宝石を発見できるかもしれません。
Reddit 使い、Substack 読者、arXiv 利用者向けのガイドも同様にインタラクティブ要素が含まれており、サブレディットやニュースレター、arXiv のカテゴリを検索・購読できます。ログイン済みユーザーはドキュメントから直接フィードを購読できます。
「示す」=「語る」より
Scour の機能を説明する際は、常に実際に動く例があるかどうかを確認しています。
- 興味ページ – 追加できるトピックは自由形式のテキストです。各ロード時にランダムで人々が追加した興味セットが表示され、一つをクリックするとそのトピックに関連するコンテンツが開き、自分も追加できます。
- トピック推奨 – ログイン済みユーザーには実際の推奨(例:私の場合は Graphic Design)を提示しています。
設定はリンクではなく、直接操作
ドキュメント内で設定ページへのリンクを貼る代わりに、ログイン済みユーザーはドキュメントから直接設定を変更できます。
例として コンテンツフィルタリング ページでは「有料コンテンツを隠す」オプションをドキュメント内でトグル可能です。
実際のコンポーネントを使用
ライブ例はすべて Scour 本体と同じ MASH スタックで構築されたコンポーネントを使用しています。たとえば、投稿がどのフィードに表示されるかを示すセクションでは、複数フィードから最新の投稿を取得し、「…」をクリックするとその下にあるフィード一覧が展開します。
実際のコンポーネントで例示
ログインしていないユーザー向けにプレースホルダーが必要な場合、コードを分岐させる代わりに元々のコンポーネントをリファクタリングし、静的例でも動作するようにしました。
破損リンクは存在しない
使いやすいドキュメント体験を完成させる最後のステップは、破損リンクが一切ないことを保証することです。Scour は Rust の axum HTTP ルーティングライブラリを使用しています。
axum-extra クレートの TypedPath トレイトと derive マクロにより、構造体として定義したルートをルーティングだけでなくリンクにも利用できます。
use axum::Router; use axum_extra::routing::{TypedPath, RouterExt}; use serde::Deserialize; #[derive(Deserialize, TypedPath)] #[typed_path("/docs/interests")] pub struct InterestsPath; async fn interests(_path: InterestsPath) { /* … */ } #[tokio::main] pub async fn main() { let router = Router::new() .typed_get(interests); }
ドキュメント内で興味ページへのリンクが必要な場合は次のようにします。
use crate::docs::InterestsPath; async fn other_docs() { let interests_path = InterestsPath.to_string(); }
Rust の型システムが、パスが変更されてもリンクが常に最新であることを保証してくれます。
フィードバック
ご覧いただきありがとうございます! 何人かのユーザーから「Scour がどのように動作するか説明したページ」を求められており、今回のドキュメントは Scour のランキングアルゴリズムとその他想定される項目を詳細に解説しています。
ぜひフィードバックをいただき続けてください。ドキュメントを読んだ後でも疑問点が残っている場合は、お知らせいただければ改善します。
Hacker News や Lobsters でのディスカッションも歓迎です。
#scour