Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
Help us understand the problem. What is going on with this article?

Powershellで湯婆婆を世界中から即時召喚できるようにした

あらすじ

湯婆婆シリーズが流行っているらしいです。
Javaで湯婆婆を実装してみる」が元ネタです。
Powershellのものが無いようですね。便乗してみましょう。

だれにでもインストールできる湯婆婆です。

※この記事を参考にすると、あなたの編み出した呪文を世界中に広めることが出来るかもしれません。
湯婆婆とは千と千尋の神隠しに登場する魔女です。

湯婆婆の使い方

湯婆婆のインストール

Powershell上に下記1行をコピペして実行します。
これであなたのコンソールにも湯婆婆がやってきます。
楽しみですね!!

pwsh
Install-Module -Name psyubaba

インストールしようとすると、以下のように聞かれます。

pwsh
Untrusted repository
You are installing the modules from an untrusted repository. If you trust this repository, change its
InstallationPolicy value by running the Set-PSRepository cmdlet. Are you sure you want to install the modules from
'PSGallery'?
[Y] Yes  [A] Yes to All  [N] No  [L] No to All  [S] Suspend  [?] Help (default is "N"):
  • 「湯婆婆なんて恐ろしくて信頼できない」という慎重な人は、「L」を入力して終了してください。
  • 「どんな奴なのか湯婆婆を試してやろうじゃないか!」という度胸のある人は「A」を入力してください。
  • 「気になるけど湯婆婆はキープで!」という優柔不断なあなたは、「S」を入力してください。

※あなたのPCがインターネットに接続してないと窮屈すぎて湯婆婆が入ってくれません。
PSGalleryMicrosoftが運営するサイトですが、
湯婆婆が起こす問題に関してMicrosoftが責任を取ることは出来かねると思われます。
湯婆婆の取り扱いには充分ご注意ください。

湯婆婆の起動

インストールしたら、この呪文で湯婆婆を起動します。

pwsh
Start-Yubaba

古い湯婆婆をインストール

0.0.1の部分は好きな湯婆婆のバージョンを指定してください。

pwsh
Install-Module -Name psyubaba -RequiredVersion 0.0.1

湯婆婆の更新

もし、古い湯婆婆をインストールした後に、
最新の湯婆婆を使いたくなったら、この呪文を唱えてください。

pwsh
Install-Module -Name psyubaba -Force

古い湯婆婆は消滅し、最新の湯婆婆が手に入ります。

湯婆婆の排除

もし、湯婆婆が必要なくなったら、
この呪文を唱えてください。

pwsh
Uninstall-Module -Name psyubaba

湯婆婆の中身

psm1ファイルが湯婆婆の本体です。
ここに湯婆婆の脳内構造が記録されています。

psyubaba.psm1
function Start-Yubaba {

    Write-Host("契約書だよ。そこに名前を書きな。")

    $keiyakusho=Read-Host
    $name=$keiyakusho

    Write-Host("フン。"+$name +"というのかい。贅沢な名だねぇ。")

    $newNameIndex = Get-Random(($name).Length)
    $newName = $name.Substring($newNameIndex, 1)

    Write-Host("今からお前の名前は"+$newName+"だ。いいかい、"+$newName+"だよ。分かったら返事をするんだ、"+$newName+"!!")
}

psd1ファイルには湯婆婆のメタ情報が記録されています。
湯婆婆のステータスとでも言うべきでしょうか。

psyubaba.psd1
#
# Module manifest for module 'psyubaba'
#
# Generated by: shortarrow
#
# Generated on: 2020/11/10
#

@{
ModuleVersion = '0.0.2'
GUID = '5e3c7502-ecaa-4fcd-b8b4-7962d81821ba'
Author = 'shortarrow'
CompanyName = 'shortarrow'
Copyright = '(c) shortarrow. All rights reserved.'
Description = 'yubaba'
NestedModules = @('psyubaba.psm1')
FunctionsToExport = @('Start-Yubaba')
VariablesToExport = '*'
PrivateData = @{
    PSData = @{
        Tags = @('yubaba','湯婆婆','🍄','ghibli')
        LicenseUri = 'https://github.com/ShortArrow/PSYubaba'
        ProjectUri = 'https://github.com/ShortArrow/PSYubaba'
    } # End of PSData hashtable
} # End of PrivateData hashtable
}

※湯婆婆の中身をまじまじと眺めたい人は、下記の呪文をPowershell上で唱えてください。

pwsh
$env:PSModulePath

これで、最初に出てくる場所に湯婆婆が格納されています。

吉田さん問題

湯婆婆は、田さんに対しては強いですが、

output
契約書だよ。そこに名前を書きな。
吉田
フン。吉田というのかい。贅沢な名だねぇ。
今からお前の名前は吉だ。いいかい、吉だよ。分かったら返事をするんだ、吉!!

𠮷田さんに弱いらしいです。
もうタジタジ・・・。

output
契約書だよ。そこに名前を書きな。
��田
フン。��というのかい。贅沢な名だねぇ。
今からお前の名前は��。いいかい、��よ。分かったら返事をするんだ、、�!�!!

湯婆婆がクラッシュする

契約書にサインしないと湯婆婆は激オコです。

output
契約書だよ。そこに名前を書きな。

フン。というのかい。贅沢な名だねぇ。
Get-Random: C:\Users\take\Documents\PowerShell\Modules\psyubaba\0.0.2\psyubaba.psm1:10
Line |
  10 |      $newNameIndex = Get-Random(($name).Length)
     |                      ~~~~~~~~~~~~~~~~~~~~~~~~~~
     | The Minimum value (0) cannot be greater than or equal to the Maximum value (0).

MethodInvocationException: C:\Users\take\Documents\PowerShell\Modules\psyubaba\0.0.2\psyubaba.psm1:11
Line |
  11 |      $newName = $name.Substring($newNameIndex, 1)
     |      ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
     | Exception calling "Substring" with "2" argument(s): "Index and length must refer to a location within
     | the string. (Parameter 'length')"

今からお前の名前はだ。いいかい、だよ。分かったら返事をするんだ、!!

※おそらく「おばあちゃんダメここにはお父さんもお母さんもいないもん。」と言うと許してくれます。

湯婆婆の開発にあたり参考にした情報

アップロードするために必要だった設定

.Net Core SDK

「.Net Core SDK」をインストールしていないと、以下のようなエラーメッセージが出ました。

 Failed to generate the compressed file for module '/usr/local/bin/dotnet failed to pack: error

Dotnet failed to pack' error when trying to publish a powershell module to local repository」によれば、dotnet sdk が必要とのこと。

開発環境のWindows表示言語

Windows OS のユーザーインターフェースの設定が日本語表示になっていると

@PublishPSArtifactUtility_Param Failed to generate the compressed file for module 'Cannot index into a null array.'.

みたいなエラーメッセージが出てアップロードできませんでした。

Failed to generate the compressed file for module 'Cannot index into a null array'.によれば、WindowsのUIの表示言語を変更すればよいとのことでした。

実際にやってみたのが下記画像です。この直後にPCを再起動したらアップロードできました。
image.png

湯婆婆スマッシュ?

現在、PSGalleryの上部には下記のような表示があります。

We are working on fixing the broken package statistics page

日本語訳:壊れたパッケージの統計ページの修正に取り組んでいます。

もしかすると、私が湯婆婆を召喚する呪文をアップロードしてしまったからでしょうか?
PSGallery内で湯婆婆スマッシュが炸裂したのかもしれませんね。

※ちなみに類義語としてラルフスマッシュやハルクスマッシュがあるらしいです。
ぜひ参考にしてみてください。

やって良かったこと

  • 湯婆婆のありがたみを知ることが出来た
  • モジュールを公開する手順を理解できた

モジュール公開を試すモチベーションが無かったのですが、
湯婆婆のおかげで重い腰を上げることが出来ました。
今後はもっと便利なモジュールを公開してOSS貢献しようと思います。

難しい単語を使うと、
ゲーミフィケーションした」というらしいです。
@Nemesis さんに感謝です。

開発環境

  • Windows 10
  • Powershell 7

Excelsior!

ShortArrow
さぼりたい系サボリーマン。「サボりは正義、単純作業は毒」がモットー。さぼるための自己投資は欠かさない。サボロー君とは大親友。工校生時代は優等生として競技ロボット→VBAを知りExcelをサボり始める→PwshでOS設定をサボる→PyAutoGUIでマウス操作をサボっている→Flutterで開発をサボりたい。IaCが大好物。サボリー菌に汚染された投稿をこの世に拡散していく。
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away