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.
FabricとRailsと私 
z 
〜シンプルで、親密で、正確 
Copyright 2014 MIRAIBOX co.,ltd.All rights reserved. 
by @chikaram
はじめに(注意点) 
1. 本プレゼンの内容は多少情緒的な面があります。 
2. Fabricは実業務では利用していません。 
※プライベートのなんちゃってRailsアプリなどに利 
用しているのみ。 
z 
3. そのためコード例は実業務には...
Fabricとは? 
Fabricとは、「Pythonic remote execution」 
つまり、「Pythonらしいリモート実行ツール」 
z 
でも、大方の反応はこうですよね? 
「Python分からないんだけど…」 
Copyri...
Fabricとは? 
私もFabricと出会う前なら、Pythonと聞いただけで 
● Python?自分には関係ない話しだ 
● 私はRubyプログラマーだ、なぜわざわざPythonのツ 
ールを使わなくてはいけない 
z 
と思ったはず。 ...
Pythonの知識は必要? 
むしろ、Pythonの会社ではない組織内で、かつチームで 
利用する場合は、Pythonの知識はない方がいい。 
z 
ほぼ不要。 
理由は、 
Pythonの高度な機能を利用すると、他の人が理解できな 
い。「あ...
Pythonの知識は必要? 
しかし、知識が完全にゼロだと実現できなことが「ま 
れ」にある。Fabric歴4ヶ月で以下を利用。 
○ 必ず利用する(サブコマンドの作成に必須) 
z 
● メソッドの定義 
● if文 
○ まぁまぁ利用する ...
他の言語で同様のツールは? 
● What is Ruby's equivalent of Python's fabric? 
● Is there anything like Fabric for Perl? 
● Is there a de...
他の言語で同様のツールは? 
● Ruby製のPython Fabricと同等のツールはなに? 
● PerlのFabricみたいなのある? 
● Fabricに似たJavaScriptで書かれたデプロイツールっ 
● PHPのPython F...
Fabricで何ができる? 
リモートホストでコマンド実行、つまり 
● サーバーの構築(構成管理) 
● 構築したサーバーのテスト 
● デプロイ 
● その他、面倒なタスクの定義(★ここ、重要!) 
z 
などが、Fabric一本でできる。...
Fabricで何ができる? 
1. S3上のはずかしいファイルを削除して 
2. RDS上のはずかしいテーブルだけをtruncateして 
3. 法定相続人の公開鍵をEC2にセット 
4. Macのゴミ箱を空にして 
5. ツイッターに「ではさ...
Fabricの特徴 
他のメジャーなツールと最大の違いは 
「圧倒的な習得の容易さ」 
z 
● 5分程度で動かす事ができ 
● 30分程度でだいたいのことが理解可能 
※ツールの習得に挫折して、みじめな思いをすることは 
ないかと。 
Cop...
前置きが長くなりました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....
Fabric基本編(おまじない) 
適当な場所にfabfile.pyを作成、中身は以下。 
from fabric.api import * 
from fabric.contrib.files import * 
from fabric.co...
z 
Fabric基本編(run) 
@task 
def hello(): 
run('echo hello') 
@task 
def date(): 
run('date') 
サブコマンド一覧を表示する。 
$ fab -l 
リモート...
Fabric基本編(run) 
ホストの指定をfabfile.pyに書く。 
env.hosts = ['localhost', '127.0.0.1'] 
env.user = 'chikaram' 
env.key_filename = '...
z 
Fabric基本編(run) 
@task 
def staging(): 
env.hosts = ['localhost'] 
@task 
def production(): 
env.hosts = ['127.0.0.1'] 
...
Fabric基本編(sudo, local) 
sudo('yum -y install mysql') # ここで失敗すると処理はストップする 
sudo('chkconfig mysql on') 
z 
リモートでsudoで実行。 
@t...
Fabric便利機能編(append, sed, uncomment) 
文字列の追記メソッド(内部はecho 文字列>> ファイル名) 
すでに同じ文字列がある場合は追記されない。(冪等) 
append('~/.bashrc', 'expo...
Fabric便利機能編(その他) 
○ ホスト毎にwebとdbを分ける場合など 
● コンファーム(fabric.contrib.console.confirm) 
○ if confirm('OK?', default=True): 
● プ...
Fabric応用編(Railsサーバーを作る例) 
run('¥curl -sSL https://get.rvm.io | bash -s stable --ruby') 
z 
@task 
def setup(): 
setup_ruby...
Fabric応用編(Railsサーバーをテストする例) 
その1: コマンドの返り値をPythonで確認して、問題が 
あればabortする。 
output = run('ruby -v') 
if not re.search('2.1.5'...
Fabric応用編(Railsをデプロイする例) 
local_dir = '.', 
remote_dir = 'myapp', 
exclude = ['.git', 'log', 'tmp', 
'vendor/bundle', 'pub...
Fabric応用編(Railsをデプロイする例) 
# Gemfileに変更があればbundle installする(実際はdbロールに分ける) 
if re.search('Gemfile', output): 
run('cd myapp ...
Fabric応用編(Railsをデプロイする例) 
● デプロイにかかる時間は約3秒! 
※Gemfile、assets、migrationに変更がない場合 
● 複数サーバーある場合は、@parallelアノテーション 
1. ローカルのFa...
Fabric応用編(Railsをデプロイする例) 
参考) 
gitとshell scriptで1秒でやる例 
z 
http://factore.ca/blog/278-how-we-reduced-rails-deploy-times- 
...
Fabric応用編(他にもこんなことが) 
本番サーバーのrails consoleとローカルから対話する。 
run('cd myapp && rails console') 
本番サーバーでrakeタスクを実行する。 
run('cd my...
以上、あとはググz 
ってください! 
Copyright 2014 MIRAIBOX co.,ltd.All rights reserved. FabricとRailsと私〜シンプルで、親密で、正確by @chikaram
Fabricのメリット 
● リモートサーバーの設定不要 
○ Fabricどころか、Pythonすら不要 
● 沢山のディレクトリーや設定ファイル不要 
○ 簡単なことなら1ファイルで完結 
○ ディレクトリーを分けてパッケージ化してもok ...
DSLの功罪(特に内部DSL) 
1. DSLを利用してシンプルに書ける 
2. プログラマーでない人でも読み書きができる(かも 
z 
DSLのメリット 
しれない) 
Copyright 2014 MIRAIBOX co.,ltd.All ...
DSLの功罪(特に内部DSL) 
○ 記述法、思考法がそのDSLにロックインするため、 
z 
DSLのデメリット 
1. 覚えることが多い 
○ 書籍の鈍器化 
2. DSLにロックインする 
他のツールややり方に移行しにくい 
3. API...
DSLの功罪(特に内部DSL) 
4. プログラミングっぽいことをやりにくい 
○ if文やループ文が不格好に見える。罪悪感を感じる 
○ よりDSLらしくするために、さらにDSLが増える 
z 
DSLのデメリット 
DSLを利用するときはプ...
DSLの功罪(特に内部DSL) 
5. 内部実装が複雑なわりに、やってる仕事が小さい 
○ package_install(‘mysql’) # 抽象度や汎用性が高い 
sudo(‘yum -y install mysql’) # 結局このこと...
DSLの功罪(特に内部DSL) 
3. と、ここまでデメリットがあっても、巨大な組織内 
で書き方をある程度統一できる、というメリットが 
勝ることはある。かな? 
z 
DSLのメリット 
大きな組織でFabricを使う場合、まずルールの制定...
Unixの哲学 
1. 一つのことを行い、またそれをうまくやるプログラ 
ムを書け。 
○ run、sudo、localメソッド 
2. 協調して動くプログラムを書け。 
○ 周知のコマンド(ls、grep、yum)との協調 
例) sudo(...
Fabricのデメリット 
● 習得が容易なため、履歴書に書けない 
● 習得が容易なため、情報が少ない 
● 習得が容易なため、勉強会もない(多分) 
● 習得が容易なため、『詳解Fabric』も発売されない 
● 習得が容易なため、Fabr...
シンプルであることは、なぜ難しいか 
何が正しいのかは、皆答えられる。 
=> この機能、おかしい 
何が一貫性があるかも、皆答えられる。 
=> この機能、他と違う 
z 
何が完全であるかも、皆答えられる。 
=> あの機能が実装されてない...
Fabricと私 
Fabricは私のプログラマー人生の中で最高のツール。 
最高のツールの「中の一つ」、ではなく本当に「一番」 
最高のツール。 
私はSSHするサーバーがあるz 
限り、Fabricを使い続ける。 
つまり、Fabricは「...
Fabricと私 
作者(@bitprophet)にGratipay.comを通じて、 
毎週寄付してるよ! 
z 
週1ドルだけどね! 
Copyright 2014 MIRAIBOX co.,ltd.All rights reserved....
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. Fab...
ご清聴ありがとz 
うございました。 
おわりに 
Copyright 2014 MIRAIBOX co.,ltd.All rights reserved. FabricとRailsと私〜シンプルで、親密で、正確by @chikaram
Upcoming SlideShare
Loading in …5
×

FabricとRailsと私

2,568 views

Published on

FabricとRailsと私 〜シンプルで、親密で、正確

Published in: Software
  • Be the first to comment

FabricとRailsと私

  1. 1. FabricとRailsと私 z 〜シンプルで、親密で、正確 Copyright 2014 MIRAIBOX co.,ltd.All rights reserved. by @chikaram
  2. 2. はじめに(注意点) 1. 本プレゼンの内容は多少情緒的な面があります。 2. Fabricは実業務では利用していません。 ※プライベートのなんちゃってRailsアプリなどに利 用しているのみ。 z 3. そのためコード例は実業務には不適切な点があるか と思います。また主張にも理想論的なところがあり ます。 何卒ご了承ください。 Copyright 2014 MIRAIBOX co.,ltd.All rights reserved. FabricとRailsと私〜シンプルで、親密で、正確by @chikaram
  3. 3. Fabricとは? Fabricとは、「Pythonic remote execution」 つまり、「Pythonらしいリモート実行ツール」 z でも、大方の反応はこうですよね? 「Python分からないんだけど…」 Copyright 2014 MIRAIBOX co.,ltd.All rights reserved. FabricとRailsと私〜シンプルで、親密で、正確by @chikaram
  4. 4. Fabricとは? 私もFabricと出会う前なら、Pythonと聞いただけで ● Python?自分には関係ない話しだ ● 私はRubyプログラマーだ、なぜわざわざPythonのツ ールを使わなくてはいけない z と思ったはず。 Copyright 2014 MIRAIBOX co.,ltd.All rights reserved. FabricとRailsと私〜シンプルで、親密で、正確by @chikaram
  5. 5. Pythonの知識は必要? むしろ、Pythonの会社ではない組織内で、かつチームで 利用する場合は、Pythonの知識はない方がいい。 z ほぼ不要。 理由は、 Pythonの高度な機能を利用すると、他の人が理解できな い。「あなたが分かる」と「みんなも分かる」は別物。 ※Pythonの会社でなければ、FabricのためにPythonの高 度な機能を社員に学ばせるようなことは避けたい。(自 分が学ぶのは自由) Copyright 2014 MIRAIBOX co.,ltd.All rights reserved. FabricとRailsと私〜シンプルで、親密で、正確by @chikaram
  6. 6. Pythonの知識は必要? しかし、知識が完全にゼロだと実現できなことが「ま れ」にある。Fabric歴4ヶ月で以下を利用。 ○ 必ず利用する(サブコマンドの作成に必須) z ● メソッドの定義 ● if文 ○ まぁまぁ利用する ● リスト(配列)とfor inループ ○ まれに利用する ● 正規表現操作 ○ 一度だけ利用した ※Python総学習時間約20分。ググって学んだだけ。 Copyright 2014 MIRAIBOX co.,ltd.All rights reserved. FabricとRailsと私〜シンプルで、親密で、正確by @chikaram
  7. 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. 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. 9. Fabricで何ができる? リモートホストでコマンド実行、つまり ● サーバーの構築(構成管理) ● 構築したサーバーのテスト ● デプロイ ● その他、面倒なタスクの定義(★ここ、重要!) z などが、Fabric一本でできる。 Fabricは、構成管理、サーバーテスト、デプロイ、 だけじゃない! Copyright 2014 MIRAIBOX co.,ltd.All rights reserved. FabricとRailsと私〜シンプルで、親密で、正確by @chikaram
  10. 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. 11. Fabricの特徴 他のメジャーなツールと最大の違いは 「圧倒的な習得の容易さ」 z ● 5分程度で動かす事ができ ● 30分程度でだいたいのことが理解可能 ※ツールの習得に挫折して、みじめな思いをすることは ないかと。 Copyright 2014 MIRAIBOX co.,ltd.All rights reserved. FabricとRailsと私〜シンプルで、親密で、正確by @chikaram
  12. 12. 前置きが長くなりましたz が、使ってみましょう! Copyright 2014 MIRAIBOX co.,ltd.All rights reserved. FabricとRailsと私〜シンプルで、親密で、正確by @chikaram
  13. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 28. 以上、あとはググz ってください! Copyright 2014 MIRAIBOX co.,ltd.All rights reserved. FabricとRailsと私〜シンプルで、親密で、正確by @chikaram
  29. 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. 30. DSLの功罪(特に内部DSL) 1. DSLを利用してシンプルに書ける 2. プログラマーでない人でも読み書きができる(かも z DSLのメリット しれない) Copyright 2014 MIRAIBOX co.,ltd.All rights reserved. FabricとRailsと私〜シンプルで、親密で、正確by @chikaram
  31. 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. 32. DSLの功罪(特に内部DSL) 4. プログラミングっぽいことをやりにくい ○ if文やループ文が不格好に見える。罪悪感を感じる ○ よりDSLらしくするために、さらにDSLが増える z DSLのデメリット DSLを利用するときはプログラミングをしている感覚を 持てるようにすべきですし、(略) プログラムに手を加えるときは、プログラミング言語の 環境にいることを意識させるようにすべきです。 マーティン・ファウラー『ドメイン特化言語』P41 Copyright 2014 MIRAIBOX co.,ltd.All rights reserved. FabricとRailsと私〜シンプルで、親密で、正確by @chikaram
  33. 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. 34. DSLの功罪(特に内部DSL) 3. と、ここまでデメリットがあっても、巨大な組織内 で書き方をある程度統一できる、というメリットが 勝ることはある。かな? z DSLのメリット 大きな組織でFabricを使う場合、まずルールの制定から 入らなければならない。 ※なので今の会社でFabric導入を提案する予定はない。 cuisineやfabtoolsという選択肢もあるけど、そうなって きたらいっそAnsibleとかを使うのがいい気がする。 Copyright 2014 MIRAIBOX co.,ltd.All rights reserved. FabricとRailsと私〜シンプルで、親密で、正確by @chikaram
  35. 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. 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. 37. シンプルであることは、なぜ難しいか 何が正しいのかは、皆答えられる。 => この機能、おかしい 何が一貫性があるかも、皆答えられる。 => この機能、他と違う z 何が完全であるかも、皆答えられる。 => あの機能が実装されてない しかし、何がシンプルであるかは誰も答えられない。 シンプルさとは、答えではなく、問いであるから。 Copyright 2014 MIRAIBOX co.,ltd.All rights reserved. FabricとRailsと私〜シンプルで、親密で、正確by @chikaram
  38. 38. Fabricと私 Fabricは私のプログラマー人生の中で最高のツール。 最高のツールの「中の一つ」、ではなく本当に「一番」 最高のツール。 私はSSHするサーバーがあるz 限り、Fabricを使い続ける。 つまり、Fabricは「仕事を超えた存在」。 ※みなさんがお使いのツール、仕事を引退しても使い続 けますか? Copyright 2014 MIRAIBOX co.,ltd.All rights reserved. FabricとRailsと私〜シンプルで、親密で、正確by @chikaram
  39. 39. Fabricと私 作者(@bitprophet)にGratipay.comを通じて、 毎週寄付してるよ! z 週1ドルだけどね! Copyright 2014 MIRAIBOX co.,ltd.All rights reserved. FabricとRailsと私〜シンプルで、親密で、正確by @chikaram
  40. 40. Love Fabric! z ではなく、 おわりに Copyright 2014 MIRAIBOX co.,ltd.All rights reserved. FabricとRailsと私〜シンプルで、親密で、正確by @chikaram
  41. 41. Love developing with Fabric! z おわりに ※目的は「作る事」、Fabricはあくまで手段。 Copyright 2014 MIRAIBOX co.,ltd.All rights reserved. FabricとRailsと私〜シンプルで、親密で、正確by @chikaram
  42. 42. ご清聴ありがとz うございました。 おわりに Copyright 2014 MIRAIBOX co.,ltd.All rights reserved. FabricとRailsと私〜シンプルで、親密で、正確by @chikaram

×