RubyのOpenSSLライブラリでOpenSSH形式のRSA秘密鍵を扱えるように鍵をパースしてビルドする

どうも、公開鍵暗号方式大好き芸人です。
かれこれ3年くらい前だけど、ssh-keygenが出力する秘密鍵のデフォルト形式が変わってOpenSSLライブラリで読み込めなくなった。
それを解消するべく、秘密鍵をパースしてOpenSSLライブラリで読み込める形でビルドする。

事前知識

まずはおさらいから。
手元のMacに入ってるOpenSSH_8.1p1を前提に。

KeyFormat

ファイル形式。
これらの形式問わず拡張子がどれも.pemだったりするのでなんて呼べば良いのかややこしい。

鍵生成は以下。
-mオプションでファイル形式を指定する。

% ssh-keygen -m {keyformat}

鍵のファイル形式変換は以下。
-mオプションで変換後のファイル形式を指定する。
鍵は上書きされる。

% ssh-keygen -p -m {keyformat} -f private.pem

対応してる形式は以下。

The supported key formats are: ``RFC4716'' (RFC 4716/SSH2 public or private key), ``PKCS8'' (PKCS8 public or private key) or ``PEM'' (PEM public key).

・RFC4716 / SSH2
OpenSSH 7.8以降のデフォルトはこれになった。
これがOpenSSLライブラリでは開けなくて困る。

正式名称なのかはわからないけどOpenSSH形式と言ったらこれ。
ちなみにRFC4716というのは公開鍵ファイル形式の定義なので秘密鍵に対して言うのは違うんじゃないかなと思うけど詳しいことはよく知らない。

見た目。

-----BEGIN OPENSSH PRIVATE KEY-----
〜 Base64文字列(横幅70文字で改行) 〜
-----END OPENSSH PRIVATE KEY-----

RFC 4716 - The Secure Shell (SSH) Public Key File Format

・PEM
OpenSSH 7.8より前のデフォルトはこれだった。
これならOpenSSLライブラリで普通に開ける。

見た目。

-----BEGIN RSA PRIVATE KEY-----
〜 Base64文字列(横幅64文字で改行) 〜
-----END RSA PRIVATE KEY-----

PKCS#8
今回の話題とはあまり関係ないけど一応書くだけ書いておく。

見た目。

-----BEGIN PRIVATE KEY-----
〜 Base64文字列(横幅64文字で改行) 〜
-----END PRIVATE KEY-----
KeyType

暗号方式。
この方式によってssh-keygenではデフォルトの出力ファイル名が、~/.ssh/id_{keytype}になるのでファイル名に関してはKeyFormatの拡張子問題よりもわかりやすい。
ただしKeyTypeを問わずBEGINほげほげの行はどれも同じになるのでわかりづらい。
ssh-keygenだとOpenSSH形式、openssl genpkeyだとPKCS#8形式で出力される。
なのでopenssl asn1parseとかして鍵構造のパースをしないKeyTypeはわからない。(鍵の長さからなんとなく察することも出来なくはないけど特殊な訓練が必要)

対応してる方式は以下。

-t dsa | ecdsa | ed25519 | rsa
Specifies the type of key to create. The possible values are ``dsa'', ``ecdsa'', ``ed25519'', or ``rsa''.

強度は、ed25519 > rsa > ecdsa > dsaだと思う。
デフォルトはrsa
ed25519は現代最強っぽい。
ecdsaとdsaをわざわざ新規に使う人は現代にはいないのではなかろうか。

詳しくはこちら。
SSHの公開鍵暗号には「RSA」「DSA」「ECDSA」「EdDSA」のどれを使えばよいのか? - GIGAZINE

ed25519で出来ることは署名のみで、暗号化が出来ない。
個人的には~/.ssh/id_rsaを暗号化するための鍵として使っているので、それが理由でed25519に移行出来ずにいる。
まぁSSHとかの署名はed25519で暗号化用はRSAと、鍵を使い分ければいいといえばそれだけの話なのだけれども。

やりたいこと

さてここから本題。

Yamlファイルの特定の要素を暗号化する、結構昔に作ったGemの利便性を上げるために。
そもそもこれは何なのかっていうと、 ~/.ssh/id_rsa を鍵として暗号化/復号化を行うライブラリ。
Workspace内で鍵生成するのが面倒だったり、gitignoreに鍵を指定し忘れて誤コミットしてしまったり、そういうのを解消するのに役立つ。

GitHub - yoshida-eth0/ruby-secure_conf

ssh-keygenが生成する秘密鍵のデフォルトKeyFormatがOpenSSH形式に変更されたことによってこのライブラリが使えない状況が起こっていた。
鍵の扱いを楽にするライブラリを使う人なんて、ssh-keygenでわざわざKeyFormatを指定してPEM形式で鍵生成なんてしない訳で。
だからもうこっちでOpenSSH形式の鍵に対応してしまおう、と。

要件としてはこんな。
・OpenSSH形式の秘密鍵を使いたい。
ssh-keygenで変換しちゃうのが楽だとは思うけど、popenしたくない。
・変換するために鍵を不用意にコピーしたりファイルシステムに書き込みしたくない。

ということでRubyで自力でバイナリ弄ってOpenSSH形式の秘密鍵をパースしてPEM形式にビルドすることに。

やった

秘密鍵をPEM形式に変換してOpenSSLライブラリで読み込めるようにした。
secure_conf v2.0.0で、OpenSSH形式のRSA秘密鍵に対応済み。
RSA以外に対応したい場合、SecureConf::OpenSSH::Keytype 以下にクラス追加してpullreqください。

特に面白みのある解説はないので後述の参考資料を。
OpenSSH形式からPEM形式に変換する処理は以下。

ruby-secure_conf/openssh.rb at master · yoshida-eth0/ruby-secure_conf · GitHub

あとがき

こういう事象で困っている、原因と事前知識を説明、こうしたい、やりました、リリースしました、ソースどうぞ、解説は他所のサイトで…。
という中身があるのかないのかわからない記事になってしまった。

麹と曲の違いと酒税法上の扱い

麹=曲として翻訳して良いものか、漢字の歴史、酒税法上はどうなってるのか、とかそういう話。

事の発端

曲を日本語で言うと麹

紹興酒について調べると、こういう表現がされている。

「曲(きょく)」とは日本でいう麹を指します。しかし、厳密には曲と麹とは全く別物と考えた方が良いでしょう。簡単に言うと、菌が異なるからです。
紹興酒の原料を徹底解説!6つの源で生み出される個性

麹を中国語で言うと曲

北海道の田中酒造株式会社では、中国語訳で麹室が「酒曲室」と訳されていた。

はたして「麹=曲」なのか

麹と曲は相互に訳されている。
しかし別物。
では安易に相互に訳して良いものなのだろうか…?

麹と曲

漢字の歴史

Wikipedia(中国語版)を参考にする。

曲の項目を見ると、曖昧さ回避で麴にリンクが貼られている。

・麴/麯(qū / ㄑㄩˉ)
 ・麴,是釀酒時使用的酒種。如大麹、小麴等
曲 - 维基百科,自由的百科全书

麴の項目を見ると、麴霉屬(コウジカビ)も根霉屬(クモノスカビ)も種麹として挙げられている。

麴种
发酵工业中所用的微生物主要有以下种和属:
〜略〜
・麴霉屬
〜略〜
・根霉屬
〜略〜
麴 - 维基百科,自由的百科全书

麴の項目の参考資料を見るとこう書いてある。

繁体字原写作“麴”,然“麴”字后因《简化字总表》合并简化而改成了“曲”字。自《通用规范汉字表》于2013年颁布起(“麹”于三级字表,序号7748),已将“麴”字恢复并类推简化成“麹”字,故大陆最新规范以“麹”为“麴”的简体正写,“酒曲”、“米曲”、“盐曲”等写法则是此字表颁布前的旧规范。
麴 - 维基百科,自由的百科全书

Google翻訳してそれっぽく手直し。

繁体字は元々「麴」と書かれていましたが、「簡体字一般表」の統合と簡略化により、「麴」は「曲」に変更されました。
2013年に「通用規範漢字表」が公布されて以来(第3レベルの通用規範漢字表の「麹」、シリアル番号7748)、類推により「麴」という単語が復元され、「麹」に簡略化されました。
中国本土の最新規格は「麹」を使用「麴」の簡体字で表記されており、「酒曲」「米曲」「塩曲」の表記法は、この単語リストが公布される前の旧規格です。

漢字の歴史を見るに「麴」「麯」「麹」「曲」はすべて同じ意味の漢字。
「麴」「麯」「曲」は昔の表記で、2013年以降は「麹」が使われるようになったよ、ってことらしい。
とはいえ、中国でも日本でも紹興酒界隈では今(2022年現在)も「曲」が使われ続けている訳で…。

分類学上の定義

Wikipedia(日本語版と中国語版)を参考にする。

コウジカビ。

英語:Fungi Ascomycota Eurotiomycetes Eurotiales Aspergillaceae Aspergillus
日本語:菌界 子嚢菌門 ユーロチウム菌綱 ユーロチウム目 マユハキタケ科 コウジカビ属
中国語:真菌界 子囊菌门 散囊菌纲 散囊菌目 曲菌科 曲霉属
麴黴屬 - 维基百科,自由的百科全书

クモノスカビ。

英語:Fungi Mucoromycota Mucorales Mucoraceae Rhizopus
日本語:菌界 ケカビ亜門 ケカビ目 クモノスカビ科 クモノスカビ属
中国語:真菌界 毛霉门 毛霉目 毛霉科 根霉属
根黴 - 维基百科,自由的百科全书

中文学名を見ると、曲=マユハキタケ科=Aspergillaceaeであることがわかる。
中国では、コウジカビを表す「曲」という字を使ってクモノスカビを繁殖させたもの(麦曲など)を表していることになる。
ややこしい…。

使われ方の実情

快懂百科には漢字の旧規格とされている「酒曲」「米曲」「盐曲」の項目がある。(「酒麹」「米麹」「盐麹」の項目はない)
酒曲 - 快懂百科
米曲 - 快懂百科
盐曲 - 快懂百科

日本の魚沼醸造(マルコメ株式会社)の中国語版サイトを見るとこう書いてある。

酒曲在日文中写成“麹”,这个汉字是从中国传入日本的,是指用米、麦、大豆等谷物制成的所有酒曲。
米曲与糀甘酒(米曲甘酒) 鱼沼酿造——酿造自然,创造生命。

翻訳。

酒曲は日本語で「麹」と書かれています。これは、中国から日本に紹介された漢字で、米、小麦、大豆などの穀物から作られたすべての酒曲を指します。

中国では今でも一般的に「曲」が使われている。
「麹」は日本で使われている漢字という雰囲気。

コウジカビ以外の菌を使っても清酒を名乗れるのか?

クモノスカビ

クモノスカビを使って米曲を作って米を糖化させてアルコール発酵をした醸造酒は、日本の酒税法上は「清酒」なのか「その他の醸造酒」なのか。
通念的に大きな分類分けをするならば中国の黄酒(穀物を原料とした醸造酒)にあたりそうな気はする。

で、ちょっと調べたら新政がクモノスカビを使ってお酒を作っていた。
2021年の頒布会の7月分「C-Type」というものがクモノスカビを使ったものらしい。

クモノスカビにもさまざまなタイプがあり、今回使用したのは激しく酸っぱい有機酸(フマル酸)を生成するタイプの「Rhizopus delemar」を用いたとのことでした。
クモノスカビは蒸した穀物には生えにくいということから今回新政さんでは洗って水を吸わせた「生米」を使い麹を製造しています。
この麹単体ではとうてい米が溶けないため、適度に黄麹と混ぜて醸造し、なんとか本作品が完成となった。
【飲み比べ】新政頒布会 2021【7月分】No.6「K-Type」「C-Type」その味わいは? | ねこと日本酒

裏ラベルを見るにクモノスカビを使っていても原料は「米麹」とされるらしい。
よって品目は「日本酒」となり、酒税法上「清酒」として扱われている。

ということは、中国で米と米曲を使ってカラメルを添加しない醸造酒が作られた場合、中国では「黄酒」として扱われ、日本では酒税法上「清酒(SAKE)」として流通することになる。

きのこ

酒税法上はアミラーゼを生産する生物は全般「麹菌」という扱いなんだろうか。
コウジカビとクモノスカビは分類学的には門から違うから、菌界に属するアミラーゼを生産する生物は麹菌と呼べるのかもしれん。

ということはきのこの菌も麹菌として扱われる…?
きのこの菌から麹を作ってお酒作ったら、グアニル酸を含む旨味バチバチ清酒が出来るのでは…?
と思って調べてみたら、きのこの菌を使って味醂や甘酒を作ることに成功している研究者がいた。

耐熱性アミラーゼを生産するきのこ類を選抜し、甘酒の試醸を行ったところ、市販甘酒よりも高い糖度の甘酒を製造することが出来た。
本間 裕人 (Hiroto Homma) - きのこ類を用いて発酵させた新規甘酒様発酵飲料の開発 - 講演・口頭発表等 - researchmap

本研究において,きのこ類にはアルコール耐性,耐塩性,および酸耐性を有するアミラーゼを生産する菌が複数存在することが明らかになった。
また,それら菌の中には味醂の製造に利用可能な菌の存在も確認できた。
きのこ類を用いた発酵食品の製造~アルコール耐性アミラーゼ生産株の探索と味献の製造~

アミラーゼもプロテアーゼも生産して、アルコール耐性も耐塩性も酸耐性もあるなら、酒でも味噌でも醤油でもなんでも作れてしまいそうな気がする。
恐るべしきのこ。

まとめ

中国での使われ方。
・漢字としては「麴」「麯」「麹」「曲」は同じ意味。
分類学上の中文学名としては、曲はコウジカビを指す。
・一般的に曲と言えばクモノスカビを繁殖させたもの。
・日本のコウジカビを繁殖させた麹を中国語に翻訳する時は「曲」が使われる。
・広義の意味ではコウジカビを繁殖させたものもクモノスカビを繁殖させたものも曲。
・明示的に「麹」と書いたら日本のコウジカビを繁殖させたものを指しそうなニュアンスがある。

日本での使われ方。
・一般的に麹と言えばコウジカビを繁殖させたもの。
・中国のクモノスカビを繁殖させた曲を日本語に翻訳する時は「麹」が使われる。
・広義の意味ではコウジカビを繁殖させたものもクモノスカビを繁殖させたものも麹。
・明示的に「曲」と書いたら中国のクモノスカビを繁殖させたものを指す。
クモノスカビを使っても酒税法上は清酒を名乗れる。
・きのこの菌を使っても酒税法上は清酒を名乗れるかも?(教えて詳しい人🙏)

麹と曲の慣習的な使い分け。
日本でも中国でも慣習としてこういう使い分けがされているのかなという気がする。
事の発端で引用した紹興酒での説明と同じ結論に至った。
麹:コウジカビを繁殖させたもの。
曲:クモノスカビを繁殖させたもの。

中国でクモノスカビを繁殖させたものを曲という字で表していることだけ違和感が残る。
学名に反した名称というのはちょっとアレだけど、中国で慣習的にそうなっているなら納得するしかないとは思う。
もしかしたら調べきれてないだけで分類学上の再分類とかがあったのかもしれないし。

日本酒造りは儲かるのか

総米量とかがわかれば蔵の収支が大体わかるのでは?と思い計算してみることに。
造り以外にあんまり興味がなかったから、酒造教本も清酒製造技術も販売に関わるページはきれいなままだった、初めて開いたかもしれん。

計算方法

基本的な計算方法は以下を参照。
これをベースに計算してみる。
前提として、これに出てこない収支には触れないことにする。

日本酒の事業構造について書いてみた #1|酒井優太 / HINEMOS|note

計算結果

まずは結果を。
細かい話は後述の製造計画にて。
f:id:eth0jp:20220212162715p:plain

製造計画

醸造と販売の設計

面倒なので1種類のみをすべて1升瓶に詰めて販売しすべて売り切る場合として計算。
本来であれば吸水歩合ではなく、掛米は放冷後の歩合、麹米は出麹歩合を、麹歩合で合算するべきだけど面倒なのでキリ良くまとめて30%とした。
容器移動、追水、蒸発、分析、アル添、加水などでの増減は面倒なので計算しない。
醸造量は最低製造量(60kl)となるように設計。

・総米(kg) 25,000
・吸水歩合 30%
・汲水歩合 140%
・粕歩合 30%
・ボトル容量(L) 1.8
・ボトル小売価格 ¥2,500

醸造予測

上記仕込みで醸造量は60klとなり、1升瓶33,333本になる。
ちなみに酒造教本(第8章 製造計画)には本醸造60kl作るには白米26tが必要と書いてある。

支出

原価はよくわからないのでそのまんま鵜呑みにした。
人件費、その他の原料費(種麹、酵素剤、酵母、乳酸、水質調整剤、醸造アルコールなど)、ランニングコスト(重油代、電気代、設備投資や修繕費など)はここでは含んでいない。
それらや今回触れない収支はすべて粗利と合算。

・米(1俵60kgあたり) ¥14,500
・米以外の資材(1本あたり) ¥105
・酒税(1KLあたり) ¥110,000
・消費税 10%
・卸売マージン 13%
・小売マージン 23%

2022年現在の酒税(1klあたり)は、清酒は11万円、その他の醸造酒は12万円らしい。
昔からある清酒蔵よりも、WAK○ZEとかの方が税率が高い。
新参に厳しい…。

f:id:eth0jp:20220212162740p:plain
酒税法等の改正のあらまし

収支予測

右上のグラフは、小売価格を100%として何にお金がかかっているのか内訳。
右下のグラフは、参考にしたNoteの記事で出てくるグラフに寄せた。

儲かっているのか

儲かってるかはさておき、売れる算段があるなら人を増やす、売れないなら家族経営に収束する、というのが現状なのではなかろうか。
お店に並ぶお酒1本の内訳を知るならまだしも、醸造量から収支を算出するってのはちょっと生々しい感じは否めないので、まぁこの辺で。

ビールの醸造技術について調べた

ビールの醸造技術について興味が出てきたので調べた。
日本酒醸造の知識をベースに解釈していく。
比重やアルコール度数の計算方法、日本酒醸造との工程や原料の比較など。

日本酒の場合、J-Stageを漁ればジャーナルやら論文やらきっちり日本語での参考文献が見つかる。
ビールの場合、情報は大量に出てくるけど信憑性が怪しい。
誰が書いてるのかわからない、出典が書いてない、断りもなしに式を簡略化してる。
日本語のサイトはヤードポンド法の計算を結構間違えてる。
英語を読まなくちゃいけない。

成果物

今回調べたものを計算出来るようにした。
RubyからPyCall経由でPandasを使った。
GitHub - yoshida-eth0/ruby-beer

各種計算

ガロン

日本人にとって馴染みがない単位なのでややこしい。
国によってガロンの定義が違うので更にややこしい。

名称 1ガロンのリットル換算
英ガロン (Imperial gallon) 4.54609リットル
米国液量ガロン (U.S. fluid gallon) 3.785411784リットル

麦芽のPPGがどっちのガロンで計算されているかよくわからない。
多分Malt Specification Sheetのmethodで書かれている手法に定義されてるんだろうと思うけどそこまでは追えてない。
まぁ実際はガロンの定義の違いでの誤差があったとしてもBrewhouse EfficiencyやらMash Efficiencyやらって係数で吸収できるから大した話ではないのかもしれない。
単行複発酵なので結局は初期比重がどうなるか、それだけが重要なんだと思う。

比重

BREWLANDの比重計算式を見るに既製品の比重はこうなるらしい。
出典はわからなかったけどとりあえずそういうものなんだと理解することにした。

原料 比重
モルトエキス 1.30800000459
砂糖 1.385

※手作りビールに挑戦(ビールの作り方) - 手作りビールキット、ビールサーバーの専門店:激安価格と豊富な品揃のブリューランド

糖度

ビールでは糖度はPlatoが使われるらしい。
日本酒で使われるボーメと比べると数値はだいたい半分くらい。

ボーメは潜在アルコール度数とほぼ一致するから、単行複発酵のビールこそボーメを使った方がわかりやすいのでは?という気がする。
歴史的背景はよく知らないけど。
確かワインはボーメを使っていたと思ったけど詳しいことはよく知らない。

アルコール度数

計算式がいくつかあった。
上の式がアルコール度数高くなって、下の式がアルコール度数低くなる。
最後の式が信憑性ありそうに見えるけど、どれが正しい(近い)のかはよくわからない。

一般的によく見る式。

アルコール度数(略称 ABV: alcohol by volume)は、初期比重と最終比重から概算することができる。
ABV=\frac{OG-FG}{0.00738}
比重 (ビール) - Wikipedia

上記の係数が違う式。

ABV=\frac{OG-FG}{0.00769230803382418}
※手作りビールに挑戦(ビールの作り方) - 手作りビールキット、ビールサーバーの専門店:激安価格と豊富な品揃のブリューランド

エチルアルコールの重量と密度から算出する式。

ABV =(((OG-FG)×1.05)/ FG)/0.79

この2つの数字は、すべてのビールのレシピで一貫しています。

1.05はエチルアルコールの重量
.079はエチルアルコールの密度
自家製の基礎:ビールのオリジナル重力

工程

製麦

基本的にブリュワリーは焙燥された麦芽仕入れて粉砕するところから仕込みスタートらしい。
日本酒で言えば精米済みの白米を仕入れるみたいなものだろうか。

粉砕に関しては荒すぎると糖化が進まず、細かすぎると濾過するときに目が詰まる、と。
醤油用の麹造りで小麦の粉砕する工程があるけど、それとは目的は違うらしい。

小麦を砕く理由は2つ。
細かい粒子で大豆同士の付着を防ぐ。
粗い粒子で大豆同士の間に隙間を作り、通気性をよくして麹菌の育成を助長、品温調節をやりやすくする。
醤油用の麹造り - よしだ’s diary

マッシング

華氏で表記されることもあってややこしい。

温度帯による働きと目的。

温度帯 名称 活動する酵素 働きと目的
50度前後 プロテインレスト プロテアーゼ タンパク質をアミノ酸に分解する。
タンパク質を分解することでクリアなビールに仕上がる。
52~62度 糖化 βアミラーゼ デンプンを発酵可能なグルコース、マルトース、マルトトリオースに分解する。
糖が分解されるためライトボディになる。
65~67度 糖化 αアミラーゼ デンプンを発酵可能なグルコース、マルトース、発酵不可能なデキストリンに分解する。
糖が残るためフルボディになる。
77度 マッシュアウト - 酵素の活動を止める。

技術的に容易かどうかはさておき、プロテインレスト→αアミラーゼ→βアミラーゼ→マッシュアウトの順でやったらより高アルコールでよりクリアな味わいになりそうな気はする。
ホームブリューイングの場合、αアミラーゼが活性する温度帯まで温めて保温、結果的にαアミラーゼ活性からのだんだん冷えてきてβアミラーゼ活性、という順序を辿るスケジュールは割と見かける。
実際のところ、それを狙ってるのか温度管理の怠惰なのかはよくわからない。

ビールのマッシングを日本酒で例えるなら、高温糖化酛みたいなものなんじゃないかと。
日本酒の高温糖化酛をビールに例えるなら、ワンステップ・インフュージョンマッシングのマッシュアウトなし、という感じだろうか。

ビールの場合は単行複発酵なので酵素を失活させるために最後に温度を上げる。
日本酒の場合は並行複発酵なので酵素を失活させない。

麹の酵素は60度前後で失活するけど、麦芽の場合はどうやら77度までは失活しないらしい。
同じαアミラーゼなのに何が違うのかはよくわからん。

A. oryzae EI 212株由来の部分精製α-アミラーゼの活性は55℃ではわずかに低下し60℃・60分間処理では30%にまで活性が低下することが報告されている.
塩麹製造での熟成温度が残存酵素活性に及ぼす影響

そもそも後続処理の煮沸の段階でどのみち酵素は失活するはずなのに、わざわざマッシュアウトと称して失活させる必要性はどこにあるのだろうか。
調べてもよくわからなかった。

計算。
モルトのスペックからマッシング後のウォートのOriginal GravityやBrix値に換算。
ruby-beer/full_mashing.ipynb at main · yoshida-eth0/ruby-beer · GitHub

濾過、スパージング

ロイタータンでウォートを循環させて濾過していく工程は、日本酒で言うところの荒走りの部分を再度戻して絞る感じだろうか。
日本酒にはない概念なので特に言うことがない。

煮沸

煮沸の目的。

1. 麦汁を殺菌する。
2. 麦汁に残っている酵素を失活させる。
3. 凝固性のタンパク質を加熱により凝固させる。
4. 第二麦汁によって薄まった麦汁を濃縮し、濃度を調整する。
5. 好ましくない香りを揮発させる。
6. ホップを投入してホップ成分(苦味、香り)を抽出する。
ビールについて学ぼう:第十二回 ~ホップの登場:煮沸工程~

日本酒にはない概念なので特に言うことがない。

計算。
ホップのα酸値と煮沸時間からIBUを算出。
式がいくつかあったので、Tinseth、Rager、Garetzの3種を実装した。
ruby-beer/ibu_estimates.ipynb at main · yoshida-eth0/ruby-beer · GitHub

主発酵(前発酵)

酵母を添加したらエアレーションして酸素をウォートに溶け込ませる。
日本酒で言うところの、汲み掛けみたいなものだろうか。

エアレーションは酵母を活性させるために酸素を含ませる。
汲み掛けは蒸米に酵素を吸収させる。
という違いはあれどタイミングとニュアンス的にはまぁ似たような雰囲気かなと。

貯酒・熟成(後発酵)

後発酵の目的。

・不快な匂いを取り除く
・仕事を終えた酵母を取り除く
・ビールの清澄
ビールについて学ぼう:第十四回 ~まだ飲んじゃだめ:貯酒・熟成工程~

作業としてはドライホッピングも。
ドライホッピングで添加すべき量の計算方法がよくわからない。

日本酒の香気成分について調べる時は「清酒 酵母 ppm site:www.jstage.jst.go.jp filetype:pdf」みたいな調べ方をよくする。
ビールの場合は野良レシピを参考にするのが良いのだろうか。
まぁ発酵に直接関わることではないし好みによって量は好きに変えなよ、程度の話ではあるのかもしれない。

原料

麦芽

ビールに影響する要因としてはこの辺だろうか。
・糖度(Yield)
・色(SRM、EBC、Lovibond)
・ロースト感とかカラメル感とか(乾燥法、乾燥温度)

乾燥法と乾燥温度によっていろいろあるらしい。
一覧は以下で。
- 手作りビールキット、ビールサーバーの専門店:激安価格と豊富な品揃のブリューランド

色に関しては以下。
麦芽の種類 | ビアトレ

ホップ

ホップは煮沸すると香りが飛ぶので目的に応じて品種とタイミングを変える。

タイミング 工程名 目的 ホップの分類、総称 ホップの特徴 主な品種
煮沸工程初期 煮沸 苦味付け ビタリングホップ α酸が高いもの マグナム、ノーザンブルワーなど
煮沸工程後期 煮沸 香り付け アロマホップ 香りが強いもの シトラ、カスケードなど
熟成時 ドライホッピング 香り付け アロマホップ 香りが強いもの シトラ、カスケードなど

醸造免許を持たない個人が唯一できそうなことはドライホッピング
思いついた手法は2つ、この方法であれば自家醸造には当たらず合法なのではなかろうか。

・ビールにホップを浸してすぐ飲む。
作り置きをしたら違法なので、消費の直前において混和した酒類(要はカクテル)として飲む。

1 消費の直前において混和した酒類を販売した場合の取扱い
 酒場、料理店その他の酒類を専ら自己の営業場において飲用に供することを業とする者が当該営業場以外の場所において消費されることを予知して混和した場合又は酒類の消費者が他に販売する目的で混和した場合は、消費の直前において混和したこととはならないので、法第54条《無免許製造の罪》の規定に該当し、無免許製造となるものであるから留意する。
第43条 みなし製造|国税庁

・キンミヤにホップを一晩漬け込んでホッピーで割って飲む。
アルコール度数20度以上の焼酎にならホップを漬け込んでも良い(はず)。
唯一怪しいのは「香料」、まぁハーブみたいなものだしいいんじゃないかと思うけど確証はない。

 焼酎等に梅等を漬けて梅酒等を作る行為は、酒類と他の物品を混和し、その混和後のものが酒類であるため、新たに酒類を製造したものとみなされますが、消費者が自分で飲むために酒類(アルコール分20度以上のもので、かつ、酒税が課税済みのものに限ります。)に次の物品以外のものを混和する場合には、例外的に製造行為としないこととしています。
 また、この規定は、消費者が自ら飲むための酒類についての規定であることから、この酒類を販売してはならないこととされています。

1 米、麦、あわ、とうもろこし、こうりゃん、きび、ひえ若しくはでん粉又はこれらのこうじ
2 ぶどう(やまぶどうを含みます。)
3 アミノ酸若しくはその塩類、ビタミン類、核酸分解物若しくはその塩類、有機酸若しくはその塩類、無機塩類、色素、香料又は酒類のかす
【自家醸造】|国税庁

酵母

まずは酵母の学名。

酵母 学名
上面発酵酵母 Saccharomyces cerevisiae
下面発酵酵母 Saccharomyces pastorianus
清酒酵母 主にSaccharomyces cerevisiae

分類学上は同じ学名がついていても、上面発酵酵母清酒酵母では随分と違うものらしい。

清酒酵母(Sake)はパン酵母(Bakery)やワイン酵母(Wine)、ビール酵母(上面酵母、Ale)とは明らかに異なるグループに属しています。清酒酵母に近いのは、やはり我が国の伝統的蒸留酒である焼酎や泡盛酵母(Shochu)であることが明らかになりました。
お酒造りの小さな主役 -清酒酵母の話- Part5 清酒酵母の系譜しらべ

一般にビール酵母グルコース、マルトース、マルトトリオースの資化能を持つ。
一般に清酒酵母グルコースの資化能を持つ。

ビールの場合、なんでもアルコール発酵できる。
日本酒の場合、グルコアミラーゼ力価の高い麹を作る必要がある。

英語の用語

toji gemsを作っていた際に、日本語の用語を英語に訳して結構無理やり感があった。
今回ビールでネイティブな英語の用語が出てきたので比較。
ビール用語に合わせた方が世界標準っぽい感じがしてわかりやすいかもしれない。

・アルコール度数などの予測値
ビール用語:estimate 見積もり値
toji gems:expect 期待値
TestCaseっぽくexpectとactualとしていた。

・比重
ビール用語:gravity
toji gems:nihonshudo
Sake Meter Value(SMV)って言い回しもあるっぽいけど日本語を話す身からすると分かりづらいのでアレ。

・総容量
ビール用語:batch size
toji gems:tank capacity

香りの表現

この表現は日本酒にはないように思う。

ビール用語 意味
アロマ 鼻で感じ取ることのできる香り
フレーバー 口に含んだ時に感じる香り

吉田がよく言う日本酒の酵母由来の香りの表現として「揮発性のある香り」「揮発性のない香り」があるけどまぁまぁ近い概念かなと思う。
鼻に抜けず舌に残る香りを「揮発性のない香り」と表現してるけど、この香りを「米の旨味(味)」と誤認している人が多くて嘆かわしく思ってる。

そもそも多くの日本酒消費者は酵母が酒質に与える影響を軽視しているように感じる。
酵母が変われば香りや酸の立ち方が変わるという当たり前の事実を理解せず、米の品種やら蔵の個性やらそういう言葉で片付けようとしている節を感じる。

極論かもしれないけど米の違いなんてニュアンスでしかなくて、酒造りの本質はそこじゃない。
雄町好きを公言していたけど、何もわかっていなかったなと今となってはちょっと恥ずかしく思う。

「一麹、二酛、三造り」って言葉はよく聞くけど、原料の重要度もその順序なんじゃないかと。
つまり「一麹菌、二酵母、三米」。
原料の重要度というか、その他の原料の特徴をマスクしうる強い要因となる原料、とでも言うべきだろうか。

日本酒の場合、酵母が非公開だったり、蔵でそんないくつも酵母を使い分けなかったりするので、酵母に依存する要因が蔵の個性ってことにされてしまっている節を感じる。
ビールの場合、ビアスタイルを聞けば大分類として酵母のタイプ(上面発酵か下面発酵かそれ以外か)はわかる。
この違いは大きいように思う。

日本酒よりも簡単だと思う箇所

実際にマッシングとかやったことがある訳ではないので完全に机上の空論。
やったこともないものを簡単だと言い切るのはアレだとは思うけど。

・糖度測定が楽
単行複発酵のビールの場合、初期比重は屈折計を使ってBrixを求められる。
並行複発酵の日本酒の場合、濾過やら蒸留やらしないといけなくて面倒。

・単行複発酵
並行複発酵の日本酒は最後まで確定しない要因が多い。
単行複発酵のビールはひとつの工程に対してひとつ要因が確定する。
あとどうでもいいけど、並行の対義語は単行ではなく直列なんじゃないかという気はする。

・自重で濾過出来る
日本酒の場合、自重で絞るにしても袋にひとつずつ醪を流し込んで吊るしたり。
そして結局ヤブタやらフネやらで圧力を掛けて絞る。
ビールの場合、タンクの移し替えをして自重で液体が出てきて循環させて濾過して完了。
もしかしたらスパージングのあとに圧力掛けたりするビアスタイルもあるのかもしれないけどよく知らない。

・仕込み回数が少ない
ビールの場合、マッシングは1回、日中の常識的な時間で終わる。
日本酒の場合、麹を全量1回で作って酒母立てて3段仕込みする場合に米を蒸すのは5回、製麹は丸2日かかる。

・温度管理が一定
ウォートの温度管理は常に一定。
日本酒の場合は糖化とアルコール発酵のバランスを取るために日々の温度管理が欠かせない。

・発酵期間が短い
上面発酵の場合、1週間もかからない。
日本酒の場合1ヶ月くらいはかかる。

3年5ヶ月の無職期間中の話

2018年4月に仕事を辞めて2021年9月からまた働き出した。
29歳から33歳の働き盛り(?)の無職期間中に何をしていたのかとかそういう話をつらつらと。
主に数学の勉強と醸造の研究に当てていた感じはある。

作ったプログラム

主なものをいくつかピックアップ。
全部Ruby
主に数学ばっかりやってた。

hpsqrt

平方根丸め誤差なしで計算出来るRubyのライブラリ、rubygemsで公開。
個人的にはかなり優秀なライブラリが出来たと思ってるけど、Rubyでそこまで精度にこだわった平方根の計算をするという需要はなかったのかなという印象。

GitHub - yoshida-eth0/ruby-sqrt: High precision square root library for Ruby
hpsqrt | RubyGems.org | your community gem host

vdsp / audio_stream / synthesizer

Rubyでデジタル信号処理、音楽制作を出来るようにして、シンセサイザーを実装した。
rubygemsで公開。
数学的には、三角関数フーリエ変換、行列計算、畳み込み演算、Biquad Filter、インパルス応答、あたりの分野。
これを作ってる時は中学数学、高校数学を思い出すためにトライイットのYoutubeばっか見て勉強をしてた。

Rubyで実装したDAWとシンセサイザーの技術仕様 - よしだ’s diary

toji

清酒醸造に関するデータモデル、rubygemsで公開。
醸造データの分析、統計学、あたりの分野。
データ分析的には、回帰分析、標準偏差、相関など。
統計学的には、ベイジアンネットワーク、因子分析、主成分分析など。
これを作ってる時は高校数学、大学数学をより深く知るためにヨビノリのYoutubeばっか見て勉強をしてた。

これは思ったよりも反響があって、ダウンロード数が32,000を超えてる。(2021年12月12日現在)
公開からの日平均ダウンロード数でいうと今まで公開したgemsの中で一番。
もうそろそろ自分の手を離れたかなという感じはあるので、あとは誰かよろしくお願いしました。

GitHub - yoshida-eth0/ruby-toji: Management tools for brewing japanese sake.
toji | RubyGems.org | your community gem host

Dynamoid

上記toji gemsを使ってAWSでシステムを実装するにあたって、Dynamoidに機能追加をした。
コントリビューターか?ってくらいゴリゴリ書いた。
思想がぶつかりあう危険性のない軽微な修正はPullReqも送ってmerge済みなのでなかなか良い仕事をした気がしてる。
ゴリゴリの機能追加はGistにて公開。

Dynamoidでembeds_many/embeds_one出来るようにする · GitHub
DynamoidでTransaction処理できるようにした。行ロックにも対応。 · GitHub
DynamoidのHash-Range Tableでhas_many/has_one/belongs_to/embeds_many/embeds_oneできるようにした。 · GitHub
Dynamoidで先読み処理できるようにした。 · GitHub

減量

3ヶ月で10kg減量した。
食事制限と筋トレと有酸素運動
有酸素運動K-POPダンス、J-POPダンス、Jazzダンスなど、基本踊ってた。

次は増量に励んでいるけどなかなかうまく行かない。
減量は計算できるけど、増量は計算よりも努力が必要。
増量は難しい。

高タンパク低カロリーな筋肉メシのレパートリーが増えたのでまたしても自炊力が高まった。

摂取カロリーと消費カロリーを計算して体重増減の予測をする - よしだ’s diary

発酵系、醸造

酒蔵での酒造り

2019年度の冬は東北の酒蔵に行って酒造り。
2020年度以降はコロナの影響で行けず…。

自宅での醸造研究

味噌用の米麹造り、味噌造り、醤油用の大豆麹造り、醤油造り、J-Stageの論文読み漁りなど。
先人の知恵をまとめたものははてなブログで公開、自分の経験則や考えなどはFacebookで友人まで公開。
学問に関する間違った情報を公開してインターネットの海を汚したくないので。

日本酒醸造に適した麹を作りたい - よしだ’s diary
なぜ麹造りの湿度管理に乾湿差が使われるのか? - よしだ’s diary
醤油用の麹造り - よしだ’s diary
生酛系酒母と天然醸造醤油の比較 - よしだ’s diary

仕事関係と交友関係

忘年会

仕事を辞めて1年目に思ったことは、年末に忘年会の予定がほぼ入らない。
考えてみれば年末は仕事関係の人との飲み会が優先的に埋まり、年始は(良い意味で利害関係がない)適当に飲む人との飲み会が入っていた。
なので無職の年末年始は、年明けからが飲み本番みたいな感じだった。
仕事関係で忘年会に呼んでもらえるのも、利害関係のない新年会に呼んでもらえるのもありがたい話。

珍しいのかもしれないけど、個人的には仕事関連の飲み会を嫌だと思ったことがないので年末の飲み会が減るのは無職のデメリットかもしれない。

周りの人から言われたこと

・大学行けば?
自分ひとりでもやりたい勉強は出来ているので別にいいかなと。

・輸出用清酒製造免許取れば?
試験製造免許の方が欲しい。
要は自家醸造がしたい。

・魚屋で働けば?
2年働いてふぐ調理師免許を取るってのはありだったかなとは思う。

・酒蔵で働けば?
初対面の蔵の人に突っ込んだ質問をすると同業者を疑われてしまうことが最近あるので、今となってはどこの蔵にも属していない方が立ち回りやすいかなという感じがある。
もちろんひとつの蔵に深く関わることに意義があるのは言うまでもなく。

周りの人からの反応

働いていないことを心配され、社会復帰を喜ばれる。
飲み友達と道端でばったり会うことが割とあって、働いていないことを気にかけてくれる人多数、ありがたい話。
社会復帰したことを伝えたら就職祝いみたいな感じで飲みを奢ってくれる人もいたり、ありがたい話。

お金

前職最後の振込:2018/05/28
今回最初の振込:2021/12/10
期間:3年6ヶ月13日(1292日)
使った額:10,106,350円(財布の現金とか細かいものは含まず)

杉並区在住、世帯主、賃貸。
生活資金に1千万使ったっていうとなかなか多い気もするけど、月額に換算すると家賃も税金も込みで平均237,926円くらいなので意外と安いのかなという感じはする。
数年前は毎日外食したりほぼ毎週末は新幹線乗って泊りがけでどこか行ったりしてもっと支出が多かった時期もあったけど、コロナでだいぶ抑えられた感じはしてる。
自分で言うのもアレだけど自炊力は結構高いので、食費をかなり抑えたうえで自分で自分の胃袋を満足させることが苦なく出来た。
あと、今思うと家は買っておいても良かったかもしれないなとは思う。

巷で散々言われてることだけど、無職1年目は所得税が容赦ない。
2年目からは国民年金保険料や国民健康保険料が免除になったり割と行政は無所得者に優しい。
なので無職は2年目からが本番という感じがある。

うっかり税金を払い忘れて区役所から電話がかかってきた時に、誰の番号かわからなくてその電話番号をググったら、ヤ●ザとか闇金とかそんなふうに書かれていた。
まぁ区役所から催促の電話がかかってくるような人ってのはそういうことをするんだなぁと。

社会復帰

無職の期間、ありがたいことに仕事の話は誰かしらからコンスタントにいただけていた。
元気がなかったり忙しかったりで返信したりしなかったり、社会不適合者ですみません。

業務内容としてはRuby on Rails関連が多かった。
「吉田=Rubyの人」として周りからは認識されているらしい。
しかし吉田が好き且つ得意なのは「Ruby」であって「Ruby on Rails」じゃないということがなかなか理解されがたい趣向。

そんな中、日本酒の分析やら統計やらをしていたからかPythonのデータ分析の話が舞い込んできたのでそのままスッと社会復帰。
日本酒醸造管理ツールの開発が一段落ついた、行列計算をRubyでやることに限界を感じていてPythonに活路を見出していた、減量が一段落した、など都合がちょうどハマったタイミングだった。
吉田が得意なこと、吉田が出来ること、吉田が興味あること、そういうのを把握してくれている人はありがたい。
過不足の多い人間なので。

Rubyで実装したDAWとシンセサイザーの技術仕様

よくもまぁこんな面倒臭い大変なものを作ったなと自分で思う。
RubyのEnumerator::Yielderとlambdaを多用したリアルタイム処理とも親和性が高い作りをしてる。
だいぶ前に書いた文章が発掘されたので手直しして公開。
供養、ナムナム。

デモ

百聞は一見に如かず、まずはデモ音源を。
ドラム以外の音は全てRubyで生成したもの。
ドラムだけはLogic Pro Xで打ち込んでmp3出力して、Rubyに読み込ませてる。

パッケージ

すべてRubyGemsで公開してる。

audio_stream

Rubyで音楽制作できるようにした。
DAWとFXみたいなもの。
依存:vdsp coreaudio

GitHub - yoshida-eth0/ruby-audio_stream: AudioStream is a Digital Audio Workstation for CLI
audio_stream | RubyGems.org | your community gem host

インストール

coreaudio gemsのコンパイルで、Xcode 12系だと以下のエラーが出る。

compiling coreaudio.m
coreaudio.m:785:12: error: implicit declaration of function 'rb_thread_call_without_gvl' is invalid in C99 [-Werror,-Wimplicit-function-declaration]
    return rb_thread_call_without_gvl(ca_buffer_wait, ptr,
           ^
1 error generated.

なので以下のようにしてまずはcoreaudio gemsをインストールしてからsynthesizer gemsをインストール。

gem install coreaudio -- --with-cflags="-Wno-error=implicit-function-declaration"
gem install synthesizer

audio_streamの機能と仕様

Audio Busの接続

オーディオファイルやらオーディオデバイスやらのAudioInputをObservableとして、Audio Busなど後続のObserverにBufferを通知する。
FXの接続、ステレオ/モノラル変換、Send ToでのBusの合流などもこのObserverパターンで実装してる。

ruby-audio_stream/audio_observable.rb at master · yoshida-eth0/ruby-audio_stream · GitHub

トラック間の同期

AudioInputはEnumerableを実装していて、Enumerator::Yielderがバッファを生成し続ける。
全てのトラックが同じタイミングで同じ回数Enumerator#nextを呼ぶためにSizedQueueを使って1回の呼び出しごとにThreadを止める。
そして全トラックのバッファが揃ったタイミングで、止めていたThreadを起動させて次のバッファを生成させる。

ruby-audio_stream/conductor.rb at master · yoshida-eth0/ruby-audio_stream · GitHub

FX

FXを自力実装することで今までなんとなく雰囲気で掛けてたFXの意味を正しく理解することが出来たのは良かった。
当初VST2相当の仕組みで作っていたけど、途中でヴォコーダーを作る時にVST2相当だとLRでキャリアとモジュレーションを分けるというあの懐かしい様式になってしまうのが嫌でサイドチェインに対応してVST3相当の汎用性を得たので満足感高い。
Rubyは数値解析系が充実してなくてリバーブの実装で一部SciPyの再開発をすることになったのは想定外で割と苦戦した。

BiquadFilterの美しさ

BiquadFilterには数学的美しさが詰まってると思う。

フィルター系のグラフ。
上から順に、LowPassFilter、HighPassFilter、LowShelfFilter、HighShelfFilter、BandPassFilter、PeakingFilter。
f:id:eth0jp:20211124202610j:plain:h320

上記フィルターを複数使ったイコライザー系のグラフ。
上から順に、2BandEqualizer、3BandEqualizer、GraphicEqualizer。
f:id:eth0jp:20211124202640j:plain:h320

オクターブ差の16帯域のBandPassFilterのグラフ。
周波数軸を対数表示にすることで等間隔のキレイなグラフになる。
440Hzを基準とした平均律の計算しやすさは数学的にも浮動小数点演算的にも美しい。
f:id:eth0jp:20211124202702j:plain:h320

synthesizerの機能と仕様

Oscillator、Amplifier、Filter、とシンセサイザーをいじったことのある人なら音を想像できるくらい直感的なインターフェイスになっていると思う。
VSTi開発の知識がある人であれば、自分でシンセサイザーのロジック部分だけを実装して使える。
シンセサイザーといえばC++が基本みたいなところあるけど、カジュアルにRubyで書けるというのは結構な利点だと思ってる。
f:id:eth0jp:20211124202727j:plain:h320

波形バッファの生成

バッファ分の波形を生成するlambdaをEnumerator::Yielderで実行してる。
NoteOnのタイミングでOscillator、Amplifier、Filterを初期化して、Enumerator#nextされる度に続きの波形を生成し続ける。

Oscillatorで生成する波形の角度はクロージャのような仕組みで保持してる。
なのでバッファが分割されても途切れることなく続きの波形を延々生成し続けることが出来る。
また、NoteOnから時間の推移とともに変化していくパラメータも同じ仕組みで状態保持しているのでADSRやLFOなどのエンベロープが掛けられるようになっている。

ruby-synthesizer/note_perform.rb at master · yoshida-eth0/ruby-synthesizer · GitHub
ruby-synthesizer/low.rb at master · yoshida-eth0/ruby-synthesizer · GitHub

NoteOn/NoteOffでやっていること

以下の設定や状態を計算して最終的な値を算出する。
シンセサイザー固有の設定や状態(PitchBend、Glide)
・Note固有の状態(Volume、Panなど)
・Oscillator固有の状態(Volume、Panなど)

NoteOnのタイミングでやることは以下。
・Oscillator、Amplifier、Filterを初期化。

NoteOnからNoteOffまでの間に延々やることは以下。
・Oscillator、Amplifierの各種パラメータのエンベロープを更新。
・VolumeにNoteOnのVelocityを反映。
・Tuneのエンベロープを更新してPitchBendを反映し、生成する波形の周波数を算出。
・上記の周波数とパラメータからOscillatorが波形バッファを生成。
・Filterのエンベロープを更新。
・Oscillatorが生成した波形バッファにFilterを掛ける。

NoteOff以降にやることは以下。
・ADSRの残響の計算。
・ADSRでRelease途中でVolumeが0を超えていればNoteOn中と同等の処理をする。
・ADSRでReleaseし終えてVolumeが0になったらNoteを削除。

この辺はもう普通にシンセサイザー
理論上は普通のGUIや物理ボタンを持つシンセサイザーと同等のことが出来る。

ruby-synthesizer/low.rb at master · yoshida-eth0/ruby-synthesizer · GitHub

エンベロープ

ADSR、LFO、Glide、Curve、を実装した。
これらを各種パラメータに掛けることができる。

エンベロープを掛けられるOscillatorのパラメータはVolume、Pan、Tune(semi / cent)、Sym、Sync、Unison(num / detune / stereo)など。
エンベロープを掛けられるAmplifierのパラメータはVolume、Pan、Tune(semi / cent)、Unison(num / detune / stereo)など。

ADSRのグラフ。
f:id:eth0jp:20211124224952j:plain:h320

ruby-synthesizer/modulation_value.rb at master · yoshida-eth0/ruby-synthesizer · GitHub
ruby-synthesizer/adsr.rb at master · yoshida-eth0/ruby-synthesizer · GitHub

Oscillator

波形生成ロジックは独立して外側に置けるので、sine、triangle、saw、squareなどの基本的な波形以外にも、フォルマントヴォコーダーをOscillatorとして実装するなんてことも出来るようにしてある。
実際にフォルマントヴォコーダーは実装して使えるようにした。
デモのCinemaではフォルマントヴォコーダーを使ってる。

ruby-synthesizer/base.rb at master · yoshida-eth0/ruby-synthesizer · GitHub
ruby-synthesizer/shape.rb at master · yoshida-eth0/ruby-synthesizer · GitHub

Amplifier

AmplifierにはADSRやLFOなどのエンベロープが指定できる。
ADSRの減衰やLFOの角度の状態は、Oscillatorの波形生成と同様にクロージャのような仕組みで保持してる。

Filter

FXに準ずるフィルターの実装。
パラレル/シリアルでのフィルター処理にも対応した。

ステップエディタ

ST/GT方式のステップエディタを実装した。
分解能とBPMを指定することで、Tickでの指定も出来るようにもした。(sync機能)
ダブステップとかでLFOBPMに同期させる時とかに便利。

ruby-synthesizer/st_gt.rb at master · yoshida-eth0/ruby-synthesizer · GitHub

あとがき

Enumerator::Yielder大好き芸人としてはかなり満足の出来。
coreaudioがコンパイル出来ないので今手元で動かせていないのが悔やまれる。
Ruby2.7系の時代に作ったものなので、(多分動くと思うけど)Ruby3.0系で動くか不明。
coreaudioがコンパイルできないことにはどうしようもないのでどうにかしたいところ。

朝日酒造試飲会@イオンリカー高円寺店

2021/10/1、イオンリカー高円寺店にて朝日酒造試飲会に参加した時のメモ。

Facebookで友人限定で書いていた記事を転載。
固有の蔵に関することを書くのは肩入れしてるみたいで嫌だなとFacebookで友人までの公開ばかりになってしまっていたけど、公なアウトプットも増やしてしていこうかなと。
あまり主観を含めたくないので聞いた話がメイン。

高円寺バルイベント予告10月1日日本酒の日~|高円寺店|イオングループのリカー専門店「イオンリカー」
日本酒の日/久保田を作る朝日酒造試飲会開催|高円寺店|イオングループのリカー専門店「イオンリカー」

f:id:eth0jp:20211122183806j:plain:h360

本文

日本酒の日。
久保田の朝日酒造のイベントに行って根掘り葉掘り聞いてきた。

熟成3種セット。
・久保田 千寿:1年瓶内熟成。
・久保田 千寿 秋あがり:1年タンク熟成。
・千年翠 純米吟醸:2年瓶内熟成。

久保田 千寿は自社で培養した9号系の酵母を使っている。
千年翠 純米吟醸はスペック的には千寿 純米吟醸と同じ。
千年翠は総米3トンで仕込んだものをソムリエの人がブレンドしてる。(余りは千寿にブレンド?)

萬寿 自社酵母仕込(の話だったと思う)はCEL-24とかそんな感じのカプロン系と言ってた。
今回飲んでないから記憶が曖昧だけど、黒いラベルの純米大吟醸も確かカプロンプンプン系だった気がするけど、方向性としてはそんな感じなんだろうか、聞き忘れた。
わざわざ自社酵母仕込と謳っているものと千寿の自社で培養した酵母は何が違うのだろうか、聞けばよかった。
尿素を生産する18号系の酵母を使うと海外へ輸出できなくなるので朝日酒造では使っていない。

尿素については基準値があるのか、尿素非生産性株を使わないとダメなのか、調べてもよくわからなかった。
輸出用清酒製造免許は国内同様の清酒造りができると思っていたけど、こういう海外の基準も影響を受けるっぽい。

通年醸造はしていない。
9月〜5月に仕込み。

火入れについて。
温度を早く上げると香りは残りやすいが熟成には向かない。
温度をゆっくり上げると香りは飛びやすいが熟成させた時に崩れにくい。
千寿は前者、千年翠は後者。

スパークリングについて。
ガス添の流れ:絞り、火入れ、貯蔵、火入れ、ガス添、瓶詰め。
ガスを添加してからタンクで2日くらい馴染ませてから瓶詰めする。
酵母由来のガスは泡が荒い、ガス添は泡がきめ細かい。
ガス添してすぐに瓶詰めすると注いだときにグラスに付く泡が多くなるらしい。
原酒14度、加水して12度。
詳しくは聞いてないけど、甘辛度に関しては日本酒度よりもグルコース量を重要視してそうな感じ。

淡麗な酒質について。
9号系の酵母を使って酸を抑える。
五百万石を使って軽い酒質にする。
この2点が設計の軸にあるらしい。
フィルターについても聞きたかったけど聞きそびれた。

あと何言ってたかな、いろいろ教えてもらったけど記憶力がニワトリなので。
教わったことを整理して後になってからあれも聞けばよかったなってのが多々あって1度では聞ききれないからイベントは2daysやってほしい。
特に今回はパターン違いの熟成酒の飲み比べという入口だったのもあり、麹とかまで深掘りできなかったのが悔やまれる。

朝日酒造のような大手メーカーにも小さな地酒蔵同様に蔵の考えや特色があるはずなのに、いつでもどこでも飲めるせいで蔵の特色ってよりもスタンダードな日本酒って印象になるのは飲み手の問題なのだろうか。
大手メーカーにも潜入捜査したい。