# 開発日記-2024-07-21 / Rubyのスクレイピング関連の調査

## RubyのURI must be ascii only

`URI.parse` では `URI must be ascii only` エラーが出てしまう。なので、`Addressable::URI.parse` を使う。

::link-card[https://qiita.com/dogwood008/items/923e3b7280af902c292e]

## mechanize

mechanizeで `"\xE3" from ASCII-8BIT to UTF-8` のような文字コード関連のエラーが起きた場合。

```ruby
agent.page.body.encode(Encoding::Windows_31J, Encoding::UTF_8, undef: :replace)
```

::link-card[https://fwl.hateblo.jp/entry/2013/09/14/003941]

::link-card[https://github.com/sparklemotion/mechanize]

## devcontainerのzshを簡単にカスタマイズする方法を調べている

ローカル環境をpreztoでカスタマイズしているので、devcontainerのzshも同じようにカスタマイズするためにスクリプトを作って使い回しているのだが、もっとスマートな方法はないのか調べている。

::link-card[https://medium.com/@jamiekt/vscode-devcontainer-with-zsh-oh-my-zsh-and-agnoster-theme-8adf884ad9f6]

::link-card[https://engineering.monstar-lab.com/jp/post/2023/07/10/Comfortable-development-environment-for-Connect-go/]

## NextUIのScroll Shadowとtocbotのバグ

NextUIの[Scroll Shadow](https://nextui.org/docs/components/scroll-shadow)と[tocbot](https://tscanlin.github.io/tocbot/)を合わせて使っているのだが、目次の項目が長くなると最下部までスクロールしても下部のScroll Shadowの影が消えない。

- 目次部分の高さを半分くらいにすると正常に消えるようになる
- ブラウザの開発者ツールで目次にDOMを追加・削除すると正常に消えるようになる
- tocbotを使わずに同じような高さの要素を静的に出力させてみると正常に消えるようになる

結局解決策はわからないので進捗だけメモしておくことにした。

## tocbotの使い方を間違っていた

tocbotの親のdivに `overflow-y: scroll;` をつけていると、コンテンツ側のスクロールにtocbot側が追従しなかった。

下記のように修正することで、コンテンツ側のスクロールに合わせて目次側もスクロールするようになった。

```html
<div class="tocbot-container">
  <div class="tocbot"></div>
</div>
```

```css
.tocbot-container {
  overflow-y: scroll; /* [!code --] */
}
.tocbot {
  overflow-y: scroll; /* [!code ++] */
}
```

## shikiのdiffの書き方は言語のコメントアウトの違いによって変わる

```css:CSSの場合
.tocbot-container {
  overflow-y: scroll; /* [\!code --] */
}
.tocbot {
  overflow-y: scroll; /* [\!code ++] */
}
```

```typescript:TypeScriptの場合
const hello = 'world'; // [\!code --]
const hello = 'new world'; // [\!code ++]
```

すごい。
