ファイルが見つかりさえすれば、.ttfでも、.otfでもなんでも良かった。

こんにちは。
フロントエンドエンジニアのみつです。

少し前なんですが、
DockerでBuildをする時に、Noto_Sans_JPフォントの展開に失敗し、
フォントの種類にも色々あるんだなということを知ったのでそのメモ。

```Dockerfile
RUN wget "https://fonts.google.com/download?family=Noto%20Sans%20JP" -O zip/Noto_Sans_JP.zip
RUN unzip -o 'zip/*.zip' -d zip
RUN mkdir -p /usr/share/fonts/truetype/google-fonts \
    && cp zip/*.otf /usr/share/fonts/truetype/google-fonts \
    && rm -rf zip
```

## 目次
- [出現する単語たち](#出現する単語たち)
- [起きた問題](#起きた問題)
- [.ttf拡張子とか.otf拡張子って何か違いがあるのか？？](#ttf拡張子とかotf拡張子って何か違いがあるのか)
  - [.ttf拡張子について](#ttf拡張子について)
  - [.otf拡張子について](#otf拡張子について)
  - [otf形式とttf形式の違いとエラー](#otf形式とttf形式の違いとエラー)
- [修正した点](#修正した点)
- [まとめ](#まとめ)

## 出現する単語たち
- .ttf(フォント拡張子)
- .otf(フォント拡張子)

## 起きた問題
下記の部分でDockerがうまく立ち上がらない問題が発生。
```Dockerfile
RUN wget "https://fonts.google.com/download?family=Noto%20Sans%20JP" -O zip/Noto_Sans_JP.zip
RUN unzip -o 'zip/*.zip' -d zip
RUN mkdir -p /usr/share/fonts/truetype/google-fonts \
    && cp zip/*.otf /usr/share/fonts/truetype/google-fonts \
    && rm -rf zip
```

Buildのログを眺めていると、'zip/*.otf'なんてものは存在しないと怒られてしまいました。
```shell
[deps 12/14] 
RUN mkdir -p /usr/share/fonts/truetype/google-fonts     
&& cp zip/*.otf /usr/share/fonts/truetype/google-fonts     
&& rm -rf zip
→ cp: cannot stat 'zip/*.otf': No such file or directory
     
ERROR IN: 
[deps 12/14] 
RUN mkdir -p /usr/share/fonts/truetype/google-fonts     
&& cp zip/*.otf /usr/share/fonts/truetype/google-fonts     
&& rm -rf zip
     
got unexpected error during build/deploy: ImageBuild: executor failed running 
[/bin/sh -c mkdir -p /usr/share/fonts/truetype/google-fonts && cp zip/*.otf /usr/share/fonts/truetype/google-fonts && rm -rf zip]: exit code: 1

Build Failed: ImageBuild: executor failed running 
[/bin/sh -c mkdir -p /usr/share/fonts/truetype/google-fonts && cp zip/*.otf /usr/share/fonts/truetype/google-fonts && rm -rf zip]: exit code: 1
```

でもこれまで成功していた立ち上げが失敗しているのは、正直何の話かも分からず。

とりあえず、GoogleFontを直接ダウンロードして解凍してみたら、*.otfに一致するものが確かにない。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1841912/07203692-4ed0-d96d-69b6-3366a3780c3c.png)

## .ttf拡張子とか.otf拡張子って何か違いがあるのか？？
### .ttf拡張子について
- TrueTypeフォントに、.ttfがつく
- TrueTypeフォントは、初めApple社が独自に開発しようとしていた
- TrueTypeフォントは、Apple社とMicrosoft社が共同で開発したフォント

> AppleはDisplayPostScriptと契約せず、ロイヤルというアウトラインフォント技術を独自開発した。MicrosoftはPostScript互換RIPの開発や評価をしていたバウア社を吸収した。両者が技術をバーターすればAdobeの技術なしに画面およびプリンタのWYSIWYGが可能になるとして提携して発表したのが、フォントのTrueTypeおよびRIPに相当するTrueImageで、どちらのOS環境でも使えるものであり、仕様はオープンなものにしようとしていた。

https://www.jagat.or.jp/past_archives/story/691.html

### .otf拡張子について
- PostScriptベースのものに、.otfがつく
- OpenTypeフォントすべてが.otfというわけではない*
- 有名どころにモリサワフォントらしい。（良いよね、好き。笑）

*OpenTypeフォントは、TrueTypeフォントの拡張版。
*OpenType自体は、**TrueTypeフォント**と**PostScriptフォント**の総称なので、OpenType=.otfではない。

### otf形式とttf形式の違いとエラー
TrueTypeフォントには、.ttf拡張子。

OpenTypeのもので、PostScript系統のものが.otf、TrueType系統のものに、.ttfや.ttcの拡張子。

今回、Noto_Sans_JPフォントのリリース情報は探しても見つけられませんでしたが、

- **事実として展開したフォルダの中には、*.otfはなかった**

ので、置き換えられたのかな・・・。と思いつつ。

そういった変更もあるんだなぁ・・・勉強になりました。

## 修正した点
zip/*.ttfを展開できるように修正をし、再度立ち上げ直したら問題なく立ち上がりました。

```Dockerfile
RUN mkdir -p /usr/share/fonts/truetype/google-fonts
RUN cp zip/*.otf /usr/share/fonts/truetype/google-fonts; exit 0
+ RUN cp zip/*.ttf /usr/share/fonts/truetype/google-fonts; exit 0
RUN rm -rf zip
```

## まとめ
フォントにも色々な種類の拡張子があったり、
Apple, Adobe, Microsoftがフォントの歴史を作って来たり。

フォントについてもっと知る良い機会になりました。

加えて、.ttfや.otfといった拡張子とTrueTypeフォントやOpenTypeフォントは近い関係にありつつ、

- :ok_woman_tone2:　TrueTypeフォントは、.ttf
- :no_good_tone2:　OpenTypeフォントは、≠.otf
にもびっくり。

こういう歴史的な知識とかは以外と好き。

おわり。