Capistrano 万能論に疑問符

IT エンジニア向けの記事です。

Capistrano は Ruby 製の deploy ツールだ。

中々良い出来だと思う。何ができるのか、何が良いのかはちょっと検索すればすぐに出てくるだろう。ただ、状況にもよるだろうが俺の場合 Capistrano を積極的に使う気にはなれない。

まず最初に、この手の deploy ツールを使うこと理想の方法とは思えない事だ。

Capistrano に限らず、この手のツールを使いたくなるのはどんな時だろう?プロジェクトで開発しているプログラムを数多くのサーバーに deploy したい時では無いだろうか?多くは Web サーバーに deploy する時だろう。bat サーバーの場合も有るかもしれない。ただ、 deploy ツールが機能するほとんどの場合は Immutable OS でも動作する。つまり、新バージョンのプログラムをデプロイした新しいサーバーを用意しておいて、古いサーバーを削除すれば良い。

俺の言っていることは理想論かもしれない。コンテナや仮想マシンの技術が当たり前になった今日において Immutable OS の手法は難しくないように見えるが、仕事には色々なシガラミや制限が付き物だ。スペアのサーバーが足りない、仕組みを構築する工数が無い、政治的に面倒、などなど。

ただ、ここで俺が言いたいのは「デプロイツールは妥協して使うものだ」という事。

次に、Capistrano を真面目に運用しようとすると以外とハードルが高い。

Capistrano を使うには、Ruby をインストールしなければ行けない。どのバージョンを?それから、Gem で Capistrano をインストールする。どのバージョンを?

セットアップする側としては、どうしても Ruby や Gem にはが不安定という印象がつきまとう。そして、万一アプリ側で Ruby を使い出したら問題はより深刻になる。Ruby がコンパチするじゃないか。「rbenv を使え」というのは間違いとは言わないが、やっぱり rbenv は個人の開発用マシンに入れるべき物のような気がする。サーバーで使うとインストールパスの問題とか各マシンでコンパイルする嫌らしさが付きまとうからだ。そこをまたゴチャゴチャやりだすと、どんどん複雑になっていく。そんな事に工数を使いたくない。kiss (keep it simple, stupid) の原則に反してしまう。

便利にするために使い始めた Capistrano が意外と面倒で、その結果が「理想形ではない」となると、使う気が失せる。

そして最後に、DSL 覚えるのが面倒。既に複数のプログラムと DSL を使わざるを得ない立場の俺としては、これ以上覚えたくない。

Ruby は良い言語だと思うし、Rails で開発する事には何の問題も無いと思う。(状況によって向き、不向きはあるけど) アプリを Ruby で作った場合、プログラマが Capistrano を使うのも良いだろう。個人的には、Capistrano に限らず一定レベルのプログラムの知識があればサーバーを管理できる事は Ruby の長所だと考えている(Ruby レベルで環境設定関連のツールが揃っている言語は多くないだろう。)

ただ、最低限の OS、インフラ管理の知識があって、普段の開発では Ruby 以外の言語で開発している立場からすると Capistrano はあんまり有り難く無いんだよね。

当たり前だけど、全ての状況で最適なスペシャルツールなんて無い。もし有ったとしたら、それは当たり前になってツールという印象が無くなるだろう。ちょうど、サーバー間通信にイーサネットを使うように。ただ、俺の調べ方が偏っているのかもしれないがネットを見ると「Capistrano バンザイ」的な発言が少し行き過ぎているような気がしたので書いてみた。

標準偏差と4部位数って何?

高校生の知り合いが、学校で標準偏差や4部位数について習ったらしい。で、「試験に出るから教えて」と言われたのだが、そこで面白い質問が出た。
「そもそも、標準偏差とか4部位数って何ですか?」
なるほど、学校では計算方法だけ習ってその意味は教わらなかったのか。

学生さんにわかりやすいよう、成績分布図で考えてみよう。

例えば、100点満点のテストであなたが 70 点を取ったとする。でも、この数字だけではあなたの成績が良かったのか悪かったのか何も分からない。そこで、統計を使う。

真っ先に思いつく統計データは平均だ。「平均点が 50 点のテストで 70 点を取った」と言えば、少なくともあなたの成績は悪くない事がわかる。ただ、平均からは「普通より上か下か」というザックリとしたデータしか出てこない。(「普通」の定義はは置いといて。)例えば、70 点という成績が上から 1/3 なのか、1/10 なのか、そういった情報もあると便利だ。

「じゃあ、○人中×番のように順位を言えば良い」と言う人もいるだろう。それはある意味正しい。

理想的なテストと点数分布だと、下記のようになっているだろう。(横軸が点数、縦軸が人数。)
正規分布
Wikipedia 「正規分布」より引用

上記のようなキレイな分布図の場合、順位を言うことも悪くないだろう。この場合の欠点と言えば、少し面倒な計算をする必要が有る事くらいだ。例えば「1205 人中 352 位」と言われたら、「上位 1/4 から 1/3 くらい」という計算をするだろう。また、2 人の差を見るときはもっと面倒だ。「上から 1/7 の人と 1/5 の人の差は?」と言われたら、1/5 – 1/7 を計算しなくてはいけない。

しかし、通常はもっと深刻な問題がある。それは、成績分布が上図のようにキレイなグラフにならない事だ。実際には山の位置が平均からずれていたり、山が 2 個あったりする。山の付近では点数が 1 点変わるだけで順位が大きく変わってしまう。そのため、実際はほんの少しの差なのに大きな差があるように見えたり、逆の事もある。山の位置が「平均付近に 1 個」と分かっていれば頭の中で補正する事も可能だろうが、「山がどこに、いくつあるか分かりません。」という状況だと補正のしようがない。

その欠点を補うのが標準偏差だ。標準偏差は、実際の点数分布を無理やり上図のような図に近似したとき、あなたがどの程度の位置にいるかを示してくれる。

ちなみに、偏差値は標準偏差を 50 前後に見えるように数字をいじっただけのもの。
上手の 1 σ が偏差値 10 に相当し、中央が偏差値 50 だ。つまり、偏差値 40 – 60 の間に全体の 66.27 % が入り、30 – 70 の間に全体の 95.45 % が入り、20 – 80 の間に 99.73 % が入る。
だから、「偏差値 60」といえば、実際の点数分布を理想的に近似した場合の上位 17% の位置という事になる。
(ちなみに、日常で 100 前後使うことが多いので、この程度の数字だとイメージしやすい。そのため、何かの指標を 100 前後になるよう調整することは良くある。天気予報の降雨確立が % で表記されているのもこの理由だろう。)

また、2 人の差を見るときも、標準偏差ならば単純に引き算すれば良い。面倒な計算や山の位置を気にする必要も無い。最初は少し難しく思えるかも知れないが、見慣れると標準偏差は非常に直観的でわかりやすい。

さて、標準偏差というのは中々便利なのだが、もちろん欠点だってある。例えば大量のサンプルがないと統計的に意味のある値を出せないことだ。データのサンプル数が極端に少ないと平均に意味がない事は分かるだろう。標準偏差は平均よりもずっと多くの情報を提供する。(平均は山の位置だけなのに、標準偏差は山の位置と形を提供するんだから当然だ。)逆に言うと、標準偏差を計算するためにはそれだけ多くの情報、つまりサンプル数を提供する必要があるのだ。

では、サンプル数が少ないと具体的にどんな情報を得ることが難しいのだろうか?例えば、グラフの平均から外れた位置の情報は取得が難しい。

例えば、40 人のクラスでテストをした場合、1 位の人がどの程度すごいのかを測る事は難しい。もしかすると 1 万人に 1 人の天才が紛れているかもしれないし、たまたま上位層が薄くて、本当は 10 人に一人程度の成績かもしれない。だって、上位の情報を得るために重要なのは、同様に成績上位者達の情報だ。しかし、1 位、つまり上位 1/40 の情報を推測したくともサンプルは 1 人しかいないし、妥協して上位 1/10 の情報から推測しようにも、やっぱりサンプルは 4 人しかいない。これでは統計的な情報を得ることは難しい。

だが逆に、クラスの真ん中付近の情報ならばそれなりにサンプル数がそろっているので何となく把握できる。

そんな時に使用するのが 4 部位数だ。4 部位数ではサンプル数が少なくて良くわからない上下の端のデータを切り捨て、「上位 1/4, 中央、下位 1/4 がどの程度の位置か?」を指摘する。

直観で理解できるよう、あえて曖昧な表現を多用したが、うまく説明できただろうか?
最初に質問してきた知り合いのように、悩める高校生の助けになればと思いちょっと書いてみた。

関西 Debian 勉強会行ってきた

2016年 4月 24日の関西 Debian 勉強会に行ってきた。

まだ東京で働いていた頃に仲の良い同僚に誘われたのがきっかけで、東京エリアでは何回か参加した事があるが、関西は初めて。去年から色々とあって(本当に色々とあって)1 年以上参加していなかったので久しぶり感もある

俺は結構 Debian のお世話になっていると思う。勉強会に頻繁に出ているし普段から使っているし。ちなみに、この blog も Debian で動いている。 ただ、その割に Debian 自体にあまり貢献して来なかった。発表は 1 回しかしていないし、debも作れない。東京では友達や DD (Debian Developer) の人に色々と教わったのだけど。(申し訳ございません。)ただ、お世話になりっぱなしも悪いので宣伝を兼ねて Debian 勉強会の紹介。

その前に、Debian について簡単な紹介。

よく「Debian は Linux ディストリビューションの一つ」と考えている人がいるけれど、正確では無いと思う。

Debian は Free な Universal OS だ。

「Free」とは「無料」じゃなくて「自由」と考えた方が良いだろう。関連する物全てが GPL とは行かないが、ライセンスには結構こだわっている。開発は DD (Debian Developper) を中心としたコミュニティ主導で行われており、その代表も定期的に選挙で選んでいる。非常に民主的なシステムだ。

「Universal OS」とは「色々な環境で動く OS」という意味。x86 や AMD64 の CPU はもちろん、ARM など出来るだけ多くの環境で動く事を目指している。

Free な Universal OS を作るための方法として現在は Linux を採用しているが、特に Debian として Linux にこだわりは無い。現にちょっと前は BSD ベースの Debian (kFreeBSD) を Linux と並行サポートしていた事もあった。Debian コミュニティの本音としては Linux だけに頼るのは宜しくないと考えているようだが、残念な事に工数の問題で 2016 年 4 月現在では Debian と言えば Linux のみである。

ところで Debian コミュニティの理想はよいとして、ユーザーから見て Debian はどういったディストリビューションだろう?

細かい特徴は色々とあるが、個人的には安定したパッケージが大量に存在する事が一番大きな特徴だと思う。少なくとも RedHat の提供する rpm より Debian の deb の方が数は多いし、安定していると感じる。もっとも「安定」については簡単に数値化できないので少し恣意的かもしれない。

また、少し Debian に入り込んでくると、今度は Debian ポリシーという物に遭遇する。Debian の最も凄い所はこの Debian ポリシーだという人もいる。俺もまだ勉強しだした所なので詳細には書けないが、Serverspec なんて比じゃないレベルの自動テストや並みの agile 顔負けのマネージメントの粋が詰まっている。世界中に散らばったボランティアの DD 達がどうやって協調作業できるのか、その答えがこれだ。

では、簡単な紹介が終わったところで Debian 勉強会の紹介にうつる。

まず、少し残念な事だが Debian 勉強会は一般の IT 系の勉強会と比べて参加者の人数が少ないように思う。東京エリア、関西ともに参加者は 10 名足らず。ただ、参加者目線ではこれは悪い事ばかりでは無い。例えば、勉強会に参加している凄い人との距離が近くなる。(Debian 勉強会に限らず、大抵の勉強会には凄い人が何人かいる物だ)それに、「発言の順番待ち」みたいな事も無い。

また、一般の勉強会に比べて色々とカジュアルだ。普段「怠惰は美徳」と言っているエンジニアも何故か勉強会となると本質と外れた部分で必要以上にクオリティを高めてしまう物だが、Debian 勉強会はそんな事が無い。発表する方も参加する方も肩の力を抜いて参加できる。(もちろん、発表する際は最低限の準備は必要だし、幹事の方は色々と準備していると思います。比較の問題です。)その代わり、ミーティングの場のディスカッションなどが濃い。ちゃんと聞いて質問や意見をしてくれる人がいる。あなた自身も質問十分質問できるし、脇で聞いているだけでも勉強になる。ただ、議題に上がる事の大体は初歩的な質問から専門的な質問まで誰か答えられる人がいると思うので、せっかくならば聞いてみると良いだろう。

最後に、いろんな分野のエンジニアが集まってくる。普通、勉強会には同じ業界の人ばかり集まってしまう物だが、Debian 勉強会はそうではない。俺は Web 系の人間だけど、組み込み系の人や計算屋さんも来る。。ちなみに、今回の発表は計算屋さんが流体力学の計算方法とそのデモをしてくれた。そのせいか勉強会終了後の打ち上げが面白い。普段聞けないような話が色々と出てくる。

そんな訳で、少しでも興味を持った方はぜひ Debian 勉強会に参加してみてください。あと、関西 Debian 勉強会に参加する人は自分で Wifi の準備をしておくと良いだろう。俺は携帯を換えたばかりなのでテザリングの方法がわからず、ネットが使えず涙した。現在は不明だが、1 年前の東京エリア Debian 勉強会の場合、会場の Wifi を使用できた。

俺は、会社で Ubuntu を使うことになりそうなので今度こそは真面目に Debian を勉強するつもり。(ご存知の方も多いと思うが、Ubuntu は Debian ベースだ。)なので、しばらくは勉強会に真面目に出るつもり。暗号通貨の開発をやっている人はなぜか Ubuntu ユーザーが多いので、それ以外を使うと面倒な事が多いのよね。ってな訳で、最低でもオレオレ deb は作成できないと行けないし、いっそのこと Debian ポリシーに則った作り方もできるようになりたい。

Debian の基礎知識を教えてくれて、さらに勉強会に誘ってくれた友人に感謝しつつ Debian 勉強会の勧めでした