html2rssをWindows Subsystem for Linux (WSL)にインストールする
気付いたら、ウェブページからCSSセレクタでRSSを生成するFeed Creatorが有料化されてしまっていた。無料なのに高機能なサービスだったので、RSSを生成しないウェブサイトの更新情報をnewsboatで購読するために愛用していた。有料化されてしまうのは仕方無いが、月間9ドルは少々高い。
そこで、Ruby製のコンソールアプリケーションである html2rss
に乗り換えることにする。Windows Subsystem for Linux (WSL)で動かすべく作業する。簡単かと思ったら、随分長い手順が必要になってしまった。
結論
多分これでWindows Subsystem for Linux (WSL)に html2rss
をインストールできる(が、試行錯誤の上に成功した結果から逆算した手順なので、抜け漏れや不要な手順が有るかもしれない)。
sudo apt install build-essential libffi-dev libyaml-dev libz-dev
git clone https://github.com/rbenv/rbenv.git ~/.rbenv
~/.rbenv/bin/rbenv init
omz reload # or exec $SHELL for bash
git clone https://github.com/rbenv/ruby-build.git "$(rbenv root)"/plugins/ruby-build
rbenv install 3.4.2
rbenv global 3.4.2
gem update
gem install html2rss
試行錯誤の記録
Rubyが入っていなかったのでインストール。
sudo apt install ruby
ビルドツールが足りないと言われたので、Ruby公式サイトで紹介されていた ruby-full
を試してみる。
sudo apt install ruby-full
エラーメッセージをよく見ると gcc
で失敗している。which gcc
も失敗するので、検索で引っ掛かったページを参考に build-essential
をインストールする。
sudo apt install build-essential
これでインストールできた。
sudo gem install rss2html
だが、rss2html
の実行ファイルが見付からない。
> rehash
> which html2rss
html2rss not found
> gem list -d html2rss
*** LOCAL GEMS ***
html2rss (0.9.0)
Author: Gil Desmarais
Homepage: https://github.com/gildesmarais/html2rss
License: MIT
Installed at: /var/lib/gems/3.0.0
Returns an RSS::Rss object by scraping a URL.
> find /var/lib/gems/3.0.0 -type f -executable | grep html2rss
/var/lib/gems/3.0.0/gems/html2rss-0.9.0/bin/console
/var/lib/gems/3.0.0/gems/html2rss-0.9.0/bin/setup
> gem specification html2rss executables
--- []
html2rss
のGitHub Issuesを確認すると、0.10.0で実行ファイルをインストールできるようにしたよ、と書いてある。バージョンが古すぎるようだ。
Finally released a new version. You can install it with
gem install html2rss
.
Rubyのバージョンについても、3.1すら最早非対応で3.2以上が必要らしい。折角なら最新安定板の3.4.2を入れよう。
sudo apt update && sudo apt upgrade
してもバージョンが変わらないので、どうやら rbenv
とやらでインストールする必要があるらしい。
> git clone https://github.com/rbenv/rbenv.git ~/.rbenv
...
> ~/.rbenv/bin/rbenv init
writing ~/.zprofile: now configured for rbenv.
.zprofile
に追記されてしまったので、それを消して代わりに .zshrc
の ohmyzsh
設定に rbenv
を追加する。
rbenv install -l
したら入れろと言われた ruby-build
もインストールする。
> git clone https://github.com/rbenv/ruby-build.git "$(rbenv root)"/plugins/ruby-build
...
> rbenv install -l
3.1.6
3.2.7
3.3.7
3.4.2
jruby-9.4.12.0
mruby-3.3.0
picoruby-3.0.0
truffleruby-24.1.2
truffleruby+graalvm-24.1.2
Only latest stable releases for each Ruby implementation are shown.
Use `rbenv install --list-all' to show all local versions.
これでやっとRuby 3.4.2がインストールできた……と思ったらビルド失敗。
> rbenv install 3.4.2
...
BUILD FAILED (Ubuntu 22.04 on x86_64 using ruby-build 20250215)
...
zlib.h
が無いと言われている。
crypto/comp/c_zlib.c:36:11: fatal error: zlib.h: No such file or directory
36 | # include <zlib.h>
|
適当に当たりを付けて libz-dev
(正しくは libz-dev
っぽい?)をインストール。
> sudo apt install libz-dev
...
再挑戦したが今度は libffi
が無いと言われる。libffi-dev
をインストール。
> rbenv install 3.4.2
...
*** Following extensions are not compiled:
fiddle:
Could not be configured. It will not be installed.
/tmp/ruby-build.20250224210212.14900.3rXsJY/ruby-3.4.2/ext/fiddle/extconf.rb:86: missing libffi. Please install libffi or use --with-libffi-source-dir with libffi source location.
Check /tmp/ruby-build.20250224210212.14900.3rXsJY/ruby-3.4.2/ext/fiddle/mkmf.log for more details.
psych:
Could not be configured. It will not be installed.
Check /tmp/ruby-build.20250224210212.14900.3rXsJY/ruby-3.4.2/ext/psych/mkmf.log for more details.
BUILD FAILED (Ubuntu 22.04 on x86_64 using ruby-build 20250215)
> sudo apt install libffi-dev
またエラー。
> rbenv install 3.4.2
...
*** Following extensions are not compiled:
psych:
Could not be configured. It will not be installed.
ログファイルを見ると yaml.h
が無いと言う。
conftest.c:3:10: fatal error: yaml.h: No such file or directory
3 | #include <yaml.h>
| ^~~~~~~~
compilation terminated.
libyaml-dev
とか libyml-dev
は一見無さそうに見えたので、どのパッケージをインストールして良いか分からなかった。ChatGPTに訊いたら apt-file
で分かると言われる。apt-file
をインストールして検索してみたところ、libyaml-dev
がヒットした。あれ、やっぱり libyaml-dev
だった。見落としていたようだ。
> sudo apt install apt-file
...
> sudo apt-file update
...
> rehash
> apt-file search yaml.h | grep 'yaml.h$'
...
libyaml-dev: /usr/include/yaml.h
...
> sudo apt install libyaml-dev
...
今度こそ成功した!
> rbenv install 3.4.2
...
==> Installed ruby-3.4.2 to /home/.../.rbenv/versions/3.4.2
NOTE: to activate this Ruby version as the new default, run: rbenv global 3.4.2
> rbenv global 3.4.2
> omz reload
> ruby --version
ruby 3.4.2 (2025-02-15 revision d2930f8e7a) +PRISM [x86_64-linux]
あれ、でもインストールされる html2rss
は 0.9.0 のままだ。
> sudo gem install html2rss
Successfully installed html2rss-0.9.0
Parsing documentation for html2rss-0.9.0
Done installing documentation for html2rss after 0 seconds
1 gem installed
> which gem
/home/.../.rbenv/shims/gem
> sudo gem update
...
ERROR: Error installing activesupport:
activesupport-8.0.1 requires Ruby version >= 3.2.0. The current ruby version is 3.0.2.107.
...
extconf.rb:10:in `<main>': Can't find libcurl or curl/curl.h (RuntimeError)
...
古いバージョンのRubyが検出されているのも気になるが、libcurl
の問題の方が浅そうなので、先にこちらを解決する。
> sudo apt install libcurl-dev
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
Package libcurl-dev is a virtual package provided by:
libcurl4-openssl-dev 7.81.0-1ubuntu1.20
libcurl4-nss-dev 7.81.0-1ubuntu1.20
libcurl4-gnutls-dev 7.81.0-1ubuntu1.20
You should explicitly select one to install.
E: Package 'libcurl-dev' has no installation candidate
うーん、どれをインストールしたら良いんだろ。faraday-patronのGitHub Issuesを検索すると、libcurl4-openssl-dev
で解決したという報告が上がっていたので、素直にそれを採用する。
> sudo apt-get install libcurl4-openssl-dev
失敗ログを眺めていると他にも足りないライブラリが有るので、インストールする。
> sudo apt-get install libreadline-dev
OpenSSLでも失敗しているが、libopenssl-dev
パッケージが無さそうなので、まずは足りないヘッダーファイル名を確認する。
conftest.c:3:10: fatal error: openssl/ssl.h: No such file or directory
3 | #include <openssl/ssl.h>
| ^~~~~~~~~~~~~~~
さっきChatGPTに教えてもらった apt-file
で検索だ。libssl-dev
が一番普通っぽい。
> sudo apt-file search "openssl/ssl.h"
android-libboringssl-dev: /usr/include/android/openssl/ssl.h
libnode-dev: /usr/include/node/openssl/ssl.h
libssl-dev: /usr/include/openssl/ssl.h
libwolfssl-dev: /usr/include/cyassl/openssl/ssl.h
libwolfssl-dev: /usr/include/wolfssl/openssl/ssl.h
python3-pycparser: /usr/share/python3-pycparser/fake_libc_include/openssl/ssl.h
> sudo apt install libssl-dev
...
やっぱり駄目だった……が、よく考えると、sudo
で実行される gem
は rbenv
でインストールされたものじゃないのかも。そう思って sudo
を外したらビンゴ!ついに html2rss
がインストールできた。ついでにおすすめされた gem update
もしておく。
> gem update
...
> gem install html2rss
...
Done installing documentation for zeitwerk, concurrent-ruby, tzinfo, thor, nokogiri, crass, sanitize, reverse_markdown, regexp_parser, websocket-extensions, websocket-driver, mime-types-data, mime-types, puppeteer-ruby, parallel, kramdown, faraday-net_http, faraday, faraday-follow_redirects, public_suffix, addressable, html2rss after 8 seconds
22 gems installed
A new release of RubyGems is available: 3.6.2 → 3.6.5!
Run `gem update --system 3.6.5` to update your installation.
> gem update --system 3.6.5
...
> rehash
> html2rss --help
...
Commands:
html2rss auto URL # Automatically sources an RSS feed from the URL
html2rss feed YAML_FILE [FEED_NAME] [param=value ...] # Print RSS built from the YAML_FILE file to stdout
html2rss help [COMMAND] # Describe available commands or one specific command
追記
この記事は、最近導入したObsidianに記録していたノートをそのままJekyllに持ってきたものである。ObsidianはNotionとかなり近い操作感でありつつも、カーソル付近のMarkdown記法が自動展開されるので、表記の調整がやりやすい。そして何と言ってもVimキーバインディングが使えるので、一瞬で好きになってしまった。ちょろい。