Test2::Plugin::TermEncodingというモジュールを書きました

先日、Test2::Suiteを使ってテストを書くというエントリを書きました。

kichijojipm.hatenablog.com

Test2::Suiteには、Test2::Plugin::UTF8というモジュールが含まれていて、これを使うことでutf8 pragmaが有効になり、テスト結果の出力をUTF-8エンコードしてくれます。

しかし、世の中にはWindowsという、未だターミナルのエンコーディングUTF-8ではない環境も有るので、このままでは少し不便です。そこで、Test2::Plugin::TermEncodingというモジュールを作りました。

使い方は簡単で、単にテストコードの先頭でuse Test2::Plugin::TermEncodingとするだけです。これだけで、Term::Encodingモジュールを使ってターミナルのエンコーディングを取得して、適切なエンコーディングの設定が行われます。

また、pipeで出力結果を別のアプリに繋ぐときなど、ターミナルのエンコーディングに合わせたくない時も有ると思いますので、出力先がターミナルではないときには、自動的にutf8がセットされるようになっています。

久しぶりにCPAN moduleを作りたくなったので、作ってみました(久しぶり過ぎて最初MANIFESTを作り忘れて空っぽのアーカイブをアップロードしてしまいました…)。

Programming Perl

Programming Perl

Learning Perl: Making Easy Things Easy and Hard Things Possible

Learning Perl: Making Easy Things Easy and Hard Things Possible

Test2::Suiteを使ってテストを書く

吉祥寺.pmは一応(?)Perlのイベントなので、たまにはPerlのことを書いてみます。

Test2モジュール

Perlのテスティングフレームワークと言えばTest::Moreがスタンダードですが、今リリースされているTest::More v1.3以降では内部構造が全て作り直されていて、Test2というモジュールがベースになっています。

Test2モジュールでは、テストの結果やメッセージが全て「イベント」という形で取り出せるようになっていて、テストモジュールの作者は従来より確実にテストができるようになっています。

詳細は割愛しますが、従来のTest::Moreではテストモジュールのテストが難しい、という課題を解決するためにTest2モジュールは作られました。

Test2::Suiteモジュール

さて、Test::Moreの中身はTest2モジュールを使って書き直されていますが、後方互換性を維持するため単にTest::Moreを使うだけであれば、テストの書き方は従来とまったく変わりませんが、おなじくTest2モジュールをベースにしたTest2::Suiteというモジュールを使うと、今までよりテストを書く上で便利な機能が使えるようになります。

例えばTest2::Bundle::Moreを使えば、より詳細なメッセージを出力するis_deeplyが使えますし、Test2::Plugin::UTF8というプラグインを使えば、Unicode文字列が正しく表示されるようになります。

use Test2::Bundle::More;
use Test2::Plugin::UTF8;

use utf8;

my $hash1 = { name => "ガンダルフ" };

is_deeply($hash1, { name => "サルマン"}, "イスタルの名前");

done_testing;

実行すると(当然ハッシュの中身は一致しないので)テストが失敗し、その詳細なメッセージが表示されます。

$ perl test.t
not ok 1 - イスタルの名前
# Failed test 'イスタルの名前'
# at test.t line 8.
# +--------+------------+----+----------+
# | PATH   | GOT        | OP | CHECK    |
# +--------+------------+----+----------+
# | {name} | ガンダルフ | eq | サルマン |
# +--------+------------+----+----------+
1..1

Test::Moreis_deeplyより読みやすい形式で出力されました。また日本語を出力しても、おなじみのWide Character...のメッセージも出力されていません。

なお、Unicode文字列を表示する際には、Unicode::GCStringモジュールがインストールされていないと、正しい文字幅で表示できない旨の警告メッセージが表示されるので、併せてインストールしておいた方が良いようです。

おわりに

このようにTest2::Suiteを使うことでTest::Moreより分かりやすいテストが書けるようになります。ぜひ使ってみてください。

かんたん Perl (プログラミングの教科書)

かんたん Perl (プログラミングの教科書)

吉祥寺.pm10のトーク枠、LT枠が埋まりました

kichijojipm.connpass.com

吉祥寺.pm10のトーク枠、LT枠が全て埋まりました。

今回はテーマを「カンファレンス、勉強会、そしてPerl入学式」と設定しましたが、実際には発表される方におまかせしているので、主催者である自分も何が出てくるかは全然分かっていません!

参加者はまだ募集中なので、迷っている方は是非ご参加を!

「プログラミングClojure 第2判」を読んでいます

ずっと以前に買ったまま、積んであった「プログラミングClojure 第2版」を読み始めました。

一つ一つの機能について、凄く丁寧に解説されていて、書かれているコードをREPLで実行しながら確かめていくと、挙動については「なるほどー」と理解していける構成になっています。

ただ、今時フィボナッチ数を再帰で求めるコードを書いても…と思う所は有り(だって、実際のプロダクションコードで書かないでしょ、フィボナッチ数を求めるコード…)、この手の「今、関数型言語が求められている現場からの要求」と入門書が上手くマッチしない感は何とかならないものかな、とは思いました。

コンパクトにまとまっていて、数日あればコードを書きながら読み進められるので、まずは最後まで読んでみようと思います。

プログラミングClojure 第2版

プログラミングClojure 第2版

吉祥寺.pm10を開催します

kichijojipm.connpass.com

ついに10回目の吉祥寺.pmです。

今回はテーマを「カンファレンス、勉強会、そしてPerl入学式」としてみました。

日々、色々なカンファレンスや、IT勉強会が行われていますが、参加する人、開催する人、色々な見方が有りますね。

また、Perl界隈でいうとリブートしたYAPC::Japanが北海道、大阪、福岡と各地域で開催されるようになったり、Perl入学式が東京、大阪、沖縄に続いて北海道で開催されるようになったりと、盛り上がっているところです。

そんな事を中心にトーク、LTを募集していますが、当然普通のPerlやそれ以外のテックトークでも全然OKです。

年度末で予定が見えない!という人も多いかもしれませんが、早めに登録しておいて頂けると幸いです。

2017年の吉祥寺.pm

今年も残りわずかとなってきましたが、今年もイベント自体は吉祥寺.pm6から、吉祥寺.pm9まで4回開催しました。Kichijojipm-miniも3回やっているので、なかなかのイベント開催回数になってきました。

今までイベントで喋ったことが無い人や、自分が気になる人に声をかけたりして、トークや、LTをみっちりやっていく、というスタイルで進めて行こうと思います。

特に規模を大きくしたり、無理に回数を増やすことも無いと思いますので、引き続き皆様の参加をお待ちしております。

次回は3月に吉祥寺.pm10を開催予定です。Perl入学式のその後や、YAPC::Hokkaido、YAPC::Kansaiの参加報告などお待ちしております。

Perl入学式への参加、その後は…

これはPerl入学式Advent Calendar 2016 22日目の記事です。

こんにちは、吉祥寺.pmというイベントを運営しています、Magnolia Kといいます。

非常に残念なことに、Perl入学式には参加者としても、サポーターとしても参加したことが無いのですが、一応papix校長からは名誉講師の称号を頂いております(要出典)。

Perl入学式に参加した、次のステップは?

時々Perl入学式の次のステップは?という話題が出てきます。

書籍で学ぶ

一つは書籍で学ぶ方法が有ります。「続・初めてのPerl」などはまさにこのタイミングに丁度良いレベル感です。

www.oreilly.co.jp

モジュール、リファレンス、オブジェクト、テストと、手足のようにPerlを使いこなすには必須の要素が満載です。

CPANに置かれているモジュールのソースコードを読む

CPAN(Comprehensive Perl Archive Network)には、さまざまなモジュールが収録されていますが、単に利用するだけでなく、ソースコードをどんどん読んでみましょう。

特にPlackと呼ばれるWebアプリケーションのためのライブラリには良いコードがたくさん詰まっているので、良い教科書になるでしょう。

Plack

勉強会へ参加する

2016年現在のPerl界隈も新しい話題はけっこう出尽くした感が有って(Perl5 Advent Calendarもなかなか埋まらない…)、Perlに閉じた新しい話題というのはなかなか無いので、文法を一通り覚えた方への次のステップに丁度良いレベル感のイベントが無いのも事実です。

ただし、まだまだ.pmと名のつくperlのイベントは各地で開催されていますし、YAPC::AsiaがYAPC::Japanとしてリブートしたりと、学びや、perlな人たちとの出会いのチャンスは沢山有ります。

一方で、必ずしもこれらのイベントでは、自分の知りたい知識が必ず得られるものでも有りません。どちらかといえば、知らないことを知るきっかけくらいの位置づけと考えた方が適切でしょう。

とにかくコードを書いてみる

最後は結局コードを書き続けるしかありません。書籍に書かれているテクニックも自分のコードに落として初めて理解できます。

とにかくコードを書きましょう!

吉祥寺.pmと、Perl入学式

ここ2年ほど吉祥寺.pmというPerlのイベントを運営していますが、PerlのイベントということでPerl入学式校長のpapixさんや、サポーターの方々、Perl入学式参加経験者の方々が多数参加していて、非常に縁が深いイベントとなっています。

特にPerl入学式でPerlに触れた成果をLTなどで発表して頂くことも有り、Perl入学式参加の次のステップには丁度良いのではないかと思います(自画自賛)。

更にKichijojipm-miniと題して、少人数でソースコードを読んだり、Perlのお悩み相談会、読書会などもやっていて、一人ではなかなか進まない事もみんなでやれば進むきっかけになれば、という趣旨のイベントもやっています。

もし、こんな事を教えて欲しい、一緒に学びたい、というネタがあれば、どしどしtwitter@kichijojipmまでメンションしてください。イベントを企画します!

興味がある方は、イベントページに登録しておくと、イベント情報が通知されます。

吉祥寺.pm

おわりに

明日のPerl入学式Advent Calendar 2016 23日目は、ytnobodyさんの「perlで作ろう替え歌エンジン」です。