2019年6月9日 歌評

無限大∞ソリューション

  • アーティスト: 真田アサミ/沢城みゆき/氷上恭子
  • リリース日: 2002年9月20日
  • 作詞: 森ユキ
  • 作曲: 坂本裕介
  • 編曲: 坂本裕介
  • BPM: 156
  • HSL Title ID: a9cec900-7540-4eb0-8767-3105a1475f07 (43)
  • ISWC: T-909.683.420-7

デ・ジ・キャラットのでじこ(デ・ジ・キャラット)、ぷちこ(プチ・キャラット)、うさだ(ラビアン・ローズ)の三人が歌う歌。明るいアップテンポの応援歌。この歌に限らず、デ・ジ・キャラット、特にこの三人が歌っている歌は多様性を認め、元気づけるような歌が多く、現在においても響く歌である。

あまりトリッキーな部分はない歌なので、リズムに乗って楽しく歌える歌。

Drifting Soul

  • アーティスト: Jen Bird
  • リリース日: 2018年5月22日
  • 作詞: 高橋哲哉、LYSSA、カストロさとし
  • 作曲: 工藤ともり、ChiCO
  • 編曲: 工藤ともり、ChiCO
  • BPM: 74
  • HSL Title ID: 2c3cbebb-fd33-4edd-b323-9733b8296e58 (265)
  • ISWC:

ゼノブレイド2の挿入歌の一つ。全英詩。進行はスローではあるものの、それなりに音程の差があるのと、前半、後半とその印象が変わるので、表現力を重視して歌うのが良い。

恋のミクル伝説

  • アーティスト: 朝比奈みくる(後藤邑子)
  • リリース日: 2006年6月21日
  • 作詞: 山本寛
  • 作曲: 神前暁
  • 編曲: 神前暁
  • BPM: 172
  • HSL Title ID: b09a7e73-27da-4b4a-9af3-902426728296 (170)
  • ISWC: T-909.814.823-3

涼宮ハルヒの憂鬱での劇中歌。劇中で作成された歌という設定であるため、わざと素人が作ったようなオーケストレーションに味付けされた歌。比較的フラットな構成なので、歌いにくい歌でもなく、また歌詞も唐突で歌っていて面白い歌。出だしの「くじき」は再現するのは難しい。

コネクト -TV MIX-

  • アーティスト: コネクト -TV MIX-
  • リリース日: 2011年2月2日
  • 作詞: 渡辺翔
  • 作曲: 渡辺翔
  • 編曲: 湯浅篤
  • BPM: 174
  • HSL Title ID: 5415f7d0-a89b-4e38-9be6-86df889f21f9 (259)
  • ISWC: T-909.814.823-3

魔法少女まどか☆マギカのオープニングテーマ曲のTV MIX。Bメロからサビにかかる部分でリズムが変わるので、この部分を丁寧に歌うのが重要。

PowerShell CoreからAnacondaを使用できるようにする方法

Anacondaを設定して、conda initとすると一通り、PowerShell Coreを含めたPowerShell用の設定もしてくれるのだが、この方法はPowerShellを立ち上げると毎回Anacondaが初期化されてしまう欠点がある。PowerShellで毎回Pythonを使うのであれば問題ないのだが、個人的な使用ケースとしてはPowerShellスクリプトのみで完結することも多く、これは非効率的になってしまう。

そのため、Initialize-CondaというCmdletを作成することにした。内容的な以下のような感じ。C:/Path/to/CondaをAnacondaの場所に変える。(GistでWindows版Linux版を取得可能。)

function Initialize-Conda
{
	$CONDA_ROOT_DIR = "C:/Path/to/Conda" # Change this
        [System.Environment]::SetEnvironmentVariable("CONDA_EXE", "$CONDA_ROOT_DIR/Scripts/conda.exe", [System.EnvironmentVariableTarget]::Process)
	[System.Environment]::SetEnvironmentVariable("_CE_M", "", [System.EnvironmentVariableTarget]::Process)
	[System.Environment]::SetEnvironmentVariable("_CE_CONDA", "", [System.EnvironmentVariableTarget]::Process)
    [System.Environment]::SetEnvironmentVariable("_CONDA_ROOT", "$CONDA_ROOT_DIR", [System.EnvironmentVariableTarget]::Process)
        [System.Environment]::SetEnvironmentVariable("_CONDA_EXE", "$CONDA_ROOT_DIR/Scripts/conda.exe", [System.EnvironmentVariableTarget]::Process)

        Import-Module -Scope Global "$Env:_CONDA_ROOT/shell/condabin/Conda.psm1"
        conda activate base
}

環境変数の設定が冗長になっているのは、通常の変数はスクリプト外にスコープを持たないため。.NETのSetEnvironmentVariableprocessのスコープで初期化することにより対応している。(LinuxではCONDA_EXE_CONDA_EXE$CONDA_ROOT_DIR/bin/condaとすること。)

尚、Add-CondaEnvironmentToPromptを使うとプレフィックスとしてConda環境をプロンプトに追加することができるが、挙動が曖昧だったので、今回は割愛している。

これに対応するPSD1は以下の通り。(Gistでも公開。)

@{
    RootModule = 'Conda.psm1'
    ModuleVersion = '1.0.0.0'
    FunctionsToExport = @(
            'Initialize-Conda'
        )
    CmdletsToExport   = '*'
    VariablesToExport = '*'
    AliasesToExport   = '*'
    GUID = '23421dee-ca6f-4847-9c93-1268c629964a'
    Author = 'Hideki Saito'
    Description = 'Anaconda Initializer'
    PowerShellVersion = '6.0'
    CompatiblePSEditions = 'Core'
    Copyright = '(c) 2019 Hideki Saito. All rights reserved.'
    PrivateData = @{
        PSData = @{
            ProjectUri = ''
            ReleaseNotes = ''
        }
    }
}

このファイルをそれぞれConda.psm1Conda.psd1として、Documents\PowerShell\Modules\Conda以下(Linuxでは~/.local/share/powershell/Modules/Conda)に配置すると、Initialize-Condaを読み出せるようになる。

2019年6月8日 歌評

far on the water

  • アーティスト: Kalafina
  • リリース日: 2015年9月16日
  • 作詞: 梶浦由記
  • 作曲: 梶浦由記
  • 編曲: 梶浦由記
  • BPM: 123
  • HSL Title ID: 6ee66228-4da0-46d5-a359-dda87c51f22f (257)
  • ISWC: T-917.379.207-9

歴史秘話ヒストリアのエンディングテーマ曲。他の梶浦由記作曲曲と同様に、流れるようなロングの旋律が多く、息継ぎのタイミングが重要。独唱の場合はあまり息を付く暇もない。

シルシ

  • アーティスト: LiSA
  • リリース日: 2014年12月10日
  • 作詞: LiSA
  • 作曲: カヨコ
  • 編曲: 堀江晶太、岡村美央
  • BPM: 73
  • HSL Title ID: abd5107c-43b2-41fa-9ebc-80393cb0ddb0 (100)
  • ISWC: T-916.196.468-7

ソードアート・オンラインII、マザーズ・ロザリオ編のエンディングテーマ曲。74BPMとスローテンポで、LiSAの歌う歌にしては珍しいタイプの歌であるが、音程の浮き沈みの幅が結構大きい。(特にサビの高音部分。)

D・U・P!

  • アーティスト: 真田アサミ/沢城みゆき/氷上恭子
  • リリース日: 2003年4月23日
  • 作詞: 森ユキ
  • 作曲: 坂本裕介
  • 編曲: 坂本裕介
  • BPM: 163
  • HSL Title ID: ff4c7488-4cba-4725-bbca-7f92571c69fb (88)
  • ISWC: T-910.730.345-7

デ・ジ・キャラットのでじこ(デ・ジ・キャラット)、ぷちこ(プチ・キャラット)、うさだ(ラビアン・ローズ)の三人が歌う歌。三人分のパートがあるが、比較的歌いやすい構成。

Our Eternal Land

  • アーティスト: ANUNA
  • リリース日: 2018年5月22日
  • 作詞: 光田康典、高橋哲哉、LYSSA、カストロさとし
  • 作曲: 光田康典
  • 編曲: 光田康典
  • BPM: 40
  • HSL Title ID: 4de13eb0-3e37-47f9-a943-08fe11b3f041 (264)
  • ISWC:

ゼノブレイド2のフィールド曲の一つ。聖歌調の構成で、コンテンポラリーな歌を歌うのとは全く違った歌唱アプローチが必要になる。この歌の場合は、実際は男女二構成なので、独唱をする場合は声の音域をパートごとに切り替える必要が出てくるのでその場合の安定をキープするのが重要。

ひだまりランナー

  • アーティスト: ゆの(阿澄佳奈)
  • リリース日: 2008年6月4日
  • 作詞: 畑亜貴
  • 作曲: 俊龍
  • 編曲: 虹音
  • BPM: 157
  • HSL Title ID: 52592787-f9a0-4cc3-a369-c1afc13ed01d (13)
  • ISWC: T-909.752.369-8

ひだまりスケッチのキャラクターソング。ひだまりラジオのエンディングテーマ曲として使われたらしい。歌いやすいように聞こえて実際に歌ってみると音程の幅も大きめで、結構コツがいる。

PARTY NIGHT -HYPER PARAPARA VERSION-

  • アーティスト: 真田アサミ/沢城みゆき/氷上恭子
  • リリース日: 1999年12月23日
  • 作詞: 森ユキ
  • 作曲: 坂本裕介
  • 編曲: 坂本裕介
  • BPM: 115→150
  • HSL Title ID: 349d160b-8a37-407d-932b-befacdf71142 (276)
  • ISWC: T-101.644.374-4

デ・ジ・キャラットのでじこ(デ・ジ・キャラット)、ぷちこ(プチ・キャラット)、うさだ(ラビアン・ローズ)の三人が歌う歌で、その代表曲であるParty Nightをパラパラ風にしたもの。前奏はスローに始まり、一気に150BPMまで上がる。3パートの歌だが、重なりはほとんどないので、独唱可能。

全天候型いらっしゃいませ

  • アーティスト: ココア(佐倉綾音)・チノ(水瀬いのり)
  • リリース日: 2014年6月20日
  • 作詞: 畑亜貴
  • 作曲: やしきん
  • 編曲: やしきん
  • BPM: 143
  • HSL Title ID: 5024df94-a2a1-4b23-8f45-b3154fcd61a7 (315)
  • ISWC: T-915.238.052-4

ご注文はうさぎですか?のキャラクターソング。全体的にはあまり複雑な進行はない曲であるが、Bメロはココアとチノの掛け合いのような構成になっているので声を安定させながらパートを切り替える必要がある。

Honey

  • アーティスト: chihiro
  • リリース日: 1999年5月21日
  • 作詞: chihiro
  • 作曲: chihiro
  • 編曲: chihiro
  • BPM: 120
  • HSL Title ID: d10dc855-8f5a-4985-9960-3a454b984872 (68)
  • ISWC: T-101.489.438-1

カードキャプターさくらの第二期エンディングテーマ曲。ふわりとした曲調でゆったりと歌うのがコツ。後半のサビでオーバーダブ部分があるが、独唱の場合はトーンの伸ばしつつ、第二小節からピックアップする形が一番自然に歌える。

2019年6月7日 歌評

ちゃんと夢を見ましょ!

  • アーティスト: 横山智佐
  • リリース日: 1995年6月28日
  • 作詞: 枯堂夏子
  • 作曲: 松宮恭子
  • 編曲: 藤原いくろう
  • BPM: 140
  • HSL Title ID: 8e498074-4dcc-4a2d-9b91-1bee6c6aadc0 (194)
  • ISWC: T-101.246.888-9

魔法少女プリティサミーOVAのオープニングテーマ曲。サビ部分はオーバーダブされているため、単独歌唱は慌ただしく、少し違和感があるもののそれなりに余裕はあるため、難易度は高くない。

魔法の扉

  • アーティスト: 横山智佐
  • リリース日: 1997年5月28日
  • 作詞: 岩里祐穂
  • 作曲: 前田克樹
  • 編曲: 工藤隆
  • BPM: 120
  • HSL Title ID: 9a7d2dc0-0d78-41b3-8d5c-f232e85a215c (293)
  • ISWC: T-101.369.128-4

魔法少女プリティサミーOVA3のエンディングテーマ曲。リズミカルな曲ではあるが、テンポが120とそんなに速くなく、トリッキーな部分も少ない歌であるため、歌うのは容易。

侵略ノススメ☆

  • アーティスト: ULTRA-PRISM with イカ娘(CV.金元寿子)
  • リリース日: 2010年10月27日
  • 作詞: 月宮うさぎ
  • 作曲: 小池雅也
  • 編曲: 小池雅也
  • BPM: 185
  • HSL Title ID: 92ced388-22c9-4fbb-9dc1-c3ffcaad0305 (117)
  • ISWC: T-102.012.247-6

侵略!イカ娘のオープニングテーマ曲。「サビの歌詞には、「イ・カ・ム・ス・メ」の5文字」というのは最近知った。テンポが速く、シャウトも多い歌であるため、なかなかうまく歌うのが大変だったりする。

何でも言うことを聞いてくれるフェネック

  • アーティスト: アライグマとフェネック
  • リリース日: 2018年10月4日
  • 作詞: GYARI (ココアシガレットP)
  • 作曲: GYARI (ココアシガレットP)
  • 編曲: GYARI (ココアシガレットP)
  • BPM: 145
  • HSL Title ID: 7b331a60-f845-4181-a2db-1ff9da3c4f37 (312)
  • ISWC: T-924.383.229-3

何でも言うことを聞いてくれるアカネチャンの特別バージョン。公式がフルコーラスの映像付きを公開している。尚、権利的には上記のアカネチャンバージョンの派生版ということで登録されている。正題は「SEYANA.」

全編はほとんどフェネック、アライグマ、サーバルの掛け合いであるため、ほとんど歌うというよりは喋る感じ。でも、重なりがあるため、単独を完璧にするのは無理。歌う場合はちゃんとFriends Chorus Timeの部分も歌うのが重要。

ミライファンファーレ

  • アーティスト: 流川ガールズ【宇佐美奈々子(CV伊藤美来)&小日向縁(CV三澤紗千香)】
  • リリース日: 2016年7月13日
  • 作詞: 辻純更
  • 作曲: 三浦誠司
  • 編曲: 三浦誠司
  • BPM: 180
  • HSL Title ID: 3eae3e7a-3978-4b62-a92c-9eace63847b0 (139)
  • ISWC: T-915.760.001-6

普通の女子校生が【ろこどる】やってみた。のオープニングテーマ曲。デュエット曲ではあるが、単独歌唱でも主旋律を追いかけるのはそんなに困難ではないがBメロに重なりがあるため、切り替えは多少慌ただしい。息継ぎのタイミングに注意。

きみは帰る場所

  • アーティスト: Gothic×Luck
  • リリース日: 2019年3月13日
  • 作詞: 林英樹
  • 作曲: 佐藤純一
  • 編曲: 佐藤純一
  • BPM: 127
  • HSL Title ID: 51f787b4-4921-47a0-a83c-25d7415f8322 (319)
  • ISWC: T-928.458.305-7

けものフレンズ2のエンディングテーマ曲。個人的にはかなり好きな曲。特にBメロからサビにかかる広がりのあるインストトラックによるオーケストレーションが素晴らしい。サビの部分の歌詞の詰め込みが強いので、丁寧に歌わないと乱れるので注意が必要。また、サビの旋律の変形幅が大きいのも注意。

歌の最後はA#からC#に引っ張られそうになるが、Gに落として落としているのも慣れないうちは注意が必要かも。

夢見たい★ANGEL隊

  • アーティスト: エンジェル隊(新谷良子/田村ゆかり/沢城みゆき/かないみか/山口眞弓)
  • リリース日: 2002年2月28日
  • 作詞: 田辺智沙
  • 作曲: 平間あきひこ
  • 編曲: 南良樹
  • BPM: 150
  • HSL Title ID: c1a4d19b-df81-45ed-8197-fba0a6009225 (290)
  • ISWC: T-101.703.188-6

ギャラクシーエンジェルの第二期のオープニングテーマ曲。エンジェル隊5人の歌ではあるが、ほとんどパート分けはないので、ソロ曲として歌唱可能。強いて言うなら合いの手部分が歌えないぐらい。

夢ぐも

  • アーティスト: marble
  • リリース日: 2012年11月7日
  • 作詞: micco
  • 作曲: 菊池達也
  • 編曲: 菊池達也
  • BPM: 175
  • HSL Title ID: b2b46637-b37b-4b6c-bca3-5dbdaca1004c (247)
  • ISWC: T-909.818.623-3

ひだまりスケッチ×ハニカムのエンディングテーマ曲。Aメロ、Bメロに比べるとサビのリズムが結構変わる。Aメロ、Bメロは安定性重視でいいものの、サビ部分はテンポが速い上にリズムよくさばいていく必要があるため、結構集中力がいる歌。

2019年6月6日 歌評

INDETERMINATE UNIVERSE

  • アーティスト: ゆうゆ feat.ケムリクサ
  • リリース日: 2019年3月20日
  • 作詞: ゆうゆ
  • 作曲: ゆうゆ
  • 編曲: ゆうゆ
  • BPM: 140
  • HSL Title ID: 95884272-c8a2-4aa1-8ba0-1a34e4856c2e (328)
  • ISWC: T-928.141.761-6

今回初歌唱。ケムリクサのエンディングテーマ曲。140とテンポは中程度ながら、歌詞の詰め込みもゆるく、歌いやすい曲。音程もあまり山がないので、安定して発声できる。

侵略ノススメ☆ (Altersquid)

  • アーティスト: イカ娘(金元寿子)
  • リリース日: 2011年12月7日
  • 作詞: 月宮うさぎ
  • 作曲: 小池雅也
  • 編曲: 小池雅也
  • BPM: 188
  • HSL Title ID: e474a502-c1b5-48b8-af2f-5ca5251d4572 (96)
  • ISWC: T-102.012.247-6

侵略!イカ娘のオープニングテーマ曲の別バージョン。全体的には本バージョン、侵略のススメ☆に沿った流れであるものの「ほんとはもっと優しい気持ちを〜」や「今の世の中はちょっとキュウクツな〜」の部分のリズミカルな部分が歌ってて楽しい歌。

東雲研究所の、今日も平和です

  • アーティスト: はかせ(CV:今野宏美)&東雲なの(CV:古谷静佳)&阪本さん(CV:白石稔)
  • リリース日: 2011年6月22日
  • 作詞: 前山田健一
  • 作曲: 前山田健一
  • 編曲: 前山田健一
  • BPM: 150
  • HSL Title ID: 24de68ac-b92b-4722-a731-5e95bc22706f (191)
  • ISWC: T-909.785.708-4

日常のキャラクターソング。ラジオ番組の主題歌らしい。もともと3人のデュエット。歌詞の重複はないので、一人でも歌えるのと、歌詞の詰め込みはないので、息継ぎも余裕。

わぴこ元気予報!

  • アーティスト: 内田順子
  • リリース日: 1991年1月21日
  • 作詞: 岸田るみ子
  • 作曲: 小坂明子
  • 編曲: 三国義貴
  • BPM: 145
  • HSL Title ID: 782f272d-665c-4497-b563-3305df3db449 (297)
  • ISWC: T-101.485.647-2

90年代に放送されていたきんぎょ注意報!のオープニングテーマ曲。キャラクターソングに近いものの、歌っている人は声優のかないみかではなく、内田順子。今だと声優が歌うのだが、当時はこういう構成も多かった。比較的素直なリズムと音程を取っているため、歌唱難易度は低い。

CLEAR

  • アーティスト: 坂本真綾
  • リリース日: 2018年1月31日
  • 作詞: 坂本真綾
  • 作曲: 水野良樹
  • 編曲: 河野伸
  • BPM: 156→164
  • HSL Title ID: f9120abe-14e6-436c-b999-2ec8577a8636 (7)
  • ISWC: T-923.746.914-6

カードキャプターさくら クリアカード編の初期オープニングテーマ曲。尚、作曲はいきものがかり水野良樹。歌唱基準曲であるため、2019年6月6日現在、377回歌唱しているものの、歌唱がなかなか安定しない、鬼門。テンポが早いのと、音程の差も大きいので、歌唱難易度は高い。

あなたの横顔

  • アーティスト: 美崎しのぶ
  • リリース日: 2000年1月28日
  • 作詞: 須谷尚子
  • 作曲: 下川直哉
  • 編曲: 松岡純也
  • BPM: 115
  • HSL Title ID: 4574bd59-cd29-4cc9-a83e-3919a6cd7232 (83)
  • ISWC: T-101.625.927-9

もともとはTo Heartの神岸あかりのキャラクターBGMだったものに歌詞がついたキャラクターソング。ギャルゲーは歌唱可能なメロディーラインをつけてあるものが多いので、この手のコンバージョンがなされることが多い。Aメロ・Bメロに比べるととサビ部分はかなり高いノートをヒットしている。個人的にはついていけているが……。

ふゆびより

  • アーティスト: 佐々木恵梨
  • リリース日: 2018年1月24日
  • 作詞: 佐々木恵梨
  • 作曲: 佐々木恵梨、中村ヒロ
  • 編曲: 佐々木恵梨、中村ヒロ
  • BPM: 110
  • HSL Title ID: e06b97de-c2b0-4b6c-9566-7079aba28306 (160)
  • ISWC: T-923.746.008-1

ゆるキャン△のエンディングテーマ。もう一つの歌唱基準曲であるため、こちらに関しても2019年6月6日現在、334回歌唱している。CLEARと違い、こちらはかなり安定して歌えている。この歌を歌っている佐々木恵梨の歌唱スタイルは伸びがあるため、ロングトーンが多い歌であるが、ビブラートをなるべく効かせないことを注意しゆったりと、歌うのが良い。

PowerShell Core + イベント管理

これまで2002年より、Sakura-Conのゲストリレーションでスタッフをするにあたり、数々の技術を使用し、イベント計画などを立ててきました。過去には、Org-modeや小型のPythonスクリプトなどを使用してきましたが、今年は、PowerShell Coreを使用し、システムを構築しました。これまでに、PowerShellを使用して、多岐にわたるシステムを構築し、例えばカラオケ歌唱データの集計などがその一例で、他の領域での使用も検討していました。

目的

今回の目的としては、中核的なソリューションとして次を検討しました。

  • イベントスケジュールデータの集計と、可用性を高めたデータの作成。
  • カレンダーデータなどへの他の有用なデータ形式への変換の提供。

PowerShell Coreを選択した理由は以下のような理由からです。

  • LinuxとWindowsを使用している関係上、複数のプラットフォームで動作できる環境が重要でした。Androidで動けばなおプラスですが、この点に関してはUserLAndなどの環境を使用することで可能でした。(尚、Androidで使用する場合は、このようなキーボードの使用がおすすめです。
  • オフラインで使用可能なこと。イベント会場などではインターネット接続が劣悪になることがあり、インターネット接続なしでも使用できることが重要でした。

構成と内容

最初に作成したモジュールはスケジュールシステムより、データを取得するためのシステムでした。スケジュールシステムは、データを取得するためのAPIを持っておらず、この部分に関してはSeleniumを使用し、データを抽出しました。

Seleniumを使用したデータの抽出(守秘事項のため、使用しているソリューション名に関しては伏せてあります。)

Seleniumを使用してデータを取得するのには800件のエントリーで約30秒を要します。(実際に使用するデータはその8分の1程度。)SeleniumモジュールにおいてはUI上で必要な情報が存在している場所まで移動し、結果をDOMより抽出するようなものです。これはC#でプログラムしました。SeleniumはLinuxとWindowsでドライバが提供されているため、これはクロスプラットフォーム動作が可能です。(こちらは、Androidでは動きませんが、Androidで動作するドライバと対応するブラウザがあれば恐らく可能です。)

このシステムは以下のようなデータ構造を列として出力します。

   TypeName: SakuraCon.Relations.Data.Event
Name        MemberType     Definition
----        ----------     ----------
End Time    AliasProperty  End Time = EndTime
Event Title AliasProperty  Event Title = EventTitle
Start Time  AliasProperty  Start Time = StartTime
Equals      Method         bool Equals(System.Object obj)
GetHashCode Method         int GetHashCode()
GetType     Method         type GetType()
ToString    Method         string ToString()
EndTime     Property       datetime EndTime {get;set;}
EventId     Property       string EventId {get;set;}
EventTitle  Property       string EventTitle {get;set;}
Notes       Property       string Notes {get;set;}
Rating      Property       string Rating {get;set;}
StartTime   Property       datetime StartTime {get;set;}
Type        Property       string Type {get;set;}
Venue       Property       string Venue {get;set;}
Duration    ScriptProperty System.Object Duration {get=($this.EndTime - $this.StartTime);}

これに加え、以下のようなps1xmlを定義しました。

<Types>
    <Type>
        <Name>SakuraCon.Relations.Data.Event</Name>
        <Members>
            <MemberSet>
                <Name>PSStandardMembers</Name>
                <Members>
                    <PropertySet>
                        <Name>DefaultDisplayPropertySet</Name>
                        <ReferencedProperties>
                            <Name>Event Title</Name>
                            <Name>Venue</Name>
                            <Name>Type</Name>
                            <Name>Start Time</Name>
                            <Name>End Time</Name>
                            <Name>Duration</Name>
                            <Name>Notes</Name>
                        </ReferencedProperties>
                    </PropertySet>
                </Members>
            </MemberSet>
            <AliasProperty>
                <Name>Event Title</Name>
                <ReferencedMemberName>EventTitle</ReferencedMemberName>
            </AliasProperty>
            <AliasProperty>
                <Name>Start Time</Name>
                <ReferencedMemberName>StartTime</ReferencedMemberName>
            </AliasProperty>
            <AliasProperty>
                <Name>End Time</Name>
                <ReferencedMemberName>EndTime</ReferencedMemberName>
            </AliasProperty>
            <ScriptProperty>
                <Name>Duration</Name>
                <GetScriptBlock>($this.EndTime - $this.StartTime)</GetScriptBlock>
            </ScriptProperty>
        </Members>
    </Type>
</Types>

実際の運用では、このデータをClixmlとして出力し、後ほど読み込めるようにします。PowerShellではこれを可能にする便利なCmdletが用意されています。

$schedule | Export-Clixml schedule.xml

これを読み込むのも容易です。

$schedule = Import-Clixml schedule.xml

これにより、出力されたXMLは取得したデータのスナップショットになるので、オフラインでのアクセスが可能になります。

このデータをもとに、CSV (スケジュール情報等を集計するのに使用) する他、iCalendarなどのフォーマットを出力し、Google Calendarに入力することが可能になります。

このデータ構造により、Where-Objectを使用することにより、必要な情報を取り出すことができるようになります。例えば、「6C」で行われるイベントを知りたい場合は以下のようになります。

$schedule | ?{ $_.Venue -eq "6C" }

これに加え、以下のようなスクリプトを組み合わせました。

function Get-ScNextEvent {
    param(
        [parameter(Mandatory = $true, ValueFromPipeline = $true)]
        $Schedule,
        [parameter(Mandatory = $false)]
        [uint] $Hour = 1
    )
    $result = $Schedule | Where-Object { ($_.StartTime -ge [DateTime]::Now) -and ($_.EndTime -le [DateTime]::Now.AddHours($Hour))}

    return ($result | Sort-Object StartTime)
}

function Get-ScCurrentEvent {
    param(
        [parameter(Mandatory = $true, ValueFromPipeline = $true)]
        $Schedule
    )
    $result = $Schedule | Where-Object { ($_.StartTime -ge [DateTime]::Now) -and ($_.EndTime -le [DateTime]::Now)}

    return ($result | Sort-Object StartTime)
}

これにより、次のイベントや、現在進行中のイベントに関する情報を検索することができます。

他の分野でのPowerShell Coreの使用

PowerShell Core`はスケジュール管理以外の分野でも使用しました。他の部分で使用したのは定形文書を生成する管理システムです。ほとんどの定型文書はLaTeXソースとして生成されているため、コマンドラインより、パーソナライズされた情報を読み込む形式になっています。PowerShellはCSVをデータ構造に変換する仕組みを持っているため、必要な引数はCSVでまとめました。

Windowsでのコマンドラインの文字列の扱いには難があるため、これをWindowsで実行する場合にはWindows Subsystem for Linux (WSL)を使用する必要がありましたが、PowerShell CoreはLinuxでも動作するため、同じモジュールやスクリプトをそのまま使用することが可能でした。

これにより、20通を30秒程度で生成できます。

まとめ

PowerShell Coreにより、クロスプラットフォームな、一貫した環境をリレーション部内で使用する必要のある一部の情報の処理で使用しました。

今後はこのシステムを拡張し、スケジュールの競合探知、負荷確認や人員管理などにも適用できるようにしていく予定です。

ISRCの自己発行をできるようにしてみた

以前ASCAPに登録しましたが、久しぶりに楽曲を登録しようとしてみると、ISRCなる、前にはなかった項目が。日本語では国際標準レコーディングコードというようです。必須項目ではないので空でもいいのですが、そういえば、Google Play Musicにもそういう項目があったな、と。音楽に埋め込まれて録音を識別するためのコードのようです。前に、ASCAPに楽曲を登録するとISWC(国際標準音楽作品コード)が割り当てられていましたが、こちらは楽曲自体を識別するのに対し、ISRCは録音物を識別するコードということ。つまりリミックスなどは新しいコードになるようです。ISWCはASCAPが代理申請(というか、ASCAPで割り当てて、ISWCの団体に送っているようですが)をしてくれますが、ISRCは自分で入手する必要があるとのこと。

これも登録してみたくなったので調べてみました。この番号自体は、実は配信業者が無料で付与してくれる場合もあるみたいですが、自分の場合は、Google Play Musicしかやってなく、かつ、Googleはこれを付与してくれないので、どうやったらこの番号を入手できるのだろう、と調べてみると、再販業者を通すか、もしくは自分が自己的に割り当てる申請をすることでできるようです。ネットで売っている会社は1コードあたり10セントから2ドル程度と結構開きがあるようです。

自己発行するのにはどのようなプロセスになるか、調べてみました。すると、国によって対応機関があって、そこからレジストラ登録を受けた上で、発行できるようになるようです。ちなみに上記の再販業者も元は特殊なレジストラ登録を受けた上で発行できるようにしているみたいです。(違いは他人が録音権を持つ作品に対してコードを発行できるか、という点のようです。)

この関係をまとめると以下のような感じ。

それで、自己発行するのにはレジストラ割り当てを受ければいいとのことなので、米国はRIAAが窓口のようなので、調べてみました。米国の場合はusisrc.orgで登録ができるということです。登録プロセスを進めていくと、ISRCを付与したいものに対する権利を保持しているか、一年間に10万件以上の登録をするか、などいろいろと聞かれます。それに答えると、登録料95ドルを求められます。毎年95ドルかかるのか、と思ってよく見ると登録審査料で、それ以外に特にコストはかからないようです。ちょっと高い感じもしますが、一時金ということで割り当ててもらうことにしました。登録を完了すると1営業日後に連絡する、というメッセージが。

土曜日に登録したので、月曜日までかかるようです。

……と月曜日。朝確認すると確認が届いてました。ログインの方法に関しての案内がありました。夜、その方法でログインをしてみると、確かにコードが表示されています。(国コードがQZ、レジストラコードがCFFの割り当てでした。)さて、コードはどこで発行するのかな、と思ってサイトを見回って見てもない、と、ふと見るとコードは各自ガイドラインに基づいて発行して、自分で管理してね、というようなことが書かれています。つまり、勝手に発行して自分で発行済みのものはデータベース化してください、ということのようです。

ISRCのフォーマットは国コード、レジストラコード、年コード(年の下二桁……2100年以降はどうするんだろう)、5桁の数字(つまり、上記の一年間10万件以上登録するか、という設問はこのためのようです)というようになってて、5桁の数字はどんなものでもいいけど、重複だけはしてはいけない、というルールで、順番に連番で振っていくのをすすめる、とのガイドライン表記がありました。

最初に割り当てたのはPeacefulという曲(もうすぐ公開します)で、コードはこの法則に基づいて、QZCFF1800001ということになります。

ということで、運用上はかなり緩い感じがするISRC割り当ての話でした。

ちなみに登録期間は居住地に基づいてそれぞれの機関に申し込む必要があるそうで、日本では日本レコード協会登録業務を行っているようです。ちなみに日本はルールが違っていて、自己発行には年50曲以上の登録が必要な他、毎年10800円から21600円の事務手数料がかかる(その代わり、直接の再販も行っているようです)ようですので、ご興味のある方はサイトを確認してみてください。

PowerShell Core 6.0

PowerShell Core 6.0がリリースされました。ダウンロードはGitHubより各プラットフォーム用に公開されています。尚、インストールは全く別の場所に行われますので、既存のWindows PowerShellを残したまま行えるどころか、ZIPファイルでも提供されていますので、インストーラーを実行する必要でさえありません。)

PowerShell CoreはWindows PowerShellのオープンソース、クロスプラットフォーム版で、今後はWindows PowerShellの開発は5.1を最後のバージョンとし、メンテナンス程度になり、こちらの方に注力していくようです。

Windows PowerShellは.NET Frameworkベースになっていますが、PowerShell Coreは、.NET Core、正確には.NET Standardベースのものになっています。そのため、.NET Standardに準拠したライブラリなどは読み込める場合もありますが、Active Directoryなど、一部の機能は使用できませんので、そういった場合はWindows PowerShellと平行して使用することになるかと思います。

PowerShell Coreの何がいいのか?

特にLinuxやWindowsなど複数のプラットフォームを使用している場合において、同様の使用感、及び、スクリプト構文でCUIを利用することができます。尚、execなどの呼び出しに失敗し、挙動がおかしくなる場合があるので、Linux上でpwshに対してchshを行うのはおすすめできません。(目立ったところではSSHのスクリプト実行に失敗したり、Dropboxがゾンビ状態になったりします。)

.NET CoreのモジュールをCUIより呼び出すことが可能なので、例えば以下の要な構文が使えます。

(New-Guid).ToString().ToUpper()

この構文では、New-GuidはPowerShellのCmdletを使用していますが、これは[Guid]::NewGuid()とすることもでき、同じ形式の出力になります。

[Guid]::NewGuid().GetType() -eq (New-Guid).GetType()
True

実際はCmdletの実体は.NETのライブラリなので、内部的には同じような構造になっています。

Cmdletは例えば以下のような構成になっています。

using System.Management.Automation;

namespace cmdlettest
{
    [Cmdlet(VerbsCommon.Get, "Hello")]    
    public class TestModule : PSCmdlet
    {
        [Parameter(Position = 1)]
        public string Message { get; set; } = string.Empty;

        protected override void EndProcessing()
        {
            var output = "Hello World";
            if (Message != string.Empty)
                output += ", " + Message;
            WriteObject(output);
            base.EndProcessing();
        }
    }
}

これをコンパイルし、モジュールとして読み込むことで、Get-Helloのコマンドが使えるようになり、コマンドラインのパーシングなども自動で制御してくれます。もちろん一度コンパイルすると依存として読み込んでいる他のライブラリにプラットフォームの要件がない限りはPowerShell Coreを使用することのできる全ての環境で使用できます。

PowerShell Coreをダウンロードしたらまず行うべきこと

WindowsPSModulePathの導入

Windowsで使用している場合、以下のコマンドでWindowsPSModulePathを導入しておくと便利かも知れません。Windows PowerShellにより提供される一部のライブラリを使用できるようになります。

Install-Module WindowsPSModulePath -Force

ユーザーレベルで入れたい場合は以下のようにもできます。

Install-Module WindowsPSModulePath -CurrentUser -Force

その後、これは以下のコマンドで有効にできます。

Add-WindowsPSModulePath

尚、スタートアップファイルは$PROFILEですので、こちらに格納することによりPowerShell起動時に自動的に読み込まれます。

ヘルプファイルの更新

PowerShell Coreでは詳細なヘルプ情報を参照することができます。(UNIX系シェルでいうmanページのようなものです。)

これらのドキュメントは更新する必要があります。それを行うにはUpdate-Helpコマンドを使用します。このコマンドはAdministrator権限(Windows)、root権限(Linux等)で行う必要があります。(尚、Update-Helpが失敗する場合-Forceオプションをつけてやるとうまく行くかも知れません。)

どうしても更新が失敗する場合(UI Culture系の例外が発生する場合)それを無視する設定が必要になります。(日本語のヘルプはないので、英語のロケールを優先指定します。)

 -Force -ErrorAction SilentlyContinue -UICulture en-US, ja-JP

更新を行うと、例えばGet-Help Get-Processなどで参照できる他、Get-Process -?で行うこともできます。

最後に

PowerShell Coreがリリースされたことにより、Windows以外のプラットフォームでもPowerShellの利便性が享受できるようになります。スクリプトはプラットフォームを超えて動作する他、.NET Coreを使用して独自のCmdletを記述することができます。

スクリプト開発環境も整備されており、Visual Studio及び、Visual Studio Codeでスクリプトのデバッグができるようになっています。(Cmdletに関しても上記のように実体は.NETライブラリなので、.NET Core開発環境で開発可能。)

これまで特にWindowsとLinux間など共通のシェルスクリプト的な使い方ができなかったので、この点が便利です。(Windows上でUNIX系シェルを使用するにしても、WSLはほとんど別環境ですし、bashやCygwinなどもOSとしての作法が違うため、不便さがありました。)

NuGet経由で拡張が可能など、.NET Coreの機能が利用できるなど、便利な使い方ができそうです。

気になる歌の歌詞「0hzの恋人」

MOSAIC.WAVの歌で結構好きなのが「ギリギリ科学少女ふぉるしぃ」なのだが、それにカップリングされているのがこの「0hzの恋人」

いい歌なのだが、いつもこの歌詞の一節が気になって素直に聴けないのです。

君のリアクションはまだ 0Hz未満?だけど 私の胸のチャンネルは いつもいつも君を見てる

多分、この歌詞はリアクションが全然ない〜、ということが言いたいのだろうけど、ヘルツというのは振動数を示すわけで、つまり、1Hzだと一秒間に一回の振動があることになる。0Hzだと全く振動していないということで、「0Hz」という表現はまだ良いとする。ただいただけないのが「0Hz未満」という表現。

0Hz未満というのはありえない、というのも例えば、0.5Hzであれば、1Hzと比べると1/2Hzということで、1Hz未満という表現が使える。これを当てはめてで0Hzと比べても1/0Hzには0除算になってできないので、0Hz未満という表現はこの世に存在しない。

0より小さいとなると負数になるが、振動に負数は適用されないので意味がない。敢えて適用するとすると位相が反対の振動になるんだろうけど、その場合、今度は小さくなればなるほど大きくなってくるので0Hz未満〜ということを憂いているこの歌詞は成立しなくなる。

「ギリギリ科学少女ふぉるしぃ」が疑似科学をテーマにしているのでこれもそうなんだろう、と解釈すればそれでいいんだろうけど。