100日後にエンジニアになるキミ - 45日目 - データ - ファイルの形式について

本日はファイルについてのお話です。

昨日までのはこちら

[100日後にエンジニアになるキミ - 42日目 - クラウド - クラウドサービスについて](https://qiita.com/otupy/items/d1765f1541a104ed6133)

[100日後にエンジニアになるキミ - 36日目 - データベース - データベースについて](https://qiita.com/otupy/items/7af17635d576677606dc)

[100日後にエンジニアになるキミ - 24日目 - Python - Python言語の基礎1](https://qiita.com/otupy/items/6d1e5453f530e07b7aec)

[100日後にエンジニアになるキミ - 18日目 - Javascript - JavaScriptの基礎1](https://qiita.com/otupy/items/2f71d5f9c754b29d9555)

[100日後にエンジニアになるキミ - 14日目 - CSS - CSSの基礎1](https://qiita.com/otupy/items/61a97863f6df14171994)

[100日後にエンジニアになるキミ - 6日目 - HTML - HTMLの基礎1](https://qiita.com/otupy/items/cd2315dcb38671cfded0)

## ファイル形式

ファイル形式はコンピュータ上のデータをどのように扱うかを定めた規約のことです。
`ファイルフォーマット`とも言っています。

ファイル形式は下記のようなものがあります。

| カテゴリ | ファイル形式 | 拡張子 |
|:--|:--|:--|
| ドキュメント | テキスト | .txt |
| ドキュメント | HTML | .html |
| データ記述 | CSV | .csv |
| データ記述 | TSV | .tsv |
| データ記述 | XML | .xml |
| データ記述 | JSON | .json |
| データ記述 | YAML |.yml|
| データ記述 | CSS | .css |
| オフィス関連 | PDF | .pdf |
| オフィス関連 | エクセル | .xlsx , .xls |
| オフィス関連 | ワード | .docx , .doc |
| オフィス関連 | パワーポイント | .pptx , .ppt |
| 画像 | JPEG | .jpg |
| 画像 | PNG | .png |
| 画像 | GIF | .gif |
| 画像 | SVG | .svg |
| 音声 | MP3 | .mp3 |
| 音声 | AAC | .aac |
| 音声 | WAV | .wav |
| 音声 | AIFF | .aiff |
| 動画 | AVI | .avi |
| 動画 | MP4 | .mp4 |
| 動画 | MOV | .mov |
| 圧縮 | tar | .tar |
| 圧縮 | ZIP | .zip |
| 圧縮 | gzip | .gz |
| そのほか | 実行ファイル | .exe |
| そのほか | イメージ | .dmg |
| そのほか | インストーラ | .pkg |


上記のものは様々なソフトウェアで使用できると思います。

ここに記したものは一部です。
ソフトウェアにより、独自の拡張子がつくことがあります。

その場合、その拡張子のファイルは専用のアプリケーションでしか
開くことができないことがよくあります。

## 文字コード

ファイルを確認する上で重要な点として`文字コード`が挙げられます。

文字コードはコンピュータ上で文字を利用する目的で各文字に割り当てられるバイト表現
もしくはバイト表現と文字の体系のことを指して「文字コード」と呼ばれます。

よく用いられている`文字コード`は
`UTF-8`
`Shift-JIS`
`EUC-JP`
などがありますが、ファイルを保存する際に文字コードを指定して保存できます。

`Windows`PCではソフトウェアの標準が`Shift-JIS`であることが多く
`MacOS`で作成されたものは`UTF-8`であることが多いです。

そのため、想定と違う文字コードで保存されたファイルを開こうとすると
文字が化けて出力されます。

その際には読み込みや書き込み時の文字コードを見直して
際読み込みなどを行えば解消されることがあります。


## ドキュメント形式

主なドキュメント形式のファイルとして`テキスト`や`HTML`があります。

テキストは記述形式に決まりがなくルールは特にありません。
`テキストエディター`と呼ばれる類のソフトウェアであればなんでも開くことができます。
気をつける点としては`文字コード`くらいかと思います。

`HTML`はブラウザーで開いた時とテキストエディターで開いた時の挙動が変わります。
`HTML`のコードを修正したい場合はテキストエディター
コードの表示結果をみたい場合はブラウザーで開きましょう。

## データ記述形式

主にデータとして扱われる形式のファイルの形式です。

**CSV(Comma-Separated Values)**
`,`カンマで区切られた形式のファイル形式です。
縦、横で数が揃うような表形式のファイルになっています。

1行目は通常は`ヘッダー`行として扱われ`表頭`としてのデータが書き込まれていることが多いです。
その場合、データ行は2行目以降になります。

注意点として、`,`カンマをデータに含む場合は`"`で囲まれている場合があります。
`,`は通常、区切りの文字として扱われるため、データとしての`,`は
囲み文字で囲んでおかないとデータの列数などがずれてしまうことになります。

データを書き込む際や、読み込みをする際には気をつけましょう。

```csv
num,name,category
1,aaa,vz
2,bbb,cc
```


**TSV(TAB-Separated Values)**
CSVは`,`カンマ区切りでしたが、`TAB`文字区切りになると`TSV`ファイルになります。
違いは`,`が`TAB`になっている事くらいです。

データの中には`,`を普通に埋め込みすることもできるため、CSVと区別して使われます。

```tsv
num    name    category
1    aaa    vz
2    bbb    cc
```


**XML(Extensible Markup Language)**
マークアップ言語で書かれたデータ形式です。


HTMLのように`タグ`を用いて書かれているのが特徴です。
タグによる階層構造になっているので、読み込みや書き込みを工夫する必要があります。

```xml
<レシピ 名前="パン" 準備時間="5分" 調理時間="3時間">
   <料理>基本的なパン</料理>
   <材料 量='3' 単位='カップ'>小麦粉</材料>
   <材料 量='0.25' 単位='オンス'>イースト</材料>
   <材料 量='1.5' 単位='カップ' 状態="温かい">水</材料>
   <材料 量="1" 単位="ティースプーン">食塩</材料>
   <要領>
     <手順>全ての材料を一緒にして混ぜます。</手順>
     <手順>十分にこねます。</手順>
     <手順>布で覆い、暖かい部屋で1時間そのままにしておきます。</手順>
     <手順>もう一度こねます。</手順>
     <手順>パン焼きの容器に入れます</手順>
     <手順>布で覆い、暖かい部屋で1時間そのままにしておきます。</手順>
     <手順>オーブンに入れて温度を180℃にして30分間焼きます。</手順>
   </要領>
 </レシピ>
```

**JSON(JavaScript Object Notation)**
軽量なテキストベースのデータ交換用フォーマットでありプログラミング言語を問わず利用できます。

辞書型の構造になっており
`{名前1：値1,名前2：値2,名前3：値3}`
というような形式になっています。

配列などと組み合わせて複雑な構造体系にすることも可能です。


```json

{
    "キー":"データ",
    "キー":[配列データ], 
    "配列の中に構造":[
        {
            "項目１":{
                "前菜":"サラダ",
                "メインディッシュ":"肉"
            }
        },
        {
            "項目２":{
                "前菜":"サラダ",
                "メインディッシュ":"きのこ"
            }
        }
    ]
}
```


**YAML**
概念的にはXMLと非常に似ていますが、コンフィグファイルの形式としてよく用いられるファイル形式です。

辞書や配列、入れ子など様々な構造を書き込みできます。


```yaml
- red
- blue
- # 入れ子
  - orange
  - pink
- green

meta:
  title : title text
  description : description text

- { name: narusekokomi , age: 28 }
- { name: ueharaai     , age: 29 }
```

**CSS(Cascading Style Sheets)**

HTMLのスタイルを記述するための形式です。
HTMLと組み合わせて用いられることがほとんどです。

中身はCSSの書き方のルールに併せて記述されます。


```css
h1 {
	padding:20px 0px 0px 20px;
	font-family:Arial, Helvetica, sans-serif;
}
```

## オフィス関連のファイル形式

オフィス関連でよく用いられるものは4つ
`PDF`
`エクセル`
`ワード`
`パワーポイント`
です。

基本的に作成は専用のソフトウェアでの作成になりますが
読み込みは様々なソフトウェアで対応している場合があります。

`エクセル`,`ワード`,`パワーポイント`から`PDF`を作成できますが
その逆は難しいです。

`Python言語`であればこの形式のファイルの読み書きを行うことができるので
レポート処理などを自動化したければ`Python`がオススメです。

[100日後にエンジニアになるキミ - 24日目 - Python - Python言語の基礎1](https://qiita.com/otupy/items/6d1e5453f530e07b7aec)

## 画像のファイル形式

画像ファイルには様々な形式がありますが
よく使われるのは以下のものです。


| ファイル形式 | 拡張子 |
|:--|:--|
| JPEG | .jpg |
| PNG | .png |
| GIF | .gif |
| SVG | .svg |

**JPEG**
主に静止画のデータとして用いられる形式です。

**PNG**
静止画のフォーマットですが、透過画像として保存することもできます。

**GIF**
静止画のフォーマットですが、静止画を組み合わせたアニメーション画像を作成することもできます。

**SVG(Scalable Vector Graphics)**
ベクターとも呼び、JPEGやPNGがビットマップデータなのに対し
SVGはXMLをベースにした二次元ベクターデータです。

そのため、拡大縮小しても、画像の滑らかさが保たれるという利点があります。
企業ロゴなどを作成する場合はこの形式を用いることも多いと思います。

画像データは`Photoshop`などの画像編集ソフトを用いて扱うか
プログラム言語を用いて操作、編集などが行えます。

## 音声のファイル形式

よく用いられている音声のファイル形式には以下のようなものがあります。

| ファイル形式 | 拡張子 |
|:--|:--|:--|
| 音声 | MP3 | .mp3 |
| 音声 | AAC | .aac |
| 音声 | WAVE | .wav |
| 音声 | AIFF | .aiff |

**MP3(MPEG-1 Audio Layer-3)**
音声の圧縮データファイルになります。

主に圧縮を行う際の`サンプリング周波数`,`ビットレート`によって圧縮率が変わりファイルサイズが変わります。

**AAC(Advanced Audio Coding)**

MP3の後継規格で、MPEG形式の動画データに含まれる音声データの標準圧縮方式の一つとして広く利用されています。

**WAV(RIFF waveform Audio Format)**
音声データ記述のためのフォーマットで、通常は圧縮なしの音声データとして扱われます。

`サンプリング周波数`,`ビット数`,`チャンネル数`から
`曲の長さ`をかけあわせるとファイルの容量が計算できます。

| |値|
|:--|:--|
| サンプリングレート | 44.1kHz |
| 量子化ビット数 | 16bit |
| チャンネル数 | 2ch |

`16(bit/ch)×44.1(k/sec)×2ch＝1411.2kbps`
`1411200(bit/秒)×60(秒)÷8(bit/Byte)＝10590000Byte＝10.59MB`

**AIFF(Audio Interchange File Format)**
macOS上での音声フォーマットになります。
これも非圧縮であるため、MP3などに変換することができます。

## 動画のファイル形式

よく用いられるものとしては以下のようなものがあります。

| カテゴリ | ファイル形式 | 拡張子 |
|:--|:--|:--|
| 動画 | MP4 | .mp4 |
| 動画 | AVI | .avi |
| 動画 | MOV | .mov |

**MP4**
一般的な動画ファイルの形式です。動画と言えばこの形式をさすことが多いです。
動画広告やYoutubeの動画形式もこのMP4です。

編集を行うには専用のソフトウェアが必要になってきます。
動画の再生は`コーデック`と呼ばれる圧縮伸張プログラムを用いて再生することができます。

再生できない場合は`コーデック`をインストールすれば再生できることもあるので
整備してみましょう。

動画ファイルの容量の目安は
`動画のビットレート　×　長さ（秒）　÷　８(bit/byte)`です。
`2.5Mbps　×　600秒　÷　８　＝　187.5MB`

`ビットレート`は動画のきめ細やかさにも関係してくるので
動画のサイズが大きすぎる場合は落としてみても良いでしょう。

**AVI**
Windows用の動画用ファイルフォーマットです。

**MOV**
Apple社のQuickTimeムービーで作成された形式の動画データファイルです。


## 圧縮ファイル形式

よく用いられるものとしては以下のようなものがあります。

| カテゴリ | ファイル形式 | 拡張子 |
|:--|:--|:--|
| 圧縮 | tar | .tar |
| 圧縮 | ZIP | .zip |
| 圧縮 | gzip | .gz |

**tar**
ファイルアーカイブのファイルフォーマットの一種です。
通常はUNIXコマンドなどで作成します。

解凍は一般的な圧縮解凍ソフトウェアで行うことができます。

**ZIP**
4チャンネルの番組ではないです。圧縮ファイルフォーマットの一種です。
解凍は一般的な圧縮解凍ソフトウェアで行うことができます。

複数ファイルをまとめて１つにする際にはこの形式を用いることが多いです。

**gzip**
圧縮ファイルフォーマットの一種ですがZIPとの違いは
圧縮されるファイルが1つであることです。

ZIPは複数ファイルをまとめて圧縮することが多いですが
gzipは伸長した際にファイルが１つであることが求められます。


## まとめ

様々なファイルの形式があり、ファイルの形式によって取り扱い方も変わってきます。

データの取り扱いはプログラミングやシステム開発では
必須になってきますので、様々なデータ形式のファイルが取り扱えるように
プログラムからのファイルの取り扱いに慣れておきましょう。

君がエンジニアになるまであと55日

## 作者の情報
乙pyのHP：
http://www.otupy.net/

Youtube：
https://www.youtube.com/channel/UCaT7xpeq8n1G_HcJKKSOXMw

Twitter：
https://twitter.com/otupython