<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Sawanoboly.net on Sawanoboly.net</title>
    <link>https://www.sawanoboly.net/</link>
    <description>Recent content in Sawanoboly.net on Sawanoboly.net</description>
    <generator>Hugo -- gohugo.io</generator>
    <language>ja-JP</language>
    <lastBuildDate>Sat, 11 Nov 2017 22:00:00 +0900</lastBuildDate>
    <atom:link href="/" rel="self" type="application/rss+xml" />
    
    
    <item>
      <title>DiscordとAudio Hijackでたぶん快適なPodcast収録</title>
      <link>https://www.sawanoboly.net/2017/11/discord-ah/</link>
      <pubDate>Sat, 11 Nov 2017 22:00:00 +0900</pubDate>
      
      <guid>https://www.sawanoboly.net/2017/11/discord-ah/</guid>
      <description>

&lt;p&gt;更新不定期で細々と&lt;a href=&#34;https://cloudinfra.audio&#34;&gt;のぼりーさんのクラウドインフラPodcast&lt;/a&gt;というのをやっているわけですが、
収録の環境をDiscordをベースにリニューアルしてみました。&lt;/p&gt;

&lt;h3 id=&#34;自分と相手を別のトラックに録音したい&#34;&gt;自分と相手を別のトラックに録音したい&lt;/h3&gt;

&lt;p&gt;自分のPodcastは収録した音声をそのまま使用することはなく、ある程度編集してから配信しています。&lt;/p&gt;

&lt;p&gt;さて、いざ編集となった時に、色々な理由から私とゲストの方の音声は別の音源として扱えると助かります。
双方が慣れていればお互いで自分のみをローカルに録音し、それを使用すればよいのですが、基本的に単発出演のゲストさんにあまり手間をかけさせたり、なおかつ録音失敗したりするのはマズイっていうかダメです。&lt;/p&gt;

&lt;p&gt;そのため、できるだけ自分の環境側でそれぞれの音声を個別に録音しておきたいところなのですが、これがツール選定の課題になりやすい。&lt;/p&gt;

&lt;p&gt;これまでの収録では主にSkypeのプラグイン、&lt;a href=&#34;http://www.ecamm.com/mac/callrecorder/&#34;&gt;Call Recorder for Skype&lt;/a&gt; を使用しています。音質は悪くないし設定も簡単なので重宝していましたが、最近Skypeがなんとも不安定(Mac版だけかも)なため、乗り換え先を探してみることに。&lt;/p&gt;

&lt;p&gt;で、以前から気になっていた&lt;a href=&#34;https://discordapp.com&#34;&gt;Discord&lt;/a&gt;、ビデオつきでの通話も可能になったことだし使ってみることにしました。&lt;/p&gt;

&lt;h3 id=&#34;audio-hijack-よい&#34;&gt;Audio Hijack よい&lt;/h3&gt;

&lt;p&gt;Discord単体では、プラグインを含めて音声を別々に録音する手段はなさそうです。そこで目をつけたのがAudio Hijack。&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://rogueamoeba.com/audiohijack/&#34;&gt;Audio Hijack | Rogue Amoeba&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;macos上のオーディオを良い感じに振り分けたり録音することができます。例えば次のように、複数のソース、複数の保存先を繋げて録音するような使い方です。&lt;/p&gt;

&lt;figure&gt;
  &lt;img src=&#34;https://www.sawanoboly.net/images/2017/discord_003.png&#34; alt=&#34;&#34; class=&#34;pure-img&#34; &gt;
  &lt;figcaption&gt;&lt;/figcaption&gt;
&lt;/figure&gt;


&lt;p&gt;セッティングについて補足すると、入力ソースにDiscordが2つあり、それぞれでIn/Outを左右に振り分けるオプションを使っています。&lt;/p&gt;

&lt;figure&gt;
  &lt;img src=&#34;https://www.sawanoboly.net/images/2017/discord_002.png&#34; alt=&#34;&#34; class=&#34;pure-img&#34; &gt;
  &lt;figcaption&gt;&lt;/figcaption&gt;
&lt;/figure&gt;


&lt;p&gt;この設定を有効にしたDiscordを入力指定した後、右だけ、左だけを通すチャンネルセレクタをかますことで自分と相手の声を別々に録音するようになっています。
ここで相手の声側はスピーカーにも繋がないと、録音はできるけど収録しながら聞くことができないので2つに分けていますね。
(図でもう一つ系統がありますが、比較テスト用なので気にしないで。)&lt;/p&gt;

&lt;p&gt;このようなセッティングはテンプレートとして保存でき、使いたいときにすぐ再利用できるのが何より嬉しいですね。&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;参考:  一応、フリーのツール(※)によるVirtual Input/Outputデバイスを組み合わせて実現はできますが、結構に煩雑なので毎回セットアップするのが大変です。&lt;br&gt;
※) &lt;a href=&#34;http://rogueamoeba.com/legacy/&#34;&gt;LineIn&lt;/a&gt;や&lt;a href=&#34;https://soundflower.softonic.jp/mac&#34;&gt;SoundFlower&lt;/a&gt;など。&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;また、Audio HijackはDiscordに限らず汎用的に使えるため、プラグイン形式のように特定のアプリケーションに依存しなくてすみます。有料ではありますが、一度導入しておくと収録に利用するアプリケーションを変更しても勝手が変わらないのでおすすめです。&lt;/p&gt;

&lt;h3 id=&#34;discord-もう一つの用途&#34;&gt;Discord、もう一つの用途&lt;/h3&gt;

&lt;p&gt;余談ですが、Discordってそもそもゲームなどの実況向けなわけで。折角なのでイベント中継の裏で雑談するようなサーバを運営してみます。
まだちゃんとはオープンしておらず、そのうち告知用の配信をしようと思っていますが、興味ある方は&lt;a href=&#34;https://discord.gg/AxAwMER&#34;&gt;Discord 招待リンク - nobolycloudサーバ &lt;/a&gt;から勝手に入って来ていただいてもOKです。&lt;/p&gt;
</description>
    </item>
    
    
    
    <item>
      <title>OSSやPodcastのような個人活動ってBitcoinと相性いいんじゃねえかという話</title>
      <link>https://www.sawanoboly.net/2016/11/bitcoin-as-donation/</link>
      <pubDate>Sun, 27 Nov 2016 17:00:22 +0900</pubDate>
      
      <guid>https://www.sawanoboly.net/2016/11/bitcoin-as-donation/</guid>
      <description>

&lt;p&gt;先日、&lt;a href=&#34;https://cloudinfra.audio&#34;&gt;自分のPodcast&lt;/a&gt;に応援窓口を作ろうと考えました。少し色々試して、最終的に設置したのはBitcoinのアドレス。&lt;/p&gt;

&lt;p&gt;QRコードをすっと読んで、金額を入れてタップ。これだけで、個人宛にコインを送れるってのが小気味よい。実際使ってみると、デジタルおひねりとして、結構優れた体験です。&lt;/p&gt;

&lt;p&gt;そんなBitcoinの話。&lt;/p&gt;

&lt;h2 id=&#34;国境がない感じがよい-しがらみレス&#34;&gt;国境がない感じがよい、しがらみレス&lt;/h2&gt;

&lt;p&gt;Podcastを応援できる仕組みをなにか作ろうと考えて、Paypalとか、Stripeとかで作ろうかなとちょいちょい見ました。
特にStripeは使いやすくて良いですね。PaypalもフォームをPaypal側にもてて嬉しかったりします。&lt;/p&gt;

&lt;p&gt;しかし、どうもそこまでキッチリした感じの徴収はやだなあ、というありがちな割り切れなさなんかもあるわけです。
更新は計画的ではないし特典をつけるためにカスタマー管理したいというほどでもないし。
Paypalでは日本アカウントで寄付の設置も駄目だったりしますし。(あとちょっと実装いるし)&lt;/p&gt;

&lt;p&gt;そこで気になったのが何かと話題のBlockChain、使ったことがないのでBitcoinってどうなんやと。
で、実際Walletを作ってみると必要なものはQRコードの画像一枚、身元すらどうでもよい。
こりゃあシンプルだ！&lt;/p&gt;

&lt;p&gt;そのアドレスに送金するのも、冒頭の記述のようにまた楽なもんだと。&lt;/p&gt;

&lt;p&gt;いわゆるお金を取扱うWebサービスを通すと、まあまあ手数料を取ってくるわけです。
それが悪いわけではありませんが、『俺はコイツに寄付したいだけなんだよ！』ってときに、そんなに色々と中間ナントカを通さなくてもいいじゃないのという気がしなくもありません。(※そもそも貨幣経済における信用とか、そういう規模の話ではなくて、ごく小規模の範囲で。)&lt;/p&gt;

&lt;p&gt;その点でBitcoinは、もはや貝殻を適当に投げているような感覚、とても平坦な印象ですごくしがらみレス？しがらまない。&lt;/p&gt;

&lt;h2 id=&#34;トランザクションは見えちゃうよ&#34;&gt;トランザクションは見えちゃうよ&lt;/h2&gt;

&lt;p&gt;ちなみに、特定のアドレスにどれだけのコインが送られたかはオープンな情報です。&lt;/p&gt;

&lt;p&gt;(この投稿時点で)Podcastのサイトに貼ってあるアドレス &lt;a href=&#34;https://blockchain.info/address/17JHWTuLJHGd3KTR3esm1nzDeNDkCCi7Y7&#34;&gt;17JHWTuLJHGd3KTR3esm1nzDeNDkCCi7Y7&lt;/a&gt; では、&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;試しに放り込んだ自分から&lt;/li&gt;
&lt;li&gt;たかって払わせた知人から&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;の2つトランザクションが見えており、総計 0.011935 BTC をせしめているのがわかります。こういう点もなんだか面白い。&lt;/p&gt;

&lt;h2 id=&#34;まず手持ちのコインを0から0以上にする時点に敷居がある&#34;&gt;まず手持ちのコインを0から0以上にする時点に敷居がある&lt;/h2&gt;

&lt;p&gt;コインを持つためのWalletはメールアドレスやiOS/Androidのアプリケーションを使うだけで簡単につくることができます。受取用のアドレスもすぐ使えます。&lt;/p&gt;

&lt;p&gt;しかし、(誰かに寄付するための)コインの入手には少々難があります。経路は次の2通りでしょう。&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;持ってる人にもらう&lt;/li&gt;
&lt;li&gt;日本円を販売所で購入する&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;とにかく、コインを持ってる人にもらうのが手っ取り早いです。そうでない場合はちょっと面倒くさいかな。。&lt;/p&gt;

&lt;p&gt;とりあえずやってみたい、とかであれば私からBTC送ってもいいですよ。&lt;/p&gt;

&lt;h2 id=&#34;ツールについて&#34;&gt;ツールについて&lt;/h2&gt;

&lt;p&gt;Bitcoin(というか、BlockChain系)では、コインの所属を示すWalletは一箇所でなく、用途に合わせたり分散目的で複数持つのが普通っぽい。
このへんはまあ、現実の通貨と似たようなもんで、タンスと財布と銀行とかそんな関係。&lt;/p&gt;

&lt;p&gt;だいたいこんな感じで複数持つようです。自分が今回使い始めたのもあわせて載せておきます。&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;モバイル端末/ハードウェアのローカル所有

&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://itunes.apple.com/us/app/breadwallet-bitcoin-wallet/id885251393&#34;&gt;breadwallet&lt;/a&gt; TouchID対応でさくっと送金&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;受け渡し用のWeb Wallet

&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;http://blockchain.info/&#34;&gt;blockchain.info&lt;/a&gt; 受取アドレスを用途別につくれて便利&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;(オプション：他の通貨との両替用)

&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;http://bitflyer.jp/&#34;&gt;bitflyer&lt;/a&gt; とりあえずコインを日本円で買いたいときに。今回の動作確認用にいくらか両替しました。&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;ここらはお好みですが、どれも使いやすいです。
送金に手間賃とかが含まれたりする仕組みもあるので、使い倒すならまたいくらか不満もでるのかもしれません。
まあそれはおいおい。&lt;/p&gt;

&lt;h2 id=&#34;その他落ち穂&#34;&gt;その他落ち穂&lt;/h2&gt;

&lt;p&gt;実際これ、課税されたり確定申告で何かしないとマズイ？ などと狸の皮を数えるような考えもでてきます。
仮想通貨法次第なんですが、今のところモノあつかいの、当面は譲渡所得でいいようで。。まあ各自でも都度、申告時にご確認で。&lt;/p&gt;

&lt;p&gt;あとコイン自体の価値について気になったり円にさっさと変えて使いたい、とか考えるなら普通にPaypalとかStripeを使うとか、Amazonギフトで貰うほうがお勧めです。
受け渡しのカジュアルさ加減という点でBitcoinいいかもー、としてるだけなので。&lt;/p&gt;

&lt;p&gt;ついでに、フリーランスのIT系エンジニアが電子貨幣をホイホイやりとりする世界を舞台にしたこんな小説もあります。&lt;/p&gt;

&lt;iframe src=&#34;//rcm-fe.amazon-adsystem.com/e/cm?lt1=_blank&amp;bc1=000000&amp;IS2=1&amp;bg1=FFFFFF&amp;fc1=000000&amp;lc1=0000FF&amp;t=netsawa-22&amp;o=9&amp;p=8&amp;l=as4&amp;m=amazon&amp;f=ifr&amp;ref=ss_til&amp;asins=B01IGR0TA4&#34; style=&#34;width:120px;height:240px;&#34; scrolling=&#34;no&#34; marginwidth=&#34;0&#34; marginheight=&#34;0&#34; frameborder=&#34;0&#34;&gt;&lt;/iframe&gt;


&lt;p&gt;今回の狼藉はわりとこれの影響ですよ多分。&lt;/p&gt;

&lt;h2 id=&#34;おわりに&#34;&gt;おわりに&lt;/h2&gt;

&lt;p&gt;誰かの活動をゆるく応援したいとか、またはその逆で、自分で何かしらオープンに活動しているのでゆるめに寄付を受け付けておきたい(きたら嬉しい)。
っていう考えがあったりするんですよ私。皆さんはどうなんだろう。&lt;/p&gt;

&lt;p&gt;とりあえずBitcoinで投げとく、程度のやりとりで個人のオープンな活動を支援するような仕組みが流行るといいなと思います。&lt;/p&gt;

&lt;p&gt;まあ、寄付窓口をBitcoinのみ対応で設置したときのモチベーションは『ちょっと面白そう』、とか『送れるもんなら送ってみやがれ（ｗ』という平常運転のメンタルによるものです。&lt;/p&gt;
</description>
    </item>
    
    
    
    
    
    
    
    <item>
      <title>AMIMOTO DIE HARD - 死んでも死なないタフさが必要だ。</title>
      <link>https://www.sawanoboly.net/2015/12/ad2015-amimoto_die_hard/</link>
      <pubDate>Mon, 07 Dec 2015 00:00:00 +0900</pubDate>
      
      <guid>https://www.sawanoboly.net/2015/12/ad2015-amimoto_die_hard/</guid>
      <description>

&lt;p&gt;この記事は&lt;a href=&#34;http://www.adventar.org/calendars/1107&#34;&gt;AMIMOTO Advent Calendar 2015&lt;/a&gt; 、12月7日(月)のエントリです。&lt;/p&gt;

&lt;figure&gt;
  &lt;img src=&#34;https://www.sawanoboly.net/images/2015/amimoto_banner.jpg&#34; alt=&#34;&#34; class=&#34;pure-img&#34; &gt;
  &lt;figcaption&gt;&lt;/figcaption&gt;
&lt;/figure&gt;


&lt;h2 id=&#34;あらすじ&#34;&gt;あらすじ&lt;/h2&gt;

&lt;p&gt;&lt;a href=&#34;https://ja.amimoto-ami.com&#34;&gt;AMIMOTO AMI&lt;/a&gt;はAWSのPublic AMIとして生まれ、好評を博したのちAWS MarketPlaceに進出した&lt;a href=&#34;https://wordpress.com/&#34;&gt;WordPress&lt;/a&gt;のAMIである。自前で構築するより大抵楽で、今日ではそこいらのWordPress環境より当然応答が速いチートガイに成長した。&lt;/p&gt;

&lt;p&gt;(調べればすぐ判ることなので)詳細は割愛するが、AMIMOTOでは最新のWordPressおよびミドルウェアにいち早く対応するため、AMIには外部処理の取得手続きのみを埋め込み、起動時にWordPressをセットアップしている。&lt;/p&gt;

&lt;p&gt;物語はAMIMOTOを起動したユーザの、ある連絡で幕を開ける。&lt;/p&gt;

&lt;p&gt;『WordPressが動いていない。』&lt;/p&gt;

&lt;p&gt;セットアップを前述のポリシーで行っているAMIMOTOでは、まれに起こるとされる既知の問題としてデジタルキューブ組長も頭を抱える。&lt;br /&gt;
原因はたいていAmazon LinuxのRPMリポジトリ更新による&lt;code&gt;yum update&lt;/code&gt;か、セットアップ手順の変更に起因していた。&lt;/p&gt;

&lt;p&gt;少なくともユーザより先に(AMIからみた)外部要因による問題の発生を検知し、いち早く修正を行なえるようにしたいという相談に対して私が提供した仕組みとは．．．？&lt;/p&gt;

&lt;h2 id=&#34;主要登場物&#34;&gt;主要登場物&lt;/h2&gt;

&lt;dl&gt;
&lt;dt&gt;&lt;a href=&#34;https://ja.amimoto-ami.com&#34;&gt;AMIMOTO AMI&lt;/a&gt;&lt;/dt&gt;
&lt;dd&gt;特徴はあらすじを参照。&lt;br /&gt;シリーズにはVirtualizationのタイプに応じたPVM版とHVM版、およびPHPの実行エンジンにHHVMを採用した(タイプはHVM)の3種類がある。&lt;/dd&gt;
&lt;dt&gt;&lt;a href=&#34;https://github.com/test-kitchen/test-kitchen&#34;&gt;Test-Kitchen&lt;/a&gt;&lt;/dt&gt;
&lt;dd&gt;マシンリソースの調達/破棄を管理し、プロビジョニングとテストを実行するツール。&lt;br /&gt;今作ではCircleCI上で稼働し、AMIからインスタンスの作成およびyum updateを実行、Infratasterの起動を担当した。&lt;/dd&gt;
&lt;dt&gt;&lt;a href=&#34;https://github.com/ryotarai/infrataster&#34;&gt;Infrataster&lt;/a&gt;&lt;/dt&gt;
&lt;dd&gt;インフラの振る舞いをテストするフレームワーク。&lt;br /&gt;得意のCapybaraを使い、WordPressの振る舞いテストを行なう。Javascriptのエラー程度ならば大目に見る(※設定次第)寛大さを持つ。&lt;/dd&gt;
&lt;dt&gt;&lt;a href=&#34;https://circleci.com/&#34;&gt;CircleCI&lt;/a&gt;&lt;/dt&gt;
&lt;dd&gt;CI、いわゆるContinuous Integrationのサービス。&lt;br /&gt;Test-Kitchenの実行と、安否のレポートをする。家訓を守り10分間の沈黙は死とみなすが、今作では回避手段をとられてしまう。&lt;/dd&gt;
&lt;dt&gt;&lt;a href=&#34;https://www.heroku.com&#34;&gt;heroku&lt;/a&gt;&lt;/dt&gt;
&lt;dd&gt;アプリケーション実行のプラットフォーム。&lt;br /&gt;裏設定としてスケジュールタスクが登録されており、CircleCIのビルドを定期的にキックする役で登場。&lt;/dd&gt;
&lt;dt&gt;&lt;a href=&#34;https://ifttt.com/&#34;&gt;IFTTT&lt;/a&gt;&lt;/dt&gt;
&lt;dd&gt;条件によってシンプルなタスクを実行するサービス。&lt;br /&gt;セットアップタスクの変更をRSSで取得し、CircleCIのビルドをキックする遊撃手として暗躍する。&lt;/dd&gt;
&lt;/dl&gt;

&lt;h2 id=&#34;amimoto-die-hard-解説&#34;&gt;『AMIMOTO DIE HARD』 解説&lt;/h2&gt;

&lt;p&gt;結論からいうと、次の条件でテストを回すことにした。対象はAMIMOTOシリーズ全部。&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;定期的、毎日一回。

&lt;ul&gt;
&lt;li&gt;リポジトリの変更によるクラッシュを検知。&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;セットアップ用コードの変更。

&lt;ul&gt;
&lt;li&gt;セットアップの不備を検知。&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;後者もそもそもが、何かのパッケージ更新との合わせ技による発生が主ではあったようだ。&lt;br /&gt;
AMI起動からの大元の仕組みが変わることも考慮にいれて、『ただWordPressがつかえる状態か』のみを確かめる仕組みとしている。&lt;/p&gt;

&lt;p&gt;実施している内容は主要登場物のセクションに書いている通りだが、いくつかピックアップして解説しよう。&lt;/p&gt;

&lt;h3 id=&#34;infratasterによるテストの内訳とコード&#34;&gt;Infratasterによるテストの内訳とコード&lt;/h3&gt;

&lt;p&gt;テストの段取りは次の通り。&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;AMIMOTOのお約束、インスタンスIDの入力において(所有者確認)

&lt;ol&gt;
&lt;li&gt;間違ったIDを入力してハネられること。&lt;/li&gt;
&lt;li&gt;正しいIDを入力し、WordPressのインストール画面に移ること。&lt;/li&gt;
&lt;/ol&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;とりあえずここまでやれば、関連サービスがすべて正常に稼働しているとわかる。
Infrataster(Capybara)では次のようにコードを書いた。&lt;/p&gt;

&lt;pre&gt;&lt;code class=&#34;language-ruby&#34;&gt;describe server(:amimoto) do
  describe capybara(&#39;http://amimoto&#39;) do
    it &amp;quot;Blocks invalid string&amp;quot; do
      visit &#39;/wp-admin/install.php&#39;
      fill_in &amp;quot;instance_id&amp;quot;, with: &#39;hogehoge&#39;
      click_button &#39;Next Step&#39;
      expect(page).to have_content &amp;quot;Sorry, that isn’t a valid instance ID.&amp;quot;
    end

    it &amp;quot;Unlock Success&amp;quot; do
      visit &#39;/wp-admin/install.php&#39;
      fill_in &amp;quot;instance_id&amp;quot;, with: ENV[&#39;KITCHEN_SERVER_ID&#39;]
      expect(click_button &#39;Next Step&#39;).not_to be_nil
    end

    it &amp;quot;Should got &#39;Welcome&#39; after unlock&amp;quot; do
      visit &#39;/wp-admin/install.php&#39;
      expect(page).to have_content &#39;ようこそ&#39;
    end
  end
end
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;インスタンスID(環境変数)は、Test-Kitchenの機能。&lt;/p&gt;

&lt;h3 id=&#34;test-kithcen-shell-verifier&#34;&gt;Test-Kithcen + Shell-Verifier&lt;/h3&gt;

&lt;p&gt;AMIMOTO DIE HARDの本体はこのTest-Kitchenといえる。&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;AMIからインスタンスを作成する。&lt;/li&gt;
&lt;li&gt;Shell-Provisionerで&lt;code&gt;yum update&lt;/code&gt;をかけ、関連サービスを再起動。&lt;/li&gt;
&lt;li&gt;Shell-VerifierでInfratasterを実行。&lt;/li&gt;
&lt;li&gt;テストの結果にかかわらず、インスタンスを破棄。&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;インスタンス関連の設定はただec2ドライバを使ってるだけ。&lt;code&gt;.kitchen.yml&lt;/code&gt;をそのまま貼ると次の通り。&lt;/p&gt;

&lt;p&gt;末尾に突然入っているRubyコードはCircleCI向けの小狡い手段だ。&lt;/p&gt;

&lt;pre&gt;&lt;code class=&#34;language-yaml&#34;&gt;---
driver:
  name: ec2
  region: ap-northeast-1
  availability_zone: ap-northeast-1c
  subnet_id: &amp;lt;%= ENV[&#39;AWS_SUBNET_ID&#39;]  %&amp;gt;
  associate_public_ip: true
  instance_type: t2.micro

transport:
  username: ec2-user
  aws_ssh_key_id: &amp;lt;%= ENV[&#39;AWS_SSH_KEY_ID&#39;]  %&amp;gt;
  ssh_key: &amp;lt;%= ENV[&#39;AWS_SSH_KEY_PATH&#39;] %&amp;gt;

provisioner:
  name: shell

platforms:
  - name: hiphop-amimoto
    driver:
      image_id: ami-xxxxxxxx
  - name: pvm-amimoto
    driver:
      image_id: ami-xxxxxxxx
      instance_type: m1.small
  - name: hvm-amimoto
    driver:
      image_id: ami-xxxxxxxx

verifier:
  name: shell
  command: bundle exec rspec -fd

suites:
  - name: default
    run_list:
    attributes:
&amp;lt;%
## Periodic outputs for CircleCI
if ENV[&#39;CI&#39;]
  ppid = Process.pid
  Process.fork {
    loop {
      puts &amp;quot;.&amp;quot;
      begin
        Process.getpgid( ppid )
        sleep 20
      rescue
        exit 0
      end
    }
  }
end
%&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;導入当初、PVMのインスタンスタイプにはt1.microを使っていた。&lt;br /&gt;
しかしこのインスタンス、WordPressのセットアップ完了直後に&lt;code&gt;yum update&lt;/code&gt;をかけると、わりと高い確率で暫くの間まともに応答しなくなっていた。そのまま10分ほどCircleCIでアウトプット無しの状態が続くと、Failで終わってしまう。&lt;/p&gt;

&lt;p&gt;しかたがないので何か出力しておくため、Test-Kitchen実行時にダミー出力を行うプロセスをフォークで作ったのが末尾のRubyコード部分だ。&lt;br /&gt;
通常、&lt;code&gt;circle.yml&lt;/code&gt;などでバックグラウンドプロセスを起動すると、安易な時間切れ対策対策？として出力はミュートされる仕組みになっているが、テスト内でのフォークは流石に捕まらないようだ。&lt;/p&gt;

&lt;p&gt;結局t1.microは時間がかかりすぎる事が多かったので、先日smallに変更した。強制終了まで2時間(!)かかることがあったりもしたし。&lt;/p&gt;

&lt;h3 id=&#34;herokuからcircleciのビルドをキック&#34;&gt;herokuからCircleCIのビルドをキック&lt;/h3&gt;

&lt;p&gt;CircleCIは定期実行する仕組みを提供していない(目的外だし)ため、任意のブランチのHEADをビルドするRakeタスクを作成。&lt;/p&gt;

&lt;pre&gt;&lt;code class=&#34;language-ruby&#34;&gt;require &#39;circleci&#39;
require &#39;logger&#39;
@logger = Logger.new($stdout)

CircleCi.configure do |config|
  config.token = ENV[&#39;CIRCLECI_TOKEN&#39;]
end

task :default do
  begin
    @logger.info &amp;quot;Run nightly integration&amp;quot;
    res = CircleCi::Project.build_branch &#39;Launch-with-1-Click&#39;, &#39;amimoto_die_hard&#39;, &#39;master&#39;
    @logger.info res.code
    unless res.success
      @logger.error &amp;quot;Maybe fail, it will notifies to some service.&amp;quot;
    end
  rescue =&amp;gt; e
    @logger.error e.class
    @logger.error e.message
  end
end
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;あとはこれをherokuにおいて、スケジューラから定期的に実行する。&lt;/p&gt;

&lt;h2 id=&#34;まとめ&#34;&gt;まとめ&lt;/h2&gt;

&lt;p&gt;もともとコケるたびにデジタルキューブさん側で対策込みの改善もしていたので、もうこれにほとんど引っかかったりはしません。&lt;br /&gt;
ただ、意識外で起こる不思議な障害のなるはや検知には、抜き打ちテストを回しておくのがいいよね。&lt;/p&gt;

&lt;h2 id=&#34;関連項目&#34;&gt;関連項目&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;http://www.adventar.org/calendars/1107&#34;&gt;AMIMOTO Advent Calendar 2015&lt;/a&gt; ひとつ前の記事 =&amp;gt; &lt;a href=&#34;http://wp-kyoto.net/go-to-wordcamp-us/&#34; title=&#34;[AMIMOTOアドベントカレンダー]WordCamp US現地からブースの様子をお送りします - WP-kyoto&#34;&gt;[AMIMOTOアドベントカレンダー]WordCamp US現地からブースの様子をお送りします - WP-kyoto&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;http://www.adventar.org/calendars/1107&#34;&gt;AMIMOTO Advent Calendar 2015&lt;/a&gt; 次の記事 =&amp;gt; &lt;a href=&#34;https://firegoby.jp/archives/6450&#34; title=&#34;AMIMOTOブース in WordCamp USフォトレポート | Firegoby&#34;&gt;AMIMOTOブース in WordCamp USフォトレポート | Firegoby&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&#34;外部リンク&#34;&gt;外部リンク&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://ja.amimoto-ami.com/&#34; title=&#34;WordPress 専用の AWS + クラウドホスティング AMIMOTO | 超高速 WordPress AMI AMIMOTO&#34;&gt;超高速 WordPress AMI AMIMOTO&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</description>
    </item>
    
    
    
    <item>
      <title>Test-KitchenのShell-Verifierがマージされた</title>
      <link>https://www.sawanoboly.net/2015/12/tk-shell-verifier-merged-into-master/</link>
      <pubDate>Tue, 01 Dec 2015 14:17:10 +0900</pubDate>
      
      <guid>https://www.sawanoboly.net/2015/12/tk-shell-verifier-merged-into-master/</guid>
      <description>&lt;p&gt;これでRubyGemsの&lt;a href=&#34;https://rubygems.org/gems/kitchen-verifier-shell&#34; title=&#34;kitchen-verifier-shell | RubyGems.org | your community gem host&#34;&gt;kitchen-verifier-shell&lt;/a&gt;は御役御免となりそう。&lt;/p&gt;

&lt;p&gt;ことの次第などはQiitaに昔書いちゃったのでそっちに。&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;http://qiita.com/sawanoboly/items/4898bb4f277e5cacfb6c&#34; title=&#34;Test-KitchenでServerspecやInfratasterをShell-Verifierから実行 - Qiita&#34;&gt;Test-KitchenでServerspecやInfratasterをShell-Verifierから実行 - Qiita&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Test-Kitchenの1.4でVerifierがモジュール形式になり、Busserが唯一の共通処理からいちモジュールに身を落とした時点でこうなるよなーと。&lt;/p&gt;

&lt;p&gt;マージには足掛け半年くらいかかったわけだが、前回&lt;code&gt;exec&lt;/code&gt;コマンドを追加するプルリクエストを送った時もそのくらいかかった。&lt;/p&gt;

&lt;p&gt;今回はChef Incの人が来日した際にその場にいた&lt;a href=&#34;https://twitter.com/dai_lxr&#34;&gt;@dai_lxr&lt;/a&gt;にPushしてもらったのがよかったのかもしれない。&lt;/p&gt;

&lt;p&gt;&lt;blockquote class=&#34;twitter-tweet&#34; data-conversation=&#34;none&#34; lang=&#34;ja&#34;&gt;&lt;p lang=&#34;ja&#34; dir=&#34;ltr&#34;&gt;Q. kitchen-verifier-shellのPRを取り込んで！ &lt;a href=&#34;https://t.co/IjmguH3YNq&#34;&gt;https://t.co/IjmguH3YNq&lt;/a&gt;&amp;#10;A. 取り込まれてよい状態だと思う。私からも言っておくがメンテナに再度pingしてほしい。 &lt;a href=&#34;https://twitter.com/hashtag/chef_docker?src=hash&#34;&gt;#chef_docker&lt;/a&gt; &lt;a href=&#34;https://twitter.com/hashtag/getchef?src=hash&#34;&gt;#getchef&lt;/a&gt; &lt;a href=&#34;https://twitter.com/sawanoboly&#34;&gt;@sawanoboly&lt;/a&gt;&lt;/p&gt;&amp;mdash; dai / Chef活用ガイド発売中 (@dai_lxr) &lt;a href=&#34;https://twitter.com/dai_lxr/status/664446367159484416&#34;&gt;2015, 11月 11&lt;/a&gt;&lt;/blockquote&gt; &lt;script async src=&#34;//platform.twitter.com/widgets.js&#34; charset=&#34;utf-8&#34;&gt;&lt;/script&gt;&lt;/p&gt;

&lt;p&gt;英語書くのが面倒だからIssueでの議論をスキップして突然プルリクってのは、タイミングが合わない時にお互い困るのかな。&lt;/p&gt;
</description>
    </item>
    
    
    
    <item>
      <title>ブログをhugoにしておく</title>
      <link>https://www.sawanoboly.net/2015/11/blog-hugo/</link>
      <pubDate>Sun, 29 Nov 2015 17:20:22 +0900</pubDate>
      
      <guid>https://www.sawanoboly.net/2015/11/blog-hugo/</guid>
      <description>&lt;p&gt;ひとつ前は、何かしらまともな運営をしているブログサービスの使い勝手がみたかったのという理由でSquarespaceに置いていた。&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://sawanoboly.squarespace.com&#34;&gt;ひとつ前のブログ&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;普通にブログするなら多分いいとこだ。&lt;/p&gt;

&lt;p&gt;それはそれとして、gfmでそのまま保存できそうなのでhugoに。&lt;/p&gt;

&lt;p&gt;以前の記事も今度移しておこう。&lt;/p&gt;
</description>
    </item>
    
    
    
    <item>
      <title>WEB&#43;DB PRESS vol.85のAWS自動化特集でOpsWorksの記事を担当しました</title>
      <link>https://www.sawanoboly.net/2015/02/webdb85/</link>
      <pubDate>Mon, 23 Feb 2015 00:00:00 +0900</pubDate>
      
      <guid>https://www.sawanoboly.net/2015/02/webdb85/</guid>
      <description>

&lt;p&gt;雑誌の概要はこちら =&amp;gt; WEB+DB PRESS Vol.85｜技術評論社 。&lt;/p&gt;

&lt;figure&gt;
  &lt;img src=&#34;https://www.sawanoboly.net/images/2015/osh2015-chef.jpeg&#34; alt=&#34;写真はオープンセミナー広島2015での発表から&#34; class=&#34;pure-img&#34; &gt;
  &lt;figcaption&gt;写真はオープンセミナー広島2015での発表から&lt;/figcaption&gt;
&lt;/figure&gt;


&lt;p&gt;共著のみなさんも既にブログで紹介されています、各章の対象読者や雑誌のオススメ具合はこちらがとても参考になります。&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://twitter.com/sgwr_dts&#34;&gt;@sgwr_dts(winebarrel)&lt;/a&gt; さんの記事 =&amp;gt; &lt;a href=&#34;http://so-wh.at/entry/2015/02/21/AWS_as_Code%21%3A_WEB%2BDB_PRESS_Vol_85に記事を書きました&#34;&gt;AWS as Code!: WEB+DB PRESS Vol.85に記事を書きました - so what&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://twitter.com/muramasa64&#34;&gt;@muramasa64&lt;/a&gt; さんの記事 =&amp;gt; &lt;a href=&#34;http://muramasa64.fprog.org/diary/?date=20150223&#34;&gt;WEB+DB PRESS vol.85にCloudFormationの記事を書いた - 雑記帳(2015-02-23)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://twitter.com/y015i&#34;&gt;@y15i(y13i)&lt;/a&gt; さんの記事 =&amp;gt; &lt;a href=&#34;http://t.y13i.com/post/111752004680/web-db-press-vol-85-cloudformation&#34;&gt;t.y13i.com — WEB+DB PRESS Vol.85にCloudFormationの記事を書きました&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;特集を簡単に紹介すると、&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;導入しやすく、まあまあ普及感のあるCloudFormationの現場ノウハウ&lt;/li&gt;
&lt;li&gt;自分の担当したOpsWorksは(多分世間に求められている程度の)Getting Started&lt;/li&gt;
&lt;li&gt;既存の環境もコードにするための思想と、それのリファレンス実装ともいえる&lt;a href=&#34;http://codenize.tools/&#34;&gt;Codenize.tools&lt;/a&gt;の紹介&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;という内容です。&lt;/p&gt;

&lt;p&gt;詳細はもうタップリ出てますし、実物も本屋にも並んでいます。折角なので少し記事の裏側で個人的に面白かった話などを書きます。&lt;/p&gt;

&lt;h2 id=&#34;記事の経緯を聞いたよ&#34;&gt;記事の経緯を聞いたよ&lt;/h2&gt;

&lt;p&gt;できあがりは『AWS特集』でしたが、原案は&lt;a href=&#34;https://twitter.com/gosukenator&#34;&gt;@gosukenator(mizzy)&lt;/a&gt;さんとのこと。&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;a href=&#34;http://togetter.com/li/727057&#34;&gt;Infrastructure as Code 現状確認会(2014年10月)&lt;/a&gt; のあとに、クックパッドの人たちが開発してるIaC(※Infrastructure as Code)なツールで記事書けるんじゃないか、と稲尾さんに企画を持ち込んで、打ち合わせをした結果、AWSにフォーカスした話にしましょう、ということになって、ああいった企画になりました。&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;談: &lt;a href=&#34;https://twitter.com/gosukenator&#34;&gt;@gosukenator(mizzy)&lt;/a&gt; さん&lt;/p&gt;

&lt;p&gt;そのままいけばクックパッドの&lt;a href=&#34;http://codenize.tools/&#34;&gt;Codenize.tools&lt;/a&gt;や&lt;a href=&#34;http://itamae.kitchen/&#34;&gt;Itamae&lt;/a&gt;、&lt;a href=&#34;http://infrataster.net/&#34;&gt;Infrataster&lt;/a&gt;ほかの記事になっていたのかもしれませんね。&lt;br /&gt;
(これはこれで読みたい方も多そうだし、雑誌から盛り上げるような方向もあっていいような気はしました。)&lt;/p&gt;

&lt;h2 id=&#34;codenize-tools&#34;&gt;Codenize.tools&lt;/h2&gt;

&lt;figure&gt;
  &lt;img src=&#34;https://www.sawanoboly.net/images/2015/Codenize_tools.png&#34; alt=&#34;Codenize.tools&#34; class=&#34;pure-img&#34; &gt;
  &lt;figcaption&gt;Codenize.tools&lt;/figcaption&gt;
&lt;/figure&gt;


&lt;p&gt;クックパッドインフラツール達の何が特集企画として持ち込まれるほど面白いのかっていうと。&lt;/p&gt;

&lt;p&gt;昨今&lt;code&gt;Infrastructure as Code&lt;/code&gt;(以下、IaC)と言いつつも、色々と手を出しているうちにどうもツールに使われているような感覚に陥ることがあります。&lt;br /&gt;
便利そうなツールが出揃っているように見えても、自分の抱える問題を本質的に改善するためには、その手のお作法の学習コストや変態的ハック、またはツールの更新にいちいち振り回されるのは割りに合いません。&lt;/p&gt;

&lt;p&gt;現在OSSとして公開されている各種ツールも、そもそもは開発者が彼ら自身のフローを自動化するためにはじまったのでしょう。&lt;/p&gt;

&lt;p&gt;で、IaCのきっかけとも言えるインフラリソースのAPIに対して自身のフローをもって真正面から向き合っているCodenize.toolsのは根底思想からしてやっぱり面白いと思うわけです。&lt;/p&gt;

&lt;p&gt;ちなみに&lt;a href=&#34;http://codenize.tools/&#34;&gt;Codenize.tools&lt;/a&gt;という名称は、AWS自動化記事の校正段階である全体タイトル決め(Issue#60)の最中につけられました。&lt;br /&gt;
他の章はサービス名なので分かりやすいのですが、『クックパッド独自ツール』では微妙だなーという話になったので、じゃあグループ名をつけたらどうでしょう？と。&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;例えばCookpad suites(スイーツ)とか、ツールに一連のシリーズ名があるとぐっといい感じですよね。&lt;/p&gt;

&lt;p&gt;Github Issue #60 @sawanoboly 発言より&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;私の提案(名前をつけるという部分で)は24時間以内に&lt;a href=&#34;http://codenize.tools/&#34;&gt;Codenize.tools&lt;/a&gt;の公開を持って採用されました。&lt;/p&gt;

&lt;p&gt;&lt;blockquote class=&#34;twitter-tweet&#34; lang=&#34;ja&#34;&gt;&lt;p lang=&#34;ja&#34; dir=&#34;ltr&#34;&gt;なまえつけたよ！ &lt;a href=&#34;http://t.co/BHEJBBMpe9&#34;&gt;http://t.co/BHEJBBMpe9&lt;/a&gt;&lt;/p&gt;&amp;mdash; auto.conf (@sgwr_dts) &lt;a href=&#34;https://twitter.com/sgwr_dts/status/552846637249208322&#34;&gt;2015, 1月 7&lt;/a&gt;&lt;/blockquote&gt; &lt;script async src=&#34;//platform.twitter.com/widgets.js&#34; charset=&#34;utf-8&#34;&gt;&lt;/script&gt;&lt;/p&gt;

&lt;p&gt;実際私が本特集で一番気に入っているのは4章の『Codenize.toolsによるメンテナンスの自動化』、その中でも「Codenize.toolsのしくみ」で密かに語られるコードを用いて運用するということへのこだわりの部分です。&lt;/p&gt;

&lt;h2 id=&#34;githubでの記事執筆&#34;&gt;Githubでの記事執筆&lt;/h2&gt;

&lt;p&gt;技評さんとのお仕事、ひいては雑誌に記事を書くことは今回がはじめてでした。&lt;br /&gt;
噂のとおり編集、執筆者同士のやりとりはほぼすべてがGithubで行われ、やたらと快適でした。これは確立した先人達に感謝。&lt;/p&gt;

&lt;figure&gt;
  &lt;img src=&#34;https://www.sawanoboly.net/images/2015/webdb85-sp01-01.png&#34; alt=&#34;Githubの記事リポジトリ&#34; class=&#34;pure-img&#34; &gt;
  &lt;figcaption&gt;Githubの記事リポジトリ&lt;/figcaption&gt;
&lt;/figure&gt;


&lt;p&gt;私は結構サボるタチなのでリモート向いてないんですが、編集の&lt;a href=&#34;https://twitter.com/inao&#34;&gt;@inao&lt;/a&gt;さんのGithubまわりのテンションが高く、見ていると『あー、やらなきゃなー』という気分になりました。 開始時のWeb会議以降はすべてGithubでのやりとりだったので、リモートでの雰囲気作りは大事だよねと再認識。&lt;/p&gt;

&lt;p&gt;今回私がリポジトリのオーナーだったので、実は自分だけSlack連携で流れを追うのに少しばかり楽をしていました。共著の皆さんごめん。&lt;/p&gt;

&lt;figure&gt;
  &lt;img src=&#34;https://www.sawanoboly.net/images/2015/webdb85-sp01-02.png&#34; alt=&#34;&#34; class=&#34;pure-img&#34; &gt;
  &lt;figcaption&gt;&lt;/figcaption&gt;
&lt;/figure&gt;


&lt;h2 id=&#34;菅原式レビューボード&#34;&gt;菅原式レビューボード&lt;/h2&gt;

&lt;p&gt;Githubでの記事執筆に関連して、今回面白かった事件を1つ。&lt;/p&gt;

&lt;p&gt;個人の作業としては快適なGithubですが、相互レビューの段階で次の問題がありました。&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;コミット単位でレビューを付けると全体的に追いづらい&lt;/li&gt;
&lt;li&gt;Issueにレビューを書くとしても、どの時点のどの部分を指しているか分かりにくい事がある&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;このへんは結構共通の認識のようで、&lt;a href=&#34;https://reviewable.io/&#34;&gt;Reviewable&lt;/a&gt; とかレビューのための外部サービスがあります。&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;この問題、&lt;a href=&#34;https://twitter.com/sgwr_dts&#34;&gt;@sgwr_dts(winebarrel)&lt;/a&gt;さんにより次の手法が提案されました。&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;ブランチを作成&lt;/li&gt;
&lt;li&gt;章ごとの原稿(まとまった1ファイル)を消してコミット&lt;/li&gt;
&lt;li&gt;2をrevertコミット&lt;/li&gt;
&lt;li&gt;Pull Request作成!&lt;/li&gt;
&lt;li&gt;各自コメントをrevertコミットに対して付け、それの返信で議論＆対応する。&lt;/li&gt;
&lt;/ol&gt;

&lt;figure&gt;
  &lt;img src=&#34;https://www.sawanoboly.net/images/2015/webdb85-sp01-03.png&#34; alt=&#34;菅原式レビューボード&#34; class=&#34;pure-img&#34; &gt;
  &lt;figcaption&gt;菅原式レビューボード&lt;/figcaption&gt;
&lt;/figure&gt;


&lt;p&gt;プログラムではやってはいけないですが、blameが少々潰れても構わない原稿のレビューにおいてはシンプルで導入しやすく、レビュー対応もほとんど漏れない(幾多のレビューコメントで私が2個ほど漏らしたのみ)という中々素晴らしい手法だと思いました。&lt;br /&gt;
レビュー及び対応は、各段階の区切りで次のように見やすくなっています&lt;/p&gt;

&lt;figure&gt;
  &lt;img src=&#34;https://www.sawanoboly.net/images/2015/webdb85-sp01-04.png&#34; alt=&#34;1つのコミットにある時点の原稿に対するすべてのレビューが集約&#34; class=&#34;pure-img&#34; &gt;
  &lt;figcaption&gt;1つのコミットにある時点の原稿に対するすべてのレビューが集約&lt;/figcaption&gt;
&lt;/figure&gt;


&lt;p&gt;手法は名称がつくと流行りやすいこと、個人的に苗字＋技名は浪漫と思っていることから、この手法を私は『菅原式レビューボード』と名づけました。浸透はしませんでした。&lt;/p&gt;

&lt;h2 id=&#34;おわりに&#34;&gt;おわりに&lt;/h2&gt;

&lt;p&gt;なんやかんやで、共著の御三方[&lt;a href=&#34;https://twitter.com/sgwr_dts&#34;&gt;@sgwr_dts(winebarrel)&lt;/a&gt;, &lt;a href=&#34;https://twitter.com/muramasa64&#34;&gt;@muramasa64&lt;/a&gt;, &lt;a href=&#34;https://twitter.com/y015i&#34;&gt;@y15i(y13i)&lt;/a&gt;]と編集の&lt;a href=&#34;https://twitter.com/inao&#34;&gt;@inao&lt;/a&gt;さんのおかげで良い感じにまとまりました。&lt;br /&gt;
機会があればまた書いてみたいですね。&lt;/p&gt;

&lt;p&gt;さて、とりあえず自分の関わった特集の事を書きました。&lt;br /&gt;
他にも(いただいた見本誌を読んでいると)『リアクティブプログラミング』、『楽しもうOSS開発』、『Railsらくらくテストデータ準備』、『Consulでクラスタ管理』と読み(試し)応えのある記事が沢山あるので、ぜひご一読を。&lt;/p&gt;
</description>
    </item>
    
    
    
    <item>
      <title>オライリー・ジャパンからServerspec</title>
      <link>https://www.sawanoboly.net/2015/01/serverspec-the-definitive-guide/</link>
      <pubDate>Sun, 11 Jan 2015 00:00:00 +0900</pubDate>
      
      <guid>https://www.sawanoboly.net/2015/01/serverspec-the-definitive-guide/</guid>
      <description>

&lt;p&gt;2015年1月17日にオライリー・ジャパンから出版の&lt;a href=&#34;http://www.oreilly.co.jp/books/9784873117096/&#34;&gt;Serverspec&lt;/a&gt;が発売されます。&lt;/p&gt;

&lt;p&gt;著者のmizzyこと宮下剛輔さんによる紹介記事はこちら。&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;http://mizzy.org/blog/2014/12/25/1/&#34;&gt;「Serverspec」という本が出ます - Gosuke Miyashita&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;『Serverspec』正誤表(公式サイト版)はこちら&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;http://serverspec.org/book/ja/&#34;&gt;Serverspec - 『Serverspec』正誤表&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;さてこの本、幸いなことに執筆時にレビュワーに誘っていただきました。&lt;br /&gt;
レビューでは思想や解説の内容を中心に、言いたいことが伝わるだろうかという見方でIssueを切りました。&lt;/p&gt;

&lt;p&gt;微力ながら制作のお手伝いをした書籍をご恵贈いただき、手元に来た現物をみてニヤニヤしています。&lt;/p&gt;

&lt;figure&gt;
  &lt;img src=&#34;https://www.sawanoboly.net/images/2015/Serverspec-the-definitive-guide.png&#34; alt=&#34;Serverspec the definitive guide&#34; class=&#34;pure-img&#34; &gt;
  &lt;figcaption&gt;Serverspec the definitive guide&lt;/figcaption&gt;
&lt;/figure&gt;


&lt;p&gt;※ iPhone5Cは大きさ比較用。&lt;/p&gt;

&lt;p&gt;扱いやすいサイズで持ち運びやすいですね。電子版も出るので、そちらは購入する予定です。&lt;/p&gt;

&lt;p&gt;では折角なのでおすすめの章を2つ。&lt;/p&gt;

&lt;h2 id=&#34;使う人向けの3章&#34;&gt;使う人向けの3章&lt;/h2&gt;

&lt;p&gt;簡素な公式ドキュメントの行間を解説してくれる3章は、テストコードをどう書けばよいのかから始まり、コードの使いまわしや環境およびセキュリティ要件へ対応するTipsが書かれています。&lt;br /&gt;
また、良くある悩みの『何をどこまでテストすればいいのか？』に対する指標が書いてあります。&lt;/p&gt;

&lt;p&gt;Serverspecを使うことに関しては、3章を読めばしばらく困らないでしょう。&lt;/p&gt;

&lt;blockquote&gt;
&lt;pre&gt;3章　Serverspecの本格利用
    3.1 RSpec
    3.2 リソースとリソースタイプ
    3.3 SSH経由でのリモートホストのテスト
    3.4 テスト対象ホストの追加
    3.5 動作のカスタマイズ
    3.6 一時的な動作の変更
    3.7 specファイルを複数のホストで共有
    3.8 ホスト固有情報の利用
    3.9 任意コマンドの実行
    3.10 並列実行
    3.11 様々なバックエンド
    3.12 テストコードの指針
    3.13 本章のまとめ
※ O&#39;Reilly Japan - Serverspec http://www.oreilly.co.jp/books/9784873117096/ より&lt;/pre&gt;
&lt;/blockquote&gt;

&lt;h2 id=&#34;カスタマイズ-コントリビュートの4章&#34;&gt;カスタマイズ・コントリビュートの4章&lt;/h2&gt;

&lt;p&gt;4章はServerspec, SpecInfraの内部を解説してくれます。&lt;br /&gt;
特にSpecInfraは公式なドキュメントと言えるものがありませんが、4章の内容を理解すれば、Github上のコードをそのままドキュメントとして読めば大丈夫なくらいにはなります。 もちろんSpecを記述する際にも役立つ知識です。&lt;/p&gt;

&lt;p&gt;また、それぞれのカスタマイズや拡張についての丁寧なウォークスルー、さらにはmizzyさんがプルリクをもらうとき(特に個人的に)気になることまで書かれています。&lt;/p&gt;

&lt;p&gt;Serverspecを使い倒す、貢献する(オプション)なら4章で手を動かすといいですね。&lt;/p&gt;

&lt;blockquote&gt;
&lt;pre&gt;4章　Serverspec内部の詳細
    4.1 Serverspecのアーキテクチャ
    4.2 Serverspecの処理の流れ
    4.3 コマンドクラス
    4.4 バックエンドクラス
    4.5 Serverspecのリソースタイプ拡張
    4.6 Specinfraの OSに関する処理
    4.7 Pryによる内部解析
    4.8 Serverspec自身のテスト
    4.9 コントリビュートの際の心構え
    4.10 本章のまとめ
※ O&#39;Reilly Japan - Serverspec http://www.oreilly.co.jp/books/9784873117096/ より&lt;/pre&gt;
&lt;/blockquote&gt;

&lt;h2 id=&#34;その他&#34;&gt;その他&lt;/h2&gt;

&lt;p&gt;Serverspecはmizzyさんの活動テーマの1つ、継続的な改善の副産物だと思います。 中でもなぜServerspecが広まったのかは、伊藤直也(naoya)さんのまえがきに推察があります。&lt;/p&gt;

&lt;p&gt;本エントリで紹介しなかった章には、mizzyさん曰く『思いを綴ったエッセイ』が多く含まれます。&lt;br /&gt;
Serverspecの活用法を把握(おそらく書籍を入手する当初の目的を達成)したら、これらのエッセイを読み返してみることをおすすめします。&lt;br /&gt;
この本の読者が触発され、何かしらの常識や慣習を改善する新しいツールを出してくると嬉しい。。？かもしれない。&lt;/p&gt;

&lt;p&gt;最後に、mizzyさん無事出版おつかれさまです。&lt;/p&gt;

&lt;figure&gt;
  &lt;img src=&#34;https://www.sawanoboly.net/images/2015/Serverspec-commit-graph.png&#34; alt=&#34;Network&#34; class=&#34;pure-img&#34; &gt;
  &lt;figcaption&gt;Network&lt;/figcaption&gt;
&lt;/figure&gt;

</description>
    </item>
    
    
    
    <item>
      <title>Chef-Solo, Chef-Client LocalMode, Knife-Solo, Knife-Zero and us.</title>
      <link>https://www.sawanoboly.net/2014/12/chef-solo-zero-knife-solo-zero/</link>
      <pubDate>Thu, 25 Dec 2014 00:00:00 +0900</pubDate>
      
      <guid>https://www.sawanoboly.net/2014/12/chef-solo-zero-knife-solo-zero/</guid>
      <description>

&lt;blockquote&gt;
&lt;p&gt;※旧ブログから移植。&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Chef-Soloが無くなるので、他の何かに乗り換える必要があるのか。 という話に対してKnife-Zeroをダシに何か言っておこう。&lt;/p&gt;

&lt;p&gt;最初に言っておくと、今Chef-Solo、Knife-Soloを使っている人、多分何もしなくていい。&lt;/p&gt;

&lt;h2 id=&#34;登場人物一覧&#34;&gt;登場人物一覧&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Chef-Solo

&lt;ul&gt;
&lt;li&gt;Chef-Server無しでローカルサーバにChefのレシピを適用する。Chef-Server非互換(11でほぼ改善)。&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;Chef-Client LocalMode

&lt;ul&gt;
&lt;li&gt;Chef-Server無しでローカルサーバにChefのレシピを適用する。Chef-Server互換。&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;Knife-Solo

&lt;ul&gt;
&lt;li&gt;レシピ一式を転送し、Chef-Soloをリモートサーバに適用する。&lt;/li&gt;
&lt;li&gt;(追記)全体のワークフローは、VagrantのProvisionerに近い。&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;Knife-Zero

&lt;ul&gt;
&lt;li&gt;レシピ一式を転送せず、SSH越しにChef-Client LocalModeを実行する。&lt;/li&gt;
&lt;li&gt;(追記)従来のClient／Serverワークフローを踏襲。&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&#34;全てのchef-solo関連がにchef-zero-chef-client-localmode-に変更されるというのは飛躍的な判断&#34;&gt;全てのChef-Solo関連がにChef-Zero(Chef-Client LocalMode)に変更されるというのは飛躍的な判断&lt;/h2&gt;

&lt;p&gt;なんとなく騒がれているのは、これの元記事からなのかしら。&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;http://www.creationline.com/lab/6085&#34;&gt;[和訳] ソロからゼロへ: Chef Clientローカルモードへの移行 #opschefja #getchefja « CREATIONLINE, INC.&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;基本的にこれはサーバのローカルで実行する場合についての話でしょう、まあそれならChef-Client LocalModeに変えるのはほとんど何も変更はいらないのでよくわかります。&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;参考： Chef-RFC031 『This means that chef-solo using &amp;ldquo;local mode&amp;rdquo; must be 100% backwards-compatible with existing chef-solo usage.』&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;で、リモートでやるKnife-Soloについて考えた時に、&amp;rdquo;Chef-Solo無くなる&amp;rdquo;＝&amp;rdquo;Knife-Solo使えなくなる&amp;rdquo;でもないわけです。 Knife-Soloは単なる非公式のプラグインであって、公式がこういう記事でいちいち言及しないでしょうね。&lt;/p&gt;

&lt;h3 id=&#34;少なくともknife-soloはchef-soloと心中なんてしないだろう&#34;&gt;少なくともKnife-SoloはChef-Soloと心中なんてしないだろう&lt;/h3&gt;

&lt;p&gt;日本でKnife-Soloがそこそこ広い認知度を持っているのは、&lt;a href=&#34;http://www.amazon.co.jp/dp/B00BSPH158&#34;&gt;伊藤直也さんの入門Chef Solo - Infrastructure as Code&lt;/a&gt;によるところが大きいでしょう。多分そう、部分的にそう。&lt;/p&gt;

&lt;p&gt;この本で覚えたフローや使い方が今後できなくなるかって言うと多分そんなことはなくて。 Knife-Solo開発陣はChefの動向をちゃんと追っています。&lt;/p&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/matschaffer/knife-solo/issues/353&#34;&gt;add local_mode to solo.rb · Issue #353 · matschaffer/knife-solo&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;(関連ディレクトリをまるまる転送、リモートでLocalMode相当の実行形式に変更など)&lt;/p&gt;

&lt;p&gt;ということでKnife-Soloでやっているものは、基本的にそのまま使い続けることもできそうだと思ってます。 実際Chef-Soloって無くなるのかも不明、もしかしたらChef14とか15になれば居なくなるのかもしれませんね。&lt;/p&gt;

&lt;h2 id=&#34;knife-zeroはミニマムなchef-server環境とのアップ-ダウングレード移行パス&#34;&gt;Knife-ZeroはミニマムなChef-Server環境とのアップ/ダウングレード移行パス&lt;/h2&gt;

&lt;p&gt;じゃあKnife-Zeroはどういう位置かというと、Chef-Server環境との相互移行がやりやすいChefの導入方法(の一つ)です。 SSH越しにリモートで実行されるChef-ClientはLocalModeではなく、通常のClientモードとしてChef-Server(SSH元のChef-Zero)に対して接続します。&lt;/p&gt;

&lt;p&gt;なのでKnife-Solo(そもそも私は使ってない)の代わりではなく、既存のChef-Serverを畳む用途で作りました。&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Knife-Zeroではじめて、Node数が増えてきたらChef-Serverへ&lt;/li&gt;
&lt;li&gt;Node数が少ないChef-ServerをたたんでKnife-Zeroへ&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Knife-Zeroは、概ねお一人様用Chef-Serverという感じです。node情報ををgit管理できたり、エディタで手元からしれっとattributeを追加できたりという利点とかありますが。 大人数で保守する場合や、継続的にChef-Clientを実行したい場合、Nodeがとても多い場合は多分Chef-Serverのほうがよいのかと思います。&lt;/p&gt;

&lt;h2 id=&#34;knife-zero豆知識&#34;&gt;Knife-Zero豆知識&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Chef-Zeroは2,000nodeくらいまでなら性能的に問題ない。 (&lt;a href=&#34;http://qiita.com/sawanoboly/items/35dd2f117262f4f21969&#34;&gt;Chef-Zeroのキャパシティが気になったのでRubyでベンチマークをとった - Qiita&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Knife-Zero制作のきっかけはlightchef(&lt;a href=&#34;https://github.com/ryotarai/itamae&#34;&gt;現itamae(github link)&lt;/a&gt;)

&lt;ul&gt;
&lt;li&gt;Severspec的発想がいいと思った。&lt;/li&gt;
&lt;li&gt;しかし同時に、『インベントリも収集せずに(light)Chefとはどういう了見か』と思った。&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;Facebookの中の人も、SSH越しのLocalMode(Chef-Zero)を使っている。

&lt;ul&gt;
&lt;li&gt;手抜きのために考える事は同じだなと思いました。&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/chef/chef-zero/issues/86&#34;&gt;SSL support · Issue #86 · opscode/chef-zero&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;最初は本家へのPull Requestとして作成していた

&lt;ul&gt;
&lt;li&gt;とても煩雑なコードになって、説明するのが面倒に。&lt;/li&gt;
&lt;li&gt;とりあえずリリースを優先、楽なKnifeのプラグインとして作成。&lt;/li&gt;
&lt;li&gt;本家にマージしたい。(最近はそうでもない。)&lt;/li&gt;
&lt;li&gt;Chef本体からあまりコードの量的に離れたくない。&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;リリース当初の私が書いたコードはほとんど残っていない。

&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://twitter.com/yasushia&#34;&gt;@yasushia&lt;/a&gt;氏によってリファクタリングが行われ、とてもスッキリしたのでv1.0.0を付けた。&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;(Fixed) Chef12のRC版ではローカルモードが盛大にクラッシュする。

&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/opscode/chef/issues/2433&#34;&gt;The localmode doesn&amp;rsquo;t create node object correctly on chef 12. · Issue #2433 · opscode/chef&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Knife-Zeroは自分では便利なので12対応はしておきたいんだけど。&lt;/li&gt;
&lt;li&gt;&lt;em&gt;羅列したこの記事のタイトルで、一番寿命が先に来るのは、もしかしてKnife-Zeroかもしれないよ。&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;(New) 治した！ &lt;a href=&#34;https://github.com/chef/chef/pull/2482&#34;&gt;use Chef::JSONCompat.parse for filecontents #2433 by sawanoboly · Pull Request #2482 · opscode/chef&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;つらつらと書きましたが、Knife-Zeroは色々と楽をできるように作ったので、新規のシステムをChefで作り始めるとか、既存のシステムにChefを導入するとかならKnife-Zeroをおすすめします。&lt;/p&gt;
</description>
    </item>
    
    
    
    <item>
      <title>『Chef活用ガイド コードではじめる構成管理』を書きました</title>
      <link>https://www.sawanoboly.net/2014/04/chefbook/</link>
      <pubDate>Sat, 19 Apr 2014 00:00:00 +0900</pubDate>
      
      <guid>https://www.sawanoboly.net/2014/04/chefbook/</guid>
      <description>

&lt;blockquote&gt;
&lt;p&gt;※旧ブログから移植。&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;米Chef社(&lt;a href=&#34;http://www.getchef.com/&#34;&gt;http://www.getchef.com/&lt;/a&gt;)が開発しているChefというソフトウェアの本を、クリエーションライン株式会社の樋口さんと共著しました。&lt;a href=&#34;http://ascii.asciimw.jp/books/books/detail/978-4-04-891985-2.shtml&#34;&gt;アスキー・メディアワークス&lt;/a&gt;さんから出版されてます。&lt;/p&gt;

&lt;p&gt;発売を前に手元に２冊届きました、少々ボリュームのあるサイズ(672P)となっています。&lt;/p&gt;

&lt;figure&gt;
  &lt;img src=&#34;https://www.sawanoboly.net/images/2014/chef_book.png&#34; alt=&#34;Chef活用ガイド&#34; class=&#34;pure-img&#34; &gt;
  &lt;figcaption&gt;Chef活用ガイド&lt;/figcaption&gt;
&lt;/figure&gt;


&lt;h2 id=&#34;何を書いたのか&#34;&gt;何を書いたのか&lt;/h2&gt;

&lt;p&gt;導入はInfrastructure as Codeという概念について述べています。 その後はInfrastructure as Codeの１要素としてChefを利用することへの助けとなるべく、Chefの全要素を出来る限り詳しく解説しています。&lt;/p&gt;

&lt;p&gt;Chefの解説については書き下ろしと、公式ドキュメントにある要素をいくらか組み直して、細かい解説などを入れながら再構成して章立てした内容になっています。 書き下ろし部分の内容を考えるために最も参考にしたのはChef-Clientのソースコードでした。&lt;/p&gt;

&lt;p&gt;最後に付録として、執筆当時に公式のリファレンスに存在したCookbook(Resources)やLWRPの和訳などをつけています。 付録のうち和訳部分に関しては、重複するサンプルを抽出して読みやすさを調整したり、コードに間違いがある部分などを本家にフィードバックしながら修正したりといった手を加えています。&lt;/p&gt;

&lt;p&gt;本編４５０P、付録が２００P強という内訳です。&lt;/p&gt;

&lt;h3 id=&#34;誰に向けて書いたのか&#34;&gt;誰に向けて書いたのか&lt;/h3&gt;

&lt;p&gt;導入部分はどちらかというとChefの採用を検討するマネジメント層や、極端なところでITサービスプロバイダの経営層に向けて書いています。 Infrastructure as Codeという概念を引き合いに、最近サービスを支えるインフラに対して提言されているのはこのようなことですよと紹介し、コストやリスクを減らしていきましょうという呼びかけをしています。&lt;/p&gt;

&lt;p&gt;導入部以降はいわゆる現場向けといえそうです。Chefを内部の構造からまあまあ詳細に解説しているので、実際にChefを触ってみたい・触っている・もっと使いこなしたいという方々や、Chefの挙動に興味や疑問を持つ方々に是非読んでいただきたいと思っています。&lt;/p&gt;

&lt;h3 id=&#34;書かれていないこと&#34;&gt;書かれていないこと&lt;/h3&gt;

&lt;p&gt;そもそもChefだけでインフラの管理がよくなるという事は決してありませんし、この本でも出だしにそう断りを入れています。 コンピュータシステムのライフサイクル管理を効率良く行なうには、用途および組織にあったツールチェーンを確立するのが望ましいことは重々承知ですが、Chefから少し離れる要素や、他のツールからワークフローの一部として使われるChefについては、この本ではほぼ解説していません。&lt;/p&gt;

&lt;p&gt;そして、この本はあくまでガイドという位置づけであり、導入の検討や適用範囲はあくまで組織でのプランやコストを考慮して各自が行わなければなりません。もちろん事例やサンプルもそれなりに書いており、参考にすることもできますが、どこでも通用するベスト・プラクティスというわけでもありません。 (観光ガイドブックであれば、名所の場所は書かれていても、観光レポートは無いでしょう？)&lt;/p&gt;

&lt;p&gt;ただ、テーマをChefだけに絞ったこともあり、現状で書籍という形に限れば世界中で比べても一番Chefについて詳しく書かれた本(あとOhaiも)になっていると思います。 検討の材料、導入後のリファレンスとしても十分役に立つでしょう。&lt;/p&gt;

&lt;h3 id=&#34;なぜ書いたのか&#34;&gt;なぜ書いたのか&lt;/h3&gt;

&lt;p&gt;至る経緯は諸所ありますが、お話をいただいたからです。&lt;/p&gt;

&lt;p&gt;その時点でそこそこChefを使ったり、他所に導入したりを始めていたので次のような理由で受けました。&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;自分がChefを忘れても大丈夫なように、本にまとめておけるならラッキー&lt;/li&gt;
&lt;li&gt;人に説明するときにラク&lt;/li&gt;
&lt;li&gt;人からの質問がいくらか具体的になる&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&#34;どのように書いていたのか&#34;&gt;どのように書いていたのか&lt;/h3&gt;

&lt;p&gt;動いていたのは2013年7月〜2014年4月、そのうち9月後半〜１月にほとんどの内容が書かれました。
書き始める前はソースコードや関連資料の調査、１月後半からは校正につぐ校正。&lt;/p&gt;

&lt;p&gt;原稿の管理と、共同執筆中のコミュニケーションではこれらが役に立ちました。&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;github(git)&lt;/li&gt;
&lt;li&gt;Skype&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;内容はGithubのリポジトリを更新して共有し、やや大きめなテーマはIssueとして管理、ちょっとした方針や文章のすり合わせはSkypeでと、快適な執筆環境を目指してツールを活用することにしました。(Skypeではくだらない雑談も相当交わされましたが)&lt;/p&gt;

&lt;p&gt;共著の樋口さんとは、本について７月(&lt;a href=&#34;http://chef-meetup-kansai.doorkeeper.jp/events/4978&#34;&gt;第１回 Chef Casual Talks Kansai&lt;/a&gt;の翌日)に分担を決めた後は、一度も顔を合わせることなくすべての作業を終えることが出来ました。&lt;/p&gt;

&lt;p&gt;私の側では、主にこれらのツールで原稿を作成しました。&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;エディタ(vim, bbedit)&lt;/li&gt;
&lt;li&gt;プレビュー(Mou, Marked, git(差分))&lt;/li&gt;
&lt;li&gt;Chefのソースビュアー(vim, git(差分および履歴))&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;プレビューツールからわかると思いますが、生原稿はMarkdownでした。 原稿書きには、gitのログと差分確認がかなり役立ちます。&lt;/p&gt;

&lt;p&gt;校正段階では主にこれらのツールで原稿の修正にあたりました。&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Mail &amp;amp; unzip, mi(旧ミミカキエディット)&lt;/li&gt;
&lt;li&gt;github(git)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;初稿より後は、MarkdownではなくEWBで(変換された)となったんですが、文字コードがEUC-JPでbbeditがイマイチ自動判別しなかったので、国産エディタのmiに頼りました。&lt;/p&gt;

&lt;p&gt;ここでもやっぱりGithubが活躍します。章ごとのブランチを作成して、平行して校正を進めたり、適用漏れを抽出して追跡したり、 gitリポジトリは軽作業などもふくめて、結局2200コミットくらいになりました。&lt;/p&gt;

&lt;figure&gt;
  &lt;img src=&#34;https://www.sawanoboly.net/images/2014/chef_book_commits.png&#34; alt=&#34;&#34; class=&#34;pure-img&#34; &gt;
  &lt;figcaption&gt;&lt;/figcaption&gt;
&lt;/figure&gt;


&lt;p&gt;環境用品のうち、特に活躍した3つをピックアップします。&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;MacBook Pro Retina13

&lt;ul&gt;
&lt;li&gt;QuickResで、画面をかなり広くして使用、参考資料を見ながらの執筆に&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;Contessa (岡村製作所)

&lt;ul&gt;
&lt;li&gt;作業に集中するのに調度良かった&lt;/li&gt;
&lt;li&gt;腰痛が全然気にならなくなった&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;SHOT NOTE(KING JIM)

&lt;ul&gt;
&lt;li&gt;構成図等の提出はこれに手書きして取り込んだ&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&#34;最後に&#34;&gt;最後に&lt;/h3&gt;

&lt;p&gt;本書を書くのは中々骨の折れる作業でしたが、周囲の協力者や家族の理解もあって、ようやく書店に置かれる所までこぎつけました。 あとは料理本のコーナーに並ばないことだけを祈っておきます。&lt;/p&gt;

&lt;p&gt;&lt;iframe src=&#34;//rcm-fe.amazon-adsystem.com/e/cm?lt1=_blank&amp;bc1=000000&amp;IS2=1&amp;bg1=FFFFFF&amp;fc1=000000&amp;lc1=0000FF&amp;t=netsawa-22&amp;o=9&amp;p=8&amp;l=as4&amp;m=amazon&amp;f=ifr&amp;ref=ss_til&amp;asins=4048919857&#34; style=&#34;width:120px;height:240px;&#34; scrolling=&#34;no&#34; marginwidth=&#34;0&#34; marginheight=&#34;0&#34; frameborder=&#34;0&#34;&gt;&lt;/iframe&gt;

&lt;iframe src=&#34;//rcm-fe.amazon-adsystem.com/e/cm?lt1=_blank&amp;bc1=000000&amp;IS2=1&amp;bg1=FFFFFF&amp;fc1=000000&amp;lc1=0000FF&amp;t=netsawa-22&amp;o=9&amp;p=8&amp;l=as4&amp;m=amazon&amp;f=ifr&amp;ref=ss_til&amp;asins=B0008JIECE&#34; style=&#34;width:120px;height:240px;&#34; scrolling=&#34;no&#34; marginwidth=&#34;0&#34; marginheight=&#34;0&#34; frameborder=&#34;0&#34;&gt;&lt;/iframe&gt;
&lt;/p&gt;

&lt;h3 id=&#34;追記-chef活用ガイド-読者アンケートを作成しました&#34;&gt;追記、『Chef活用ガイド』読者アンケートを作成しました。&lt;/h3&gt;

&lt;p&gt;この本を読んでいただいた方(購入・回し読み問わず)を対象に、アンケートを作成しました。&lt;/p&gt;

&lt;p&gt;&lt;a href=&#34;https://jp.surveymonkey.com/s/HSL5QBK&#34;&gt;書籍『Chef活用ガイド』読者アンケート Survey&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;では締めを&lt;a href=&#34;http://vdr.jp/d/20140421.html&#34;&gt;Chef活用ガイド コードではじめる構成管理 - vdrめも(2014-04-21)&lt;/a&gt;から引用で。&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;世に出るのはもう少し先で、その上読み終えるにはかなりの時間がかかるかと思いますが、よろしければご回答いただければ幸いです。&lt;/p&gt;
&lt;/blockquote&gt;
</description>
    </item>
    
    
    
    <item>
      <title>JAWS DAYS 2014のImmutable Infrastructure(II)トラックで話した</title>
      <link>https://www.sawanoboly.net/2014/03/jaws-days-2014immutable-infrastructure/</link>
      <pubDate>Mon, 17 Mar 2014 00:00:00 +0900</pubDate>
      
      <guid>https://www.sawanoboly.net/2014/03/jaws-days-2014immutable-infrastructure/</guid>
      <description>

&lt;p&gt;&lt;a href=&#34;http://jawsdays2014.jaws-ug.jp/&#34;&gt;JAWS DAYS 2014&lt;/a&gt;セッションで話しました。&lt;/p&gt;

&lt;h2 id=&#34;infrastructure-as-codeと-組織のドキュメンテーション-immutable-infrastructure事例&#34;&gt;Infrastructure as Codeと 組織のドキュメンテーション ＋ Immutable Infrastructure事例&lt;/h2&gt;

&lt;p&gt;スライドはこちら。&lt;/p&gt;

&lt;p&gt;&lt;iframe src=&#34;//www.slideshare.net/slideshow/embed_code/key/3mW6FcWxSUvS6Q&#34; width=&#34;595&#34; height=&#34;485&#34; frameborder=&#34;0&#34; marginwidth=&#34;0&#34; marginheight=&#34;0&#34; scrolling=&#34;no&#34; style=&#34;border:1px solid #CCC; border-width:1px; margin-bottom:5px; max-width: 100%;&#34; allowfullscreen&gt; &lt;/iframe&gt; &lt;div style=&#34;margin-bottom:5px&#34;&gt; &lt;strong&gt; &lt;a href=&#34;//www.slideshare.net/YukihikoSawanobori/jawsdays-infra&#34; title=&#34;Infrastructure as Codeと 組織のドキュメンテーション ＋ Immutable Infrastructure事例&#34; target=&#34;_blank&#34;&gt;Infrastructure as Codeと 組織のドキュメンテーション ＋ Immutable Infrastructure事例&lt;/a&gt; &lt;/strong&gt; from &lt;strong&gt;&lt;a href=&#34;//www.slideshare.net/YukihikoSawanobori&#34; target=&#34;_blank&#34;&gt;Yukihiko SAWANOBORI&lt;/a&gt;&lt;/strong&gt; &lt;/div&gt;&lt;/p&gt;

&lt;p&gt;現場にいらっしゃった方の反応などもTogetterにまとめて頂いています。 &lt;a href=&#34;http://togetter.com/li/639910&#34;&gt;2014/03/15 JAWS DAYS 2014 - Immutable Infrastructureトラック #jawsdays #infra - Togetterまとめ&lt;/a&gt;&lt;/p&gt;

&lt;h3 id=&#34;immutable-infrastructure-事例について&#34;&gt;『Immutable Infrastructure』事例について&lt;/h3&gt;

&lt;p&gt;大阪某所でやっているGiraffiから事例を紹介しました。&lt;/p&gt;

&lt;p&gt;&lt;a href=&#34;https://www.facebook.com/giraffi.devops&#34;&gt;FBページ:Giraffi DevOps&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;当時はImmutable Infrastructureなんて&amp;rsquo;名前&amp;rsquo;は全く意識していません。 構成を検討する際ベースにしたのは、従来のサービス死活監視に対する不満でした。&lt;/p&gt;

&lt;p&gt;サービス継続性とサーバ単体の死活が直結しないよう抽象化し、アラートの粒度や優先度を分類して、即時対応しなければいけないケースを減らそうという目的で構成をDeveloperと一緒に検討したんですよね。&lt;/p&gt;

&lt;p&gt;その結果、従来のSPOFはDisposable Componentsになり、運用の方法としてImmutableも選択できる構成となった事例です。&lt;/p&gt;

&lt;p&gt;パネルセッションでは言いそびれましたが、どの層が『Immutable Infrastructure』するべきか、また恩恵をうけるかというところでは、『夜中にアラートで起こされる人』こそが。じゃんじゃんやるべきなのかもしれませんね。&lt;/p&gt;

&lt;h3 id=&#34;infrastructure-as-codeと-組織のドキュメンテーション-について&#34;&gt;『Infrastructure as Codeと 組織のドキュメンテーション』について&lt;/h3&gt;

&lt;p&gt;『Immutable Infrastructure』トラックでなんか話せと言われてから、普通に説明したって全員被るに決まってるがなと思いました。 それならば、説明は他のセッションにまかせて、前提知識である『Infrastructure as Code』の導入支援をつくろうとしたらこうなりました。&lt;/p&gt;

&lt;p&gt;この話はもともと、『手順書は芸術品ではないか？』という発想から始まっています。&lt;/p&gt;

&lt;p&gt;で、その会話とクヌース先生の文芸的プログラミングあたりの概念を結びつけた@azukiwasher氏によって書き起こされたのが『ドキュメント礼賛(原題：手順書礼賛)』です。&lt;/p&gt;

&lt;p&gt;&lt;a href=&#34;https://gist.github.com/azukiwasher/8571505#file-gistfile1-txt&#34;&gt;gist:8571505&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;h2 id=&#34;ドキュメント礼賛&#34;&gt;ドキュメント礼賛&lt;/h2&gt;

&lt;p&gt;断言しよう。ドキュメントこそがマシンを隷属化し、人間のために使役させるための最善の方策である。&lt;br /&gt;
なぜなら、マシンをコントロールする「ドキュメント」を理解できるのは人間だけであり、
マシンは決してそれを理解することはできないからだ。&lt;/p&gt;

&lt;p&gt;ドキュメントは、マシンにとって高級すぎる別世界の読解不可能な暗号だ。読解不可能という点が人間
にとって甚だ都合がいい。人間の企みがマシンに理解されてはおしまいなのだから。&lt;br /&gt;
企みは、マシンから秘匿され秘密裏のうちに人間の「手」によって着実に行使されねばならない。&lt;/p&gt;

&lt;p&gt;一方、ドキュメントは人間によって書かれ、それを「玩味」できるのも人間だけである。
人間だけがドキュメントの行間を読み、レトリックを味わい、隠された意味を発見できる。&lt;br /&gt;
「作者」の意図を自らに与えられた使命に、いま誇らしげにキーボードを叩きはじめる・・・。
そしてすべての手順が終わったとき、彼は作者との一体感を感じ、ドキュメントをシェアしあう、
親密なコミュニティ、やさしい仲間たちに迎え入れられる。&lt;/p&gt;

&lt;p&gt;ここに強い人間たちの結束が生まれ、ついにはマシンをコントロールし人間のために永遠に
労働しつづける奴隷たらしめることに成功する。&lt;/p&gt;

&lt;p&gt;繰り返す。ドキュメントこそがマシンを隷属化し、人間のために使役させるための最善の方策である。&lt;/p&gt;

&lt;p&gt;決してその逆ではない。&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;『手順書は芸術品ではないか？』 =&amp;gt; 『洗練される』 =&amp;gt; 『実行可能な機能美』 =&amp;gt; 『Chefのレシピなどに行き着く』 =&amp;gt; 『真の手順書とは(いわゆる)コードなのだ』&lt;/p&gt;

&lt;p&gt;この文書が面白かったので、人類向けのセッションに起こしてみました。&lt;/p&gt;

&lt;p&gt;最近ちょいちょい『ChefおよびInfrastructure as Code』について話を聞きたいという声をかけて頂いて幾つか訪問したり、実際にトレーニングをさせて頂いてますが、やはりみなさん難しく考え過ぎだったり、新しいことへの抵抗勢力があったりと結構モヤモヤするんですよ。&lt;/p&gt;

&lt;p&gt;イベント会場にいらっしゃる方々は、『Infrastructure as Code』の何がよいかなんて十分ご存知でしょうが、さて自社に持ち込んで〜となるとやはり困る。それをどのように説得するかの一例として考えたメソッドとしても使えるとよいなと考えて、かなり回りくどく色々と言ってみましたがどうだったでしょうか。&lt;/p&gt;

&lt;p&gt;発表後の質問でもでましたが、あらためてアプローチの例を並べてみました。&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;権威を呼んでくる&lt;/li&gt;
&lt;li&gt;対象層向けの本を出す&lt;/li&gt;
&lt;li&gt;自分が出世する&lt;/li&gt;
&lt;li&gt;実際にやって見せる&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;個人的なおすすめは、『実際にやって見せる』ですね。&lt;/p&gt;

&lt;p&gt;例えば社内でのクラブ活動をしてみる。結局、業務内で何とかしようとするのは中々難しいです。 だったら自腹でクラウド使ったり、内輪のシステムを作って研究発表なんかするのが遠回りのようで一番効果的のように思います。&lt;/p&gt;

&lt;h2 id=&#34;パネルセッション&#34;&gt;パネルセッション&lt;/h2&gt;

&lt;p&gt;お会いしたかった方々と、まとめて会えるという個人的に嬉しい企画でした。 このトラックに放り込んでくれた&lt;a href=&#34;https://twitter.com/urasoko&#34;&gt;@urasoko&lt;/a&gt;さん、そのあと取りまとめいただいた&lt;a href=&#34;https://twitter.com/stanaka&#34;&gt;@stanaka&lt;/a&gt;さんほかスタッフの方に感謝！&lt;/p&gt;

&lt;p&gt;パネルセッションのまとめはこちらに =&amp;gt; &lt;a href=&#34;http://blog.stanaka.org/entry/2014/03/15/215437&#34;&gt;JAWS DAYS 2014 Immutable Infrastructure パネルディスカッション - stanaka&amp;rsquo;s blog&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;時間の都合で普通に喋れなかったのがはちと残念ですが、この日は&lt;a href=&#34;http://mizzy.org/&#34;&gt;@mizzy&lt;/a&gt;さんとたっぷり密談したので、今後はその成果を出していきたいですね。&lt;/p&gt;
</description>
    </item>
    
    
    
    <item>
      <title>Chef-Server環境で使うCookbookをVagrantとChef-zeroで開発する</title>
      <link>https://www.sawanoboly.net/2014/03/vagrant-with-chef-zero/</link>
      <pubDate>Wed, 05 Mar 2014 00:00:00 +0900</pubDate>
      
      <guid>https://www.sawanoboly.net/2014/03/vagrant-with-chef-zero/</guid>
      <description>

&lt;p&gt;最近はChef-Severの導入も簡単になりました。 &lt;a href=&#34;http://www.getchef.com/chef/install/&#34;&gt;パッケージから導入&lt;/a&gt;はもちろん、&lt;a href=&#34;https://aws.amazon.com/marketplace/pp/B010OMNV2W&#34;&gt;aws marketplace&lt;/a&gt;からすぐ使用できたりと。&lt;/p&gt;

&lt;p&gt;とはいえテスト環境にChef-Serverを強いるのも大変なので、Chef-Zeroで代わりをしてもよいでしょう。&lt;/p&gt;

&lt;h2 id=&#34;chef-zero&#34;&gt;Chef-zero&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/chef/chef-zero&#34;&gt;https://github.com/chef/chef-zero&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Chef-zeroはChef-Serverのホットモックのようなものです。ほぼChef-Serverとして動作する小さなプロセスですが次の特徴があります。&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;認証はするフリで全部OK&lt;/li&gt;
&lt;li&gt;データはメモリに保存、永続化なし&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Chef-Serverを使ったCookbookの開発をする際に、データをクリアしたい場合もありますが意外と後処理が面倒です。 Chef-zeroならプロセスのリスタートで綺麗な状態になるので、knifeで必要な要素を戻すだけで再度テストを行なうことができます。&lt;/p&gt;

&lt;p&gt;詳細は次のリンクが参考になります。&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;http://www.creationline.com/lab/2749&#34;&gt;軽量簡易Chef Server「chef-zero」を使ってみよう #opschef_ja « CREATIONLINE, INC.&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&#34;vagrantでchef-zero&#34;&gt;VagrantでChef-zero&lt;/h2&gt;

&lt;p&gt;ではChef-zeroのプロセスをどこに立てるか。&lt;a href=&#34;https://github.com/test-kitchen/test-kitchen&#34;&gt;test-kitchen&lt;/a&gt;ではCookbookをテストするVMで直接Chef-zeroを起動して、ダミーのChef要素を入れることができますが、現時点ではそのままシームレスにChef-Server環境に持って行こうとするにはいまいち感があります。&lt;/p&gt;

&lt;p&gt;じゃあVagrantだろうなということで、一式書いてリポジトリに登録しました。&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/OpsRockin/vagrantwithchefzero_example&#34;&gt;https://github.com/OpsRockin/vagrantwithchefzero_example&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;figure&gt;
  &lt;img src=&#34;https://www.sawanoboly.net/images/2014/vagrant_with_chef-zero.png&#34; alt=&#34;Vagrant with Chef-Zero&#34; class=&#34;pure-img&#34; &gt;
  &lt;figcaption&gt;Vagrant with Chef-Zero&lt;/figcaption&gt;
&lt;/figure&gt;


&lt;p&gt;これならvagrant up chefzeroするだけでChef-zeroをほぼChef-Serverとして使い放題です。&lt;/p&gt;

&lt;p&gt;chefzeroのVMだけはChef-Soloで構築しますが、ほかのVMはChef-zeroに対するChef-ClientとしてProvisioningすることができます。&lt;/p&gt;

&lt;p&gt;最初は手元だけ直して、Cookbookのアップロードを忘れることもありますが、すぐ慣れるでしょう。&lt;/p&gt;

&lt;p&gt;通常操作はknifeを使えるので、他の環境に持っていく際にknife.rb指定の切り替えで済むのが助かりますね。&lt;/p&gt;

&lt;h2 id=&#34;開発作業用のrakefile&#34;&gt;開発作業用のRakefile&lt;/h2&gt;

&lt;p&gt;レシピ開発＆テストを効率よく行なうには、とりあえずRakeのタスクを作っておくとよいです。&lt;/p&gt;

&lt;pre&gt;&lt;code class=&#34;language-ruby&#34;&gt;task :default =&amp;gt; &#39;upload&#39;
$stdin.sync = true

desc &#39;upload chef-repos to chefzero vm&#39;
task :upload do
  system(&#39;knife cookbook upload --all&#39;)
  system(&#39;knife upload environments/ &#39;)
  system(&#39;knife upload roles/ &#39;)
end

desc &#39;reset chefzero&#39;
task :reset do
  system(&#39;vagrant reload chefzero&#39;)
  Rake::Task[&#39;chefzero:upload&#39;].invoke
end
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;それぞれこんな作業をやらせています。&lt;/p&gt;

&lt;pre&gt;&lt;code class=&#34;language-bash&#34;&gt;rake upload # Chef要素のアップロード
rake reset  # Chef-zero内容クリア＆要素の再アップロード
&lt;/code&gt;&lt;/pre&gt;

&lt;h2 id=&#34;その他&#34;&gt;その他&lt;/h2&gt;

&lt;p&gt;ちなみに&lt;a href=&#34;https://github.com/whitepages/vagrant-chefzero&#34;&gt;vagrant-chefzero&lt;/a&gt;というプラグインもあり、これはEnvやRole要素の投入までVagrantファイル内でやるようです。&lt;/p&gt;

&lt;p&gt;knifeを使わないのが逆に気になるので今回はCookbookでChef-zeroをセットアップしてます。&lt;/p&gt;
</description>
    </item>
    
    
    
    <item>
      <title>第一回XEggで『さくらのクラウドフォーメーション with Chef 』</title>
      <link>https://www.sawanoboly.net/2014/02/xegg-sakura-with-chef/</link>
      <pubDate>Sun, 16 Feb 2014 00:00:00 +0900</pubDate>
      
      <guid>https://www.sawanoboly.net/2014/02/xegg-sakura-with-chef/</guid>
      <description>

&lt;p&gt;2月15日に大阪のグランフロントで開催された、&lt;a href=&#34;http://innovationegg.doorkeeper.jp/events/7435&#34;&gt;Innovation EGG 第二回 XEgg 1st『クラウド未経験者向けITコミュニティ＆クラウドベンダー合同勉強会』&lt;/a&gt;で行ったセッションの話。&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;http://innovationegg.doorkeeper.jp/&#34;&gt;Innovation EGGとは？&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&#34;イベントのテーマと課題&#34;&gt;イベントのテーマと課題&lt;/h2&gt;

&lt;p&gt;今回声がかかったのはXEgg(クロスエッグ)と題されたイベントで、テーマによって選出されたベンダにITコミュニティを組み合わせてなんかやってくれと言う話だった。&lt;/p&gt;

&lt;p&gt;第一回XEggのテーマはクラウド、私は&lt;a href=&#34;http://chef-meetup-kansai.doorkeeper.jp/&#34;&gt;Chef meetup Kansai&lt;/a&gt;の主催者としてITコミュニティ枠で参加。 さわる対象のクラウドベンダは『さくらインターネット』、要は『さくらのクラウド』を触りましょうと。&lt;/p&gt;

&lt;p&gt;&lt;iframe src=&#34;//www.slideshare.net/slideshow/embed_code/key/oTufMIf9dcRFMa&#34; width=&#34;595&#34; height=&#34;485&#34; frameborder=&#34;0&#34; marginwidth=&#34;0&#34; marginheight=&#34;0&#34; scrolling=&#34;no&#34; style=&#34;border:1px solid #CCC; border-width:1px; margin-bottom:5px; max-width: 100%;&#34; allowfullscreen&gt; &lt;/iframe&gt; &lt;div style=&#34;margin-bottom:5px&#34;&gt; &lt;strong&gt; &lt;a href=&#34;//www.slideshare.net/YukihikoSawanobori/x-egg01-chef&#34; title=&#34;さくらのクラウドフォーメーション with Chef [XEgg session]&#34; target=&#34;_blank&#34;&gt;さくらのクラウドフォーメーション with Chef [XEgg session]&lt;/a&gt; &lt;/strong&gt; from &lt;strong&gt;&lt;a href=&#34;//www.slideshare.net/YukihikoSawanobori&#34; target=&#34;_blank&#34;&gt;Yukihiko SAWANOBORI&lt;/a&gt;&lt;/strong&gt; &lt;/div&gt;&lt;/p&gt;

&lt;h2 id=&#34;セッション裏話&#34;&gt;セッション裏話&lt;/h2&gt;

&lt;p&gt;セッションの大筋はスライドの通りで、話した内容はその場で聞いていただいた方々がご存知です。 ブログではどうしてあんなセッションになったのか振り返ってみます。&lt;/p&gt;

&lt;h3 id=&#34;ターゲットの決定&#34;&gt;ターゲットの決定&lt;/h3&gt;

&lt;p&gt;イベントの参加対象者は、『クラウド未経験者』とのことでした。ずいぶんもやっとしています。&lt;/p&gt;

&lt;p&gt;セッションの内容をChef初心者向けに丁寧に解説とすることも考えましたが、テーマからいって参加者がChefに興味あるとも限らないうえ、同時に動いていたプロジェクトのこともあわせて、そういうのは 私が飽きていました 。&lt;/p&gt;

&lt;p&gt;そもそも私はChefを売ってるわけでもないし、イベントの主軸はクラウドベンダだし、どうせなら自分が興味あることをセッションにしてしまうほうが楽しい。&lt;/p&gt;

&lt;p&gt;ということでセッションのターゲットはクラウドベンダの『さくらインターネットのスタッフ』と、同枠の『MongoDBコミュニティ』に絞りました。&lt;/p&gt;

&lt;h3 id=&#34;chefの紹介&#34;&gt;Chefの紹介&lt;/h3&gt;

&lt;p&gt;Chefはその特性上適用できる範囲がとても広く、組織によって様々に使い方を選べます。 そもそもChefには決まった使い方も無く、あるのは各組織のワークフローやポリシーに合わせてシステムの構成管理をできる柔軟性くらいです。&lt;/p&gt;

&lt;p&gt;説明したってきりがないので、旧態依然とした構成管理への皮肉を交えつつ、最初から視聴者全員置いてきぼりを目標にさっと流しました。&lt;/p&gt;

&lt;p&gt;イベントテーマ的に主役では無いですし。&lt;/p&gt;

&lt;h3 id=&#34;使ってみました系と海外との比較&#34;&gt;使ってみました系と海外との比較&lt;/h3&gt;

&lt;p&gt;このへんは裏表あまりなく、結構思うまま言ったらこうなった。&lt;/p&gt;

&lt;p&gt;&lt;blockquote class=&#34;twitter-tweet&#34; lang=&#34;ja&#34;&gt;&lt;p lang=&#34;ja&#34; dir=&#34;ltr&#34;&gt;sawanoboly氏、さくらの田中さんの前でさくらのクラウドAPIのdisを繰り広げている。でもこういうのは参考意見として良いよね。 &lt;a href=&#34;https://twitter.com/hashtag/xegg?src=hash&#34;&gt;#xegg&lt;/a&gt;&lt;/p&gt;&amp;mdash; MATSUMOTO, Ryosuke (@matsumotory) &lt;a href=&#34;https://twitter.com/matsumotory/status/434508042814513152&#34;&gt;2014, 2月 15&lt;/a&gt;&lt;/blockquote&gt; &lt;script async src=&#34;//platform.twitter.com/widgets.js&#34; charset=&#34;utf-8&#34;&gt;&lt;/script&gt;&lt;/p&gt;

&lt;p&gt;コンピュータリソースに特化したサービスと比べるのは少々ごまかしを含みますが、ややインパクトを重視してChefと手っ取り早く連携させたりとりあえずサービスをリリースしようといった視点からあえて見た体で展開することにしました。&lt;/p&gt;

&lt;p&gt;実際、『ボクのデータセンター』を作りたい方には非常にいいと思います。&lt;/p&gt;

&lt;p&gt;ここの中で『ホビー対傭兵』という比喩が出てきますが、この表現にもうちょっとだけ突っ込んでみます。&lt;/p&gt;

&lt;p&gt;日本の企業は上流工程をプロパーが行い、開発や現場やを外注に任せるという図式がよく見られます。 自社好みにカスタマイズ可能なプロパーと、プロとして現場の取り仕切りを任せる外注さんと。スライドの傭兵さんはいわば外注に当たるわけですね。&lt;/p&gt;

&lt;p&gt;国内ベンダと海外ベンダで提供するサービスと需要とに、なんだかちょっとねじれがあるような気がしています。&lt;/p&gt;

&lt;h3 id=&#34;fogの-さくらのクラウド-サポートについて&#34;&gt;Fogの『さくらのクラウド』サポートについて&lt;/h3&gt;

&lt;p&gt;以前から国内クラウド向けにはChefに関連したライブラリ(&lt;a href=&#34;http://rubygems.org/gems/knife-zcloudjp&#34;&gt;knife-zcloudjp&lt;/a&gt;,&lt;a href=&#34;http://rubygems.org/gems/kitchen-zcloudjp&#34;&gt;kitchen-zcloudjp&lt;/a&gt;など)を公開しており、機会があればFogのプロバイダも書いてみたいと思っていました。&lt;/p&gt;

&lt;p&gt;そもそもFogに日本のプロバイダがないのは前々から気に入らなかったこともあって、今回の『さくらのクラウド』はそこそこ渡りに船でした。&lt;br /&gt;
日本語がわからないとサインアップが困難だったりするのですが、そこは気にしないことにします。&lt;/p&gt;

&lt;p&gt;このFog対応に思ったより時間をとられたので、他のやりたかったことができなかった弊害はありましたが、コンピュータリソースがカジュアルに上がってこないと(Chef的に)使いづらかったことは確かなので仕方がありませんでした。&lt;/p&gt;

&lt;h3 id=&#34;chefとインテグレーション&#34;&gt;Chefとインテグレーション&lt;/h3&gt;

&lt;p&gt;スタートアップスクリプトのような使い捨てでなく、クラウドAPIを叩く瞬間からChefの支配は始まっているんですよというアピールをしてみました。 せいぜい計算リソースにすぎないコンピュータインスタンスに、たとえばわざわざ名前をつけて可愛がりながら育てるなんて、もはやナンセンスではないのかという啓発も込めています。&lt;/p&gt;

&lt;h2 id=&#34;まとめと今後の展開&#34;&gt;まとめと今後の展開&lt;/h2&gt;

&lt;p&gt;言いたい放題のセッションでしたが、定めたターゲットさくらインターネットのスタッフ一同には田中社長をはじめ『面白かった』と感想をいただいたのでめでたしめでたしと。&lt;/p&gt;

&lt;p&gt;しかし今回時間の関係上、『さくらのクラウド』の全力を引き出したとは言いがたい。&lt;br /&gt;
そしてクラウドフォーメーションと銘打っておきながら、ネットワーク関係やLB、それと先日発表されたクラウドストレージにも手を出していません。&lt;/p&gt;

&lt;p&gt;できればyamlかjsonの定義ファイルを食わせればシステム構築するところまで、それこそ某クラウドフォーメーション程度の実装までしておきたいなあ。&lt;/p&gt;
</description>
    </item>
    
    
    
    <item>
      <title>Install fail2ban to the SmartOS</title>
      <link>https://www.sawanoboly.net/2014/02/fail2ban-for-smartos/</link>
      <pubDate>Thu, 06 Feb 2014 00:00:00 +0900</pubDate>
      
      <guid>https://www.sawanoboly.net/2014/02/fail2ban-for-smartos/</guid>
      <description>

&lt;p&gt;&lt;a href=&#34;http://www.fail2ban.org/wiki/index.php/Main_Page&#34;&gt;fail2ban&lt;/a&gt;がSolaris(OpenSolaris)に対応していたので、Joyent SmartOSに導入する。&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/fail2ban/fail2ban/blob/0.8.12/README.Solaris&#34;&gt;0.8.12/README.Solaris&lt;/a&gt;
上記Solarisの内容ではちょっと困る。&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&#34;patch-for-the-smartos&#34;&gt;Patch for the SmartOS&lt;/h2&gt;

&lt;p&gt;パスの問題程度だったので、最新安定版の0.8.12をベースにパッチを作成した。&lt;/p&gt;

&lt;p&gt;&lt;a href=&#34;https://gist.github.com/sawanoboly/8838359&#34;&gt;https://gist.github.com/sawanoboly/8838359&lt;/a&gt;&lt;/p&gt;

&lt;script src=&#34;https://gist.github.com/sawanoboly/8838359.js?file=0.8.12_smartos.patch&#34;&gt;&lt;/script&gt;

&lt;h2 id=&#34;install-to-the-smartos&#34;&gt;Install to the SmartOS&lt;/h2&gt;

&lt;p&gt;インストールはこのように。&lt;/p&gt;

&lt;p&gt;GitリポジトリでもアーカイブでもOKだが、パッチファイルはコピペするとインデントが怪しくなるのでgistのdownloadリンクを使うのがいい。&lt;/p&gt;

&lt;script src=&#34;https://gist.github.com/sawanoboly/8838359.js?file=README.smartos.md&#34;&gt;&lt;/script&gt;

&lt;h2 id=&#34;ban&#34;&gt;Ban&lt;/h2&gt;

&lt;p&gt;Banする方式はTCP WrapperとIpfilterが使える。&lt;/p&gt;

&lt;h3 id=&#34;tcp-wrapperでban&#34;&gt;TCP WrapperでBan&lt;/h3&gt;

&lt;p&gt;hosts.denyに設定を出し入れするやりかた。&lt;/p&gt;

&lt;p&gt;READMEにもあるけど、TCP Wrapperは有効にしておく。&lt;/p&gt;

&lt;p&gt;inetadm -pで確認。&lt;/p&gt;

&lt;pre&gt;&lt;code class=&#34;language-bash&#34;&gt;# inetadm -p

-- snip --

tcp_wrappers=TRUE

-- snip --
inetadm -Mで設定変更。

inetadm -M tcp_wrappers=true
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;SSH(TCP/22)をBanするサンプル。&lt;/p&gt;

&lt;pre&gt;&lt;code class=&#34;language-bash&#34;&gt;## cat /etc/fail2ban/jail.local 

[ssh-tcpwrapper]

enabled = true
filter = sshd
action = hostsdeny[daemon_list=sshd]
logpath = /var/log/authlog
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;SmartOSのバージョンによっては /var/log/auth.logだったり、syslogの設定がそもそも無かったりするので調整しよう。&lt;/p&gt;

&lt;p&gt;このとおりJail listが登録される。&lt;/p&gt;

&lt;pre&gt;&lt;code class=&#34;language-bash&#34;&gt;# fail2ban-client status
Status
|- Number of jail:      1
`- Jail list:           ssh-tcpwrapper
&lt;/code&gt;&lt;/pre&gt;

&lt;h3 id=&#34;ipfilterでban&#34;&gt;IPFilterでBan&lt;/h3&gt;

&lt;p&gt;ipfコマンドでルールの管理をするやりかた。&lt;/p&gt;

&lt;p&gt;ちなみにリストの最後にquickで出し入れするやり方になるので、既存のルールと干渉します。&lt;/p&gt;

&lt;p&gt;fail2banと一緒に使うため、blockとpass対象ではquickを使わないようにします。&lt;/p&gt;

&lt;pre&gt;&lt;code class=&#34;language-bash&#34;&gt;## Example of filter rules with using fail2ban.
pass out quick from any to any keep state
block in all                                                                                ## without quick
pass in quick from 127.0.0.0/8 to any keep state
pass in quick proto icmp from any to any keep state
pass in proto tcp from any to any port = 22 keep state   ## without quick
pass in quick proto tcp from any to any port = 80 keep state
pass in quick proto tcp from any to any port = 443 keep state
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;SSH(TCP/22)をBanするサンプル。&lt;/p&gt;

&lt;pre&gt;&lt;code class=&#34;language-bash&#34;&gt;## cat /etc/fail2ban/jail.local 

[ssh-tcpwrapper]

enabled = true
filter = sshd
action = ipfilter
logpath = /var/log/authlog
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;このとおりJail listが登録される。&lt;/p&gt;

&lt;pre&gt;&lt;code class=&#34;language-bash&#34;&gt;# fail2ban-client status        
Status
|- Number of jail:      1
`- Jail list:           ssh-ipfilter
&lt;/code&gt;&lt;/pre&gt;

&lt;h3 id=&#34;result&#34;&gt;Result&lt;/h3&gt;

&lt;p&gt;TCP WrapperでBanしたらこんな感じ。&lt;/p&gt;

&lt;pre&gt;&lt;code class=&#34;language-bash&#34;&gt;#  tail -f /var/log/fail2ban.log
2014-02-06 04:01:51,728 fail2ban.server [85350]: INFO    Changed logging target to /var/log/fail2ban.log for Fail2ban v0.8.12
2014-02-06 04:01:51,740 fail2ban.jail   [85350]: INFO    Creating new jail &#39;ssh-tcpwrapper&#39;
2014-02-06 04:01:51,746 fail2ban.jail   [85350]: INFO    Jail &#39;ssh-tcpwrapper&#39; uses poller
2014-02-06 04:01:51,821 fail2ban.jail   [85350]: INFO    Initiated &#39;polling&#39; backend
2014-02-06 04:01:51,832 fail2ban.filter [85350]: INFO    Added logfile = /var/log/authlog
2014-02-06 04:01:51,836 fail2ban.filter [85350]: INFO    Set maxRetry = 3
2014-02-06 04:01:51,840 fail2ban.filter [85350]: INFO    Set findtime = 600
2014-02-06 04:01:51,841 fail2ban.actions[85350]: INFO    Set banTime = 600
2014-02-06 04:01:51,933 fail2ban.jail   [85350]: INFO    Jail &#39;ssh-tcpwrapper&#39; started

-- ban log

2014-02-06 04:03:32,957 fail2ban.actions[85350]: WARNING [ssh-tcpwrapper] Ban xxx.xxx.xxx.xxx
2014-02-06 04:03:34,978 fail2ban.actions[85350]: INFO    [ssh-tcpwrapper] xxx.xxx.xxx.xxx already banned
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;パッチは本家にIssueでお知らせしたので、そのうち含まれたらええなあと。&lt;/p&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/fail2ban/fail2ban/issues/607&#34;&gt;fail2ban/issues#607&lt;/a&gt;&lt;/p&gt;
</description>
    </item>
    
    
  </channel>
</rss>
