Path to Raku — 19 年使った名前を変えるとき、何を数えるか
2019 年 8 月、Elizabeth Mattijsen が issue を立てた。タイトルは「Perl 6 という名前に含まれる Perl が、混乱を招き苛立たせる」。10 月、Larry Wall が改名を承認する。そして公開された移行計画書 Path-to-Raku.md は、改名を宣言ではなくチェックリストにした。ファイル拡張子、環境変数、IRC、ハッシュタグ、301 リダイレクト、そして言語仕様の中に埋まっていた名前。
前回、名前が負債になる条件を書いた。今回は返済の作業の話である。
この回の題材は幸運なことに、全部公開されている。 issue も、議論も、移行計画書も、GitHub で読める。 「19 年使った名前を変える」という作業の一次資料が残っているのは、かなり稀だ。
problem-solving というリポジトリ
Perl 6 コミュニティは、言語やコミュニティの大きな問題を議論するための
専用リポジトリ perl6/problem-solving(現 Raku/problem-solving)を持っていた。
仕組みは 2 段階になっている。
- issue で「問題」を提起する
- 合意が形成されたら
solutions/配下の文書として解決策を書き、PR を出す
問題と解決策を分けるのが、この仕組みの肝だ。 「何が問題か」で合意してから「どう解くか」を議論する。
これ自体が、参考になるガバナンスの形だと思う。 技術的な議論はしばしば、問題への合意が無いまま解決策を争うことで壊れる。 「あなたの案には反対だ」が「そもそも問題だと思っていない」なのか 「問題だが解き方が違う」なのか、区別されないまま進む。
Issue #81
2019 年 8 月、Elizabeth Mattijsen(lizmat)が issue を立てた。タイトルはこうだ。
“Perl” in the name “Perl 6” is confusing and irritating (「Perl 6」という名前に含まれる “Perl” が、混乱を招き、苛立たせる)
問題として提起されたのは、名前そのものではない。名前に含まれる “Perl” の語である。
これは正確な問題設定だった。前回書いたとおり、 負債を生んでいたのは「6」という数字だけではなく、 「Perl」+「6」という組み合わせが運ぶ「Perl 5 の次のバージョン」という主張だったからだ。
この issue は大きな議論になった。賛成も反対も出た。 そして最終的に、名前を分けるという方向で合意が形成される。
候補名は複数あった中で、Raku が選ばれた。 第 1 話で書いたとおり、処理系名 Rakudo(駱駝道 / 楽土)に由来する名前である。 既に 10 年以上使われてきた名前の一部を取るという選択で、 まったくの新語を作るより連続性がある。
Larry Wall の承認
2019 年 10 月、Larry Wall が改名の PR を承認した。
その際に引いたのが、新しい葡萄酒を古い革袋に入れてはならないという聖書の寓話である。
I am in favor of this change, because it reflects an ancient wisdom…
新しい酒には新しい革袋が要る — 新しい言語には新しい名前が要る、という論理だ。
ここが重要なのは、創始者自身が「これは Perl 5 の続きではない」と認めた点である。 前回書いた「改名は敗北に見える」「創始者が付けた名前だった」という 19 年の停滞の理由 2 つが、この 1 つの承認で同時に解けた。
Path-to-Raku.md — 移行計画書
合意の後、solutions/language/Path-to-Raku.md として具体的な移行手順が書かれた。
この文書の価値は、改名を「宣言」ではなく「実行可能なチェックリスト」にしたことにある。
「名前を変えることにしました」で終わらせず、 どこに名前が埋まっているかを列挙し、いつ何をするかを決めた。
段階を切った
| 段階 | 内容 |
|---|---|
| 合意直後 | ドキュメントの文言置換、リポジトリ名の検討、IRC チャンネル、ドメインの 301 リダイレクト |
| 6.e 前後 | ファイル拡張子の変更、新しい命名規約の採用 |
| 6.f | 旧拡張子・旧環境変数に非推奨警告 |
| 6.g | 非推奨のものを削除 |
一度に切り替えず、言語バージョンの区切りに合わせて段階的に移す。
これは第 8 話で書いた「リリースとは約束である」の応用だ。
破壊的な変更は、約束の区切り目に置く。
6.f で警告を出し、6.g で消す。ユーザは自分のコードに use v6.e; と書いてあれば、
いつ何が起きるかを予測できる。
互換性を切って 15 年かかった経験を持つコミュニティらしい判断である。
名前が埋まっていた場所
計画書が列挙した場所を、層ごとに並べ直すとこうなる。
言語仕様の中
| 対象 | 旧 | 新 |
|---|---|---|
| メソッド | .perl |
.raku |
| 動的変数 | $*PERL |
$*RAKU |
| クラス | Perl |
Raku |
ここがいちばん意外なところだ。 .perl は、値を
「そのまま評価すれば元に戻る文字列」にするメソッドである
(Ruby の inspect、Python の repr に相当)。
言語名が、メソッド名として文法の中に埋まっていた。 だから改名は言語仕様にまで及んだ。
ファイルシステム
| 種類 | 旧 | 新 |
|---|---|---|
| スクリプト | .p6 / .pl6 |
.raku |
| モジュール | .pm6 |
.rakumod |
| ドキュメント | .pod6 |
.rakudoc |
| テスト | .t6 |
.rakutest |
実行環境
| 対象 | 旧 | 新 |
|---|---|---|
| ライブラリパス | PERL6LIB |
RAKULIB |
| インストール先 | PERL6_HOME |
RAKUDO_HOME |
| 実行ファイル | perl6 |
rakudo(raku / perl6 は symlink) |
ネットワークとコミュニティ
| 対象 | 変化 |
|---|---|
| ドメイン | perl6.org → raku.org、docs.perl6.org → docs.raku.org(301 リダイレクト) |
| GitHub org | perl6/ → Raku/ |
| IRC | #perl6* → #raku* |
| ハッシュタグ | #perl6 → #rakulang |
| モジュール | 作者にリポジトリ名・README・META6.json の更新を推奨 |
301 を選んでいる
細かいが、実務的に重要な判断がある。 旧ドメインのリダイレクトに 301 Moved Permanently を選んでいることだ。
302(一時的)ではなく 301(恒久的)にすることで、 19 年分の被リンクの評価を新ドメインへ引き継ごうとしている。
前回「検索が分断された」と書いた。それは完全には防げなかったが、 防ごうとした形跡がここにある。 ドキュメントの URL も等価な新 URL へリダイレクトし、 なぜ移動したのかを説明するページを用意している。
いきなり壊さない
互換性への配慮も明記されている。
perl6実行ファイルは symlink として残す$*PERL/Perlクラスは当面$*RAKU/Rakuのエイリアスに- 拡張子の変更は 6.e に合わせ、警告は 6.f、削除は 6.g
「今日から全部変える」ではない。
改名とは何をする作業か
ここから一般化する。この連載の 11 番目の型だ。
改名は「名前を変える作業」ではなく、 「名前が埋まっている場所を全部数える作業」である。
Path-to-Raku.md の価値は、まさにその列挙にある。 数えてみると、名前は 6 つの層に埋まっていた。
- 言語仕様(
.perlメソッド、$*PERL、Perlクラス) - 実行環境(環境変数、実行ファイル名、インストールパス)
- ファイルシステム(拡張子)
- ネットワーク(ドメイン、リダイレクト)
- コミュニティ(IRC、ハッシュタグ、組織名、カンファレンス名)
- 生態系(モジュール名、
META6.json、README、書籍、過去の記事)
そして 6 番目は自分たちの管理下に無い。 他人のリポジトリ、他人のブログ、出版済みの書籍。 改名の作業は、自分が変えられる範囲で終わらない。
この手続きは再利用できる
これはリネームに限らない。大きな破壊的変更を実施するときの手続きとして、 列挙 → 層ごとに分類 → 段階を切る → 互換の期限を決めるは、そのまま使える。
逆に言えば、列挙をしないまま段階だけ切ると失敗する。 「まず簡単なところから」と始めて、 言語仕様の中に名前が埋まっていたことに後から気づく、という形で。
組織の名前も動いた
改名は言語だけでは終わらなかった。
| 対象 | 変化 |
|---|---|
| The Perl Foundation | The Perl and Raku Foundation(TPRF) という別名を採用(正式な登録は 2022 年夏とされる) |
| カンファレンス | The Perl Conference → The Perl and Raku Conference |
| ガバナンス | Raku Steering Council を設置(最初の選挙は 2020 年、投票は 9 月 20 日締切) |
財団もカンファレンスも、分離ではなく併記を選んだ。 「別々の言語だが、同じ家族」というのが、改名後の公式な関係である。
そして Raku Steering Council の設置は、改名と並ぶ重要な変化だった。 それまで Larry Wall という BDFL に紐づいていた意思決定が、選挙で選ばれる合議体に移った。
興味深いのは、Perl 5 側でも同時期に同じことが起きていることだ。 Perl Steering Council が作られ、pumpking(個人のリリース責任者)体制から合議制へ移行した。
2019〜2021 年に、両言語がそれぞれ、創始者/個人から合議制へ移った。
改名が引き起こしたことなのか、同じ世代交代が両方に来ただけなのかは、 断定しない方がいい。ただ、同じ形の変化が両側で起きたのは事実である。
次回(第 11 話): 正規表現を言語機能に昇格させる。 ここからは言語としての Raku の話だ。 grammar — Raku で最も他の言語に無いものを見る。