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.t
lib
以下にモジュール、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 Documentation
Perl 6 Design Documents
先述したようにPerl 6は仕様です。その仕様書が、
なお、
roast
先ほどの
roastは、==>
という記号に出会い、
$ cd /path/to/roast
$ grep -r '==>' .
...
./S03-feeds/basic.t: @a ==> @b;
$ vim ./S03-feeds/basic.t
のようにgrep
で全文検索して適当なファイルをピックアップし、
まとめ
15年の時を経て、
さて、
本誌最新号をチェック!
WEB+DB PRESS Vol.130
2022年8月24日発売
B5判/168ページ
定価1,628円
(本体1,480円+税10%)
ISBN978-4-297-13000-8
- 特集1
イミュータブルデータモデルで始める
実践データモデリング
業務の複雑さをシンプルに表現! - 特集2
いまはじめるFlutter
iOS/Android両対応アプリを開発してみよう - 特集3
作って学ぶWeb3
ブロックチェーン、スマートコントラクト、NFT