しばたテックブログ

気分で書いている技術ブログです。

メリクリ

🎄メリクリ🎄

f:id:stknohg:20161224104222p:plain

なにこれ?

bannerコマンドのPowerShell版を作ってみました。

以前シェル芸人たちの間でbannerコマンドが流行ったことがありまして、
(下記リンク参照)

togetter.com

その際に@mattnさんがgobannerというGo言語のbanner実装を作りました。

github.com

で、その実装方法に感銘を受けて、PowerShell版を作ってみたのがコレになります。
実はモノ自体は結構前に作っていて、公開するタイミングを失ってしばらく寝かせていたのですが、今なら良いかなーと思い公開することにしました。

PSBanner

ソースコードはGitHubに上げています。

github.com

インストールはPowerShell Galleryから可能です。

Install-Module -Name PSBanner -Scope CurrentUser

なお、実装の都合*1、Windowsのみでの動作となります。
動作確認はPowerShell 5.1で行っていますが、おそらくPowerShell 2.0以降であれば動くはずです。

基本的な使い方

Write-Bannerコマンドに好きな文字列を食わせてください。
-FontNameパラメーターで表示フォントを、-FontSizeパラメーターでフォントサイズを指定できます。

使用可能なフォント名はGet-FontFamiliesコマンドで取得可能です。

コード例はGitHubに載せているのでそちらを見ていただければと思います。

実装について

基本方針はgobannerの実装を参考にしています。
内部的に指定されたフォントでBitmapを描画し、不透明なドットを#に置き換えるというものです。

一度見てしまうと単純なやり方に思えますが、最初に見たときは「よくこんなこと思いつくなぁ!」と本当に驚きました。

gobannerに対して、フォントの指定は名称で可能なのと、Screen Widthはコンソールバッファの値を使う様に変えています。
あとPowerShellでは文字列以外のオブジェクトの入力もあるため、その辺に対する処理もちょっと入っています。

補足

本エントリはPowerShell Advent Calendar 2016 21日目の代理投稿になります。

*1:System.Drawing.*なクラスを使っているため、System.Drawing.dllのないPowerShell Coreでは動作させることができません