知ってるようで知らないTeXの世界 自分の人生より歴史あるソフトウェア開発をマネジメントする技術
アルゴリズムに関する大著『The Art of Computer Programming』のため、ドナルド・クヌース先生が組版システム「TeX」を発表して41年。その開発は世界中で活発に続いています。日本語TeX開発コミュニティやTeX Liveチームで活動する20代のエンジニア山下弘展(aminophen)さんに、自分より1.6倍も長生きなソフトウェアをメンテナンスする技術について聞きました。
数式がきれいに組めることで広く知られている(以下、TeXと表記)は、誕生から40年を超える自動組版システムです。
学生時代にレポートや論文でTeXを使ったことがある人も少なくないでしょう。技術系の同人誌でページの見栄えを改善すべく、Re:VIEWなど書籍執筆支援システムの背後で動くTeXに手を入れて苦労した人もいるかもしれません。
その長い歴史のために見過ごされがちですが、TeXは、現在でも精力的に世界中で開発が進められているオープンソースのソフトウェアプロジェクトです。開発者のコミュニティもあり、意外なほど幅広い年齢層のエンジニアや研究者が開発に参加しています。
この40歳を超える長寿のOSSで、日本における開発者コミュニティのハブとして活躍する20代のエンジニア、山下弘展(@aminophen)さんに、なぜTeXに興味をもったのか、開発コミュニティでの仕事、これからのTeX開発コミュニティがどうなるかを聞いてみました。
{$image_1}
- 山下 弘展(やました・ひろのぶ) {$image_2}aminophen {$image_3}aminophen
- 1993年生まれ。東京大学入学後にTeXと出会い、2014年からユーザ間の交流に参加するようになる。同大大学院工学系研究科へ進学後、2015年から日本語TeX開発コミュニティ、2017年からはTeX Liveチームにも参加する。現在は応用化学系の研究開発職の傍ら、TeX関連の開発とメンテナンス、広報活動を続けている。
TeXの長い歴史と、そう長くない使用歴
──TeXというと、かなり古くから使われているソフトウェアですよね。
山下 ドナルド・クヌース(Donald E. Knuth)がTeXの最初のバージョンを公開したのが1978年なので、かなり歴史のあるソフトウェアですね。私が1993年生まれなので、もちろん自分より年上です。
現在、オリジナルのTeXとされるものはバージョン3なのですが、そのバージョン3でも1990年まで遡るので、それよりもまだ私の方が若いです。1993年というと、TeXの上でふだん多くの人が使っているLaTeXの現行バージョンであるLaTeX2eが登場した頃だと思います。
──山下さん自身は、いつ頃からTeXを使っているのでしょう。
山下 使い始めたのは、それほど昔のことではありません。大学の1年次に数学の授業で名前を聞いたことがあって、2年次に入ってから何となく使い始めた感じです。
──やはり授業でレポートなどを書く必要があったからですか?
山下 いえ、特に大学の授業で必要と感じたことはありません。私がTeXを使い始めた理由は、1年次からの数学の授業でなんとなく「TeXは数式を表現するのに便利そうだな」と感じていたので、「もしかすると将来役に立つかな」くらいの軽い気持ちからでした。
ただ、私は化学専攻に進んだのですが、「やっぱり化学だとTeXを使うことはあまりないんだな」と感じたくらいTeXを使う機会はなかったんですよね。もちろん、化学の分野でもTeXを使う人は使いますが、私の研究室では卒論も修論もWordだったのです。
実際、今でも自分でTeXで文書を書くことはあまりありません。3年次くらいまではTeXを使ってレポートを書くこともあったので、自分がTeXをいちばんよく使っていたのは、ひょっとすると、この2年次の後半から3年次にかけてだったかもしれません。
──え? ご自身ではあまりTeXを使わないんですか。
山下 はい。タンパク質や生物寄りの研究に進み、込み入った方程式をレポートや論文に表記することも少なくなったので。今でも本業は化学関係ですから、TeXよりむしろWordです。
──ここまでお話を伺っている限りでは、なぜTeXの開発に深くかかわるようになったのか、とても不思議な感じがしますが……。
山下 学部4年次の頃、PowerPointの資料に数式をいれるためにTeX2imgというツールを使っていて、そのバグを報告したのがきっかけだと思います。
技術イベントからTeXの開発コミュニティに踏み込む
山下 TeX2imgは、LaTeXで書いた数式を画像として簡単に保存できるGUIソフトです。寺田侑祐さんと阿部紀行さんという、今は日本語TeX開発コミュニティでも活躍されている方々が、開発とメンテナンスをしています。
TeX2imgの中の方々との交流の中で、ソフトウェアの背後にある人たちが見えて、フィードバックして恩返ししたいという気持ちが自然とできていったのが大きかったと思います。バグ報告の仕方とか開発の流れのようなOSSの基本的な所作も、このときに学べました。
──つまり、直接のきっかけはTeX2imgだったと?
山下 そうです。さらに、それから2カ月後くらいに「TeXユーザの集い2014」という技術イベントに参加して、TeXコミュニティのさまざまな方と知り合えたことも契機だったと思います。そこで、分子模型の3DアニメーションをPDFの発表スライドに埋め込む方法を紹介するライトニングトークをしたのです。
3Dアニメーションや動画をPDFに埋め込むのは、実はわりとスマートな方法がないのですが、LaTeXにはそのためのパッケージがあります。そのパッケージを探し出すために調査したり、使い方を調べたりしているうちに、TeXのエコシステムの雰囲気が少し見えてきて、これはなかなか面白いなと。
──なるほど。必要があって調べるうちに詳しくなるという話はよく聞きます。
山下 実は、後にOCamlによる組版システムSATySFiの開発を手掛ける諏訪敬之さんや、TexdocのコミッタになるなどTeX開発に深くかかわっていく朝倉卓人さんとも、このTeXユーザの集い2014で知り合ったんです。
たまたま3人とも同じ大学だったこともあって、そこから東大TeX愛好会ができたりもしました。この愛好会では、今でも現役の学生たちがTeXにまつわる活動を継続しています。
──2014年のTeXユーザの集いは、山下さんだけでなく、日本のTeXコミュニティにとっても転機だったようですね。
山下 かもしれません。例年に比べても盛況で、公式発表では126人が集まったと聞いています。
ただ、日本のTeXコミュニティにとっての転機という意味では、2015年の「日本語TeX開発コミュニティ」の立ち上げになるような気がします。
日本で広く使われているpTeXやpLaTeXは、2010年からTeX Liveという世界的なTeXディストリビューション(関連ツールの集合体)の一部に少しずつ組み込まれていくのですが、中には歴史的な理由で管理者が曖昧なものもありました1。
開発者同士の話し合いの場も不足していて、十分な検討をしないまま変更が入り、後から問題が発覚したこともあります2。また、pTeXがTeX Liveに組み込まれたことで、日本の外でpTeXのソースコードが変更されることもあります3。場合によっては、知らないうちに日本のTeXユーザに重大な影響を及ぼさないとも限りません。
そんな中、黒木裕介さんや山本宗宏さんが発起人となって有志を集めたのが、日本語TeX開発コミュニティでした。発足当時は何をするとも決まっていませんでしたし、そのような話題になったことも今までありません。
ただ、開発者がそれぞれ言葉には出さずとも感じていた「コミュニケーション不足」が、この枠組みができたことで自然と解消していったように感じています。私自身も、この頃にマネジメント的なことの必要性を意識しはじめました。
今では、pTeXやpLaTeXを含むさまざまなツールを「コミュニティ版TeX関連ソフトウェア」として一元的にGitHubで管理しています。こうしておけば、例えば「pTeXの修正にpLaTeXが追い付かない」といった問題は未然に防げますから、安心ですよね。
{$image_4}Japanese TeX Development Community · GitHub
すごいプログラマでなくても仕組みや原理の整理はできる
──いま言われた「マネジメント的なこと」というのは、コミュニティ内での人間関係の調整とか政治力学的なことですか?
山下 いや、むしろ何か技術的に問題が起きたとき、あるいはそうした問題が起きそうな変更が取り込まれたときに、それを相談すべき相手を知っているということですね。なので、コミュニティとその外側、具体的にはTeX Liveという集合体のメンテナや、pLaTeXが依拠しているLaTeXのメンテナとの外交を取り持つことが多いです。
私自身は、実を言うと、そんなにTeXの全てを熟知しているわけではないという自覚があるんです。ものすごいTeXのマクロが書けるわけでもないですし。
しかし、すごいマクロが書けなくても、すごいプログラミングはできなくても、必要に応じて背景の仕組みや原理を探求していくことはできると気づいたんです。そうすれば自然と、分からないことが起きたときに何を見ればいいか、誰に頼ればいいかが見えてきました。
──TeXくらい巨大で複雑なシステムになると、裏側を探るといってもかなり大変ですよね
山下 例えば、TeXは必ずログファイルを出力します。ログファイルには、エラーメッセージ、読み込んだファイルの場所、バージョン番号など、たくさんの情報が含まれているので、まずはそれを頼りに該当するファイルを探し、その中身を読みます。
どうしても分からない場合には、TeXやpTeXのソースコードが必要になることもありますが、それも全て公開されているので、ある挙動の裏で何が起きているかをとことん突き詰めることができます。これがフロントエンドの仕組みだったりすると、ユーザによる操作と背景の仕組みの関係を解きほぐすことになり、私には手が出せないんですが。
そうやって調べていって、ようやく裏で何が起きているのか仕組みが分かると、とても安心できます。さまざまな事柄の背景の仕組みや原理を探求したいという気持ちが個人的に強いのかもしれません。よく考えると、本業の化学の研究にもそういう側面はありますしね。
──裏側を探ったことで、TeXというシステムに詳しくなり、マネジメントができるようになった?
山下 そうですね。ただし、システムの構造を知っているだけでは、これだけ歴史的なしがらみもある巨大なソフトウェアの管理というのは、なかなかできないと思います。
私自身も、初めからマネジメントできたわけではなく、できることから始めて経験を重ねた、という感じでしょうか。自分が「このTeX開発者のコミュニティでできることは何かな?」と模索していくうち、だんだんと今のようなマネジメント的な仕事が増えてきたのかもしれません。
もちろん、マネジメント以外の仕事もやっています。日本語のTeX環境にはフォントの埋め込みなどで特殊な面があるので、そのインフラ整備などですね。
──ヘビーなTeXユーザとしてでなく、流れで深入りしてやれることを探していったらハブの中心になっていたというのは、とても面白いと思います。
{$image_5}
世界のTeXの中の日本のTeX
──ところで、TeXのコミュニティでは、そうしたマネジメント的な立場が、役割として設定されているのでしょうか。他のOSSでは、オリジナルの開発者を中心に組織が構成されていたり、明示的に役割を分担しているコミュニティもありますが。
山下 特にないと思います。それは日本語TeX開発コミュニティに限らず、世界的なTeX開発コミュニティにもないはずです。「あの人はマネジメントできるよな」みたいな信頼が醸成されていて、その信頼関係で全世界のコミュニティが成り立っている感じです。
もちろん、ある特定のアプリケーションについて、最終的な判断をする人はいます。例えば、pTeXだったら今は北川弘典さんです(参考)。pTeXを改造して内部の文字コードをUnicodeにしたupTeXについては、田中琢爾さんがその立場です。
しかし、もし海外で開発されて日本でも使われている機能に何らかの変更が発生し、その変更がpTeXとupTeXの両方に影響があるとなった場合には、協力して影響の範囲を調べたり、海外のチームに要望を出したりする必要があるわけです。
そういうときに、日本語TeXコミュニティにおける窓口として私が動くこともあります。もちろん、そのためには自分も逆に相手から信頼されていないと、要望も相談もしづらいですよね。マネジメント的な活動にはそういう要素も含まれると思います。
例えば、全世界で使われているLaTeXのコアの機能を開発メンテナンスしている国際チームがあるのですが、去年の4月、LaTeXにかなり大きな機能変更が施される前に、「こういう変更を予定しているが日本語TeXで問題が起きないか教えてほしい」と名指しで私にメンションがきたりしました。
──事前に相談してくれたと。
山下 はい。とはいえ、そもそも海外の開発者は日本語TeXのことはよく知らないので、相談がない方が普通です。そういう状態がふいに発覚してから、日本語TeX開発コミュニティ内で議論になったりします。
──そういう場合、やはり変更の差し戻しを依頼したりするのでしょうか?
山下 日本のTeXユーザへの影響を海外の開発者に伝えて修正してもらう場合もあれば、日本のユーザに泣いてもらう場合もあります。
いずれにせよ、まずは変更に伴う日本語TeXへの影響を認識しているかを含め、変更を取り入れた意図について海外の開発者に確認します。その回答が納得できるものであれば、その変更を受け止めてくれるよう日本のユーザに掲示板やブログ、Twitterなどを通して事情を説明します。
例えば、文書中の画像を扱うことが目的のgraphicxというパッケージが2017年にリニューアルされ、デフォルト値が変わったり、PDF形式の画像を取り込むときのサイズ指定方法のひとつが削除されたりしました。
いろいろ議論があったのですが、リニューアル自体は受け入れざるを得なかったので、デフォルト値が変わってしまいましたが、サイズ指定方法は復活するよう要望しました。
── なるほど。とはいえ、何らかの形で差し戻せることばかりでもありませんよね。
はい。日本のユーザが依存している機能については、抜け道を作ってほしいといった提案をすることもあります。
2016年頃の話ですが、ページ全体のサイズが勝手に設定されるという変更が入ったことがあります。この変更では、pLaTeXでページにトンボを付ける機能が考慮されておらず、従来は問題なかったトンボ付きの文書でコンパイルが失敗するようになりました(参考)。
これには、従来の挙動に戻すnosetpagesize
というオプションが追加されました。要求したのは私ではなかったのですが、困っている方には回避策として機会があるたびに伝えています。
──そうした海外におけるTeXの機能の変更には、どうやって気づくのですか?
山下 日本のユーザが気づいて教えてくれることもありますが、私自身も、上流の開発者が参加している各種のメーリングリストやLaTeXのGitHubリポジトリ、それからTeX LiveのSubversionリポジトリを毎朝チェックしています。
TeX Liveは、丸ごとマシンにインストールすると5Gバイトくらいになる巨大なコードベースなのですが、かなり頻繁に細かい修正が入ります。特に、新しい版のリリースが毎年春なので、その直前の時期は確認事項が多くなります。
メジャーなパッケージで変更の影響が大きそうであれば、上流に問い合わせたり、日本のコミュニティ向けに情報を流したり、夜帰宅してからコンパイルして確かめることもあります。
開発者向けメーリングリストについては、海外と日本を合わせて、全部で15くらいを購読しているはずです。TeX Liveのリリースを控えた繁忙期にはやはり流量が多くて、50件/日くらいのメールをチェックしていますね。
また、中国語のTeXコミュニティからの情報も、Google翻訳を使ってチェックしています。実は、日本語TeXには中国語の組版に使われているものもあって、特にLuaTeXという組版エンジンに関しては日本で主に北川さんが中心となって開発されているluatex-jaが中国でも利用されています。
逆に、XeTeXという組版エンジンでは、日本語の組版機能が中国で開発されているxeCJKというパッケージ機能を利用しています。何か変更があったときには、相互に壊れる可能性があるので、中国語のTeXコミュニティの動向もチェックが必要なのです。
TeX開発コミュニティのこれから
──こうして伺っていると、古いソフトウェアであるにもかかわらず、未だにTeXは世界全体でもかなり機能が変わったりしているんですね。
山下 そうですね。特にここ数年は活発だと思います。
その一方で、コミュニティ全体が互換性をすごく重視してることもあり、歴史的なしがらみを感じることもあります。
時代に合わせて新しい機能を入れたい場合だけでなく、今の目で見ると不具合なので直したいといったときにも、その修正によって今まで使っていた人が困ることがあってはいけないという配慮ですね。そもそも、これまでの挙動が不具合なのかどうかについても、人によって考え方が違ったりします。
そんな中でも、海外のTeXはどんどん進化しています。例えば、世界の趨勢として、メインとして使われるエンジンは徐々にLuaTeXに移行していくと思います。10年以内には、みんながLuaTeXを使っている世界になるかもしれません。
そして、それを見据えてLaTeXも進化しています。その進化に日本語TeXでも追従していかないと、そのうち、日本語TeXだけは新しいLaTeXの機能を使えなくなってたという事態が起きかねないわけです。
互換性をなるべく壊さない範囲で、次世代へと移行しやすい環境作りを進めるということは、日本のTeXユーザの間であまり意識されていないのですが、私はそこをやっていきたいと考えています。
──まったく別の本業がある中で大変だと思いますが、モチベーションはどこにあるのでしょうか?
山下 単純に結果が楽しいという面もあるし、期待に応えたいという面もあります。
2016年から数えてまだ3年くらいの実績しかない自分が、海外の開発者であったり、文字通り何十年もTeXの開発にかかわっている大御所であったりから信頼されるのは、やはり特別な体験だと思います。
メールをチェックしたり反応したりするのは、本当に毎日やっていることなので、私にとっては日常なのですが、それが非日常の体験でもあるわけなので、とても刺激的です。
それに、本業が別にあることが、自分にとってはTeXのコミュニティ活動を続けられる理由かもしれないとも感じています。本業とは別に、何かもうひとつ専門性を持ちたいという気持ちがあることもそうです。
また、自分が今の活動をする上で、本職がTeXに関係ないことがかえって有利に働いていると思うのです。利害関係がないという意味で、中立な立場を維持しながら、いろいろな判断ができているのかもしれないなと。
──なるほど。「自分はこの方向に進めたい」ではなく、エコシステムに合わせて、先を考えてコーディーネートされているという印象を持ちました。
山下 新機能の開発を主にやっているわけではないという意味では、確かにコーディネートに当たるのかもしれませんね。
──山下さん自身もまだ20代で、TeXの歴史を考えるととても若いですが、さらに若い人もTeXのコミュニティに参加できるでしょうか?
山下 実際のところ、TeXコミュニティにはコンスタントに若い人が入ってきているという印象です。70歳くらいの人が現役で開発に関係していたりして、ほかの技術系コミュニティでは会えないような人に会えたりするので、楽しい人には楽しいと思います。
経験3年くらいの自分が言うのもおかしな話ですが、ここ10年くらいで開発体制が現代化して中が見えやすくなったので、入りたい人にとっては入りやすい環境にもなってると思います。さまざまなプロジェクトがGitHubベースになっているので、自分も活動を続けやすくなっているという面がありますね。
私から若い人をコミュニティに積極的に誘いたいという気持ちは特にありませんが、若い人が入ってきやすい環境にはしていきたいです。
──新しく入ってきた人が貢献しやすいのは何でしょう。
山下 TeX Liveは毎年春に新しい版がリリースされるという話をしましたが、3月から4月にかけては、そのリリースに向けたテスト期間になっています。そういうところから参加してくれるのもいいと思います。
実際、日本ではテストしてくれる人のリソースが少なくて、今年のバージョンではupTeXが大きなバグが入った状態でリリースされてしまうといった悲劇もありました。
──5年後、山下さんはどうなっていたいと考えていますか?
山下 ここ数年、SATySFiやCSS組版のような新しい自動組版の仕組みが登場してきているのがとても面白いと思っていて、しかし、そうした仕組みはどうしてもTeXのことを意識せざるを得ないのですよね。そうした新しい仕組みに対して建設的なフィードバックができるためにも、私としてはTeXについてまだまだ深く知りたいと考えています。
{$image_6}
取材・執筆:鹿野桂一郎(技術書出版ラムダノート)