これははてなエンジニアアドベントカレンダー2022 42日目の記事です。 昨日は id:k-murakami0609 さんの 過去に所属してたチームに転生したら導入したいもの でした。
はてなのノベルチームで日常的に使っている便利グッズ最高ですね!! みなさんもノベルチームにjoinして体験してください!!!
さて今回は2022年にぼちぼち始めたCPANモジュールのメンテナを引き継ぐ活動についてお話しようかなと思います。
CPANモジュール
CPANモジュールとはご存知プログラミング言語Perlのモジュールシステムのことです。
Perlインタプリタに付随しているコアモジュールも含めて、PerlではCPANと呼ばれるアーカイブにモジュールがアップロードされ、cpanm
やcpm
などのツールを通してインストールし利用する世界観になっています。
TeXのモジュールアーカイブのCTANに影響されて作成されたと言われていることからも分かる通り、CPANは1995年から存在しており、歴史的にも古いシステムになっています。
そんなCPANには大小様々なモジュールがアップロードされています。特に有名どころではAcme名前空間でしょうか。
他の言語に無い特徴ですが、PerlのモジュールではAcme::
と名前がつくモジュールはジョークモジュールとなっていて、様々なおもしろモジュールがアップロードされています。(どういう物があるか知りたい方はAcme大全がオススメです)
CPANモジュールの今
そんなCPANモジュールですが、Perl使用者の人口減に伴って、新規モジュール開発及びモジュールのメンテナが減少傾向にあります。
最近ではElasticsearchの公式クライアントライブラリのSearch::ElasticsearchもElasticsearch8を持ってPerlクライアントの提供を終了することを発表したりしています。
日本でもPerlを書かれていたエンジニアの方々が、別の言語にコミットすることになったり、また多忙でPerlを書く時間が取れなかったりと、様々な理由でメンテナが減少しています。 使わないモジュールのメンテナンスをし続けるのはなかなかしんどいですよね。
Perlではここ数年@INC
がカレントディレクトリから削除されたことなどもあるため、継続してメンテナンスをしていくのは後方互換性が強いPerlといえども必要そうです。
とはいえ、はてな社にはまだPerlで元気に動いているPerlプロダクトがありますし、何よりid:anatofuzはPerlが好きなので、できればモジュールのメンテは継続していきたいです。
他にはCPANモジュールではないですが、Perlの公式Dockerイメージの管理もごく数人で行っているので、こういったところにもコミットしたいなと思っていました。
CPANモジュールのメンテに関わる活動
そこで去年はパッチを当てたいOSSを中心にメンテナを引き継ぐ活動をしました。 そこまで件数が多いわけではなかったですが、声を書けながらメンテ権を頂いています。
@cho45 こんにちは! はてなでPerl書いているAnaTofuZです。いくつか社内でcho45さんが作成された/メンテナンスされているCPANモジュールを利用させていただいているのでメンテに加わりたいです。社内にも他にメンテしたい方がいるので、まずは自分にメンテ権限いただきたいので相談させてください!
— 八雲アナグラ (@AnaTofuZ) 2022年6月9日
溜まっていたPRの解決や、新規PRのレビュー等に参加することで、継続してメンテナンスを行っています。
直近ではTest::WWW::Stubのメンテに関わりました。
モジュール以外ではdocker-perlやOpenAPIのスキーマからクライアントコードを自動生成するOpenAPI GeneratorのPerlクライアントもPRを送っています。
CIの修正なども
他にはPerlモジュールは、日本でよく使われるCPANモジュールオーケストレーションツールのMinillaが標準でTravis CI用の設定ファイルを出力していたことから、Travis CIでCIを回しているものが多かったです。
しかしTravis CIは近年では動かなかったりするので、これをGitHub actionsに移動するなどの活動もメンテ権をもらうついでにシュッと進めています。
CPANモジュールのメンテを引き継ぐ方法
CPANモジュールのメンテはGitHub等のリポジトリを引き継ぐ + CPANモジュールのcomaintに登録してもらうことで引き継ぐことができます。
この部分はオリジナルの作者の方にやっていただく必要があるため、コミュニケーションが必要です。 権限を付与されてからは自分のCPANモジュールをメンテするように操作することが可能です。
ただし引き継がれたCPANモジュールをアップロードする際はx_authority
という権限に気をつける必要があります。
※追記 id:shoichikaji さんより最近はいらないとの情報を得ました!
メンテありがとうございます!
— Shoichi Kaji (@shoichikaji) 2023年1月11日
ところで、x_authorityに関しては、もうPAUSEが勝手にやってくれるので設定しなくてもOKだと思います。https://t.co/uG4anMFjZl
※追記ここまで
新しいモジュールを作りつつメンテもしていく
新しいモジュールを作るのも楽しいですが、既存のモジュールのメンテをするのも盆栽をするようで楽しいです。 また偉大な先人のコードに自分も関わることができ、広く使われていく体験もできるので、ぜひPerlに興味がある方はCPANモジュールなどに関わっていきましょう!!!
明日のはてなエンジニアアドベントカレンダーは同じチームのid:deflis55さんです! お楽しみに!