Skip to content

Instantly share code, notes, and snippets.

@miyakogi miyakogi/config.md
Last active Oct 22, 2019

Embed
What would you like to do?
JSON, YAML, ini, TOML ざっくり比較

JSON

https://ja.wikipedia.org/wiki/JavaScript_Object_Notation

メリット

  • Python標準に含まれている
  • 仕様が厳格に決まっている

デメリット

  • ファイル内にコメントが書けない
  • 末尾コンマ消し忘れるとエラー
  • カッコ多い
  • 書くの簡単じゃないかも

一つにまとめる場合

[
  {"path": "C:\\Download\\paper",
   "extension": ["pdf", "doc"],
   "destination": ["C:\\Dropbox\\論文\\*", "C:\\My Documents\\査読\\*"]},
  {"path": "C:\\Download\\music",
   "extension": ["mp3", "wav", "mp4"],
   "destination": ["C:\\Dropbox\\音楽\\*", "C:\\My Music\\*"]}
]

分割する場合

全体の設定ファイル (監視対象のフォルダ一覧)

{
  path: ["C:\\Download\\paper", "C:\\Download\\music"]
}

C:\Download\paper の設定ファイル

{
  extension: ["pdf", "doc"],
  destination:  ["C:\\Dropbox\\論文\\*", "C:\\My Documents\\査読\\*"]
}

C:\Download\music の設定ファイル

{
  extension: ["mp3", "wav", "mp4"],
  destination: ["C:\\Dropbox\\音楽\\*", "C:\\My Music\\*"]
}

yaml

https://ja.wikipedia.org/wiki/YAML

メリット

  • コメント書ける
  • 末尾コンマとかあってもなくても大丈夫(たぶん)

デメリット

  • 書くのが難しいらしい?
    • インデント(字下げ)が難しい?
  • Python標準ライブラリに含まれていない
  • バージョンが幾つか存在するらしく、ハマりポイントらしい

一つにまとめる場合

# これはコメント行
- path: 'C:\Download\paper'
  extension:
    - 'pdf'
    - 'doc'
  destination:
    - 'C:\Dropbox\論文\*'
    - 'C:\My Documents\査読\*'
- path: 'C:\Download\music'
  extension: ['mp3', 'wav', 'mp4']  # こういう書き方もできる
  destination: ['C:\Dropbox\音楽\*', 'C:\My Music\*']

分割する場合

全体の設定ファイル (監視対象のフォルダ一覧)

path: ['C:\Download\paper', 'C:\Download\music']
# または
path: 'C:\Download\paper'
      'C:\Download\music'

C:\Download\paper の設定ファイル

extension:
  - pdf
  - doc
destination:
  - 'C:\Dropbox\論文\*'
  - 'C:\My Documents\査読\*'

C:\Download\music の設定ファイル

# こういう書き方もできる
extension: ["mp3", "wav", "mp4"]
destination: ["C:\\Dropbox\\音楽\\*", "C:\\My Music\\*"]

ini

Windows系の設定ファイルでよく見る形式

メリット

  • 読み書きが簡単
  • Python標準ライブラリに含まれている
  • バックスラッシュのエスケープ不要

デメリット

  • 複雑な機能はない
    • すべて文字列型
    • リストが使えない!
  • 仕様が厳格に決まっていない
    • Pythonで使うだけならConfigParserの仕様に従えば問題にならなそう

一つにまとめる場合

リスト使えない???

# これはコメント行
[C:\Download\paper]
extension=
  pdf
  doc
destination=
  C:\Dropbox\論文\*
  C:\My Documents\査読\*

[C:\Download\music]
extension=
  mp3
  wav
  mp4
destination=
  C:\Dropbox\音楽\*
  C:\My Music\*

同じ構造じゃ無理でした

分割する場合

全体の設定ファイル (監視対象のフォルダ一覧)

path =
  C:\Download\paper
  C:\Download\music

C:\Download\paper の設定ファイル

extension =
  pdf
  doc

destination =
  C:\Dropbox\論文\*
  C:\My Documents\査読\*

C:\Download\music の設定ファイル

# こういう書き方もできる?
[extension]
mp3
wav
mp4

[destination]
C:\Dropbox\音楽\*
C:\My Music\*

TOML

ini風? 仕様: https://github.com/toml-lang/toml#user-content-integer 仕様の和訳: http://qiita.com/minoritea/items/c0de47b8beb813c655d4

メリット

  • ini風だけど明瞭・高機能
  • コメントも書ける

デメリット

  • 仕様が変更される可能性がある(まだ正式版リリースではない)
  • Python標準ライブラリに含まれていない
  • 難しいところがあるかも

一つにまとめる場合

# これはコメント行
['C:\Download\paper']
extension = ['pdf', 'doc']
destination = ['C:\Dropbox\論文\*', 'C:\My Documents\査読\*']

['C:\Download\music']
extension=['mp3', 'wav', 'mp4']
destination=['C:\Dropbox\音楽\*', 'C:\My Music\*']

分割する場合

全体の設定ファイル (監視対象のフォルダ一覧)

path = [
  'C:\Download\paper',
  'C:\Download\music',  # 最後のコンマはあってもなくてもOK
]

C:\Download\paper の設定ファイル

extension = [
  'pdf',
  'doc'
]

destination = [
  'C:\Dropbox\論文\*',
  'C:\My Documents\査読\*'
]

C:\Download\music の設定ファイル

# こういう書き方もできる? 保留!
extension = [
  "mp3",
  "wav",
  "mp4"
]

destination = [
  "C:\\Dropbox\\音楽\\*",
  "C:\\My Music\\*"
]
@xtaka

This comment has been minimized.

Copy link

xtaka commented Jun 6, 2019

メリット/デメリット/サンプルもあって、とても分かりやすい!
TOMLは勉強になった。

@y0d0gawaeuc11d

This comment has been minimized.

Copy link

y0d0gawaeuc11d commented Aug 15, 2019

Gmailのフィルター変換用にいろいろ探してます。
わかりやすさはTOMLの圧勝ですなあ

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
You can’t perform that action at this time.