shizuoka.py #4 pythonで設定ファイルを使う 質疑と資料について追記版

62
Pythonで設定ファイルを扱う Shizuoka.py #4 hiroshi sano <[email protected]> 1

Upload: sano-hiroshi

Post on 12-Jul-2015

280 views

Category:

Engineering


4 download

TRANSCRIPT

Page 1: Shizuoka.py #4 pythonで設定ファイルを使う 質疑と資料について追記版

Pythonで設定ファイルを扱う

Shizuoka.py #4

hiroshi sano <[email protected]>

1

Page 2: Shizuoka.py #4 pythonで設定ファイルを使う 質疑と資料について追記版

自己紹介

● hiroshi sano hr-sano.net / @hrs_sano645

● 会場の地域に住んでます(出身)

● 普段は実家の設計事務所でIT周りの便利屋

○ たまにishiilab.netにお手伝い

● 最近プログラミングしてない(汗)リハビリ中

2

Page 3: Shizuoka.py #4 pythonで設定ファイルを使う 質疑と資料について追記版

ネタ的にはブログの記事の加筆です

大体が「ありのままで」す

3

Page 4: Shizuoka.py #4 pythonで設定ファイルを使う 質疑と資料について追記版

実体験/主観で語ります

(個人談なので異論などあればお願いします)

4

Page 5: Shizuoka.py #4 pythonで設定ファイルを使う 質疑と資料について追記版

環境設定ファイルとは

環境設定ファイルとは - IT用語辞典 Weblio辞書

アプリの挙動に関する項目を保持するために使います

環境設定ファイルとは、パソコンをユーザー自身にとってより使いやすくするために行われた環境設定の情報を収めたファイルのことである。マウスを移動するスピードやディスプレイの表示解像度などのハードウエア設定や、アプリケーションソフトの画面表示や動作に関するものなど、多岐にわたる項目が保存されている。

5

Page 6: Shizuoka.py #4 pythonで設定ファイルを使う 質疑と資料について追記版

もくじ

1. いつ設定ファイルを使う?

2. どの設定ファイルを使う?

○ ini, json, yaml

○ ipython notebookでハンズオン

6

Page 7: Shizuoka.py #4 pythonで設定ファイルを使う 質疑と資料について追記版

もくじ

1. いつ設定ファイルを使う?

2. どの設定ファイルを使う?

○ ini, json, yaml

○ ipython notebookでハンズオン

7

Page 8: Shizuoka.py #4 pythonで設定ファイルを使う 質疑と資料について追記版

いつ設定ファイルを使う?

8

Page 9: Shizuoka.py #4 pythonで設定ファイルを使う 質疑と資料について追記版

いつ設定ファイルを使う?

9

いつやるか、

_人人人人人人人人_

> 今で.....  < ̄Y^Y^Y^Y^Y^Y^Y ̄

Page 10: Shizuoka.py #4 pythonで設定ファイルを使う 質疑と資料について追記版

それ去年の・・・

「ダメよ〜、ダメダメ!」

10

Page 11: Shizuoka.py #4 pythonで設定ファイルを使う 質疑と資料について追記版

いつ設定ファイルを使う?

11

● 必要になるタイミング

○ アプリの成長過程

○ 扱う処理の複雑さ

● 必要になるアプリの形態

○ 単純な数行のスクリプトには必要ないが、

IDEとかには必要

Page 12: Shizuoka.py #4 pythonで設定ファイルを使う 質疑と資料について追記版

アプリが成長する過程

1. 単純なスクリプト(プロトタイプ)

2. モジュールが複数作られる

3. コード量が増えて複雑になる

4. フリージング/GUI?/パッケージ化?

12

Page 13: Shizuoka.py #4 pythonで設定ファイルを使う 質疑と資料について追記版

アプリが成長する過程

1. 単純なスクリプト(プロトタイプ)

2. モジュールが複数作られる

3. コード量が増えて複雑になる

4. フリージング/GUI?/パッケージ化?

この辺で必要になった

13

Page 14: Shizuoka.py #4 pythonで設定ファイルを使う 質疑と資料について追記版

アプリが成長する過程

1. 単純なスクリプト(プロトタイプ)

2. モジュールが複数作られる

3. コード量が増えて複雑になる

4. フリージング/GUI?/パッケージ化?

14

Page 15: Shizuoka.py #4 pythonで設定ファイルを使う 質疑と資料について追記版

1.単純なスクリプト(プロトタイプ)

単純に処理をまとめて、動くようになった程度

● スクリプト内に設定を書く

○ コード本体に入れてもまだ気にならない?

● スクリプトの上に共通で使う変数を用意すれば

困らない

15

Page 16: Shizuoka.py #4 pythonで設定ファイルを使う 質疑と資料について追記版

main

1.単純なスクリプト(プロトタイプ)

16

Input OutputProcess

例:ファイル開いて処理してファイルとして書き出す

Page 17: Shizuoka.py #4 pythonで設定ファイルを使う 質疑と資料について追記版

main

1.単純なスクリプト(プロトタイプ)

17

Input OutputProcess

例:ファイル開いて処理してファイルとして書き出す

● 入力ファイル名 ● 処理のパラメータ ● 出力ファイル名

● スクリプト内で変数定義● コマンドの引数で指定

Page 18: Shizuoka.py #4 pythonで設定ファイルを使う 質疑と資料について追記版

アプリが成長する過程

1. 単純なスクリプト(プロトタイプ)

2. モジュールが複数作られる

3. コード量が増えて複雑になる

4. フリージング/GUI?/パッケージ化?

18

Page 19: Shizuoka.py #4 pythonで設定ファイルを使う 質疑と資料について追記版

2.モジュールが複数作られる

それぞれの工程をモジュールとして分ける

● 工程の操作はmain的な場所で行う

○ mainのスクリプト上で変数宣言して使う

● モジュールの呼び出す関数やクラスにパラメータを

入れれるようにする

19

Page 20: Shizuoka.py #4 pythonで設定ファイルを使う 質疑と資料について追記版

main

2.モジュールが複数作られる

20

関数/クラス の引数

Input

例:ファイル開いて処理してファイルとして書き出す

OutputProcess

● 入力ファイル名 ● 処理のパラメータ ● 出力ファイル名

Page 21: Shizuoka.py #4 pythonで設定ファイルを使う 質疑と資料について追記版

2.モジュールが複数作られる

● モジュールを設定ファイル的に扱う

スクリプトファイルも設定ファイルとして使われる

(Vagrantの設定ファイル(Vagrantfile)はRubyですよね)

21

Page 22: Shizuoka.py #4 pythonで設定ファイルを使う 質疑と資料について追記版

main

2.モジュールが複数作られる

22

config value:module

Input

例:ファイル開いて処理してファイルとして書き出す

OutputProcess

● 入力ファイル名 ● 処理のパラメータ ● 出力ファイル名

Page 23: Shizuoka.py #4 pythonで設定ファイルを使う 質疑と資料について追記版

アプリが成長する過程

1. 単純なスクリプト(プロトタイプ)

2. モジュールが複数作られる

3. コード量が増えて複雑になる

4. フリージング/GUI?/パッケージ化?

23

Page 24: Shizuoka.py #4 pythonで設定ファイルを使う 質疑と資料について追記版

3.複雑になる

● ファイルの処理する種類が増える

○ パラメータが増える

○ 組み合わせも増える

24

Page 25: Shizuoka.py #4 pythonで設定ファイルを使う 質疑と資料について追記版

3.複雑になる

25

Input2

例:ファイル開いて処理してファイルとして書き出す

Output2Process2

Input1 Process1 Output1

Input3 Process3 Output3

Page 26: Shizuoka.py #4 pythonで設定ファイルを使う 質疑と資料について追記版

3.複雑になる

26

Input2

例:ファイル開いて処理してファイルとして書き出す

Output2Process2

Input1 Process1 Output1

Input3 Process3 Output3

● 入力ファイル名 ● パラメータセット1● パラメータセット2● パラメータセット3● …..

● 出力ファイル名

Page 27: Shizuoka.py #4 pythonで設定ファイルを使う 質疑と資料について追記版

3.複雑になる

27

Input2

例:ファイル開いて処理してファイルとして書き出す

Output2Process2

Input1 Process1 Output1

Input3 Process3 Output3

● 入力ファイル名 ● パラメータセット1● パラメータセット2● パラメータセット3● …..

● 出力ファイル名

一連の処理の組み合わせがたくさんになる

(書くのが面倒になった)

Page 28: Shizuoka.py #4 pythonで設定ファイルを使う 質疑と資料について追記版

3.複雑になる

● 組み合わせごとの設定をそれぞれまとめる

○ 変数も駆使して

○ 辞書にぶっこむ(辞書の辞書も出来ますし)

● まだPythonスクリプトでも行ける

○ 便利に使えるなら

28

Page 29: Shizuoka.py #4 pythonで設定ファイルを使う 質疑と資料について追記版

アプリが成長する過程

1. 単純なスクリプト(プロトタイプ)

2. モジュールが複数作られる

3. コード量が増えて複雑になる

4. フリージング/GUI?/パッケージ化?

29

Page 30: Shizuoka.py #4 pythonで設定ファイルを使う 質疑と資料について追記版

4.フリージング/GUI?/パッケージ化?

30

Inputs

例:ファイル開いて処理してファイルとして書き出す

OutputsProcesses

Page 31: Shizuoka.py #4 pythonで設定ファイルを使う 質疑と資料について追記版

GUI Wrapper

4.フリージング/GUI/パッケージ化?

31

Inputs

例:ファイル開いて処理してファイルとして書き出す

OutputsProcesses

GUI config

Previousconfig

Process configs….

Page 32: Shizuoka.py #4 pythonで設定ファイルを使う 質疑と資料について追記版

4.フリージング/GUI?/パッケージ化?

● 扱う情報量が多い / 可変する設定も増えてくる

○ =管理しやすくしたくなる

● スクリプトで設定をまとめるもまだ大丈夫

● フリージングした場合はスクリプトを読み込む方法

の提供が必要

○ 結構面倒。。。

32

Page 33: Shizuoka.py #4 pythonで設定ファイルを使う 質疑と資料について追記版

4.フリージング/GUI?/パッケージ化?

33

さすがに

_人人人人人人人人_

> 今でしょう! <

 ̄Y^Y^Y^Y^Y^Y^Y ̄

Page 34: Shizuoka.py #4 pythonで設定ファイルを使う 質疑と資料について追記版

[まとめ]いつ設定ファイルを使う?

34

● 必要になるタイミング

○ アプリの成長過程

○ 扱う処理の複雑さ

● 必要になるアプリの形態

○ 単純な数行のスクリプトには必要ないが、

IDEとかには必要

Page 35: Shizuoka.py #4 pythonで設定ファイルを使う 質疑と資料について追記版

もくじ

1. いつ設定ファイルを使うか?

2. どの設定ファイルを使う?

○ ini, json, yaml

○ ipython notebookでハンズオン

35

Page 36: Shizuoka.py #4 pythonで設定ファイルを使う 質疑と資料について追記版

Pythonで扱えそうな設定ファイル

人が読みやすくて描きやすい物を選ぶと(この辺も主観)

1. INI

2. json(?)

3. yaml

36

Page 37: Shizuoka.py #4 pythonで設定ファイルを使う 質疑と資料について追記版

Pythonで扱えそうな設定ファイル

人が読みやすくて描きやすい物を選ぶと

1. INI => ConfigPerser(標準ライブラリ)

2. json => json(標準ライブラリ)

3. yaml => PyYaml(pip install pyyaml)

37

Page 38: Shizuoka.py #4 pythonで設定ファイルを使う 質疑と資料について追記版

INIファイル

● 様々な場所でよく見るファイル

● セクション>オプション名とバリューで設定を定義

○ ConfigPerserの場合

38

Page 39: Shizuoka.py #4 pythonで設定ファイルを使う 質疑と資料について追記版

INIのメリット/デメリット

メリット

● 一般的に良く使われてる

● 文法はシンプル

● コメント書ける

デメリット

● 複雑なデータは向かない

● 拡張フォーマットの存在

39

Page 40: Shizuoka.py #4 pythonで設定ファイルを使う 質疑と資料について追記版

JSON(JavaScript Object Notation)

● WEB系のAPIなどでお馴染み

● javascriptのオブジェクトリテラルそのまま

○ Pythonの辞書的な扱いができる

40

Page 41: Shizuoka.py #4 pythonで設定ファイルを使う 質疑と資料について追記版

jsonのメリット/デメリット

メリット

● よく使われてきてる

● 汎用性高い

● データの表現が多い

デメリット

● コメントが書けない

● 13日の金曜日の映画と間

違える

41

Page 42: Shizuoka.py #4 pythonで設定ファイルを使う 質疑と資料について追記版

YAML(YAML Ain't Markup Language)

● jsonと同じような、データ交換フォーマット

● バージョンが1.0, 1.1, 1.2(beta?)がある。

● Pythonでは1.1 = PyYAML

○ 1.1のリファレンス実装らしい

42

Page 43: Shizuoka.py #4 pythonで設定ファイルを使う 質疑と資料について追記版

YAMLのメリット/デメリット

メリット

● 1.1に準拠するならpython

では使いやすい

● 豊富なデータ表現

● コメント書ける

43

デメリット

● 他の環境のバージョンの

違いで流用難しい

Page 44: Shizuoka.py #4 pythonで設定ファイルを使う 質疑と資料について追記版

オルタナティブ(既存の改善)

● ini(ConfigPerser) -> Configobj ()

○ ini構文の拡張

○ matplotlib, ipythonでも採用

● JSON -> Relaxed JSON ( rson)

○ jsonの文法縛りがゆるい

○ コメント書けるらしい

44

Page 45: Shizuoka.py #4 pythonで設定ファイルを使う 質疑と資料について追記版

設定ファイルって結構フリーダム!

使いやすいか、実績があるかで選びましょう

45

Page 46: Shizuoka.py #4 pythonで設定ファイルを使う 質疑と資料について追記版

設定ファイルって結構フリーダム!

フリーダムすぎるのは「妖怪の仕業」

どうにかしてほしいよね・・・

46

Page 47: Shizuoka.py #4 pythonで設定ファイルを使う 質疑と資料について追記版

個人的にはYAML使います

その宣言いらなくね?

47

Page 48: Shizuoka.py #4 pythonで設定ファイルを使う 質疑と資料について追記版

まとめ

1. いつ設定ファイルを使うか?

2. どの設定ファイルを使う?

○ ini, json, yaml

○ ipython notebookでハンズオン

48それでは「ごきげんよう」

Page 49: Shizuoka.py #4 pythonで設定ファイルを使う 質疑と資料について追記版

おまけ

時間が余ったら紹介

49

Page 50: Shizuoka.py #4 pythonで設定ファイルを使う 質疑と資料について追記版

Github中の人提案の「TOML」

● https://github.com/toml-lang/toml#example

● 見た目はiniの独自拡張っぽい

○ 結構書きやすそう

● Pythonのパーサー

https://pypi.python.org/pypi/toml/0.8.2

50

Page 51: Shizuoka.py #4 pythonで設定ファイルを使う 質疑と資料について追記版

Winのレジストリ

● Pythonの標準ライブラリにあります

○ _winreg(2系), winreg(3系)

● Windowsオンリーです(よね?)

51

Page 52: Shizuoka.py #4 pythonで設定ファイルを使う 質疑と資料について追記版

apacheのhttp.confで使うようなあれ

● http://stackoverflow.com/questions/237209/any-python-

libs-for-parsing-apache-config-files

(丸投げサーセン)

● 汎用かつ一般的な方法はなし?

52

Page 53: Shizuoka.py #4 pythonで設定ファイルを使う 質疑と資料について追記版

XMLは

すみません。扱ったことありません。。。

ElementTreeとかlxmlとかですかね

53

Page 54: Shizuoka.py #4 pythonで設定ファイルを使う 質疑と資料について追記版

linuxのconf.d

● 特定のモジュールを使うような話はなし?

● ディレクトリ>該当する設定ファイルを探すだけ

○ glob.globとワイルドカード指定

○ os.listdir + 正規表現で絞る

(想像なので実際にやるとハマるかもしれません、

 設定ファイルの文法チェックとか)

54

Page 55: Shizuoka.py #4 pythonで設定ファイルを使う 質疑と資料について追記版

55

Page 56: Shizuoka.py #4 pythonで設定ファイルを使う 質疑と資料について追記版

発表終了後の追記

30分発表の予定が1時間ですみませんでした(懺悔)

56

Page 57: Shizuoka.py #4 pythonで設定ファイルを使う 質疑と資料について追記版

今日利用した資料

githubにあります

https://github.com/hrsano645/shizuokapy-no4-handson

57

Page 58: Shizuoka.py #4 pythonで設定ファイルを使う 質疑と資料について追記版

質疑

● jsonとyamlは何方が最初に出てきた?(@fmkz___)

58

Page 59: Shizuoka.py #4 pythonで設定ファイルを使う 質疑と資料について追記版

質疑:jsonとyaml、出が早いのは何方?

yaml

http://yaml.org/spec/1.0/ のリリース日とすると

Final Draft 2004-JAN-29 とあり、

Copyright © 2001-2004 Oren Ben-Kiki, Clark Evans,

Brian Ingerson

ともあるので、2001年ごろから策定が始まったようです

59

Page 60: Shizuoka.py #4 pythonで設定ファイルを使う 質疑と資料について追記版

質疑:jsonとyaml、出が早いのは何方?

yaml

http://yaml.org/spec/1.0/ のリリース日とすると

Final Draft 2004-JAN-29 とあり、

Copyright © 2001-2004 Oren Ben-Kiki, Clark Evans,

Brian Ingerson

ともあるので、2001年ごろから策定が始まったようです

60

Page 61: Shizuoka.py #4 pythonで設定ファイルを使う 質疑と資料について追記版

質疑:jsonとyaml、出が早いのは何方?

json

http://www.json.org/json-ja.html の引用

RFC4627で正式となったのが、July 2006でした。

61

JavaScriptプログラミング言語 (ECMA-262標準第3版 1999年12月)の一部をベースに作られています。

Page 62: Shizuoka.py #4 pythonで設定ファイルを使う 質疑と資料について追記版

質疑:jsonとyaml、出が早いのは何方?

そのため、

● 考えとしてはjsonが早くて

● 仕様としてリリースされたのは yamlが早い

と思います。

62