Ce diaporama a bien été signalé.
Nous utilisons votre profil LinkedIn et vos données d’activité pour vous proposer des publicités personnalisées et pertinentes. Vous pouvez changer vos préférences de publicités à tout moment.
ClickでCLIをお手軽に
つくるぅぅぅぅ
@fmkz___
自己紹介
• @fmkz___
– 某製薬企業の研究職
– 静岡デベロッパーズの「プログラミング
Haskell読書会」からコミュニティに参加し始
める(2011くらい)
– 最近なぜがjQuery書いてます(謎)
– 年末に転職しました
そんなある日、心機一転ウェブ
サービスでも作るかと
pip install flask
flaskコマンド出来てた…
• python app.pyじゃなくてflask run
• click使って書かれてた
$ export FLASK_APP=app.py
$ export FLASK_DEBUG=1
$ flask run ...
click?
• Flaskの作者Armin RonacherによるCLI作
成ツール
• http://click.pocoo.org/5/
click使いやすい
• 今までoptparseとかargparseを使っていた
けどclickに乗り換えた
• argparseとか覚えにくかった
import argparse
parser = argparse.ArgumentParse...
clickだとimportして@で包むだけ
import click
@click.command()
@click.argument("name")
@click.option("--shiz", is_flag=True)
def cli(...
helpももちろん
$ python sample.py --help
Usage: sample.py [OPTIONS] NAME
Options:
--shiz
--help Show this message and exit.
サブコマンド作るのが簡単
• サブコマンド?
• git addとかgit statusみたいなやつ
• git init --bareみたいにサブコマンドがオプ
ションを取る
というわけで今日はclickを使っ
てぬか床エミュレーターを作っ
てみましょう
私とぬか漬け
• 近所に美味しいぬか漬けが売ってない…
• ならば作ってしまえと去年のゴールデン
ウィークに突然ぬか床をこしらえ始めた
• かき混ぜるのは手間だけど、ゴーヤとか
小松菜とかゆで卵とか色々漬けられて楽
しい
コマンド名はnucca
• まずはinitできないとね
repo_name = ".nucca"
@click.group()
def cli():
pass
@cli.command()
def init():
os.mkdir(repo_n...
initしてみましょう
$ python nucca.py --help
Usage: nucca.py [OPTIONS] COMMAND [ARGS]...
Options:
--help Show this message and exi...
add実装
• addできるように
• argumentとoptionの二種類あります
@cli.command(help="Add materials to the Nucca-docco")
@click.argument("materia...
いまどうなってんの?
• statusできるように
@cli.command(help="Show the Nucca-docco status")
def status():
nucca = load()
tdelta = datetime....
産地のトレース
• trace
@cli.command(help="Trace materials")
@click.argument("material")
def trace(material):
if material == "cucu...
かき混ぜる機能忘れてた
• mix
• プログレスバーも出せます
@cli.command(help="Mix Nucca-docco")
def mix():
with click.progressbar(range(5),
label='M...
まとめ
• click便利、オススメ
• 特にウェブサービスをコマンドラインで実行
したい場合flaskにデコレータがついているの
でflask mycommandとかできて便利
– flask-migrateのコード読んでて知りました
• 実...
Prochain SlideShare
Chargement dans…5
×

ClickでCLIをお手軽につくるぅぅぅ

1 149 vues

Publié le

ぬか漬け大好き☆

Publié dans : Technologie
  • Soyez le premier à commenter

ClickでCLIをお手軽につくるぅぅぅ

  1. 1. ClickでCLIをお手軽に つくるぅぅぅぅ @fmkz___
  2. 2. 自己紹介 • @fmkz___ – 某製薬企業の研究職 – 静岡デベロッパーズの「プログラミング Haskell読書会」からコミュニティに参加し始 める(2011くらい) – 最近なぜがjQuery書いてます(謎) – 年末に転職しました
  3. 3. そんなある日、心機一転ウェブ サービスでも作るかと pip install flask
  4. 4. flaskコマンド出来てた… • python app.pyじゃなくてflask run • click使って書かれてた $ export FLASK_APP=app.py $ export FLASK_DEBUG=1 $ flask run host=0.0.0.0
  5. 5. click? • Flaskの作者Armin RonacherによるCLI作 成ツール • http://click.pocoo.org/5/
  6. 6. click使いやすい • 今までoptparseとかargparseを使っていた けどclickに乗り換えた • argparseとか覚えにくかった import argparse parser = argparse.ArgumentParser(description='Process some integers.') parser.add_argument('integers', metavar='N', type=int, nargs='+', help='an integer for the accumulator') parser.add_argument('--sum', dest='accumulate', action='store_const', const=sum, default=max, help='sum the integers (default: find the max)') args = parser.parse_args() print(args.accumulate(args.integers))
  7. 7. clickだとimportして@で包むだけ import click @click.command() @click.argument("name") @click.option("--shiz", is_flag=True) def cli(name, shiz): gleet = "うみゃ〜ら" if shiz else "Hello" click.echo("{} {}".format(gleet, name)) if __name__ == '__main__': cli()
  8. 8. helpももちろん $ python sample.py --help Usage: sample.py [OPTIONS] NAME Options: --shiz --help Show this message and exit.
  9. 9. サブコマンド作るのが簡単 • サブコマンド? • git addとかgit statusみたいなやつ • git init --bareみたいにサブコマンドがオプ ションを取る
  10. 10. というわけで今日はclickを使っ てぬか床エミュレーターを作っ てみましょう
  11. 11. 私とぬか漬け • 近所に美味しいぬか漬けが売ってない… • ならば作ってしまえと去年のゴールデン ウィークに突然ぬか床をこしらえ始めた • かき混ぜるのは手間だけど、ゴーヤとか 小松菜とかゆで卵とか色々漬けられて楽 しい
  12. 12. コマンド名はnucca • まずはinitできないとね repo_name = ".nucca" @click.group() def cli(): pass @cli.command() def init(): os.mkdir(repo_name) nucca = {} nucca["started"] = datetime.now() joblib.dump(nucca, os.path.join(repo_name, "default")) click.echo("Created an empty Nucca repository")
  13. 13. initしてみましょう $ python nucca.py --help Usage: nucca.py [OPTIONS] COMMAND [ARGS]... Options: --help Show this message and exit. Commands: init $ python nucca.py init Created an empty Nucca repository
  14. 14. add実装 • addできるように • argumentとoptionの二種類あります @cli.command(help="Add materials to the Nucca-docco") @click.argument("material") def add(material): nucca = joblib.load(os.path.join(repo_name, "default")) nucca["materials"].append(material) joblib.dump(nucca, os.path.join(repo_name, "default")) click.echo("Add {}".format(material)) めんどくさがらずにクラスにしてけばよかった…
  15. 15. いまどうなってんの? • statusできるように @cli.command(help="Show the Nucca-docco status") def status(): nucca = load() tdelta = datetime.now() - nucca["started"] acid_option = 0 if "biofermin" in nucca["materials"]: acid_option += 1000 if "nukamiso-karashi" in nucca["materials"]: acid_option -= 500 acidity = 100 * (tdelta.seconds + acid_option) / 3600.0 click.echo("乳酸菌 {}".format(acidity)) click.echo("中に入っているもの {}".format(", ".join(nucca["materials"])))
  16. 16. 産地のトレース • trace @cli.command(help="Trace materials") @click.argument("material") def trace(material): if material == "cucumber": click.launch("https://cucumber.io/") elif material == "letuce": click.launch("http://lettuce.it/tutorial/simple.html") else: click.echo("unknown")
  17. 17. かき混ぜる機能忘れてた • mix • プログレスバーも出せます @cli.command(help="Mix Nucca-docco") def mix(): with click.progressbar(range(5), label='Mixing Nucca-docco') as bar: for i in bar: sleep(1)
  18. 18. まとめ • click便利、オススメ • 特にウェブサービスをコマンドラインで実行 したい場合flaskにデコレータがついているの でflask mycommandとかできて便利 – flask-migrateのコード読んでて知りました • 実際に使う場合にはsetup.pyでコマンドにす る(やり方はclickのサイトに書いてある)

×