[Gem]SakeRubyで特定名称酒を完全に理解する


本記事は [RUNTEQアドベントカレンダー 2021](https://qiita.com/advent-calendar/2021/runteq) の12日目の記事です。
先日の記事は@subaru-helloさんのサービス[「酒ケジュール」についての記事](https://qiita.com/subaru-hello/items/ce8d02e4bde17ada0b82)でしたが、二日連続で「酒」に関する投稿になります（RUNTEQには酒好きが多い説）。

# はじめに
日本酒の分類の一つに「特定名称酒」というものがあります。
よく聞く「純米大吟醸酒」とか「本醸造酒」とかそういうやつです。
日本酒のラベルに書いてある言葉の意味がよく分からないという方のために、まずは特定名称酒を覚えてみると、日本酒の楽しみ方が一つ増えるのでは？と思ったので、Gemを作ってみたよというのが本記事です。


# 何が書いてあるのか分からないラベル問題
突然ですが、「特別純米無濾過生原酒」と聞いてあなたは何を思い浮かべますか？
この10文字には、原材料(精米歩合や醸造アルコールの有無など)や製造工程などの情報が含まれているのですが、何を言っているのか分からないという方もいらっしゃるのではないでしょうか？

友人と日本酒を飲んでいると、ラベルに書いてある意味がわからないとかどんな味かわからないという話をよく聞きます。

ラベルの言葉を完全に理解したからといって日本酒の味わいが分かるかと言われればそうとは言い切れませんが、ある程度の見当をつけることはできると思います。

特定名称酒も本来は味を表した分類ではないのですが、特定名称酒を理解することで、同じ吟醸酒でもこんなに違うのかとか、淡麗な感じが好きだから醸造アルコールが入ってるものを飲んでみようかなといった楽しみ方ができるのではないかと思います。

# 日本酒の製造工程（ざっくり）
特定名称酒を説明する前に、大まかな日本酒の製造工程を確認しておきたいと思います。

製造工程はざっくり分けると5工程に分けられます。

1. 原料処理
1. 製麹
1. 酒母造り
1. 醪造り
1. 上槽~瓶詰め

## 1.原料処理
原料処理の作業の一つに精米があります。
精米の工程では玄米を削って白米にします。
主に表層部に多く含まれるタンパク質やビタミン、ミネラルを取り除くことが目的です。
これらの成分が多すぎると雑味が多く残ったり、酵母の活動が活発になりすぎてしまったりといった弊害があります。

また、玄米を削って残った割合を表したものを精米歩合と呼びます。
一般的に、精米歩合が高い（あまり削っていない）ほど味わいが濃醇になりやすく、精米歩合が低いほど吟醸香が目立ち、軽快な味わいになるとされています。

## 2.製麹
蒸米に麹菌を繁殖させる作業を製麴（せいぎく）といいます。
醸造酒を造る際に必要なアルコール発酵は、酵母が糖類をアルコールと炭酸ガスに変化させることをいいますが、米の場合はデンプンを一度糖化させておく必要があります[^1]。
このデンプンを糖化させる糖化酵素を供給する麹菌を蒸米に繁殖させる工程が「製麴」です。

特定名称酒の基準では、蒸米の総量中の麹の使用割合は15%以上と定められています。

## 3.酒母造り
酒母（酛）は蒸米、麹、水を酒母タンク内に入れ、酵母を培養した液体のことをいいます。
酒母造りの目的は、アルコール発酵に必要な酵母を培養することにあります。

酵母は他の微生物に淘汰されやすいが酸性に強いという性質があるため、酒母用タンク内を酸性にし、酒母が増殖しやすい環境を作ります。
この酒母を酸性にするために、主に乳酸が使われますが、乳酸の取得方法には乳酸を添加する「乳酸添加法（速醸系酒母）」と、乳酸菌を育成し、乳酸菌の生成する乳酸を取得する「乳酸菌育成法（生酛系酒母）」の二つに分けられます。

### 乳酸添加法（速醸系酒母）
乳酸添加法（速醸系酒母）は、醸造用乳酸を添加することですぐに酒母用タンク内を酸性化できるので、安全に酒母造りを進めることができ、時間・コスト面で効率が良いというメリットがあります。
また、軽快な酒質に仕上がるという特徴があり、現在市場に出回るおよそ90%の日本酒がこの製法で造られています。

### 乳酸菌育成法（生酛系酒母）
乳酸菌育成法（生酛系酒母）は、乳酸添加法と比較して時間、コスト、手間がかかるというデメリットがありますが、乳酸の含有量が高く、アルコール耐性の高い酵母だけが生き残るため、活発なアルコール発酵が行われるなどの理由から乳酸添加法よりも濃醇な酒質が得られます。

また乳酸菌育成法の中で、米の糖化を早やめるため酒母用の蒸米を摺り潰す「山卸」と呼ばれる作業を行なったものを「生酛（生酛仕込み）」、行なっていないものを「山廃酛」と呼びます。
味わいの違いには様々な見解がありますが、生酛の方が蒸米を摺り潰さない山廃酛に比べて、雑味の少ないキレイな味わいになり易いという意見もあります。

## 4.醪造り
醪とは、醪用タンク内に、蒸米、麹、水、酒母を投入した液体のことをいいます。
醪作りの目的は、本格的なアルコール発酵を行うことです。

醪の糖分含有によって、甘口か辛口かが決まります[^2]。
辛口の場合は、糖分が少ない分、アルコール度数が高く、甘口の場合は、糖分が多い分、アルコール度数が低い傾向になるとされています。

発酵が完了した時点で、醸造アルコールを添加する場合があります。
醸造アルコールは、蒸留酒のことで、添加の目的は時代によって様々ですが、現代では一般的に香味の調整のために添加されています。
醸造アルコールを醪に添加することで、味わいが軽快化したり、アルコールの刺激を増加させ淡麗辛口なドライテイストに仕上げることができます。



## 5.搾り（上槽）~瓶詰め
搾り（上槽）では、アルコール発酵が終了した醪を、酒粕と液体に分離します。
搾りの手法にもいくつかの方式があり、その方式の違いや抽出する部分の違いによって、「あらばしり」や「中取り」、「雫酒」や「斗瓶囲い」など様々な名称がつけられます。

また、上槽後に残る細かな固形物を「滓」と呼び、滓にはアミノ酸などが多く含まれているため、濃醇な香味になります。
滓を多く含むものを「滓酒」、滓を少し混ぜたものを「滓がらみ」と呼びます。

滓引き（滓をタンク内で沈殿させる工程）後、さらに残った固形物を除去する工程を濾過といいます。
冒頭に出てきた「無濾過」というのはこの濾過の工程を行なっていない[^3]もののことを指します。
基本的に無濾過の日本酒は淡い黄色で多様な香気成分が残ることが特徴とされています。

濾過後は糖化酵素の失活と火落ち菌の除去を目的に火入れを行い、タンク内に貯蔵します。
貯蔵後、調合や割水、２回目の濾過と火入れの工程を経て瓶詰めを行います。
この火入れの回数によって「生酒」「生貯蔵酒」「生詰め酒」などと名称が変わってきます。
また貯蔵の期間によっても「新酒」「しぼりたて」などの違いがあります。

ここまでざっくりと日本酒の製造工程を追ってきましたが、細かな製法の違いで様々な名称が出てくることが分かるかと思います。

# 特定名称の清酒の表示
酒類業組合法の中で「清酒の製法品質表示基準」として、日本酒を原料と製法で分類した基準が設けられています。
特定名称は、原料、製造方法等の違いによって8種類に分類されます。


<table border="1" cellpadding="3" cellspacing="0" class="table table-bordered datatable">
<tbody><tr>
<th nowrap="nowrap" scope="col">特定名称</th>
<th nowrap="nowrap" scope="col">使用原料</th>
<th nowrap="nowrap" scope="col">精米歩合</th>
<th nowrap="nowrap" scope="col">こうじ米<br>使用割合<br>（新設）</th>
<th nowrap="nowrap" scope="col">香味等の要件</th>
</tr>
<tr>
<td align="center">
吟醸酒(ぎんじょうしゅ)</td>
<td>米、米こうじ、 醸造アルコール</td>
<td>60%以下</td>
<td><strong><strong>15%以上</strong></strong></td>
<td>吟醸造り、固有の香味、色沢が良好</td>
</tr>
<tr>
<td align="center">
大吟醸酒(だいぎんじょうしゅ)</td>
<td>米、米こうじ、 醸造アルコール</td>
<td>50%以下</td>
<td><strong>15%以上</strong></td>
<td>吟醸造り、固有の香味、色沢が特に良好</td>
</tr>
<tr>
<td align="center">
純米酒(じゅんまいしゅ)</td>
<td>米、米こうじ</td>
<td><strong>－</strong></td>
<td><strong>15%以上</strong></td>
<td>香味、色沢が良好</td>
</tr>
<tr>
<td align="center">
純米吟醸酒(じゅんまいぎんじょうしゅ)</td>
<td>米、米こうじ</td>
<td>60%以下</td>
<td><strong>15%以上</strong></td>
<td>吟醸造り、固有の香味、色沢が良好</td>
</tr>
<tr>
<td align="center">
純米大吟醸酒(じゅんまいだいぎんじょうしゅ)</td>
<td>米、米こうじ</td>
<td>50%以下</td>
<td><strong>15%以上</strong></td>
<td>吟醸造り、固有の香味、色沢が特に良好</td>
</tr>
<tr>
<td align="center">
特別純米酒(とくべつじゅんまいしゅ)</td>
<td>米、米こうじ</td>
<td>60%以下又は特別な製造方法（要説明表示）</td>
<td><strong>15%以上</strong></td>
<td>香味、色沢が特に良好</td>
</tr>
<tr>
<td align="center">
本醸造酒(ほんじょうぞうしゅ)</td>
<td>米、米こうじ、 醸造アルコール</td>
<td>70%以下</td>
<td><strong>15%以上</strong></td>
<td>香味、色沢が良好</td>
</tr>
<tr>
<td align="center">
特別本醸造酒(とくべつほんじょうぞうしゅ)</td>
<td>米、米こうじ、 醸造アルコール</td>
<td>60%以下又は特別な製造方法（要説明表示）</td>
<td><strong>15%以上</strong></td>
<td>香味、色沢が特に良好</td>
</tr>
</tbody></table>

<p>
出典：国税庁「特定名称酒の表示」(平成15年)
</p>

<p>
ちなみに精米歩合の中には、60%以下又は特別な製造方法（要説明表示）と書かれているものがあります。
</p>
<p>
これは、精米歩合が60%以下でなくても、酒造好適米を100％使用するなど、特別と解釈できる条件をラベルに表示することで特別純米酒や特別本醸造酒を名乗れるということを意味しています。
</p>

<p>
特定名称酒は、先程の製造工程の中でも特に、精米歩合と醸造アルコールの添加の有無で分類されています。  
</p>
<p>
先程の表を精米歩合と醸造アルコールの二軸で表現すると以下のようになります。  
</p>
<h3>精米歩合と醸造アルコールの使用率の二軸で表現</h3>

<table>
<thead>
<tr align="center">
<th>醸造アルコール</th>
<th colspan="4">分類</th>
</tr>
<thead>
<tbody>
<tr align="center">
<td>10%以上</td>
<td colspan="4">普通酒</td>
</tr>
<tr align="center">
<td rowspan="2">10%以下</td>
<td>普通酒</td>
<td>本醸造酒</td>
<td colspan="2">特別本醸造酒</td>
</tr>
<tr align="center">
<td>-</td>
<td>-</td>
<td>吟醸酒</td>
<td>大吟醸酒</td>
</tr>
<tr align="center">
<td rowspan="2">不使用</td>
<td colspan="2" rowspan="2">純米酒</td>
<td>純米吟醸酒</td>
<td>純米大吟醸酒</td>
</tr>
<tr align="center">
<td colspan="2">特別純米酒</td>
</tr>
<tr align="center">
<td>精米歩合</td>
<td>規制なし</td>
<td>70%以下</td>
<td>60%以下</td>
<td>50%以下</td>
</tr>
</tbody>
</table>


# SakeRubyの概要
前置きがかなり長くなりましたが、Gem SakeRubyの概要を説明していこうと思います。

SakeRubyの目的はコンソールで特定名称酒の分類を完全に理解してしまおうというものです。

https://rubygems.org/gems/sake_ruby

## show_table
SakeRubyをインストールしたら、まずは`SakeRuby.show_table`を実行しましょう。

![スクリーンショット 2021-12-11 17.03.14.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1213053/14656f93-9595-abd4-c625-7b396f56aa3f.png)

先程の表が表示されます。

## challenge
テーブルが表示されたら`SakeRuby.challenge`をしてみましょう。

```
> SakeRuby.challenge
原材料: 米、米こうじ、醸造アルコール, 精米歩合: 60%以下又は特別な製造方法（要説明表示）
```
原材料と精米歩合が表示されます。
今回だと、醸造アルコールを添加していて、精米歩合が60%以下又は特別な製造方法（要説明表示）とあるので、答えは「特別本醸造酒」になります。
特別本醸造酒と入力すると、、、

```
> SakeRuby.challenge
原材料: 米、米こうじ、醸造アルコール, 精米歩合: 60%以下又は特別な製造方法（要説明表示）
特別本醸造酒
===正解===
```

正解だったので「===正解===」と表示されました！
問題を中断したい場合は「降参」と入力すると正解が表示され、問題から抜けることができます。

```
SakeRuby.challenge
原材料: 米、米こうじ、醸造アルコール, 精米歩合: 60%以下又は特別な製造方法（要説明表示）
降参
正解は、特別本醸造酒でした。
```

最初はテーブルを見ながら、数分繰り返していくと特定名称酒を完全に理解することができます！

# SakeRubyの製造工程（ざっくり）
## 1.雛形造り
gemの元となる雛形を生成します。
bundlerのinstallやupdateは事前に済ませておきましょう。

まずは、作りたいgemの名前がすでに登録されていないかを確認します。

```
 gem search ^sake_ruby

*** REMOTE GEMS ***
```

REMOTE GEMSのあとに何も表示されていない場合はまだ登録されていないということです。

sake_rubyはまだ登録されていなかったので、雛形を作成します。

```
bundle gem sake_ruby -t
```


## 2.gemspec造り
sake_ruby.gemspec内のtodoと書かれた必要項目を埋めていきます。

今回は以下のような形で作成しました。

```ruby
# frozen_string_literal: true

require_relative "lib/sake_ruby/version"

Gem::Specification.new do |spec|
  spec.name = "sake_ruby"
  spec.version = SakeRuby::VERSION
  spec.authors = ["watsumi"]
  spec.email = [""]

  spec.summary = "Seach a sake information includes Tokuteimeisho, raw materials and Seimaibuai."
  spec.homepage = "https://github.com/watsumi/sake_ruby/"
  spec.license = "MIT"
  spec.required_ruby_version = ">= 2.7.2"

  spec.metadata["allowed_push_host"] = "https://rubygems.org/"

  spec.metadata["homepage_uri"] = spec.homepage
  spec.metadata["source_code_uri"] = "https://github.com/watsumi/sake_ruby/"
  spec.metadata["changelog_uri"] = "https://github.com/watsumi/sake_ruby/"

  # Specify which files should be added to the gem when it is released.
  # The `git ls-files -z` loads the files in the RubyGem that have been added into git.
  spec.files = Dir.chdir(File.expand_path(__dir__)) do
    `git ls-files -z`.split("\x0").reject do |f|
      (f == __FILE__) || f.match(%r{\A(?:(?:test|spec|features)/|\.(?:git|travis|circleci)|appveyor)})
    end
  end
  spec.bindir = "exe"
  spec.executables = spec.files.grep(%r{\Aexe/}) { |f| File.basename(f) }
  spec.require_paths = ["lib"]
  spec.metadata = {
    "rubygems_mfa_required" => "true"
  }
end

```

## 3.実装

### all
SakeRubyでは特定名称酒のデータを一つずつyaml形式で記述しており、tokuteimeishoディレクトリ配下に保存しています。
そのため、データの取得は以下のような形で読み込んでいます。

```ruby
def all
  @all ||= Dir["#{__dir__}/sake_ruby/tokuteimeisho/*.yml"].map { |file| YAML.load_file(file) }
end
```

### select_random
特定名称酒のデータをランダムに一つ返してくれるメソッドです。
特定名称酒占いをしたいときにご活用ください。（知らんけど）

### find_by_tokuteimeisho
特定名称をもとに特定名称酒のデータを取得できます。
特定名称酒の詳細を忘れたときにご活用ください。（ラベルを見た方が早い）


### ./bin/console
`./bin/console`でirbを起動して実際にgemを試してみることができます。

##4.公開設定
RubyGems.orgの下記のページでAPIkeyを取得しておきます。

https://rubygems.org/settings/edit

APIkeyを取得したら以下を実行してRugeGems.orgにログインします。

```
$ curl -u `api_key` https://rubygems.org/api/v1/api_key.yaml > ~/.gem/credentials; chmod 0600 ~/.gem/credentials
```

## 5.公開

### rake build
rake buildを実行してパッケージを生成します。

```
rake build
```

### rake release
最後にrake releaseを実行すればgemが公開されます。


```
rake release
```

また、MFA設定後はpinの入力を求められるため、Google Authenticatorで確認して入力してください。
詳細はこちらの記事が明るいです。[【重要】RubyGems.orgに多要素認証（MFA）を設定してください（RubyKaigi 2019）](https://techracho.bpsinc.jp/hachi8833/2019_04_22/73587)

# おわりに
[RUNTEQアドベントカレンダー 2021](https://qiita.com/advent-calendar/2021/runteq)のテーマが技術だったのに、技術の話がほとんどない記事になってしまいました。（すみません）

SakeRubyという仰々しい名前を取ってしまったので、今後は特定名称酒に限らず、日本酒のラベルに書かれてある名称を完全に理解できるGemにしていければなぁという思いはあります。

年末〜年始にかけて何かと日本酒を飲む機会が増えると思うので、特定名称を覚えて日本酒を楽しんでもらえれば幸いです！



# 参考
新訂　日本酒の基

https://www.amazon.co.jp/%E6%96%B0%E8%A8%82-%E6%97%A5%E6%9C%AC%E9%85%92%E3%81%AE%E5%9F%BA-%E6%97%A5%E6%9C%AC%E9%85%92%E3%82%B5%E3%83%BC%E3%83%93%E3%82%B9%E7%A0%94%E7%A9%B6%E4%BC%9A%E3%83%BB%E9%85%92%E5%8C%A0%E7%A0%94%E7%A9%B6%E4%BC%9A%E9%80%A3%E5%90%88%E4%BC%9A/dp/4907521138

[^1]: ワインのブドウなど原料に糖類を含む場合は、絞った液体に酵母を加えることでアルコール発酵が起こる条件が整う発酵形式を単発酵といい、米や麦などのデンプンを多く含む穀物を糖化酵素を利用して糖類に変化させる糖化の工程が必要となる仕組みを複発酵と呼ぶ。


[^2]: 日本酒の「甘口」「辛口」の感じ方は、飲み手の嗜好や飲酒頻度などによって見解が異なる。

[^3]: 法的な規定が存在しないため、濾過機を使用していても、活性炭を使用しないことで「無濾過」とする場合もあるなど定義は様々である。