タグ

ブックマーク / papix.hatenablog.com (8)

  • Class::Accessor::Typedで独自の型を使う - Masteries

    Class::Accessor::LiteやClass::Accessor::Lite::Lazyのように使えて, 型の恩恵を受けられる, Class::Accessor::Typedというモジュールを昔書きました. metacpan.org 詳しくは, 昔Kichijoji.pmで紹介した時に使った資料をまとめたものがあるので, こちらをご覧頂ければと思います. papix.hatenablog.com このモジュールは大変便利なんですが, 1つ課題がありました. それは独自の型をうまくいい感じに使う方法が当時の自分には思い浮かばなかった... ということです. 例えば, 次のような Types.pm があり, ここで「正の整数」であるPositiveIntという型を定義していたとします. package Types; use strict; use warnings; use Mous

    Class::Accessor::Typedで独自の型を使う - Masteries
    mizdra
    mizdra 2022/06/08
  • 小ネタ: Perlのメソッド呼び出しをModule::Spy風にモックする - Masteries

    Perlでテストを書いているとき, 例えば外部のAPIを叩くメソッドをモックしたい, という気持ちになることがあります. 選択肢としてはTest::Mock::GuardやModule::Spy, 最近ならTest2::Tools::Mockあたりが選択肢になるでしょうか. metacpan.org metacpan.org metacpan.org 「単純にモックしたい」という用途なら, 上記に挙げた3つのモジュール全てがその望みを叶えてくます. ただ, 「モックしたメソッドに渡った引数もチェックしたい」のであれば, Module::Spyが最適でしょう. use DDP; use Module::Spy; my $spy = spy_on('Hogehoge', 'hoge_method')->and_returns(undef); Hogehoge->hoge_method(args

    小ネタ: Perlのメソッド呼び出しをModule::Spy風にモックする - Masteries
    mizdra
    mizdra 2022/06/05
    便利
  • Perlで @EXPORT を @EXPORT_OK に置き換える - Masteries

    この記事は「はてなエンジニア Advent Calendar 2021」の12日目の記事です. qiita.com 昨日は id:cohalz の「distrolessのnonrootイメージを使おう」でした. cohalz.co 関数のエクスポート Perlのパッケージには, "エクスポート"という概念があります. 例えば, 次のようなモジュールがあったとしましょう: package MyPkg; sub f1 { ... } sub f2 { ... } sub f3 { ... } パッケージMyPkgに定義されたf1, f2, f3の関数をパッケージの外から呼び出すには, 通常次のように呼び出す必要があります: use MyPkg; MyPkg::f1(); MyPkg::f2(); MyPkg::f3(); いちいち MyPkg を書くのは面倒, ということで用意されたのが Ex

    Perlで @EXPORT を @EXPORT_OK に置き換える - Masteries
    mizdra
    mizdra 2021/12/14
    便利! export/import が明示的になれば静的解析してエディタの補完にも役立てられるはずなので、いかにも良さそう。
  • CPANモジュールのディレクトリ構成について - Masteries

    ほぼ1年ぶりの開催になってしまった五反田Perlで, CPANモジュールのディレクトリ構成についての話題が出たので, 自分の理解をアウトプットしておこうと思います. lib / t もはや説明不要ですが, libディレクトリにはモジュール体, tにはそのモジュールのテストを配置します. Minillaなどを使ってモジュールの雛形を作った場合, 最初から作られていますので, 見たことのある方は多いのではないでしょうか(?). xt いわゆる「Authorテスト」を設置するディレクトリです. 例えばPOD(モジュールのドキュメント)関連のテストやPerl::Critic/Perl::Lintによる静的解的テストなどを設置することが多いです. share Webアプリケーションなどをモジュールとして配布する際, CSSJavaScriptなどを同梱したい場合にはこのディレクトリに設置します.

    CPANモジュールのディレクトリ構成について - Masteries
    mizdra
    mizdra 2021/10/03
  • PerlでスナップショットテストをするTest::Snapshotのご紹介 - Masteries

    このエントリは, 「Perl Advent Calendar 2020」の9日目の記事です. qiita.com 昨日のエントリは, id:xtetsuji さんの「xargs や find と合わせて使う・代わりに使う Perl」でした. qiita.com 実は最近異動をしていた id:papix です. 異動後もPerlをモリモリ書いている日々ですが, 移動先のチームのプロダクトで同僚の id:mizdra が導入していた Test::Snapshot が便利だったので紹介します. metacpan.org Test::Snapshot Test::Snapshotは, その名の通り「スナップショットテスト」を提供するモジュールです. スナップショットテストとは, 予め「スナップショット」と呼ばれる期待値を生成しておき, テストを実行する際には実行結果とスナップショットを比較してテス

    PerlでスナップショットテストをするTest::Snapshotのご紹介 - Masteries
    mizdra
    mizdra 2020/12/09
    Test::Snapshot使ってます。いくつかイマイチな点ありますが、良い感じにPerlでスナップショットテストできて助かってます。
  • 「手順書」のススメ - Masteries

    こんにちは, id:papix です. この記事は, 「はてなエンジニア Advent Calendar 2018」の9日目の記事です. qiita.com 昨日は id:wtatsuru さんによる, 「基盤開発観点からみたはてなAWS活用のこれまでとこれから」でした. wtatsuru.hatenadiary.com 「手順書」のススメ さて, 早速題に入っていきましょう. 皆さんは「手順書」を書いていますか? 自分はと言うと, 最近そこそこの規模のオペレーションが必要なタスクを担当する機会が多く, その度に手順書を書いて, レビューしてもらってからオペレーションをするようにしています. 例えば, 今年実施した「はてなが提供するドメインを利用したブログのHTTPS化対応」のリリースの時は, このような手順書を書いていました: この時は, GitHubのIssueに手順書を用意してい

    「手順書」のススメ - Masteries
  • plenvを使ったPerl環境構築 〜2018年度版〜 - Masteries

    2013年頃に登場した plenvですが, 2018年となった今でもPerlの環境構築におけるデファクトスタンダードの立ち位置を維持しています. github.com この記事では, plenvを使ったモダンなPerlの環境構築の手法について紹介します. またplenvのような形で, 様々な言語のために開発された**envを束ねて管理できるanyenvを利用して, plenvを導入する方法についても紹介します. plenvのインストール Git $ git clone git://github.com/tokuhirom/plenv.git ~/.plenv $ git clone git://github.com/tokuhirom/Perl-Build.git ~/.plenv/plugins/perl-build/ $ echo 'export PATH="$HOME/.plenv/

    plenvを使ったPerl環境構築 〜2018年度版〜 - Masteries
    mizdra
    mizdra 2018/12/27
  • Replyでお手軽にPerlのコードを動かす話 - Masteries

    Perl入学式 Advent Calendarの15日目の記事となります. 今日は「ちょっとくらいテックな話書きたい」ということで, Data::Printerの話をしよう... と思っていたのですが, 先日Perl Advent Calendarの枠が空いていた枠を埋める時にネタとして既に使ってしまっているので, その変わりにReplyの話をしたいと思います. Replyは, Perl向けのREPL環境です. REPLというのはRead-eval-print loopの略で, コードを入力して(読んで), 実行して, 結果を表示する... というのを繰り返す(ループする)ツールです. 「対話型評価環境」とも言ったりします. 普通, Perlのスクリプトを動かしたい! という時は, Vimなどのエディタでコードを書いて, 名前を付けて保存して, それを実行していくと思いますが, Reply

    Replyでお手軽にPerlのコードを動かす話 - Masteries
  • 1