2020-09-17

gem installでnokogiriとrmagickが失敗する場合

なぜ失敗するかというと、nokogiriとrmagickはシステムに特定のソフトウェアやライブラリが入っていることに依存しているからだ。依存しているソフトウェアやライブラリをPATHの通った場所に用意してやらなければビルドができない。

nokogiriで問題になるのは主にlibxml2だ。nokogiriは独自のパッチをあてたlibxml2をビルドして使う。libxml2のビルドに必要になるソフトウェアとライブラリがある。

具体的な方法は公式ドキュメントに情報がある。

Installing Nokogiri - Nokogiri

特に入っていない可能性が高いのはzlibとliblzmaだ。Debian系ならば以下のようにパッケージをインストールする必要がある。


apt install build-essential patch ruby-dev zlib1g-dev liblzma-dev

rmagicはImageMagickのRuby bindingだが、システムにImageMagickがインストールされていなければならない。またインスールされているヘッダーファイルやオブジェクトファイルを発見するためにpkg-configも必要だ。

GitHub - rmagick/rmagick: Ruby bindings for ImageMagick

Debian系では以下のように依存パッケージをインストールする


apt install build-essential pkg-config libmagicwand-dev

2020-09-05

C++20の標準規格が承認された

C++20の標準規格がC++標準化委員会で承認されたそうだ。

残念ながら私の今の仕事がC++ではなくなってしまったので、C++の参考書を執筆する時間を捻出することはできないし、C++20に追加された一部の機能に懐疑的な立場であるので、喜ぶべきなのかどうかよくわからない。

一時期、C++の参考書執筆を続けるべく、C++の教育に価値を見出しそうな転職先を探したこともあったが、どうやら国内ではC++の最新規格の教育にそれほど価値がないらしく、結局今は普通のプログラマーにpivotしつつある。

普通のプログラマーはC++教育者とはだいぶ特性が異なる。C++の規格は一個の人間が全容を理解できる程度の小さな問題であり、完全に理解して解説するだけであった。しかし、現実のソフトウェアは一個の人間が理解できる規模を遥かに超えている問題であり、自分の担当の範囲外について理解しようとする無駄な努力をやめなければならない。自分が入社する前から開発されていた数千万行のコードをすべて理解するのは不毛だし、したところで仕事ができるようにはならない。使うプログラミング言語やソフトウェアも多岐にわたるため、すべてを理解するのは一個の人間の時間では足りない。普通のプログラマーは巨人の肩の上に乗っているが、その巨人について理解しようとしてはならないのだ。

C++は私のフルタイムの時間と趣味の時間をどちらも投じて全容を理解できる規模の問題だったが、今は仕事ではなくなり、また趣味も健康面を考慮して運動に切り替えた今、C++に割くための時間が足りない。C++20の参考書は暇な時間にたまに執筆しているが、おそらく完成することはないだろう。