SlideShare una empresa de Scribd logo
1 de 42
FabricとRailsと私 
z 
〜シンプルで、親密で、正確 
Copyright 2014 MIRAIBOX co.,ltd.All rights reserved. 
by @chikaram
はじめに(注意点) 
1. 本プレゼンの内容は多少情緒的な面があります。 
2. Fabricは実業務では利用していません。 
※プライベートのなんちゃってRailsアプリなどに利 
用しているのみ。 
z 
3. そのためコード例は実業務には不適切な点があるか 
と思います。また主張にも理想論的なところがあり 
ます。 
何卒ご了承ください。 
Copyright 2014 MIRAIBOX co.,ltd.All rights reserved. FabricとRailsと私〜シンプルで、親密で、正確by @chikaram
Fabricとは? 
Fabricとは、「Pythonic remote execution」 
つまり、「Pythonらしいリモート実行ツール」 
z 
でも、大方の反応はこうですよね? 
「Python分からないんだけど…」 
Copyright 2014 MIRAIBOX co.,ltd.All rights reserved. FabricとRailsと私〜シンプルで、親密で、正確by @chikaram
Fabricとは? 
私もFabricと出会う前なら、Pythonと聞いただけで 
● Python?自分には関係ない話しだ 
● 私はRubyプログラマーだ、なぜわざわざPythonのツ 
ールを使わなくてはいけない 
z 
と思ったはず。 
Copyright 2014 MIRAIBOX co.,ltd.All rights reserved. FabricとRailsと私〜シンプルで、親密で、正確by @chikaram
Pythonの知識は必要? 
むしろ、Pythonの会社ではない組織内で、かつチームで 
利用する場合は、Pythonの知識はない方がいい。 
z 
ほぼ不要。 
理由は、 
Pythonの高度な機能を利用すると、他の人が理解できな 
い。「あなたが分かる」と「みんなも分かる」は別物。 
※Pythonの会社でなければ、FabricのためにPythonの高 
度な機能を社員に学ばせるようなことは避けたい。(自 
分が学ぶのは自由) 
Copyright 2014 MIRAIBOX co.,ltd.All rights reserved. FabricとRailsと私〜シンプルで、親密で、正確by @chikaram
Pythonの知識は必要? 
しかし、知識が完全にゼロだと実現できなことが「ま 
れ」にある。Fabric歴4ヶ月で以下を利用。 
○ 必ず利用する(サブコマンドの作成に必須) 
z 
● メソッドの定義 
● if文 
○ まぁまぁ利用する 
● リスト(配列)とfor inループ 
○ まれに利用する 
● 正規表現操作 
○ 一度だけ利用した 
※Python総学習時間約20分。ググって学んだだけ。 
Copyright 2014 MIRAIBOX co.,ltd.All rights reserved. FabricとRailsと私〜シンプルで、親密で、正確by @chikaram
他の言語で同様のツールは? 
● What is Ruby's equivalent of Python's fabric? 
● Is there anything like Fabric for Perl? 
● Is there a deployment tool similar to Fabric written in 
● PHP alternative for Python's fabric 
z 
JavaScript? 
Stack Overflowより 
Copyright 2014 MIRAIBOX co.,ltd.All rights reserved. FabricとRailsと私〜シンプルで、親密で、正確by @chikaram
他の言語で同様のツールは? 
● Ruby製のPython Fabricと同等のツールはなに? 
● PerlのFabricみたいなのある? 
● Fabricに似たJavaScriptで書かれたデプロイツールっ 
● PHPのPython Fabric代替品は? 
z 
てある? 
Stack Overflowより 
もうFabricでいいじゃん。Fabric使おうよ。 
Copyright 2014 MIRAIBOX co.,ltd.All rights reserved. FabricとRailsと私〜シンプルで、親密で、正確by @chikaram
Fabricで何ができる? 
リモートホストでコマンド実行、つまり 
● サーバーの構築(構成管理) 
● 構築したサーバーのテスト 
● デプロイ 
● その他、面倒なタスクの定義(★ここ、重要!) 
z 
などが、Fabric一本でできる。 
Fabricは、構成管理、サーバーテスト、デプロイ、 
だけじゃない! 
Copyright 2014 MIRAIBOX co.,ltd.All rights reserved. FabricとRailsと私〜シンプルで、親密で、正確by @chikaram
Fabricで何ができる? 
1. S3上のはずかしいファイルを削除して 
2. RDS上のはずかしいテーブルだけをtruncateして 
3. 法定相続人の公開鍵をEC2にセット 
4. Macのゴミ箱を空にして 
5. ツイッターに「ではさようz 
なら」とつぶやいて 
6. 最後に、これら一連の作業を行う実行ファイル 
例えば、、 
(fabfile.py)自体を消す! 
みたいな処理を死の間際の病床で実行しても多分動く! 
※いわゆるデプロイツールのマインドセットでは、「自 
分自身を消す」という発想自体出てこないはず。 
Copyright 2014 MIRAIBOX co.,ltd.All rights reserved. FabricとRailsと私〜シンプルで、親密で、正確by @chikaram
Fabricの特徴 
他のメジャーなツールと最大の違いは 
「圧倒的な習得の容易さ」 
z 
● 5分程度で動かす事ができ 
● 30分程度でだいたいのことが理解可能 
※ツールの習得に挫折して、みじめな思いをすることは 
ないかと。 
Copyright 2014 MIRAIBOX co.,ltd.All rights reserved. FabricとRailsと私〜シンプルで、親密で、正確by @chikaram
前置きが長くなりましたz 
が、使ってみましょう! 
Copyright 2014 MIRAIBOX co.,ltd.All rights reserved. FabricとRailsと私〜シンプルで、親密で、正確by @chikaram
Fabric基本編(インストール) 
pipが入ってない場合は以下を実行。 
$ easy_install pip 
z 
$ pip install fabric 
$ fab -V 
Fabric 1.9.1 
Paramiko 1.14.0 
Copyright 2014 MIRAIBOX co.,ltd.All rights reserved. FabricとRailsと私〜シンプルで、親密で、正確by @chikaram
Fabric基本編(おまじない) 
適当な場所にfabfile.pyを作成、中身は以下。 
from fabric.api import * 
from fabric.contrib.files import * 
from fabric.contrib.project import * 
※基本的な処理はfabric.apiだけでok。 
z 
以降、処理はこのfabfile.pyに追記する。 
Copyright 2014 MIRAIBOX co.,ltd.All rights reserved. FabricとRailsと私〜シンプルで、親密で、正確by @chikaram
z 
Fabric基本編(run) 
@task 
def hello(): 
run('echo hello') 
@task 
def date(): 
run('date') 
サブコマンド一覧を表示する。 
$ fab -l 
リモートホストに例えばlocalhostと127.0.0.1の2台を指定。 
$ fab -H localhost,127.0.0.1 hello # helloを実行 
$ fab -H localhost,127.0.0.1 hello date # hello終了後dateを実行 
Copyright 2014 MIRAIBOX co.,ltd.All rights reserved. FabricとRailsと私〜シンプルで、親密で、正確by @chikaram
Fabric基本編(run) 
ホストの指定をfabfile.pyに書く。 
env.hosts = ['localhost', '127.0.0.1'] 
env.user = 'chikaram' 
env.key_filename = '~/.ssh/id_rsa' 
するとホストの指定を省略できる。 
$ fab hello 
z 
$ fab hello date 
Copyright 2014 MIRAIBOX co.,ltd.All rights reserved. FabricとRailsと私〜シンプルで、親密で、正確by @chikaram
z 
Fabric基本編(run) 
@task 
def staging(): 
env.hosts = ['localhost'] 
@task 
def production(): 
env.hosts = ['127.0.0.1'] 
staging(localhost)でhelloを実行。 
$ fab staging hello 
production(127.0.0.1)でhelloを実行。 
$ fab production hello 
Copyright 2014 MIRAIBOX co.,ltd.All rights reserved. FabricとRailsと私〜シンプルで、親密で、正確by @chikaram
Fabric基本編(sudo, local) 
sudo('yum -y install mysql') # ここで失敗すると処理はストップする 
sudo('chkconfig mysql on') 
z 
リモートでsudoで実行。 
@task 
def setup_mysql(): 
ローカルで実行。 
@task 
def git_master(): 
local('git checkout master') # ここで失敗すると処理はストップする 
local('git pull origin master') 
Copyright 2014 MIRAIBOX co.,ltd.All rights reserved. FabricとRailsと私〜シンプルで、親密で、正確by @chikaram
Fabric便利機能編(append, sed, uncomment) 
文字列の追記メソッド(内部はecho 文字列>> ファイル名) 
すでに同じ文字列がある場合は追記されない。(冪等) 
append('~/.bashrc', 'export RAILS_ENV=production') 
文字の変換メソッド(内部はsed) 
sed('/etc/ssh/sshd_config', 'Port 22', 'Port 2222', 
z 
use_sudo=True) # sudoで行うオプション 
コメント(デフォルトで#)を外すメソッド(内部はsed) 
uncomment('/etc/ssh/sshd_config', 'RSAAuthentication yes', 
use_sudo=True) # sudoで行うオプション 
Copyright 2014 MIRAIBOX co.,ltd.All rights reserved. FabricとRailsと私〜シンプルで、親密で、正確by @chikaram
Fabric便利機能編(その他) 
○ ホスト毎にwebとdbを分ける場合など 
● コンファーム(fabric.contrib.console.confirm) 
○ if confirm('OK?', default=True): 
● プロンプト(fabric.operations.z 
prompt) 
● パッケージ化 
● ロール 
○ yes/noでなく入力値が欲しい場合など 
詳しく知りたい方はドキュメントを確認。 
http://docs.fabfile.org/ 
Copyright 2014 MIRAIBOX co.,ltd.All rights reserved. FabricとRailsと私〜シンプルで、親密で、正確by @chikaram
Fabric応用編(Railsサーバーを作る例) 
run('¥curl -sSL https://get.rvm.io | bash -s stable --ruby') 
z 
@task 
def setup(): 
setup_ruby() 
setup_passenger() 
def setup_ruby(): 
def setup_passenger(): 
sudo('yum -y install httpd httpd-devel') 
sudo('chkconfig httpd on') 
run('gem install passenger') 
run('passenger-install-apache2-module --auto --languages ruby') 
Copyright 2014 MIRAIBOX co.,ltd.All rights reserved. FabricとRailsと私〜シンプルで、親密で、正確by @chikaram
Fabric応用編(Railsサーバーをテストする例) 
その1: コマンドの返り値をPythonで確認して、問題が 
あればabortする。 
output = run('ruby -v') 
if not re.search('2.1.5', output): 
abort('Ruby 2.1.5 not installed.') 
z 
その2:【もっといいやり方】コマンドだけで確認する。 
run('ruby -v | grep 2.1.5') 
※grepは行が見つからない時エラーステータスを返すの 
で、Fabricもabortする。 
Copyright 2014 MIRAIBOX co.,ltd.All rights reserved. FabricとRailsと私〜シンプルで、親密で、正確by @chikaram
Fabric応用編(Railsをデプロイする例) 
local_dir = '.', 
remote_dir = 'myapp', 
exclude = ['.git', 'log', 'tmp', 
'vendor/bundle', 'public/assets'], 
z 
@task 
def deploy(): 
output = rsync_project( 
delete = True, 
capture = True # rsyncの出力結果をキャプチャーするオプション 
) 
print output 
# 次のページにつづく 
Copyright 2014 MIRAIBOX co.,ltd.All rights reserved. FabricとRailsと私〜シンプルで、親密で、正確by @chikaram
Fabric応用編(Railsをデプロイする例) 
# Gemfileに変更があればbundle installする(実際はdbロールに分ける) 
if re.search('Gemfile', output): 
run('cd myapp && bundle install --deployment') 
# assetsに変更があればprecompileする 
if re.search('(app|lib|vendor)/assets/', output): 
run('cd myapp && bundle exec rake assets:precompile') 
z 
# migrationに変更があればdb migrateする 
if re.search('db/migrate/', output): 
run('cd myapp && bundle exec rake db:migrate') 
# passengerを再起動 
run('touch myapp/tmp/restart.txt') 
Copyright 2014 MIRAIBOX co.,ltd.All rights reserved. FabricとRailsと私〜シンプルで、親密で、正確by @chikaram
Fabric応用編(Railsをデプロイする例) 
● デプロイにかかる時間は約3秒! 
※Gemfile、assets、migrationに変更がない場合 
● 複数サーバーある場合は、@parallelアノテーション 
1. ローカルのFabric(1台)から 
2. リモートの中間デプロイサz 
ーバーのFabric(20台) 
で並列実行可能。 
を叩いて 
3. それらが20台にデプロイすれば 
400台くらいのデプロイは一瞬で終わるはず。 
※みたいなことは実際に試してから言え、ですが。 
Copyright 2014 MIRAIBOX co.,ltd.All rights reserved. FabricとRailsと私〜シンプルで、親密で、正確by @chikaram
Fabric応用編(Railsをデプロイする例) 
参考) 
gitとshell scriptで1秒でやる例 
z 
http://factore.ca/blog/278-how-we-reduced-rails-deploy-times- 
to-under-one-second-with-plain-git 
Copyright 2014 MIRAIBOX co.,ltd.All rights reserved. FabricとRailsと私〜シンプルで、親密で、正確by @chikaram
Fabric応用編(他にもこんなことが) 
本番サーバーのrails consoleとローカルから対話する。 
run('cd myapp && rails console') 
本番サーバーでrakeタスクを実行する。 
run('cd myapp && bundle exec rake my_task') 
z 
複数の本番サーバーのログを並列でtail -fして、ローカル 
でマージして表示する。(CPU食うので控えめに) 
@task 
@parallel 
def tail_log(): 
run('tail -f shared/log/production.log') 
Copyright 2014 MIRAIBOX co.,ltd.All rights reserved. FabricとRailsと私〜シンプルで、親密で、正確by @chikaram
以上、あとはググz 
ってください! 
Copyright 2014 MIRAIBOX co.,ltd.All rights reserved. FabricとRailsと私〜シンプルで、親密で、正確by @chikaram
Fabricのメリット 
● リモートサーバーの設定不要 
○ Fabricどころか、Pythonすら不要 
● 沢山のディレクトリーや設定ファイル不要 
○ 簡単なことなら1ファイルで完結 
○ ディレクトリーを分けてパッケージ化してもok 
z 
● ssh configの設定不要 
○ Fabric内でホスト群を管理でき、チームでホスト 
群の共有が容易(ssh configを設定してもok) 
● いざとなったら他のツールへの移行が簡単 
● DSLレスなのでDSLを覚える必要がない 
Copyright 2014 MIRAIBOX co.,ltd.All rights reserved. FabricとRailsと私〜シンプルで、親密で、正確by @chikaram
DSLの功罪(特に内部DSL) 
1. DSLを利用してシンプルに書ける 
2. プログラマーでない人でも読み書きができる(かも 
z 
DSLのメリット 
しれない) 
Copyright 2014 MIRAIBOX co.,ltd.All rights reserved. FabricとRailsと私〜シンプルで、親密で、正確by @chikaram
DSLの功罪(特に内部DSL) 
○ 記述法、思考法がそのDSLにロックインするため、 
z 
DSLのデメリット 
1. 覚えることが多い 
○ 書籍の鈍器化 
2. DSLにロックインする 
他のツールややり方に移行しにくい 
3. APIの変化の速度が早い 
○ インターフェースには「流行り廃れ」がある 
※ls、grep、yumは多分10年後でも使える 
○ 内部DSLの基盤言語の変化に引きずられる、かも 
※但し、デプロイ系ツールのAPI変更は少ない 
Copyright 2014 MIRAIBOX co.,ltd.All rights reserved. FabricとRailsと私〜シンプルで、親密で、正確by @chikaram
DSLの功罪(特に内部DSL) 
4. プログラミングっぽいことをやりにくい 
○ if文やループ文が不格好に見える。罪悪感を感じる 
○ よりDSLらしくするために、さらにDSLが増える 
z 
DSLのデメリット 
DSLを利用するときはプログラミングをしている感覚を 
持てるようにすべきですし、(略) 
プログラムに手を加えるときは、プログラミング言語の 
環境にいることを意識させるようにすべきです。 
マーティン・ファウラー『ドメイン特化言語』P41 
Copyright 2014 MIRAIBOX co.,ltd.All rights reserved. FabricとRailsと私〜シンプルで、親密で、正確by @chikaram
DSLの功罪(特に内部DSL) 
5. 内部実装が複雑なわりに、やってる仕事が小さい 
○ package_install(‘mysql’) # 抽象度や汎用性が高い 
sudo(‘yum -y install mysql’) # 結局このこと? 
z 
DSLのデメリット 
VS 
○ インターフェースがシンプル(使う側が楽)より 
も、実装がシンプル(コミッターが楽)の方が、 
最終的なメリットが大きいことが多い(と思う) 
○ なのでwith cd() とかも私はあえて使わない 
6. DSLとして提供されている機能も、非DSLな書き方 
で実行できてしまう(使う前に一通り覚えるべき) 
Copyright 2014 MIRAIBOX co.,ltd.All rights reserved. FabricとRailsと私〜シンプルで、親密で、正確by @chikaram
DSLの功罪(特に内部DSL) 
3. と、ここまでデメリットがあっても、巨大な組織内 
で書き方をある程度統一できる、というメリットが 
勝ることはある。かな? 
z 
DSLのメリット 
大きな組織でFabricを使う場合、まずルールの制定から 
入らなければならない。 
※なので今の会社でFabric導入を提案する予定はない。 
cuisineやfabtoolsという選択肢もあるけど、そうなって 
きたらいっそAnsibleとかを使うのがいい気がする。 
Copyright 2014 MIRAIBOX co.,ltd.All rights reserved. FabricとRailsと私〜シンプルで、親密で、正確by @chikaram
Unixの哲学 
1. 一つのことを行い、またそれをうまくやるプログラ 
ムを書け。 
○ run、sudo、localメソッド 
2. 協調して動くプログラムを書け。 
○ 周知のコマンド(ls、grep、yum)との協調 
例) sudo(‘yum -y install z 
mysql’) 
Copyright 2014 MIRAIBOX co.,ltd.All rights reserved. FabricとRailsと私〜シンプルで、親密で、正確by @chikaram
Fabricのデメリット 
● 習得が容易なため、履歴書に書けない 
● 習得が容易なため、情報が少ない 
● 習得が容易なため、勉強会もない(多分) 
● 習得が容易なため、『詳解Fabric』も発売されない 
● 習得が容易なため、Fabric Conf 2014はない 
● 習得が容易なため、1,500USz 
ドルのFabric 3-day 
Training in Palo Altoもない 
だってつまるところ、やってることはリモートのコマン 
ドを叩いてるだけなので。 
Copyright 2014 MIRAIBOX co.,ltd.All rights reserved. FabricとRailsと私〜シンプルで、親密で、正確by @chikaram
シンプルであることは、なぜ難しいか 
何が正しいのかは、皆答えられる。 
=> この機能、おかしい 
何が一貫性があるかも、皆答えられる。 
=> この機能、他と違う 
z 
何が完全であるかも、皆答えられる。 
=> あの機能が実装されてない 
しかし、何がシンプルであるかは誰も答えられない。 
シンプルさとは、答えではなく、問いであるから。 
Copyright 2014 MIRAIBOX co.,ltd.All rights reserved. FabricとRailsと私〜シンプルで、親密で、正確by @chikaram
Fabricと私 
Fabricは私のプログラマー人生の中で最高のツール。 
最高のツールの「中の一つ」、ではなく本当に「一番」 
最高のツール。 
私はSSHするサーバーがあるz 
限り、Fabricを使い続ける。 
つまり、Fabricは「仕事を超えた存在」。 
※みなさんがお使いのツール、仕事を引退しても使い続 
けますか? 
Copyright 2014 MIRAIBOX co.,ltd.All rights reserved. FabricとRailsと私〜シンプルで、親密で、正確by @chikaram
Fabricと私 
作者(@bitprophet)にGratipay.comを通じて、 
毎週寄付してるよ! 
z 
週1ドルだけどね! 
Copyright 2014 MIRAIBOX co.,ltd.All rights reserved. FabricとRailsと私〜シンプルで、親密で、正確by @chikaram
Love Fabric! 
z 
ではなく、 
おわりに 
Copyright 2014 MIRAIBOX co.,ltd.All rights reserved. FabricとRailsと私〜シンプルで、親密で、正確by @chikaram
Love developing 
with Fabric! 
z 
おわりに 
※目的は「作る事」、Fabricはあくまで手段。 
Copyright 2014 MIRAIBOX co.,ltd.All rights reserved. FabricとRailsと私〜シンプルで、親密で、正確by @chikaram
ご清聴ありがとz 
うございました。 
おわりに 
Copyright 2014 MIRAIBOX co.,ltd.All rights reserved. FabricとRailsと私〜シンプルで、親密で、正確by @chikaram

Más contenido relacionado

La actualidad más candente

ラズベリー・パイでプログラミングと電子工作を体験してみよう
ラズベリー・パイでプログラミングと電子工作を体験してみようラズベリー・パイでプログラミングと電子工作を体験してみよう
ラズベリー・パイでプログラミングと電子工作を体験してみようTakashi Kanamaru
 
はじめてのShiny
はじめてのShinyはじめてのShiny
はじめてのShinyKazuya Wada
 
【とらラボLT】アニメ視聴状況を管理するWebページを作ってみた
【とらラボLT】アニメ視聴状況を管理するWebページを作ってみた【とらラボLT】アニメ視聴状況を管理するWebページを作ってみた
【とらラボLT】アニメ視聴状況を管理するWebページを作ってみた虎の穴 開発室
 
Quine・難解プログラミングについて
Quine・難解プログラミングについてQuine・難解プログラミングについて
Quine・難解プログラミングについてmametter
 
表参道.Rb #27 pattern-match の一部を読む
表参道.Rb #27   pattern-match の一部を読む表参道.Rb #27   pattern-match の一部を読む
表参道.Rb #27 pattern-match の一部を読むpink_bangbi
 
Webアプリケーションは難しい
Webアプリケーションは難しいWebアプリケーションは難しい
Webアプリケーションは難しいTakafumi ONAKA
 
「Raspberry pi」勉強会 2015.03.20
「Raspberry pi」勉強会 2015.03.20「Raspberry pi」勉強会 2015.03.20
「Raspberry pi」勉強会 2015.03.20Minoru Chikamune
 
サーバサイドKotlinへの入門 Ktor編
サーバサイドKotlinへの入門 Ktor編サーバサイドKotlinへの入門 Ktor編
サーバサイドKotlinへの入門 Ktor編虎の穴 開発室
 
フィボナッチ数列の作り方
フィボナッチ数列の作り方フィボナッチ数列の作り方
フィボナッチ数列の作り方Tomoya Kawanishi
 
TFUG_yuma_matsuoka__distributed_GPU
TFUG_yuma_matsuoka__distributed_GPUTFUG_yuma_matsuoka__distributed_GPU
TFUG_yuma_matsuoka__distributed_GPUYumaMatsuoka
 

La actualidad más candente (14)

ラズベリー・パイでプログラミングと電子工作を体験してみよう
ラズベリー・パイでプログラミングと電子工作を体験してみようラズベリー・パイでプログラミングと電子工作を体験してみよう
ラズベリー・パイでプログラミングと電子工作を体験してみよう
 
はじめてのShiny
はじめてのShinyはじめてのShiny
はじめてのShiny
 
GC黄金時代
GC黄金時代GC黄金時代
GC黄金時代
 
mrubyのJIT
mrubyのJITmrubyのJIT
mrubyのJIT
 
【とらラボLT】アニメ視聴状況を管理するWebページを作ってみた
【とらラボLT】アニメ視聴状況を管理するWebページを作ってみた【とらラボLT】アニメ視聴状況を管理するWebページを作ってみた
【とらラボLT】アニメ視聴状況を管理するWebページを作ってみた
 
Quine・難解プログラミングについて
Quine・難解プログラミングについてQuine・難解プログラミングについて
Quine・難解プログラミングについて
 
表参道.Rb #27 pattern-match の一部を読む
表参道.Rb #27   pattern-match の一部を読む表参道.Rb #27   pattern-match の一部を読む
表参道.Rb #27 pattern-match の一部を読む
 
Webアプリケーションは難しい
Webアプリケーションは難しいWebアプリケーションは難しい
Webアプリケーションは難しい
 
Osc2013 tokyospring
Osc2013 tokyospringOsc2013 tokyospring
Osc2013 tokyospring
 
ひとりLT大会
ひとりLT大会ひとりLT大会
ひとりLT大会
 
「Raspberry pi」勉強会 2015.03.20
「Raspberry pi」勉強会 2015.03.20「Raspberry pi」勉強会 2015.03.20
「Raspberry pi」勉強会 2015.03.20
 
サーバサイドKotlinへの入門 Ktor編
サーバサイドKotlinへの入門 Ktor編サーバサイドKotlinへの入門 Ktor編
サーバサイドKotlinへの入門 Ktor編
 
フィボナッチ数列の作り方
フィボナッチ数列の作り方フィボナッチ数列の作り方
フィボナッチ数列の作り方
 
TFUG_yuma_matsuoka__distributed_GPU
TFUG_yuma_matsuoka__distributed_GPUTFUG_yuma_matsuoka__distributed_GPU
TFUG_yuma_matsuoka__distributed_GPU
 

Similar a FabricとRailsと私

Start!! Ruby
Start!! RubyStart!! Ruby
Start!! Rubymitim
 
2009年のPHPフレームワーク
2009年のPHPフレームワーク2009年のPHPフレームワーク
2009年のPHPフレームワークTakuya Sato
 
SIG-Audio準備会#2 オーディオツールの作り方 超入門編
SIG-Audio準備会#2 オーディオツールの作り方 超入門編SIG-Audio準備会#2 オーディオツールの作り方 超入門編
SIG-Audio準備会#2 オーディオツールの作り方 超入門編Takafumi Inamori
 
ゆるドラ運営記
ゆるドラ運営記ゆるドラ運営記
ゆるドラ運営記亮太 松本
 
Unity2015_No10_~UGUI&Audio~
Unity2015_No10_~UGUI&Audio~Unity2015_No10_~UGUI&Audio~
Unity2015_No10_~UGUI&Audio~CHY72
 
.NET系開発者から見たJava
.NET系開発者から見たJava.NET系開発者から見たJava
.NET系開発者から見たJavableis tift
 
Cli mini Hack!#1 ~Terminalとの親睦を深めよう~
Cli mini Hack!#1 ~Terminalとの親睦を深めよう~Cli mini Hack!#1 ~Terminalとの親睦を深めよう~
Cli mini Hack!#1 ~Terminalとの親睦を深めよう~Kei IWASAKI
 
マルウェア分類に用いられる特徴量 Kaggle - Malware Classification Challenge勉強会
マルウェア分類に用いられる特徴量	 Kaggle - Malware Classification Challenge勉強会マルウェア分類に用いられる特徴量	 Kaggle - Malware Classification Challenge勉強会
マルウェア分類に用いられる特徴量 Kaggle - Malware Classification Challenge勉強会Takeshi Ishita
 
クラウド環境の監視がより便利になった Pandora FMS ~手間をかけない監視設定を実現する仕組み~
クラウド環境の監視がより便利になった Pandora FMS ~手間をかけない監視設定を実現する仕組み~クラウド環境の監視がより便利になった Pandora FMS ~手間をかけない監視設定を実現する仕組み~
クラウド環境の監視がより便利になった Pandora FMS ~手間をかけない監視設定を実現する仕組み~Rworks, Inc.
 
otomodachi-kakumei
otomodachi-kakumeiotomodachi-kakumei
otomodachi-kakumeiUchio Kondo
 
ドリコムを支える課金ライブラリを支えるJenkins
ドリコムを支える課金ライブラリを支えるJenkinsドリコムを支える課金ライブラリを支えるJenkins
ドリコムを支える課金ライブラリを支えるJenkinsGo Sueyoshi (a.k.a sue445)
 
Rails環境に最適なVue.js構成を探る
 Rails環境に最適なVue.js構成を探る Rails環境に最適なVue.js構成を探る
Rails環境に最適なVue.js構成を探る虎の穴 開発室
 
正規表現リテラルは本当に必要なのか?
正規表現リテラルは本当に必要なのか?正規表現リテラルは本当に必要なのか?
正規表現リテラルは本当に必要なのか?kwatch
 
Infrastructure as CodeでReNom環境構築入門
Infrastructure as CodeでReNom環境構築入門Infrastructure as CodeでReNom環境構築入門
Infrastructure as CodeでReNom環境構築入門ReNom User Group
 
Llでゆるふわプログラミングのすすめ
LlでゆるふわプログラミングのすすめLlでゆるふわプログラミングのすすめ
Llでゆるふわプログラミングのすすめmizcki
 
やすい・はやい・うまいMTのホスティング環境を求めて - jaws-ug-3to-2013-sprint
やすい・はやい・うまいMTのホスティング環境を求めて - jaws-ug-3to-2013-sprintやすい・はやい・うまいMTのホスティング環境を求めて - jaws-ug-3to-2013-sprint
やすい・はやい・うまいMTのホスティング環境を求めて - jaws-ug-3to-2013-sprinttaiju higashi
 
Goのサーバサイド実装におけるレイヤ設計とレイヤ内実装について考える
Goのサーバサイド実装におけるレイヤ設計とレイヤ内実装について考えるGoのサーバサイド実装におけるレイヤ設計とレイヤ内実装について考える
Goのサーバサイド実装におけるレイヤ設計とレイヤ内実装について考えるpospome
 

Similar a FabricとRailsと私 (20)

Start!! Ruby
Start!! RubyStart!! Ruby
Start!! Ruby
 
2009年のPHPフレームワーク
2009年のPHPフレームワーク2009年のPHPフレームワーク
2009年のPHPフレームワーク
 
ドリコムのインフラCI
ドリコムのインフラCIドリコムのインフラCI
ドリコムのインフラCI
 
SIG-Audio準備会#2 オーディオツールの作り方 超入門編
SIG-Audio準備会#2 オーディオツールの作り方 超入門編SIG-Audio準備会#2 オーディオツールの作り方 超入門編
SIG-Audio準備会#2 オーディオツールの作り方 超入門編
 
ゆるドラ運営記
ゆるドラ運営記ゆるドラ運営記
ゆるドラ運営記
 
Unity2015_No10_~UGUI&Audio~
Unity2015_No10_~UGUI&Audio~Unity2015_No10_~UGUI&Audio~
Unity2015_No10_~UGUI&Audio~
 
.NET系開発者から見たJava
.NET系開発者から見たJava.NET系開発者から見たJava
.NET系開発者から見たJava
 
Cli mini Hack!#1 ~Terminalとの親睦を深めよう~
Cli mini Hack!#1 ~Terminalとの親睦を深めよう~Cli mini Hack!#1 ~Terminalとの親睦を深めよう~
Cli mini Hack!#1 ~Terminalとの親睦を深めよう~
 
マルウェア分類に用いられる特徴量 Kaggle - Malware Classification Challenge勉強会
マルウェア分類に用いられる特徴量	 Kaggle - Malware Classification Challenge勉強会マルウェア分類に用いられる特徴量	 Kaggle - Malware Classification Challenge勉強会
マルウェア分類に用いられる特徴量 Kaggle - Malware Classification Challenge勉強会
 
クラウド環境の監視がより便利になった Pandora FMS ~手間をかけない監視設定を実現する仕組み~
クラウド環境の監視がより便利になった Pandora FMS ~手間をかけない監視設定を実現する仕組み~クラウド環境の監視がより便利になった Pandora FMS ~手間をかけない監視設定を実現する仕組み~
クラウド環境の監視がより便利になった Pandora FMS ~手間をかけない監視設定を実現する仕組み~
 
エンジニア勉強会_DECIDE
エンジニア勉強会_DECIDEエンジニア勉強会_DECIDE
エンジニア勉強会_DECIDE
 
プリキュアのRuby実装の紹介 #tqrk08
プリキュアのRuby実装の紹介 #tqrk08プリキュアのRuby実装の紹介 #tqrk08
プリキュアのRuby実装の紹介 #tqrk08
 
otomodachi-kakumei
otomodachi-kakumeiotomodachi-kakumei
otomodachi-kakumei
 
ドリコムを支える課金ライブラリを支えるJenkins
ドリコムを支える課金ライブラリを支えるJenkinsドリコムを支える課金ライブラリを支えるJenkins
ドリコムを支える課金ライブラリを支えるJenkins
 
Rails環境に最適なVue.js構成を探る
 Rails環境に最適なVue.js構成を探る Rails環境に最適なVue.js構成を探る
Rails環境に最適なVue.js構成を探る
 
正規表現リテラルは本当に必要なのか?
正規表現リテラルは本当に必要なのか?正規表現リテラルは本当に必要なのか?
正規表現リテラルは本当に必要なのか?
 
Infrastructure as CodeでReNom環境構築入門
Infrastructure as CodeでReNom環境構築入門Infrastructure as CodeでReNom環境構築入門
Infrastructure as CodeでReNom環境構築入門
 
Llでゆるふわプログラミングのすすめ
LlでゆるふわプログラミングのすすめLlでゆるふわプログラミングのすすめ
Llでゆるふわプログラミングのすすめ
 
やすい・はやい・うまいMTのホスティング環境を求めて - jaws-ug-3to-2013-sprint
やすい・はやい・うまいMTのホスティング環境を求めて - jaws-ug-3to-2013-sprintやすい・はやい・うまいMTのホスティング環境を求めて - jaws-ug-3to-2013-sprint
やすい・はやい・うまいMTのホスティング環境を求めて - jaws-ug-3to-2013-sprint
 
Goのサーバサイド実装におけるレイヤ設計とレイヤ内実装について考える
Goのサーバサイド実装におけるレイヤ設計とレイヤ内実装について考えるGoのサーバサイド実装におけるレイヤ設計とレイヤ内実装について考える
Goのサーバサイド実装におけるレイヤ設計とレイヤ内実装について考える
 

FabricとRailsと私

  • 1. FabricとRailsと私 z 〜シンプルで、親密で、正確 Copyright 2014 MIRAIBOX co.,ltd.All rights reserved. by @chikaram
  • 2. はじめに(注意点) 1. 本プレゼンの内容は多少情緒的な面があります。 2. Fabricは実業務では利用していません。 ※プライベートのなんちゃってRailsアプリなどに利 用しているのみ。 z 3. そのためコード例は実業務には不適切な点があるか と思います。また主張にも理想論的なところがあり ます。 何卒ご了承ください。 Copyright 2014 MIRAIBOX co.,ltd.All rights reserved. FabricとRailsと私〜シンプルで、親密で、正確by @chikaram
  • 3. Fabricとは? Fabricとは、「Pythonic remote execution」 つまり、「Pythonらしいリモート実行ツール」 z でも、大方の反応はこうですよね? 「Python分からないんだけど…」 Copyright 2014 MIRAIBOX co.,ltd.All rights reserved. FabricとRailsと私〜シンプルで、親密で、正確by @chikaram
  • 4. Fabricとは? 私もFabricと出会う前なら、Pythonと聞いただけで ● Python?自分には関係ない話しだ ● 私はRubyプログラマーだ、なぜわざわざPythonのツ ールを使わなくてはいけない z と思ったはず。 Copyright 2014 MIRAIBOX co.,ltd.All rights reserved. FabricとRailsと私〜シンプルで、親密で、正確by @chikaram
  • 5. Pythonの知識は必要? むしろ、Pythonの会社ではない組織内で、かつチームで 利用する場合は、Pythonの知識はない方がいい。 z ほぼ不要。 理由は、 Pythonの高度な機能を利用すると、他の人が理解できな い。「あなたが分かる」と「みんなも分かる」は別物。 ※Pythonの会社でなければ、FabricのためにPythonの高 度な機能を社員に学ばせるようなことは避けたい。(自 分が学ぶのは自由) Copyright 2014 MIRAIBOX co.,ltd.All rights reserved. FabricとRailsと私〜シンプルで、親密で、正確by @chikaram
  • 6. Pythonの知識は必要? しかし、知識が完全にゼロだと実現できなことが「ま れ」にある。Fabric歴4ヶ月で以下を利用。 ○ 必ず利用する(サブコマンドの作成に必須) z ● メソッドの定義 ● if文 ○ まぁまぁ利用する ● リスト(配列)とfor inループ ○ まれに利用する ● 正規表現操作 ○ 一度だけ利用した ※Python総学習時間約20分。ググって学んだだけ。 Copyright 2014 MIRAIBOX co.,ltd.All rights reserved. FabricとRailsと私〜シンプルで、親密で、正確by @chikaram
  • 7. 他の言語で同様のツールは? ● What is Ruby's equivalent of Python's fabric? ● Is there anything like Fabric for Perl? ● Is there a deployment tool similar to Fabric written in ● PHP alternative for Python's fabric z JavaScript? Stack Overflowより Copyright 2014 MIRAIBOX co.,ltd.All rights reserved. FabricとRailsと私〜シンプルで、親密で、正確by @chikaram
  • 8. 他の言語で同様のツールは? ● Ruby製のPython Fabricと同等のツールはなに? ● PerlのFabricみたいなのある? ● Fabricに似たJavaScriptで書かれたデプロイツールっ ● PHPのPython Fabric代替品は? z てある? Stack Overflowより もうFabricでいいじゃん。Fabric使おうよ。 Copyright 2014 MIRAIBOX co.,ltd.All rights reserved. FabricとRailsと私〜シンプルで、親密で、正確by @chikaram
  • 9. Fabricで何ができる? リモートホストでコマンド実行、つまり ● サーバーの構築(構成管理) ● 構築したサーバーのテスト ● デプロイ ● その他、面倒なタスクの定義(★ここ、重要!) z などが、Fabric一本でできる。 Fabricは、構成管理、サーバーテスト、デプロイ、 だけじゃない! Copyright 2014 MIRAIBOX co.,ltd.All rights reserved. FabricとRailsと私〜シンプルで、親密で、正確by @chikaram
  • 10. Fabricで何ができる? 1. S3上のはずかしいファイルを削除して 2. RDS上のはずかしいテーブルだけをtruncateして 3. 法定相続人の公開鍵をEC2にセット 4. Macのゴミ箱を空にして 5. ツイッターに「ではさようz なら」とつぶやいて 6. 最後に、これら一連の作業を行う実行ファイル 例えば、、 (fabfile.py)自体を消す! みたいな処理を死の間際の病床で実行しても多分動く! ※いわゆるデプロイツールのマインドセットでは、「自 分自身を消す」という発想自体出てこないはず。 Copyright 2014 MIRAIBOX co.,ltd.All rights reserved. FabricとRailsと私〜シンプルで、親密で、正確by @chikaram
  • 11. Fabricの特徴 他のメジャーなツールと最大の違いは 「圧倒的な習得の容易さ」 z ● 5分程度で動かす事ができ ● 30分程度でだいたいのことが理解可能 ※ツールの習得に挫折して、みじめな思いをすることは ないかと。 Copyright 2014 MIRAIBOX co.,ltd.All rights reserved. FabricとRailsと私〜シンプルで、親密で、正確by @chikaram
  • 12. 前置きが長くなりましたz が、使ってみましょう! Copyright 2014 MIRAIBOX co.,ltd.All rights reserved. FabricとRailsと私〜シンプルで、親密で、正確by @chikaram
  • 13. Fabric基本編(インストール) pipが入ってない場合は以下を実行。 $ easy_install pip z $ pip install fabric $ fab -V Fabric 1.9.1 Paramiko 1.14.0 Copyright 2014 MIRAIBOX co.,ltd.All rights reserved. FabricとRailsと私〜シンプルで、親密で、正確by @chikaram
  • 14. Fabric基本編(おまじない) 適当な場所にfabfile.pyを作成、中身は以下。 from fabric.api import * from fabric.contrib.files import * from fabric.contrib.project import * ※基本的な処理はfabric.apiだけでok。 z 以降、処理はこのfabfile.pyに追記する。 Copyright 2014 MIRAIBOX co.,ltd.All rights reserved. FabricとRailsと私〜シンプルで、親密で、正確by @chikaram
  • 15. z Fabric基本編(run) @task def hello(): run('echo hello') @task def date(): run('date') サブコマンド一覧を表示する。 $ fab -l リモートホストに例えばlocalhostと127.0.0.1の2台を指定。 $ fab -H localhost,127.0.0.1 hello # helloを実行 $ fab -H localhost,127.0.0.1 hello date # hello終了後dateを実行 Copyright 2014 MIRAIBOX co.,ltd.All rights reserved. FabricとRailsと私〜シンプルで、親密で、正確by @chikaram
  • 16. Fabric基本編(run) ホストの指定をfabfile.pyに書く。 env.hosts = ['localhost', '127.0.0.1'] env.user = 'chikaram' env.key_filename = '~/.ssh/id_rsa' するとホストの指定を省略できる。 $ fab hello z $ fab hello date Copyright 2014 MIRAIBOX co.,ltd.All rights reserved. FabricとRailsと私〜シンプルで、親密で、正確by @chikaram
  • 17. z Fabric基本編(run) @task def staging(): env.hosts = ['localhost'] @task def production(): env.hosts = ['127.0.0.1'] staging(localhost)でhelloを実行。 $ fab staging hello production(127.0.0.1)でhelloを実行。 $ fab production hello Copyright 2014 MIRAIBOX co.,ltd.All rights reserved. FabricとRailsと私〜シンプルで、親密で、正確by @chikaram
  • 18. Fabric基本編(sudo, local) sudo('yum -y install mysql') # ここで失敗すると処理はストップする sudo('chkconfig mysql on') z リモートでsudoで実行。 @task def setup_mysql(): ローカルで実行。 @task def git_master(): local('git checkout master') # ここで失敗すると処理はストップする local('git pull origin master') Copyright 2014 MIRAIBOX co.,ltd.All rights reserved. FabricとRailsと私〜シンプルで、親密で、正確by @chikaram
  • 19. Fabric便利機能編(append, sed, uncomment) 文字列の追記メソッド(内部はecho 文字列>> ファイル名) すでに同じ文字列がある場合は追記されない。(冪等) append('~/.bashrc', 'export RAILS_ENV=production') 文字の変換メソッド(内部はsed) sed('/etc/ssh/sshd_config', 'Port 22', 'Port 2222', z use_sudo=True) # sudoで行うオプション コメント(デフォルトで#)を外すメソッド(内部はsed) uncomment('/etc/ssh/sshd_config', 'RSAAuthentication yes', use_sudo=True) # sudoで行うオプション Copyright 2014 MIRAIBOX co.,ltd.All rights reserved. FabricとRailsと私〜シンプルで、親密で、正確by @chikaram
  • 20. Fabric便利機能編(その他) ○ ホスト毎にwebとdbを分ける場合など ● コンファーム(fabric.contrib.console.confirm) ○ if confirm('OK?', default=True): ● プロンプト(fabric.operations.z prompt) ● パッケージ化 ● ロール ○ yes/noでなく入力値が欲しい場合など 詳しく知りたい方はドキュメントを確認。 http://docs.fabfile.org/ Copyright 2014 MIRAIBOX co.,ltd.All rights reserved. FabricとRailsと私〜シンプルで、親密で、正確by @chikaram
  • 21. Fabric応用編(Railsサーバーを作る例) run('¥curl -sSL https://get.rvm.io | bash -s stable --ruby') z @task def setup(): setup_ruby() setup_passenger() def setup_ruby(): def setup_passenger(): sudo('yum -y install httpd httpd-devel') sudo('chkconfig httpd on') run('gem install passenger') run('passenger-install-apache2-module --auto --languages ruby') Copyright 2014 MIRAIBOX co.,ltd.All rights reserved. FabricとRailsと私〜シンプルで、親密で、正確by @chikaram
  • 22. Fabric応用編(Railsサーバーをテストする例) その1: コマンドの返り値をPythonで確認して、問題が あればabortする。 output = run('ruby -v') if not re.search('2.1.5', output): abort('Ruby 2.1.5 not installed.') z その2:【もっといいやり方】コマンドだけで確認する。 run('ruby -v | grep 2.1.5') ※grepは行が見つからない時エラーステータスを返すの で、Fabricもabortする。 Copyright 2014 MIRAIBOX co.,ltd.All rights reserved. FabricとRailsと私〜シンプルで、親密で、正確by @chikaram
  • 23. Fabric応用編(Railsをデプロイする例) local_dir = '.', remote_dir = 'myapp', exclude = ['.git', 'log', 'tmp', 'vendor/bundle', 'public/assets'], z @task def deploy(): output = rsync_project( delete = True, capture = True # rsyncの出力結果をキャプチャーするオプション ) print output # 次のページにつづく Copyright 2014 MIRAIBOX co.,ltd.All rights reserved. FabricとRailsと私〜シンプルで、親密で、正確by @chikaram
  • 24. Fabric応用編(Railsをデプロイする例) # Gemfileに変更があればbundle installする(実際はdbロールに分ける) if re.search('Gemfile', output): run('cd myapp && bundle install --deployment') # assetsに変更があればprecompileする if re.search('(app|lib|vendor)/assets/', output): run('cd myapp && bundle exec rake assets:precompile') z # migrationに変更があればdb migrateする if re.search('db/migrate/', output): run('cd myapp && bundle exec rake db:migrate') # passengerを再起動 run('touch myapp/tmp/restart.txt') Copyright 2014 MIRAIBOX co.,ltd.All rights reserved. FabricとRailsと私〜シンプルで、親密で、正確by @chikaram
  • 25. Fabric応用編(Railsをデプロイする例) ● デプロイにかかる時間は約3秒! ※Gemfile、assets、migrationに変更がない場合 ● 複数サーバーある場合は、@parallelアノテーション 1. ローカルのFabric(1台)から 2. リモートの中間デプロイサz ーバーのFabric(20台) で並列実行可能。 を叩いて 3. それらが20台にデプロイすれば 400台くらいのデプロイは一瞬で終わるはず。 ※みたいなことは実際に試してから言え、ですが。 Copyright 2014 MIRAIBOX co.,ltd.All rights reserved. FabricとRailsと私〜シンプルで、親密で、正確by @chikaram
  • 26. Fabric応用編(Railsをデプロイする例) 参考) gitとshell scriptで1秒でやる例 z http://factore.ca/blog/278-how-we-reduced-rails-deploy-times- to-under-one-second-with-plain-git Copyright 2014 MIRAIBOX co.,ltd.All rights reserved. FabricとRailsと私〜シンプルで、親密で、正確by @chikaram
  • 27. Fabric応用編(他にもこんなことが) 本番サーバーのrails consoleとローカルから対話する。 run('cd myapp && rails console') 本番サーバーでrakeタスクを実行する。 run('cd myapp && bundle exec rake my_task') z 複数の本番サーバーのログを並列でtail -fして、ローカル でマージして表示する。(CPU食うので控えめに) @task @parallel def tail_log(): run('tail -f shared/log/production.log') Copyright 2014 MIRAIBOX co.,ltd.All rights reserved. FabricとRailsと私〜シンプルで、親密で、正確by @chikaram
  • 28. 以上、あとはググz ってください! Copyright 2014 MIRAIBOX co.,ltd.All rights reserved. FabricとRailsと私〜シンプルで、親密で、正確by @chikaram
  • 29. Fabricのメリット ● リモートサーバーの設定不要 ○ Fabricどころか、Pythonすら不要 ● 沢山のディレクトリーや設定ファイル不要 ○ 簡単なことなら1ファイルで完結 ○ ディレクトリーを分けてパッケージ化してもok z ● ssh configの設定不要 ○ Fabric内でホスト群を管理でき、チームでホスト 群の共有が容易(ssh configを設定してもok) ● いざとなったら他のツールへの移行が簡単 ● DSLレスなのでDSLを覚える必要がない Copyright 2014 MIRAIBOX co.,ltd.All rights reserved. FabricとRailsと私〜シンプルで、親密で、正確by @chikaram
  • 30. DSLの功罪(特に内部DSL) 1. DSLを利用してシンプルに書ける 2. プログラマーでない人でも読み書きができる(かも z DSLのメリット しれない) Copyright 2014 MIRAIBOX co.,ltd.All rights reserved. FabricとRailsと私〜シンプルで、親密で、正確by @chikaram
  • 31. DSLの功罪(特に内部DSL) ○ 記述法、思考法がそのDSLにロックインするため、 z DSLのデメリット 1. 覚えることが多い ○ 書籍の鈍器化 2. DSLにロックインする 他のツールややり方に移行しにくい 3. APIの変化の速度が早い ○ インターフェースには「流行り廃れ」がある ※ls、grep、yumは多分10年後でも使える ○ 内部DSLの基盤言語の変化に引きずられる、かも ※但し、デプロイ系ツールのAPI変更は少ない Copyright 2014 MIRAIBOX co.,ltd.All rights reserved. FabricとRailsと私〜シンプルで、親密で、正確by @chikaram
  • 32. DSLの功罪(特に内部DSL) 4. プログラミングっぽいことをやりにくい ○ if文やループ文が不格好に見える。罪悪感を感じる ○ よりDSLらしくするために、さらにDSLが増える z DSLのデメリット DSLを利用するときはプログラミングをしている感覚を 持てるようにすべきですし、(略) プログラムに手を加えるときは、プログラミング言語の 環境にいることを意識させるようにすべきです。 マーティン・ファウラー『ドメイン特化言語』P41 Copyright 2014 MIRAIBOX co.,ltd.All rights reserved. FabricとRailsと私〜シンプルで、親密で、正確by @chikaram
  • 33. DSLの功罪(特に内部DSL) 5. 内部実装が複雑なわりに、やってる仕事が小さい ○ package_install(‘mysql’) # 抽象度や汎用性が高い sudo(‘yum -y install mysql’) # 結局このこと? z DSLのデメリット VS ○ インターフェースがシンプル(使う側が楽)より も、実装がシンプル(コミッターが楽)の方が、 最終的なメリットが大きいことが多い(と思う) ○ なのでwith cd() とかも私はあえて使わない 6. DSLとして提供されている機能も、非DSLな書き方 で実行できてしまう(使う前に一通り覚えるべき) Copyright 2014 MIRAIBOX co.,ltd.All rights reserved. FabricとRailsと私〜シンプルで、親密で、正確by @chikaram
  • 34. DSLの功罪(特に内部DSL) 3. と、ここまでデメリットがあっても、巨大な組織内 で書き方をある程度統一できる、というメリットが 勝ることはある。かな? z DSLのメリット 大きな組織でFabricを使う場合、まずルールの制定から 入らなければならない。 ※なので今の会社でFabric導入を提案する予定はない。 cuisineやfabtoolsという選択肢もあるけど、そうなって きたらいっそAnsibleとかを使うのがいい気がする。 Copyright 2014 MIRAIBOX co.,ltd.All rights reserved. FabricとRailsと私〜シンプルで、親密で、正確by @chikaram
  • 35. Unixの哲学 1. 一つのことを行い、またそれをうまくやるプログラ ムを書け。 ○ run、sudo、localメソッド 2. 協調して動くプログラムを書け。 ○ 周知のコマンド(ls、grep、yum)との協調 例) sudo(‘yum -y install z mysql’) Copyright 2014 MIRAIBOX co.,ltd.All rights reserved. FabricとRailsと私〜シンプルで、親密で、正確by @chikaram
  • 36. Fabricのデメリット ● 習得が容易なため、履歴書に書けない ● 習得が容易なため、情報が少ない ● 習得が容易なため、勉強会もない(多分) ● 習得が容易なため、『詳解Fabric』も発売されない ● 習得が容易なため、Fabric Conf 2014はない ● 習得が容易なため、1,500USz ドルのFabric 3-day Training in Palo Altoもない だってつまるところ、やってることはリモートのコマン ドを叩いてるだけなので。 Copyright 2014 MIRAIBOX co.,ltd.All rights reserved. FabricとRailsと私〜シンプルで、親密で、正確by @chikaram
  • 37. シンプルであることは、なぜ難しいか 何が正しいのかは、皆答えられる。 => この機能、おかしい 何が一貫性があるかも、皆答えられる。 => この機能、他と違う z 何が完全であるかも、皆答えられる。 => あの機能が実装されてない しかし、何がシンプルであるかは誰も答えられない。 シンプルさとは、答えではなく、問いであるから。 Copyright 2014 MIRAIBOX co.,ltd.All rights reserved. FabricとRailsと私〜シンプルで、親密で、正確by @chikaram
  • 38. Fabricと私 Fabricは私のプログラマー人生の中で最高のツール。 最高のツールの「中の一つ」、ではなく本当に「一番」 最高のツール。 私はSSHするサーバーがあるz 限り、Fabricを使い続ける。 つまり、Fabricは「仕事を超えた存在」。 ※みなさんがお使いのツール、仕事を引退しても使い続 けますか? Copyright 2014 MIRAIBOX co.,ltd.All rights reserved. FabricとRailsと私〜シンプルで、親密で、正確by @chikaram
  • 39. Fabricと私 作者(@bitprophet)にGratipay.comを通じて、 毎週寄付してるよ! z 週1ドルだけどね! Copyright 2014 MIRAIBOX co.,ltd.All rights reserved. FabricとRailsと私〜シンプルで、親密で、正確by @chikaram
  • 40. Love Fabric! z ではなく、 おわりに Copyright 2014 MIRAIBOX co.,ltd.All rights reserved. FabricとRailsと私〜シンプルで、親密で、正確by @chikaram
  • 41. Love developing with Fabric! z おわりに ※目的は「作る事」、Fabricはあくまで手段。 Copyright 2014 MIRAIBOX co.,ltd.All rights reserved. FabricとRailsと私〜シンプルで、親密で、正確by @chikaram
  • 42. ご清聴ありがとz うございました。 おわりに Copyright 2014 MIRAIBOX co.,ltd.All rights reserved. FabricとRailsと私〜シンプルで、親密で、正確by @chikaram