(1)はこちら、(2)はこちらから。
Perl 6のエコシステム
Perl 6のプログラムが少し書けるようになったら、次にやることは自分でモジュールを書いて再利用できる形にまとめてみることです。モジュールを書いてみることで、「これはどうやって書くの?」「これとこれの違いは?」などの疑問が自然にわき、Perl 6を習得するスピードが増すはずです。
ここではPerl 6のモジュール管理のしくみ、モジュールのインストール方法、そしてモジュールの作り方を説明します。
ecosystemでモジュール管理
Perl 6にはPerl 5でのCPANのようなすべてのモジュールがアップロードされる場所はありませんが、各モジュールの置いてある場所をhttps://github.com/perl6/ecosystem
にて一元管理し、インデックスを作っています。モジュールのインストール時にはこのインデックスを参照のうえ、ダウンロードしてインストールします。
インデックスへの新たなモジュールの追加はGitHub上でのPull Requestで受け付けており、人間味の溢れる管理となっています。
pandaでモジュールのインストール
モジュールのインストールには先述したpandaを使います。インストール方法も先述しましたが、もう一つ試しにHTTP::UserAgent
をインストールして使ってみましょう。
インストール可能なモジュールの一覧はhttps://modules.perl6.org/
にあります。
はじめてのモジュール作成
さて、いよいよ自分でモジュールを作ってみます。
ディレクトリ構成
Perl 6で再利用可能なモジュールを書くときの一般的なディレクトリ構成は次のようになります。
lib
以下にモジュール、t
以下にテストを配置します。上記の場合は、Hello
モジュールになります。Hello::World
というモジュールを追加する場合は、lib/Hello
ディレクトリを作り、lib/Hello/World.pm6
というファイルに書いていきます。
もし必要ならbin
ディレクトリを作り、そこに実行ファイルを配置します。
META6.json
はメタ情報を書く重要なファイルです。モジュール自身のリポジトリURL、依存モジュールなどを書きます。
http://doc.perl6.org/language/modules
に詳しい解説がありますので、こちらも参照してください。
開発
lib/*.pm6
にどんどん実装を書いていきましょう。合わせてテストもt/*.t
に書いていきます。
テストの書き方と実行のしかたについて簡単に触れます。Rakudoには標準でTest
というモジュールが入っており、これを使います。
たとえばHello
モジュールにgreet
という関数を定義した場合、テストは次のようになります。
use Test
でTest
モジュールをロードし、is A, B
でAとBが同じであることをテストし、最後にdone-testing
でテストの終わりを示しています。
Test
モジュールの出力はTAPと呼ばれる形式ですので、テストの実行はPerl 5のツールであるprove
の力を借りると便利です。prove
はPerl 5がインストール済みであれば、すでに入っているはずです。
新たにt/02-test.t
などのテストを追加した場合も、上記コマンドでt
ディレクトリにあるすべてのテストを実行できます。
リリース
モジュールが完成したら、それを世界中の人に使ってもらえるようにリリースしましょう。リリースと言っても、先述したようにecosystemにPull Requestを送るだけです。
Pull Requestを送る前に、META6.json
のsource-url
を確認してください。source-url
からモジュールの場所を判断しているので、とても重要です。
確認できたらecosystemのMETA.list
にあなたのMETA6.json
のURLを追加し、Pull Requestを送りましょう。おそらく1日もしないうちにPerl 6コミュニティの方々がマージしてくれるはずです。
マージされれば、あなたのモジュールを、世界中の誰もが、
でインストールできます。
さらに学ぶためのリソース
Perl 6について説明してきましたが、本稿で説明できたのはPerl 6のほんの一部です。最後に、さらに学ぶためのリソースを紹介します。
Perl 6入門
「Perl 6入門」は、Perl 6の全体像をすばやくつかむことを目的に書かれたものです。オリジナルは英語で、これはその日本語版です。
Perl 6 Documentation
「Perl 6 Documentation」はPerl 6の公式ドキュメントです。特に「Language Reference & Tutorials」以下の記事を一通り読めば、Perl 6の言語的特徴が理解できるでしょう。
Perl 6 Design Documents
先述したようにPerl 6は仕様です。その仕様書が、まさにこの「Perl 6 Design Documents」です。ある機能をどういう意図で取り入れようとしたかなども書かれており、非常に興味深く読めます。
なお、ここに載っているすべての機能をRakudoはまだ実装していないことに注意してください。
roast
先ほどの「Perl 6 Design Documents」には自然言語(英語)で仕様が書かれているため、ある実装が仕様に準拠しているかどうかを調べるのは至難の業です。そこで作られたのがテストケースの集まりroastです。roastをどれだけパスするかで、その実装がPerl 6の実装たり得るかを判断します。
roastは、Perl 6の実際のコード例を探すうえで極めて有用です。Perl 6で何かわからないことが出てきた場合には、このroastをローカルにダウンロードして全文検索することをお勧めします。たとえば==>
という記号に出会い、そのコード例を知りたいなら、
のようにgrep
で全文検索して適当なファイルをピックアップし、そのファイルを詳しく見てみるとよいでしょう。
まとめ
15年の時を経て、2015年のクリスマスにリリースされたPerl 6について説明してきました。この記事を読んでPerl 6に興味を持った人は、ぜひ実際にご自身でPerl 6を書き、そのおもしろさを味わってください。
さて、次回の執筆者は柴崎優季さんで、テーマは「Perlでの開発に動的な型制約を導入する」です。
- 特集1
イミュータブルデータモデルで始める
実践データモデリング
業務の複雑さをシンプルに表現!
- 特集2
いまはじめるFlutter
iOS/Android両対応アプリを開発してみよう
- 特集3
作って学ぶWeb3
ブロックチェーン、スマートコントラクト、NFT