質問: 引用スター(はてなスターの引用機能)について。 人力検索で引用スターを使っていると、☆はつくが引用がつかないことがあります。 同様の経験をされたかたはおられますか。「こんなときうまくいかなかった」「ここを変えればつくようになる」また、ブログやダイアリーなど他のサービスではどうか、等々、引用スターに関する経験や考察をお寄せください。 こちらのコメント欄から参りました。
回答: !f:id:pacochi:20170218112847p:image id:a-kuma3 さんより回答リクエストをいただきました。せっかくなので回答させていただきます。 はてなスターはここ五年くらいろくにつけていなかったので、最初の引用スターが失敗する現象はごく最近になって知りました。 最近ブログでスターがらみの不具合がありまして、その時あたりに知りました。 * ダイアリーの影が差すはてなスター * ダイアリーの影を負うブログスター 不具合に対処する際、そろそろはてなさんとこでドキュメント用意してくれてたりしないかなと、わらすがり気分で検索したら、自分が昔回答した質問がそこここで引っ張り出されてるのを散見しました。 引用先の記事を見て、ふんわりした言葉で回答したので伝わりにくい部分もあったかなと省みました。今更ですが当時したことを思い出せる限り書いてみます。 * 質問者さんが自サイトに設置したスターに関しての質問だったので、自分も自サイトに設置してテスト * 引用スター送信時にサイトに来る、引用チェック用の HTML を取得する「Hatena Star UserAgent」の挙動を調査 * IP アドレスの確認、はてなスターの設置チェックをするエージェントと同一かどうか * 大きいサイズの HTML をどう扱うかページの内容を切り替えて調査 + 本文が多いページ、タグが多いページでの違い + 何kb くらい取得していくのか + HTTP 206 がログにあるかどうか * 文字コードの認識調査 + 文字コード宣言 HTTP ヘッダのみ、HTML のみ、両方あり、両方なし + 正しい文字コード宣言、間違った文字コード宣言 そして回答からふんわり成分を取って箇条書きしたのがこちらになります。 * 設置時に来るエージェントと同一のエージェントが引用チェックに来る * ページの先頭から 85136~378888 バイト程度取得して、残りは取得しない * タグを含んだ 64kb 前後の文字を引用可能文字とみなす * HTTP ヘッダの文字コードを参照する、HTML 内のは効き目が感じられない * 文字コードの解釈が間違っていても英数だけは引用できる * 英数すら引用できないのは設置サイトのトップで HTTP 200 以外を返していることと関連性があるかもしれない Apache のログデータが残っていたので記事にして載せました。 * はてなスターエージェントさんの来訪記録 私の持っている情報はこれくらいです。古い情報なので引用された他の方の記事なども併せてご覧ください。 以下はしゃっきりした検証データがなく、ほぼ私の妄想なので、適当に読み流してください。 ==== 以前人力検索はてなで脆弱性の報告をした際に、クリスさんが返信を下さいました。 > pacochiさん > はてなスタッフのchris4403です。 > XSSのご報告ありがとうございました。 > こちらで確認したところ、サーバーのモジュールのバージョンが古いものがあり、そのサーバーで処理されるとエスケープされずに出力されてしまう事象でした。 > 先ほどサーバーのモジュールを更新したので、現在は発生しておりません。 > > 「そのサーバー」ということは、人力検索は複数のサーバがあるということだと思います。 私はその時 exploit も書いて送っていたのですが、「何故か動作する時としない時がありました。」という文言も添えていたのを確認しました。ランダムにどれかのサーバに飛ばされて処理しているのでしょう。 スター不具合の原因は、それらのサーバ間でデータの同期が取れていない、もしくはリクエストがあったその時点でピンポイントに同期を取ろうとするものの、取り終わる前にリクエストがタイムアウトしてしまうことによるのではないかと思っています。 人力検索は、はてなの中でも URL とユーザの紐づけ規則が特殊なので、内部で結構複雑なキャッシュを持っているのではないかと推測しています。 引用スターをつける時にコメントが一部飛ばされているような挙動をしているのも、内部で同期が不完全なデータをもとに引用チェック用の HTML を生成しているのではないかと思いました。 引用スターとはちょっと違うのですが、gusted (はてなスターが見た目はついているのに相手に届かない現象、名前が分からないので勝手にこう呼びます) に関する考察を以前しました。 1. 前置き 1 2. 前置き 2 3. 本題 これも引用スターと根っこは同じで、データが同期されてないなどで準備が整っていないところにリクエストが来て、慌てて対処しようとするものの、時間切れでそのリクエスト中に完了できなかった結果なのではと思っています。 ちなみに guested になっても引用は問題なくできます。最初の一回は失敗するかもしれませんが、次回以降チェック用のキャッシュさえ取れていれば届け先がなくても引用は可能です。 ふと思い立って昔 guested になった回答にスターをつけてみたところ、通知が来るわ付けたスターのページでアイコンが自分になってるわでびっくりしました。 キャッシュが古いため、新しく取り直して、ついでに所有者情報の構築もし直したのではないかと思いました。最初にスターをつける時に例のごとく五秒くらいかかった末に引用失敗していたので、そんな感じがバリバリです。 ちなみにまだスターが一度もついていない回答に引用スターを三回答分ほどつけてみたところ、全て数秒待った後に引用成功しましたが、スターの通知が来ませんでした。☆レポートのページにも載りませんでした。付けたスターのページには載っています。 こちらはゼロから情報を構築したために挙動が違うのかなと思いました。付けたスターのページで確認したアイコンは私のものでしたが、なんとも guesty な感じですね。 あと、以前は引用できなかったフレーズが、今は引用できるようになっていました。以前は引用に使われる文字の順番をしっかりチェックしていたのが、いつの間にかチェックしなくなったっぽいのが関係していると考えています。 (2/22 追記: 回答した当時、私の表示名は「pacochi」だったので、「ぱ」の字が先頭 64kb よりも下のところでようやく出てくる状態でした。表示名が現在のものに変わったために引用できたとも言えますので、補足しておきます。ちなみに他の引用でも文字の順番は重視されなくなった感覚があります。) クイズなどの誰かが頭を絞って作った謎も好きですが、はてなスターみたいな天然の謎もロマンがあって好きです。 いつか答え合わせができるといいなと思いますが、昨日はてなポイントを使うサービスをたたみ始めた気配をちょっと感じたので、そのままサービス終了して迷宮入りなんて結末も覚悟しないといけないなと思いました。 追記: 現在人力検索で複数の回答者が脚注記法を使うとどうなるのか知りたいのでそれだけ追記させてください。[*1](#f1 "以前は ID がかぶって悲しいことになった覚えがあります。") (2/22 追々記: 悲しいままでした。) *1:以前は ID がかぶって悲しいことになった覚えがあります。