Perl 6のエコシステム
Perl 6のプログラムが少し書けるようになったら、
ここではPerl 6のモジュール管理のしくみ、
ecosystemでモジュール管理
Perl 6にはPerl 5でのCPANのようなすべてのモジュールがアップロードされる場所はありませんが、https://にて一元管理し、
インデックスへの新たなモジュールの追加はGitHub上でのPull Requestで受け付けており、
pandaでモジュールのインストール
モジュールのインストールには先述したpandaを使います。インストール方法も先述しましたが、HTTP::UserAgentをインストールして使ってみましょう。
$ panda install HTTP::UserAgent$ perl6 -MHTTP::UserAgent -e \
'HTTP::UserAgent.new.get("http://perl6.org") \
.status-line.say'
200 OKインストール可能なモジュールの一覧はhttps://にあります。
はじめてのモジュール作成
さて、
ディレクトリ構成
Perl 6で再利用可能なモジュールを書くときの一般的なディレクトリ構成は次のようになります。
$ tree
.
├── LICENSE
├── META6.json
├── README.md
├── lib
│ └── Hello.pm6
└── t
└── 01-basic.tlib以下にモジュール、t以下にテストを配置します。上記の場合は、Helloモジュールになります。Hello::Worldというモジュールを追加する場合は、lib/ディレクトリを作り、lib/というファイルに書いていきます。
もし必要ならbinディレクトリを作り、
META6.はメタ情報を書く重要なファイルです。モジュール自身のリポジトリURL、
http://に詳しい解説がありますので、
開発
lib/*.pm6にどんどん実装を書いていきましょう。合わせてテストもt/*.tに書いていきます。
テストの書き方と実行のしかたについて簡単に触れます。Rakudoには標準でTestというモジュールが入っており、
たとえばHelloモジュールにgreetという関数を定義した場合、
use v6;
use Test;
use Hello;
is greet("Shoichi"), "Hello, Shoichi";
done-testing;use TestでTestモジュールをロードし、is A, BでAとBが同じであることをテストし、done-testingでテストの終わりを示しています。
Testモジュールの出力はTAPと呼ばれる形式ですので、proveの力を借りると便利です。proveはPerl 5がインストール済みであれば、
$ prove -e 'perl6 -Ilib' t/
t/01-basic.t .. ok
All tests successful.
Files=1, Tests=1, 2 wallclock secs (...)
Result: PASS新たにt/などのテストを追加した場合も、tディレクトリにあるすべてのテストを実行できます。
リリース
モジュールが完成したら、
Pull Requestを送る前に、META6.のsource-urlを確認してください。source-urlからモジュールの場所を判断しているので、
確認できたらecosystemのMETA.にあなたのMETA6.のURLを追加し、
マージされれば、
$ panda install Your::Moduleでインストールできます。
さらに学ぶためのリソース
Perl 6について説明してきましたが、
Perl 6入門
「Perl 6入門」 先述したようにPerl 6は仕様です。その仕様書が、 なお、 先ほどの roastは、 のように 15年の時を経て、 さて、 2022年8月24日発売Perl 6 Documentation
Perl 6 Design Documents
roast
==>という記号に出会い、$ cd /path/to/roast
$ grep -r '==>' .
...
./S03-feeds/basic.t: @a ==> @b;
$ vim ./S03-feeds/basic.tgrepで全文検索して適当なファイルをピックアップし、まとめ
本誌最新号をチェック!
WEB+DB PRESS Vol.130
B5判/168ページ
定価1,628円
(本体1,480円+税10%)
ISBN978-4-297-13000-8
イミュータブルデータモデルで始める
実践データモデリング
業務の複雑さをシンプルに表現!
いまはじめるFlutter
iOS/Android両対応アプリを開発してみよう
作って学ぶWeb3
ブロックチェーン、スマートコントラクト、NFT