SlideShare a Scribd company logo
Submit Search
Upload
3分でサーバオペレーションコマンドを作る技術
Report
Share
Kei IWASAKI
Follow
•
16 likes
•
12,740 views
1
of
52
3分でサーバオペレーションコマンドを作る技術
•
16 likes
•
12,740 views
Report
Share
Download Now
Download to read offline
Technology
#pyconjp 2015 の LTで発表した際に利用した資料です https://pycon.jp/2015/ja/schedule/presentation/93/
Read more
Kei IWASAKI
Follow
Recommended
tse - Pythonによるテキスト整形ユーティリティ by
tse - Pythonによるテキスト整形ユーティリティ
Atsuo Ishimoto
22.5K views
•
32 slides
Cli mini Hack!#1 ~Terminalとの親睦を深めよう~ by
Cli mini Hack!#1 ~Terminalとの親睦を深めよう~
Kei IWASAKI
2.7K views
•
60 slides
Sphinx HTML Theme Hacks by
Sphinx HTML Theme Hacks
Shoji KUMAGAI
9K views
•
40 slides
PyCon JP 2012 hands-on セッション/ FlaskによるWebアプリケーションの実装とプログラミングツール by
PyCon JP 2012 hands-on セッション/ FlaskによるWebアプリケーションの実装とプログラミングツール
Atsuo Ishimoto
23K views
•
35 slides
第1回python勉強会 by
第1回python勉強会
Yoshio Shimomura
2.5K views
•
60 slides
今年使ってみて良かった、Pythonモジュール、パッケージ、ツール by
今年使ってみて良かった、Pythonモジュール、パッケージ、ツール
aoshiman
5.1K views
•
24 slides
More Related Content
What's hot
"Continuous Publication" with Python: Another Approach by
"Continuous Publication" with Python: Another Approach
Daisuke Miyakawa
4.6K views
•
115 slides
Python × Herokuで作る 雑談slack bot by
Python × Herokuで作る 雑談slack bot
dcubeio
12.1K views
•
63 slides
Pythonを取り巻く開発環境 #pyconjp by
Pythonを取り巻く開発環境 #pyconjp
Yoshifumi Yamaguchi
12.7K views
•
62 slides
Sphinx customization for OGP support at SphinxCon JP 2018 by
Sphinx customization for OGP support at SphinxCon JP 2018
Takayuki Shimizukawa
2.9K views
•
34 slides
「Python言語」はじめの一歩 / First step of Python by
「Python言語」はじめの一歩 / First step of Python
Takanori Suzuki
65.9K views
•
88 slides
Python入門 by
Python入門
Shohei Okada
11.5K views
•
86 slides
What's hot
(20)
"Continuous Publication" with Python: Another Approach by Daisuke Miyakawa
"Continuous Publication" with Python: Another Approach
Daisuke Miyakawa
•
4.6K views
Python × Herokuで作る 雑談slack bot by dcubeio
Python × Herokuで作る 雑談slack bot
dcubeio
•
12.1K views
Pythonを取り巻く開発環境 #pyconjp by Yoshifumi Yamaguchi
Pythonを取り巻く開発環境 #pyconjp
Yoshifumi Yamaguchi
•
12.7K views
Sphinx customization for OGP support at SphinxCon JP 2018 by Takayuki Shimizukawa
Sphinx customization for OGP support at SphinxCon JP 2018
Takayuki Shimizukawa
•
2.9K views
「Python言語」はじめの一歩 / First step of Python by Takanori Suzuki
「Python言語」はじめの一歩 / First step of Python
Takanori Suzuki
•
65.9K views
Python入門 by Shohei Okada
Python入門
Shohei Okada
•
11.5K views
Sourcecode Reading Workshop2010 by Hiro Yoshioka
Sourcecode Reading Workshop2010
Hiro Yoshioka
•
1.1K views
密着!わたしのコンソールアプリ開発環境 by Fumihito Yokoyama
密着!わたしのコンソールアプリ開発環境
Fumihito Yokoyama
•
3.6K views
ひのきのぼうだけで全クリ目指す by AromaBlack
ひのきのぼうだけで全クリ目指す
AromaBlack
•
1.5K views
PyQtではじめるGUIプログラミング by Ransui Iso
PyQtではじめるGUIプログラミング
Ransui Iso
•
309.7K views
doctest を書こう @ pycon kansai by YosukeHojo
doctest を書こう @ pycon kansai
YosukeHojo
•
70 views
組合せ最適化を体系的に知ってPythonで実行してみよう PyCon 2015 by SaitoTsutomu
組合せ最適化を体系的に知ってPythonで実行してみよう PyCon 2015
SaitoTsutomu
•
30.4K views
シェルスクリプトを極める by bsdhack
シェルスクリプトを極める
bsdhack
•
8.1K views
Good Parts of PHP and the UNIX Philosophy by Yuya Takeyama
Good Parts of PHP and the UNIX Philosophy
Yuya Takeyama
•
3.8K views
仕事で使えるシェルスクリプト by bsdhack
仕事で使えるシェルスクリプト
bsdhack
•
18.9K views
FINAL FANTASY Record Keeperを支えたGolang by Yoshiki Shibukawa
FINAL FANTASY Record Keeperを支えたGolang
Yoshiki Shibukawa
•
31K views
シェル芸初心者によるシェル芸入門 by icchy
シェル芸初心者によるシェル芸入門
icchy
•
37.9K views
R を起動するその前に by Kosei ABE
R を起動するその前に
Kosei ABE
•
17.6K views
Introduction of Python by Tomoya Nakayama
Introduction of Python
Tomoya Nakayama
•
1.2K views
Hubotをはじめる by nasa9084
Hubotをはじめる
nasa9084
•
758 views
Viewers also liked
Django から各種チャットツールに通知するライブラリを作った話 by
Django から各種チャットツールに通知するライブラリを作った話
Yusuke Miyazaki
12.8K views
•
25 slides
sqldf for pandas by
sqldf for pandas
airtoxin Ishii
9.1K views
•
60 slides
pandasによるデータ加工時の注意点やライブラリの話 by
pandasによるデータ加工時の注意点やライブラリの話
Masashi Shibata
17.4K views
•
13 slides
SekainoKAO by TeamKAO by
SekainoKAO by TeamKAO
Hideki
10.9K views
•
94 slides
PyLadies Tokyo - 初心者向けPython体験ワークショップ開催の裏側 by
PyLadies Tokyo - 初心者向けPython体験ワークショップ開催の裏側
Katayanagi Nobuko
14K views
•
92 slides
Sphinxで作る貢献しやすいドキュメント翻訳の仕組み by
Sphinxで作る貢献しやすいドキュメント翻訳の仕組み
Takayuki Shimizukawa
28.1K views
•
62 slides
Viewers also liked
(20)
Django から各種チャットツールに通知するライブラリを作った話 by Yusuke Miyazaki
Django から各種チャットツールに通知するライブラリを作った話
Yusuke Miyazaki
•
12.8K views
sqldf for pandas by airtoxin Ishii
sqldf for pandas
airtoxin Ishii
•
9.1K views
pandasによるデータ加工時の注意点やライブラリの話 by Masashi Shibata
pandasによるデータ加工時の注意点やライブラリの話
Masashi Shibata
•
17.4K views
SekainoKAO by TeamKAO by Hideki
SekainoKAO by TeamKAO
Hideki
•
10.9K views
PyLadies Tokyo - 初心者向けPython体験ワークショップ開催の裏側 by Katayanagi Nobuko
PyLadies Tokyo - 初心者向けPython体験ワークショップ開催の裏側
Katayanagi Nobuko
•
14K views
Sphinxで作る貢献しやすいドキュメント翻訳の仕組み by Takayuki Shimizukawa
Sphinxで作る貢献しやすいドキュメント翻訳の仕組み
Takayuki Shimizukawa
•
28.1K views
Ry pyconjp2015 karaoke by Renyuan Lyu
Ry pyconjp2015 karaoke
Renyuan Lyu
•
12.5K views
Python と型ヒント (Type Hints) by Tetsuya Morimoto
Python と型ヒント (Type Hints)
Tetsuya Morimoto
•
38.1K views
アドネットワークのデータ解析チームを支える技術 by hagino 3000
アドネットワークのデータ解析チームを支える技術
hagino 3000
•
25.4K views
PythonとPyCoRAMでお手軽にFPGAシステムを開発してみよう by Shinya Takamaeda-Y
PythonとPyCoRAMでお手軽にFPGAシステムを開発してみよう
Shinya Takamaeda-Y
•
19K views
強くなるためのプログラミング -プログラミングに関する様々なコンテストとそのはじめ方-#pyconjp by cocodrips
強くなるためのプログラミング -プログラミングに関する様々なコンテストとそのはじめ方-#pyconjp
cocodrips
•
129.1K views
野球Hack!~Pythonを用いたデータ分析と可視化 #pyconjp by Shinichi Nakagawa
野球Hack!~Pythonを用いたデータ分析と可視化 #pyconjp
Shinichi Nakagawa
•
103.2K views
日本のオープンデータプラットフォームをPythonでつくる by Yuta Kashino
日本のオープンデータプラットフォームをPythonでつくる
Yuta Kashino
•
18.3K views
営業・運用を支える "気付ける" 管理画面 by Masao Maeda
営業・運用を支える "気付ける" 管理画面
Masao Maeda
•
34.8K views
フリーでやろうぜ!セキュリティチェック! by zaki4649
フリーでやろうぜ!セキュリティチェック!
zaki4649
•
64.8K views
いまどきのPHP開発現場 -2015年秋- by Masashi Shinbara
いまどきのPHP開発現場 -2015年秋-
Masashi Shinbara
•
59.7K views
癒し系ネットワーク機器をPingで起こす by Shinichi Hirauchi
癒し系ネットワーク機器をPingで起こす
Shinichi Hirauchi
•
1.3K views
サンタクロースを支えるIT技術 @M_Ishikawa #yapcasia by Masayuki Ishikawa
サンタクロースを支えるIT技術 @M_Ishikawa #yapcasia
Masayuki Ishikawa
•
21.5K views
クラウドハニーポットを運用しよう! by Mizutani Masayoshi
クラウドハニーポットを運用しよう!
Mizutani Masayoshi
•
3.2K views
初心者のためのWeb標準技術 by Shogo Sensui
初心者のためのWeb標準技術
Shogo Sensui
•
17.6K views
Similar to 3分でサーバオペレーションコマンドを作る技術
Open Source System Administration Framework - Func by
Open Source System Administration Framework - Func
Gosuke Miyashita
1.7K views
•
35 slides
キャバァーン! サツバツエアアイオー弐〇壱弐 by
キャバァーン! サツバツエアアイオー弐〇壱弐
Kei Nakazawa
1.4K views
•
76 slides
Windows PowerShell 2.0 の基礎知識 by
Windows PowerShell 2.0 の基礎知識
shigeya
3.3K views
•
34 slides
WTM53 phpフレームワーク いまさらcodeigniter by
WTM53 phpフレームワーク いまさらcodeigniter
Masanori Oobayashi
3.9K views
•
44 slides
Ruby向け帳票ソリューション「ThinReports」の開発で知るOSSの威力 by
Ruby向け帳票ソリューション「ThinReports」の開発で知るOSSの威力
ThinReports
6.6K views
•
98 slides
Mautic Meetup Tokyo #3 データベース不要CMS:Gravの紹介 by
Mautic Meetup Tokyo #3 データベース不要CMS:Gravの紹介
Kohei Nishikawa
1.5K views
•
17 slides
Similar to 3分でサーバオペレーションコマンドを作る技術
(20)
Open Source System Administration Framework - Func by Gosuke Miyashita
Open Source System Administration Framework - Func
Gosuke Miyashita
•
1.7K views
キャバァーン! サツバツエアアイオー弐〇壱弐 by Kei Nakazawa
キャバァーン! サツバツエアアイオー弐〇壱弐
Kei Nakazawa
•
1.4K views
Windows PowerShell 2.0 の基礎知識 by shigeya
Windows PowerShell 2.0 の基礎知識
shigeya
•
3.3K views
WTM53 phpフレームワーク いまさらcodeigniter by Masanori Oobayashi
WTM53 phpフレームワーク いまさらcodeigniter
Masanori Oobayashi
•
3.9K views
Ruby向け帳票ソリューション「ThinReports」の開発で知るOSSの威力 by ThinReports
Ruby向け帳票ソリューション「ThinReports」の開発で知るOSSの威力
ThinReports
•
6.6K views
Mautic Meetup Tokyo #3 データベース不要CMS:Gravの紹介 by Kohei Nishikawa
Mautic Meetup Tokyo #3 データベース不要CMS:Gravの紹介
Kohei Nishikawa
•
1.5K views
1MB by arase_utagoe
1MB
arase_utagoe
•
391 views
BBBBB by arase_utagoe
BBBBB
arase_utagoe
•
2.4K views
Haikara by jewel12
Haikara
jewel12
•
694 views
Docker入門-基礎編 いまから始めるDocker管理【2nd Edition】 by Masahito Zembutsu
Docker入門-基礎編 いまから始めるDocker管理【2nd Edition】
Masahito Zembutsu
•
82.3K views
AWS Glueを使った Serverless ETL の実装パターン by seiichi arai
AWS Glueを使った Serverless ETL の実装パターン
seiichi arai
•
605 views
Drone.io のご紹介 by Uchio Kondo
Drone.io のご紹介
Uchio Kondo
•
32.2K views
Chrome DevTools.next by yoshikawa_t
Chrome DevTools.next
yoshikawa_t
•
27.3K views
Linuxのユーザーランドをinitから全てまるごとgolangで書く by Tetsuyuki Kobayashi
Linuxのユーザーランドをinitから全てまるごとgolangで書く
Tetsuyuki Kobayashi
•
9.5K views
Windows Azure PHP Tips by Microsoft Openness Japan
Windows Azure PHP Tips
Microsoft Openness Japan
•
662 views
Programming camp Codereading by Hiro Yoshioka
Programming camp Codereading
Hiro Yoshioka
•
461 views
Hyperledger Fabric 簡単構築ツール minifabricのご紹介 〜productionへの移行をminifabricで加速〜 by Hyperleger Tokyo Meetup
Hyperledger Fabric 簡単構築ツール minifabricのご紹介 〜productionへの移行をminifabricで加速〜
Hyperleger Tokyo Meetup
•
877 views
ゆるかわPhp by Ryota Mochizuki
ゆるかわPhp
Ryota Mochizuki
•
1.1K views
捕鯨!詳解docker by 雄哉 吉田
捕鯨!詳解docker
雄哉 吉田
•
21.7K views
LinAction Theme Docker by cyberblack28 Ichikawa
LinAction Theme Docker
cyberblack28 Ichikawa
•
5.2K views
More from Kei IWASAKI
コロナ渦とキャリアの話 / my carrier and covid-19 by
コロナ渦とキャリアの話 / my carrier and covid-19
Kei IWASAKI
2.2K views
•
32 slides
Collaboration hack with slackbot - PyCon HK 2018 - 2018.11.24 by
Collaboration hack with slackbot - PyCon HK 2018 - 2018.11.24
Kei IWASAKI
1.8K views
•
63 slides
Elasticbeanstalk で Ansible を使っている話 by
Elasticbeanstalk で Ansible を使っている話
Kei IWASAKI
1.7K views
•
36 slides
入門書を読み終わったらなにしよう? 〜Python と WebAPI の使い方から学ぶ次の一歩〜 / next-step-python-programing by
入門書を読み終わったらなにしよう? 〜Python と WebAPI の使い方から学ぶ次の一歩〜 / next-step-python-programing
Kei IWASAKI
6.5K views
•
50 slides
Pelican の紹介 / World Plone Day 2017 Tokyo by
Pelican の紹介 / World Plone Day 2017 Tokyo
Kei IWASAKI
2K views
•
31 slides
たった一ファイルの python スクリプトから始めるOSS開発入門 / PyCon JP 2016 by
たった一ファイルの python スクリプトから始めるOSS開発入門 / PyCon JP 2016
Kei IWASAKI
8.1K views
•
90 slides
More from Kei IWASAKI
(9)
コロナ渦とキャリアの話 / my carrier and covid-19 by Kei IWASAKI
コロナ渦とキャリアの話 / my carrier and covid-19
Kei IWASAKI
•
2.2K views
Collaboration hack with slackbot - PyCon HK 2018 - 2018.11.24 by Kei IWASAKI
Collaboration hack with slackbot - PyCon HK 2018 - 2018.11.24
Kei IWASAKI
•
1.8K views
Elasticbeanstalk で Ansible を使っている話 by Kei IWASAKI
Elasticbeanstalk で Ansible を使っている話
Kei IWASAKI
•
1.7K views
入門書を読み終わったらなにしよう? 〜Python と WebAPI の使い方から学ぶ次の一歩〜 / next-step-python-programing by Kei IWASAKI
入門書を読み終わったらなにしよう? 〜Python と WebAPI の使い方から学ぶ次の一歩〜 / next-step-python-programing
Kei IWASAKI
•
6.5K views
Pelican の紹介 / World Plone Day 2017 Tokyo by Kei IWASAKI
Pelican の紹介 / World Plone Day 2017 Tokyo
Kei IWASAKI
•
2K views
たった一ファイルの python スクリプトから始めるOSS開発入門 / PyCon JP 2016 by Kei IWASAKI
たった一ファイルの python スクリプトから始めるOSS開発入門 / PyCon JP 2016
Kei IWASAKI
•
8.1K views
Vagrant+virtualboxを使ってみよう by Kei IWASAKI
Vagrant+virtualboxを使ってみよう
Kei IWASAKI
•
4.7K views
障害発生時に抑えておきたい基礎知識 by Kei IWASAKI
障害発生時に抑えておきたい基礎知識
Kei IWASAKI
•
2.2K views
監視のススメ by Kei IWASAKI
監視のススメ
Kei IWASAKI
•
914 views
Recently uploaded
PCCC23:東京大学情報基盤センター 「Society5.0の実現を目指す『計算・データ・学習』の融合による革新的スーパーコンピューティング」 by
PCCC23:東京大学情報基盤センター 「Society5.0の実現を目指す『計算・データ・学習』の融合による革新的スーパーコンピューティング」
PC Cluster Consortium
28 views
•
36 slides
Keycloakの全体像: 基本概念、ユースケース、そして最新の開発動向 by
Keycloakの全体像: 基本概念、ユースケース、そして最新の開発動向
Hitachi, Ltd. OSS Solution Center.
109 views
•
26 slides
パスキーでリードする: NGINXとKeycloakによる効率的な認証・認可 by
パスキーでリードする: NGINXとKeycloakによる効率的な認証・認可
Hitachi, Ltd. OSS Solution Center.
10 views
•
22 slides
定例会スライド_キャチs 公開用.pdf by
定例会スライド_キャチs 公開用.pdf
Keio Robotics Association
146 views
•
64 slides
光コラボは契約してはいけない by
光コラボは契約してはいけない
Takuya Matsunaga
28 views
•
17 slides
IPsec VPNとSSL-VPNの違い by
IPsec VPNとSSL-VPNの違い
富士通クラウドテクノロジーズ株式会社
606 views
•
8 slides
Recently uploaded
(7)
PCCC23:東京大学情報基盤センター 「Society5.0の実現を目指す『計算・データ・学習』の融合による革新的スーパーコンピューティング」 by PC Cluster Consortium
PCCC23:東京大学情報基盤センター 「Society5.0の実現を目指す『計算・データ・学習』の融合による革新的スーパーコンピューティング」
PC Cluster Consortium
•
28 views
Keycloakの全体像: 基本概念、ユースケース、そして最新の開発動向 by Hitachi, Ltd. OSS Solution Center.
Keycloakの全体像: 基本概念、ユースケース、そして最新の開発動向
Hitachi, Ltd. OSS Solution Center.
•
109 views
パスキーでリードする: NGINXとKeycloakによる効率的な認証・認可 by Hitachi, Ltd. OSS Solution Center.
パスキーでリードする: NGINXとKeycloakによる効率的な認証・認可
Hitachi, Ltd. OSS Solution Center.
•
10 views
定例会スライド_キャチs 公開用.pdf by Keio Robotics Association
定例会スライド_キャチs 公開用.pdf
Keio Robotics Association
•
146 views
光コラボは契約してはいけない by Takuya Matsunaga
光コラボは契約してはいけない
Takuya Matsunaga
•
28 views
IPsec VPNとSSL-VPNの違い by 富士通クラウドテクノロジーズ株式会社
IPsec VPNとSSL-VPNの違い
富士通クラウドテクノロジーズ株式会社
•
606 views
PCCC23:富士通株式会社 テーマ1「次世代高性能・省電力プロセッサ『FUJITSU-MONAKA』」 by PC Cluster Consortium
PCCC23:富士通株式会社 テーマ1「次世代高性能・省電力プロセッサ『FUJITSU-MONAKA』」
PC Cluster Consortium
•
66 views
3分でサーバオペレーションコマンドを作る技術
1.
GMO Pepabo, Inc. Kei
IWASAKI 2015/10/10 PyConJP 2015 Lightning Talks 3分で サーバオペレーションコマンドを作る技術
2.
お前誰?
3.
お前誰? > Kei IWASAKI >
twitter: @laugh_k > Github: laughk > GMO Pepabo, Inc. > 技術部インフラグループ > System Administrator > PyConJP 初参加!
4.
3分で
5.
サーバオペレーション コマンドを作る技術
6.
サーバオペレーションコマンド is 何?
7.
Web系インフラエンジニアが 日々のサーバオペレーションを 楽にするためのコマンドラインツール
8.
とりわけ
9.
SSHで1台ずつログインをして 複数サーバに同様のコマンドを叩く たんぽぽワークを楽にする コマンドラインツール
10.
という前提で お話させていただきます
11.
紹介するライブラリ
12.
fabric と Click
13.
ライブラリとしての fabric
14.
ライブラリとしてのfabric > fabric とは >
python製デプロイツールでお馴染み > pythonでデプロイに必要なSSH越しのジョ ブを定義できる
15.
ライブラリとしてのfabric > こんな感じで fabfile.py
を用意して from fabric.api import run def ping(): run('uname -n')
16.
ライブラリとしてのfabric > fabコマンド経由でジョブを実行できる $ fab
-f fabfile.py ping -H hoge1.example.com,hoge2.example.com [hoge1.example.com] Executing task 'ping' [hoge1.example.com] run: uname -n [hoge1.example.com] Login password for 'vagrant': [hoge1.example.com] out: hoge1.example.com [hoge1.example.com] out: [hoge2.example.com] Executing task 'ping' [hoge2.example.com] run: uname -n [hoge2.example.com] out: hoge2.example.com [hoge2.example.com] out: Done. Disconnecting from hoge1.example.com... done. Disconnecting from hoge2.example.com... done.
17.
ライブラリとしてのfabric > 便利なAPI > run
... シェルコマンド実行 > sudo ... sudo 付きでシェルコマンド実行 > put ... リモートホストにファイルを置く > get ... リモートホストからファイルを取ってくる > put, get には use_sudo オプションあり > などなど
18.
便利ですね!
19.
ライブラリとして利用すると 作り込む時にすごく ります
20.
ライブラリ としての利用で使うもの
21.
fabric.api.execute
22.
ライブラリとしてのfabric > executeを使うと何ができるか? > ざっくり言うと >
python のコードから > と同じことができるよ! $ fab -f fabfile.py <jobname> -H <hostname>
23.
ライブラリとしてのfabric > こんな感じ > sample.py from
fabric.api import run, execute def ping(): run('uname -n’) if __name__ == ‘__main__': execute(ping, hosts=[ 'hoge1.example.com', 'hoeg2.example.com' ])
24.
ライブラリとしてのfabric > 実行 $ python
sample.py [hoge1.example.com] Executing task 'ping' [hoge1.example.com] run: uname -n [hoge1.example.com] Login password for 'vagrant': [hoge1.example.com] out: hoge1.example.com [hoge1.example.com] out: [hoge2.example.com] Executing task 'ping' [hoge2.example.com] run: uname -n [hoge2.example.com] out: hoge2.example.com [hoge2.example.com] out:
25.
python スクリプトとして 完結させられる
26.
ということは
27.
fabコマンドを意識しない 自分の業務に特化した スクリプトも作れる
28.
ライブラリとしてのfabric > 例えばこんな fabfile.py from
fabric.api import sudo def show_httpd_log(): sudo('tail -10000 /var/log/httpd/access_log') def show_db_slowlog_count(): sudo('tail -100000 /var/lib/mysql/slow.log > /tmp/fab-slow.log') sudo('mysqldumpslow -c /tmp/fab-slow.log') sudo('rm -fv /tmp/fab-slow.log')
29.
ライブラリとしてのfabric > 例えばこんな感じでスクリプト化 import argparse from
fabric.api import run, sudo, execute def show_httpd_log(): sudo('tail -10000 /var/log/httpd/access_log’) def show_db_slowlog_count(): sudo('tail -100000 /var/lib/mysql/slow.log > /tmp/fab-slow.log') sudo('mysqldumpslow -c /tmp/fab-slow.log') sudo('rm /tmp/fab-slow.log') if __name__ == '__main__': parser = argparse.ArgumentParser() ...
30.
pythonで コマンドラインツールを作るなら
31.
argparse の出番!
32.
ではあるけれど なかなか扱いが大変
34.
つらい
35.
オプションが増えたり サブコマンドを生やすと コードの可読性を保つのがしんどい
36.
Python mini hack-a-thon にて
37.
“–Thanks!! @shimizukawa 「ClickっていうCLIのフレームワークがあるよ」
38.
Click
39.
Click > CLIツールを作るためのフレームワーク > デコレータでオプションやパラメータと実際に処理を行う 関数をいい感じに紐付けられる >
いい感じにhelpメッセージを出してくれる > bash-completion の自動生成が可能 > オプションやサブコマンドと関数の関係がわかりやすい > などなど
40.
Click > 例. サブコマンド import
click @click.group() def main(): pass @click.command() @click.argument('name') def sub1(name): click.echo('sub1: Hello {0}'.format(name)) @click.command() @click.option('-N','--name') def sub2(name): click.echo('sub2: Hello {0}'.format(name)) main.add_command(sub1) main.add_command(sub2) if __name__ == '__main__': main()
41.
Click > 例. サブコマンド
実行結果 $ python cli.py sub1 laughk sub1: Hello laughk $ python cli.py sub2 -N laughk sub2: Hello laughk
42.
Click > 例. サブコマンド
実行結果 $ python cli.py Usage: cli.py [OPTIONS] COMMAND [ARGS]... Options: --help Show this message and exit. Commands: sub1 sub2 $ python cli.py sub1 --help Usage: cli.py sub1 [OPTIONS] NAME Options: --help Show this message and exit. $ python cli.py sub2 --help Usage: cli.py sub2 [OPTIONS] Options: -N, --name TEXT --help Show this message and exit.
43.
便利ですね!!
44.
fabric と Click
を 組み合わせてみる
45.
fabricとClick > コードはこんな感じ (nginx.py
として作成 ) import click from fabric.api import sudo, execute, env def _show_access_log(): sudo('tail -10 /var/log/nginx/munin-access.log') @click.group() def main(): pass @click.command('access_log') def show_access_log(): execute(_show_access_log) main.add_command(show_access_log) if __name__ == '__main__': env.hosts = [ 'hoge1.example.com', 'hoge2.example.com' ] main()
46.
fabricとClick > 結果 $ python
nginx.py access_log [hoge1.example.com] Executing task '_show_access_log' [hoge1.example.com] sudo: tail -10 /var/log/nginx/munin-access.log [hoge1.example.com] out: 10.0.12.40 - - [10/Oct/2015:01:53:45 +0900] "GET / HTTP/1.1" 200 2006 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.93 Safari/537.36 OPR/32.0.1948.69" [hoge1.example.com] out: 10.0.12.40 - - [10/Oct/2015:01:53:45 +0900] "GET /static/style-new.css HTTP/1.1" 200 4049 "http://10.0.12.23/" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.93 Safari/537.36 OPR/32.0.1948.69" [hoge1.example.com] out: 10.0.12.40 - - [10/Oct/2015:01:53:45 +0900] "GET /static/logo-h.png HTTP/1.1" 200 1399 "http://10.0.12.23/static/style- new.css" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.93 Safari/537.36 OPR/ 32.0.1948.69" [hoge1.example.com] out: 10.0.12.40 - - [10/Oct/2015:01:53:45 +0900] "GET /static/favicon.ico HTTP/1.1" 200 2046 "http://10.0.12.23/" "Mozilla/ 5.0 (Macintosh; Intel Mac OS X 10_10_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.93 Safari/537.36 OPR/32.0.1948.69" [hoge1.example.com] out: [hoge2.example.com] Executing task '_show_access_log' [hoge2.example.com] sudo: tail -10 /var/log/nginx/munin-access.log [hoge2.example.com] out: 10.0.12.40 - - [10/Oct/2015:01:53:45 +0900] "GET / HTTP/1.1" 200 2006 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.93 Safari/537.36 OPR/32.0.1948.69" [hoge2.example.com] out: 10.0.12.40 - - [10/Oct/2015:01:53:45 +0900] "GET /static/style-new.css HTTP/1.1" 200 4049 "http://10.0.12.23/" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.93 Safari/537.36 OPR/32.0.1948.69" [hoge2.example.com] out: 10.0.12.40 - - [10/Oct/2015:01:53:45 +0900] "GET /static/logo-h.png HTTP/1.1" 200 1399 "http://10.0.12.23/static/style- new.css" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.93 Safari/537.36 OPR/ 32.0.1948.69" [hoge2.example.com] out: 10.0.12.40 - - [10/Oct/2015:01:53:45 +0900] "GET /static/favicon.ico HTTP/1.1" 200 2046 "http://10.0.12.23/" "Mozilla/ 5.0 (Macintosh; Intel Mac OS X 10_10_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.93 Safari/537.36 OPR/32.0.1948.69" [hoge2.example.com] out:
47.
便利ですね!!1
48.
補足
49.
fabricとClick > 補足 > click
は先に setup.py を書いておくと開発しやすいし 各種環境への配布も楽 > 業務に便利なコマンドは踏み台サーバにインストールし ておくと布教しやすいのでオススメ > 詳細な使い方はそれぞれの公式ドキュメントが情報豊富 > fabric http://docs.fabfile.org/ > Click http://click.pocoo.org
50.
まとめ
51.
まとめ > SSH 経由のオペレーションは
fabric > コマンドラインツールとしての機能は Click > fabric Click の組み合わせはお手軽で非常にオススメ
52.
Let's Try! pip install
fabric pip install Click