Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
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のコード読んでて知りました
• 実...
Upcoming SlideShare
Loading in …5
×

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

981 views

Published on

ぬか漬け大好き☆

Published in: Technology
  • Be the first to comment

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のサイトに書いてある)

×