05 Apr 2014, 05:38

SquidをつかってWindows環境化でプロキシサーバを立ててみる

わけあってプロキシサーバを立ててみたくなったので、 Windows環境でプロキシサーバをたてる方法について調べてみた。

Squidをつかう

フリーソフトのSquidを利用する。Squidはマルチプラットフォームなプロキシサーバソフト。

以下から、windows用のプログラムをダウンロードしてくる。

解凍したものを、C:に配置。

設定ファイルの設定

etc配下にある以下をリネーム。

  • mime.conf.default -> mime.conf
  • squid.conf.default -> squid.conf

600行目あたりに、acl (任意の名前) src (IPアドレス)/(サブネットマスク)を追加。

入力するIPアドレスは コマンドプロンプトから ipconfigコマンドで調べることができる。


#Recommended minimum configuration:
acl all src all
acl manager proto cache_object
acl localhost src 127.0.0.1/32
acl to_localhost dst 127.0.0.0/8 0.0.0.0/32 
# 以下を追加
acl net localsrc 192.168.1.0/255.255.255.0 

650行目あたりで定義したネットワーク指定をアクセス許可。

ここではhttp_access に localnetを追加。

# Only allow cachemgr access from localhost
http_access allow manager localhost localnet
http_access deny manager

1100行目あたりでプロキシ用ボートを8080に設定。

# Squid normally listens to port 3128
# http_port 3128
http_port 8080

コマンドプロンプトでの操作。

まずは、管理者権限でコマンドプロンプトを起動する。

キャッシュエリア作成

<div class="outline-text-3" id="text-3-1">
  <p>
    C:で以下のコマンドを実行。
  </p>

  <pre><code>C:\squid\sbin>squid -z

2014/04/04 21:39:46| Creating Swap Directories

サービスの起動

<div class="outline-text-3" id="text-3-2">
  <p>
    以下のコマンドで、Windowsの管理のサービスに追加して起動。
  </p>

  <pre><code>C:\squid\sbin>squid -i

C:\squid\sbin>net start squid

  <p>
    停止はnet stop squid。サービスから外すには以下。
  </p>

  <pre><code>C:\squid\sbin>squid -r

たとえばInternet Exploreの設定

IEにプロキシ経由でネットにアクセスするように設定。

[接続] > [LANの設定] > [プロキシサーバ]と移動して、入力欄に自分のIPアドレスとポート番号を入れる。

ここでは、192.168.100.101と8080.

BASIC認証をかける

squidのダウンロードページにおいてある、NCSAsupport.zipをおとして解凍する。

なかに、htpasswd.exe があるので、C:にコピー。以下を実行してpasswdファィルを作成。

C:\squid\etc>htpasswd.exe -c passwd tsu-nera
Adding password for tsu-nera.
New password:**************
Re-type new password:**************

passwd生成用のWebサービスもあるようだ。

C:.confの288行目あたりをコメントアウト。認証用プログラムとパスワードファイルを指定する。

auth_param basic program C:/squid/libexec/ncsa_auth.exe C:/squid/exc/passwd 
auth_param basic children 5
auth_param basic realm Squid proxy-caching web server
auth_param basic credentialsttl 2 hours
auth_param basic casesensitive off

以下を追加。

acl password proxy_auth REQUIRED
http_access allow password

さきほど追加したnetはコメントアウトしておく。

# http_access allow net

再起動すれば設定完了。IEからネットにアクセスしてユーザ名とパスワードを効かれたらOK.

29 Mar 2014, 13:45

RSpecのモックについて調べてみた

今日は、RSpecにおけるモックオブジェクト技法について調べてみました。

モックオブジェクト技法とは

モックオブジェクト技法とは、

  • オブジェクト同士のコラボレーションに注目したテスト方法。
  • オブジェクトの状態よりも、オブジェクト同士のやりとりに注目する。
  • インターフェースのテスト、シーケンス図のテストに注力した技法。

詳しくは、この本がいい。

RSpecにおけるテストダブル

基本は以下。double()メソッドでテストダブルオブジェクトを生成。

テストダブルとは、本物のオブジェクトの代役をするオブジェクト。 映画の俳優のスタントマン。

大抵の場合は、テスト対象のオブジェクトの引数としてオブジェクトが渡される。


   real_foo = Foo.new
   double_foo = double('foo')

   # real_fooをつかわないで、double_fooを渡す
   hoge = Hoge.new(double_foo)

記法には2種類ある。

  • should記法 should_recieve …
  • expect記法 allow/expect

expect記法の方が、より英語らしく感じる。文脈に応じて使い分ける。

スタブ

<div class="outline-text-3" id="text-2-1">
  <p>
    スタブメソッドを指定すると、 テストダブルオブジェクトのメソッドから好きな値を戻り値として得ることができる。
  </p>

  <pre><code>

allow(double_foo).to receive(:call).and_return(“Hello”) double_foo.stub(:call).and_return(“Hello”)

モック

<div class="outline-text-3" id="text-2-2">
  <p>
    スタブに検証機能をつけたものをモックという。検証機能とは、
  </p>

  <ul class="org-ul">
    <li>
      期待された引数で呼ばれたか?
    </li>
    <li>
      期待された回数呼ばれたか?
    </li>
    <li>
      期待された順番で呼ばれたか?
    </li>
  </ul>

  <p>
    などなどを検証する。この機能が、モックオブジェクト技法。 オブジェクト同士のやりとりに注力したテストがかける。
  </p>

  <p>
    期待された値で呼ばれたかは、with()メソッドで検証する。
  </p>

  <pre><code>

expect(double_foo).to recieve(:call).and_return(“Hello”) double_foo.should_recieve(:call).and_return(“Hello”)

リファレンスとか

<div class="outline-text-3" id="text-2-3">
  <p>
    機能が細かいので、詳しくは以下のリンクを参照。
  </p>

  <ul class="org-ul">
    <li>
      <a href="https://relishapp.com/rspec/rspec-mocks/v/3-0/docs">RSpec Mocks 3.0 &#8211; RSpec Mocks &#8211; RSpec &#8211; Relish</a>
    </li>
  </ul>

  <p>
    自分は、この書籍を見ながら勉強している。
  </p>

  <div class='amazlink-box' style='text-align:left;padding-bottom:20px;font-size:small;/zoom: 1;overflow: hidden;'>
    <div class='amazlink-list' style='clear: both;'>
      <div class='amazlink-image' style='float:left;margin:0px 12px 1px 0px;'>
        <a href='http://www.amazon.co.jp/RSpec-Book-Professional-Ruby-Series/dp/4798121932%3FSubscriptionId%3DAKIAJDINZW45GEGLXQQQ%26tag%3Dsleephacker-22%26linkCode%3Dxm2%26camp%3D2025%26creative%3D165953%26creativeASIN%3D4798121932' target='_blank' rel='nofollow'><img src='http://ecx.images-amazon.com/images/I/51-3T735zLL._SL160_.jpg' style='border: none;' /></a>
      </div>

      <div class='amazlink-info' style='height:160; margin-bottom: 10px'>
        <div class='amazlink-name' style='margin-bottom:10px;line-height:120%'>
          <a href='http://www.amazon.co.jp/RSpec-Book-Professional-Ruby-Series/dp/4798121932%3FSubscriptionId%3DAKIAJDINZW45GEGLXQQQ%26tag%3Dsleephacker-22%26linkCode%3Dxm2%26camp%3D2025%26creative%3D165953%26creativeASIN%3D4798121932' rel='nofollow' target='_blank'>The RSpec Book (Professional Ruby Series)</a>
        </div>

        <div class='amazlink-powered' style='font-size:80%;margin-top:5px;line-height:120%'>
          posted with <a href='http://amazlink.keizoku.com/' title='アマゾンアフィリエイトリンク作成ツール' target='_blank'>amazlink</a> at 14.03.29
        </div>

        <div class='amazlink-detail'>
          David Chelimsky
        </div>

        <div class='amazlink-sub-info' style='float: left;'>
          <div class='amazlink-link' style='margin-top: 5px'>
            <img src='http://amazlink.fuyu.gs/icon_amazon.png' width='18' /><a href='http://www.amazon.co.jp/RSpec-Book-Professional-Ruby-Series/dp/4798121932%3FSubscriptionId%3DAKIAJDINZW45GEGLXQQQ%26tag%3Dsleephacker-22%26linkCode%3Dxm2%26camp%3D2025%26creative%3D165953%26creativeASIN%3D4798121932' rel='nofollow' target='_blank'>Amazon</a>
          </div>
        </div>
      </div>
    </div>
  </div>
</div></p>

実装例

以前書いたステートパターンの実装に対してテストコードを書いてみました。

その他所感

<div class="outline-text-2" id="text-4">
  <p>
    Mock系のツールは、GoogleMockとJMockをつかったことがあるけれども、 RSpecの記法はとてもシンプルなので、気に入った。
  </p>

  <p>
    JavaやC++だと、いちいちインタフェースを定義しないといけない。
  </p>

  <p>
    Rubyでは、それがないの
  </p></p>
</div></p>

29 Mar 2014, 04:02

Emacsでrubydbを利用してステップ実行する

ruby-debugについて

Rubyには、debugというデバッカが標準ライブラリとしてついている。

これをつかうと、gdbのようなステップ実行ができる。

使い方

<div class="outline-text-3" id="text-1-1">
  <p>
    コンソールから以下のように入力する。
  </p>

  <pre><code>ruby -rdebug [filename]

  <p>
    (rdb:1)というコンソールが現れて、入力待ちになる。操作方法は以下のとおり。
  </p>

  <p>
    ステップ実行関連のコマンドは以下。ほぼgdbですね。
  </p>

  <pre><code>  

b[reak] [file:|class:][line|method] b[reak] [class.][line|method] set breakpoint to some position

wat[ch] [expression] set watchpoint to some expression

b[reak] list breakpoints

del[ete][ nnn] delete some or all breakpoints

c[ont] run until program ends or hit breakpoint s[tep][ nnn] step (into methods) one line or till line nnn n[ext][ nnn] go over one line or till line nnn l[ist][ (-|nn-mm)] list program, - lists backwards

q[uit] exit from debugger r[estart] restart program

  <p>
    個人的には、このへんの値参照が役立ちそう。
  </p>

  <pre><code>

v[ar] g[lobal] show global variables v[ar] l[ocal] show local variables v[ar] i[nstance] [object] show instance variables of object v[ar] c[onst] [object] show constants of object

  <p>
    あとは、watchコマンドとdispコマンドを組み合わせたのがよさそう。
  </p>

  <ul class="org-ul">
    <li>
      <a href="http://d.hatena.ne.jp/takihiro/20100404/1270370312">http://d.hatena.ne.jp/takihiro/20100404/1270370312</a>
    </li>
  </ul>
</div></p>

Emacsといっしょにつかう

Emacsようのelispをつかうと、実行中のステップがEmacsから見ることができる。

elispはRubyのソースコードのmiscディレクトリのなかにある。

rubydb3x.elとrubydb2x.eclが入っているけれど,rubydx2x.elは19.2x以前向けなので,3xを使用する。

rubydb3x.elをロードパスが通った場所において、init.elに以下を追加。

(autoload 'rubydb "rubydb3x" "run rubydb on program file in buffer" t)

これで、M-x rubydbをおすとデバッガが起動する。

ヘルプコマンドから抜きだし

<div class="outline-text-3" id="text-2-1">
  <pre><code>Commands

b[reak] [file:|class:][line|method] b[reak] [class.][line|method] set breakpoint to some position wat[ch] [expression] set watchpoint to some expression catch set catchpoint to an exception b[reak] list breakpoints cat[ch] show catchpoint del[ete][ nnn] delete some or all breakpoints disp[lay] [expression] add expression into display expression list undisp[lay][ nnn] delete one particular or all display expressions c[ont] run until program ends or hit breakpoint s[tep][ nnn] step (into methods) one line or till line nnn n[ext][ nnn] go over one line or till line nnn w[here] display frames f[rame] alias for where l[ist][ (-|nn-mm)] list program, - lists backwards nn-mm lists given lines up[ nn] move to higher frame down[ nn] move to lower frame fin[ish] return to outer frame trace set trace mode of current thread trace all set trace mode of all threads q[uit] exit from debugger v[ar] g[lobal] show global variables v[ar] l[ocal] show local variables v[ar] i[nstance] [object] show instance variables of object v[ar] c[onst] [object] show constants of object m[ethod] i[nstance] [obj] show methods of object m[ethod] [class|module] show instance methods of class or module th[read] l[ist] list all threads th[read] c[ur[rent]] show current thread th[read] [sw[itch]] [nnn] switch thread context to nnn th[read] stop [nnn] stop thread nnn th[read] resume [nnn] resume thread nnn pp expression evaluate expression and pretty_print its value p expression evaluate expression and print its value r[estart] restart program h[elp] print this help

26 Mar 2014, 16:42

インフラ業界の気になるキーワードについて調べてみた

インフラ業界の技術動向について調べてみたブックマークとキーワード集。

なんだか、調べれば調べるほどインフラまわりが熱いということがわかった。

Run Book Automation(RBA)

構築手順を示したドキュメントを英語ではRun Bookと読んでいる。

ドキュメントは、Excelベースのパラメータシートで管理されることが多い。

そして、そのパラメータシートにしたがった手順を自動したものを Run Book Automationという。

別記事として独立。

Code as Infrastructure

<div class="outline-text-2" id="text-2">
  <p>
    Code as Infrastructure、訳すと、インフラストラクチャーとしてのコード。
  </p>

  <p>
    インフラ構築、管理の手順をコードとして扱う概念。<br /> Excel管理の手順書からスクリプトを実行するのではなくて、初めからコードとして手順を記述する。
  </p>

  <blockquote>
    <p>
      インフラストラクチャのコンフィグレーションがスクリプトやファイルによって記述され、バージョン管理されており、その変更が自動的にデータセンターに反映されるやり方を指す。
    </p>
  </blockquote>

  <ul class="org-ul">
    <li>
      <a href="http://www.publickey1.jp/blog/11/rubyjavascriptthoughtworks.html">プログラマブルなインフラ、Ruby、JavaScriptなどが重要なテクノロジと評価される。ThoughtWorksのレポート - Publickey</a>
    </li>
  </ul>

  <p>
    Infrastructure as Code と呼ばれている場合もある。
  </p>

  <ul class="org-ul">
    <li>
      <a href="http://d.hatena.ne.jp/naoya/20131215/1387090668">Infrastructure as Code &#8211; naoyaのはてなダイアリー</a>
    </li>
  </ul>

  <blockquote>
    <p>
      単にサーバー構成変更を自動化しましょうという話ではなく、<br /> インフラをすべてソフトウェアとして、<br /> コードで扱うことでアプリケーション開発で行われてきたいろいろな<br /> &#8220;ワークフロー&#8221; をインフラ作業の世界にも導入しましょうねと、そういうことであります
    </p>
  </blockquote>

  <p>
    ニュアンスとして、RBAよりも、よりソフトウェア開発的な文化を感じる。
  </p>

  <ul class="org-ul">
    <li>
      手順書をコードとして扱う。
    </li>
    <li>
      コードレビューする。
    </li>
    <li>
      コードをバージョン管理する。
    </li>
  </ul>

  <p>
    そういえば、こんな本も最近本やで見かけた。
  </p>

  <ul class="org-ul">
    <li>
      <a href="http://www.amazon.co.jp/%E3%82%A4%E3%83%B3%E3%83%95%E3%83%A9%E3%83%87%E3%82%B6%E3%82%A4%E3%83%B3%E3%83%91%E3%82%BF%E3%83%BC%E3%83%B3-~%E5%AE%89%E5%AE%9A%E7%A8%BC%E5%8B%95%E3%81%AB%E5%B0%8E%E3%81%8F127%E3%81%AE%E8%A8%AD%E8%A8%88%E6%96%B9%E5%BC%8F-WEB-PRESS-plus/dp/4774162868">Amazon.co.jp: インフラデザインパターン ~安定稼動に導く127の設計方式 (WEB+DB PRESS plus): 株式会社NTTデータ, 杉原 健郎, 吉田 一幸, 岩崎 賢治, 三浦 広志, 吉田 佐智男: 本</a>
    </li>
  </ul>
</div>

<div class="outline-3" id="outline-container-sec-2-1">
  <h3 id="sec-2-1">
    Puppet/Chef
  </h3>

  <div class="outline-text-3" id="text-2-1">
    <p>
      このCode as Infrastructureという概念を実現するツールが、PuppetやChef。
    </p>

    <p>
      Puppet/Chefは、先に書いたRBA本に紹介されている。Chef専用の解説本もKindleで購入できるので、さっそく買った。
    </p>

    <ul class="org-ul">
      <li>
        <a href="http://www.amazon.co.jp/%E5%85%A5%E9%96%80Chef-Solo-Infrastructure-as-Code-ebook/dp/B00BSPH158">Amazon.co.jp: 入門Chef Solo &#8211; Infrastructure as Code eBook: 伊藤直也: Kindleストア</a>
      </li>
    </ul>
  </div>
</div>

Test-Driven Infrastructure

<div class="outline-text-2" id="text-3">
  <p>
    ソフトウェア開発のようにインフラを構築するという潮流の中、<br /> Test Driven Developmentのようにインフラを構築しようというのがこの概念。
  </p>

  <p>
    本も最近第2藩としてリニューアルされたようだ。
  </p>

  <ul class="org-ul">
    <li>
      <a href="http://shop.oreilly.com/product/0636920030973.do">Test-Driven Infrastructure with Chef, 2nd Edition &#8211; O&#8217;Reilly Media</a>
    </li>
  </ul>
</div>

<div class="outline-3" id="outline-container-sec-3-1">
  <h3 id="sec-3-1">
    ServerSpec
  </h3>

  <div class="outline-text-3" id="text-3-1">
    <p>
      サーバに対する設定をRSpecのようにテストしながら実施するためのツール。
    </p>

    <p>
      まさに、TDDをインフラに当てはめたツール。
    </p>
  </div>
</div>

<div class="outline-3" id="outline-container-sec-3-2">
  <h3 id="sec-3-2">
    RRRSpec
  </h3>

  <div class="outline-text-3" id="text-3-2">
    <p>
      数日前に現れたRRRSpecもなかなかよさそうな予感を感じるのでとりあえずブックマーク。
    </p>

    <ul class="org-ul">
      <li>
        <a href="http://techlife.cookpad.com/2014/03/24/rrrspec/">分散テスト実行システムRRRSpecをリリースしました | クックパッド開発者ブログ</a>
      </li>
    </ul>
  </div>
</div>

Blue-Green Deployment

<div class="outline-text-2" id="text-4">
  <p>
    稼働しているシステム(Blue)と待機しているシステム(Green)の2つを用意する。
  </p>

  <p>
    両者はルータで接続されていて、いつでも切り替えられる。
  </p>

  <p>
    デプロイは、ルータを切り替えることでダウンタイムを最小にしつつ、<br /> システムを切り替えることで実現する。
  </p>

  <ul class="org-ul">
    <li>
      <a href="http://martinfowler.com/bliki/BlueGreenDeployment.html">BlueGreenDeployment</a>
    </li>
  </ul>

  <p>
    &#8211;<a href="http://www.publickey1.jp/blog/14/blue-green_deployment.html">「Blue-Green Deployment」とは何か、マーチン・ファウラー氏の解説 - Publickey</a>
  </p>
</div>

Immutable Infrastructure

<div class="outline-text-2" id="text-5">
  <p>
    2014年現在、もっとも熱いキーワード。このキーワードを今年一年はWatchしようと思ってる。
  </p>

  <p>
    最近、立て続けにカンファレンスが開かれたようだ。
  </p>

  <ul class="org-ul">
    <li>
      <a href="http://dev.classmethod.jp/cloud/immutable-infrastructure-conference-no-1/">Immutable Infrastructure Conference #1 に参加してきた #immutableinfra | Developers.IO</a>
    </li>
  </ul>

  <p>
    Immutableとは、不変性。
  </p>

  <p>
    インフラを一度構築したらその設定が変更されていないことを保証する考え方。
  </p>

  <p>
    サーバに変更が必要になったら、運用中のサーバには触らない。<br /> コードに変更を加えて、新規にサーバを構築しなおす。<br /> そして、いらなくなったらサーバを破棄する。
  </p>

  <p>
    Immuabilityは、仮想化技術が大前提。<br /> サーバをつくったり、捨てたりといったことは仮想化技術があるからこそできる。
  </p>
</div>

<div class="outline-3" id="outline-container-sec-5-1">
  <h3 id="sec-5-1">
    Vagrant
  </h3>

  <div class="outline-text-3" id="text-5-1">
    <p>
      手軽に仮想化環境を手に入れるツールが、vagrant。<br /> vargrantとは、仮想環境をコマンドラインから操作することができるオープンソースRubyスクリプト。
    </p>

    <p>
      仮想環境はいくらでもこわし放題、手軽になんどでも構築できる。
    </p>

    <p>
      去年はvagrantの登場と盛り上がりによって、インフラ界隈の話題により火がついたように見えた。
    </p>

    <p>
      Vagrantについては去年自分でもちょっと遊んでた。なつかしいね、今となっては挫折したけど。
    </p>

    <ul class="org-ul">
      <li>
        <a href="http://futurismo.biz/archives/1651">vagrantがスゲエ!コマンドラインからVirtualBoxを自由自在に操る方法 | Futurismo</a>
      </li>
      <li>
        <a href="http://futurismo.biz/archives/1660">仮想環境を破壊しまくっても大丈夫だ、問題ない。vagrantプラグイン『sahara』 | Futurismo</a>
      </li>
      <li>
        <a href="http://futurismo.biz/archives/1667">ミライの組込み開発!vagrant × sahara × minitestで実現する仮想エンドツーエンドテスト | Futurismo</a>
      </li>
    </ul>
  </div>
</div>

<div class="outline-3" id="outline-container-sec-5-2">
  <h3 id="sec-5-2">
    links
  </h3>

  <div class="outline-text-3" id="text-5-2">
    <p>
      ブックマークも大量リンク。
    </p>

    <ul class="org-ul">
      <li>
        <a href="http://www.slideshare.net/YukihikoSawanobori/jawsdays-infra">Infrastructure as Codeと 組織のドキュメンテーション + Immutable Infrastructure事例</a>
      </li>
      <li>
        <a href="https://speakerdeck.com/naoya/immutable-infrastructuregakai-fa-purosesuniyu-eruying-xiang-jia-number-immutableinfra">Immutable Infrastructureが開発プロセスに与える影響(仮) #immutableinfra // Speaker Deck</a>
      </li>
      <li>
        <a href="http://www.nttdata.com/jp/ja/insights/trend_keyword/2013122601.html">Immutable Infrastructure~デプロイメントをめぐるシステムインフラの管理~ | NTTデータ</a>
      </li>
      <li>
        <a href="http://apatheia.info/blog/2013/08/10/immutable-infrastructure/">Immutable Infrastracture について &#8211; apatheia.info</a>
      </li>
      <li>
        <a href="http://blog.stanaka.org/entry/2013/12/01/092642">2014年のウェブシステムアーキテクチャ &#8211; stanaka&#8217;s blog</a>
      </li>
      <li>
        <a href="http://qiita.com/kasaharu/items/654d20dbea935438de78">Immutable_Infrastructure &#8211; Immutable Infrastructure 【インフラ環境もソースコード管理しよう】 &#8211; Qiita</a>
      </li>
    </ul>
  </div>
</div>

その他の用語

<div class="outline-text-2" id="text-6">
</div>

<div class="outline-3" id="outline-container-sec-6-1">
  <h3 id="sec-6-1">
    idempotence(べき等性)と immutability(不変性)
  </h3>

  <div class="outline-text-3" id="text-6-1">
    <p>
      べき等性とは、同じサーバに何度も chef/puppet 実行を繰り返しても、<br /> 同じ結果が得られることが保証されるという性質。Puppet や Chefの理念。
    </p>

    <p>
      不変性とは、システムが自動的に生成され、<br /> その時点からいちども変更されていないことが保証されている性質。<br /> 関数型プログラミングのパラダイムが影響を与えている。
    </p>

    <ul class="org-ul">
      <li>
        <a href="http://blog.mirakui.com/entry/2013/11/26/231658">今さら聞けない Immutable Infrastructure &#8211; 昼メシ物語</a>
      </li>
    </ul>
  </div>
</div>

<div class="outline-3" id="outline-container-sec-6-2">
  <h3 id="sec-6-2">
    ConfigurationとOrchestration
  </h3>

  <div class="outline-text-3" id="text-6-2">
    <p>
      Configurationは、 いわゆる構成管理ツール。<br /> サーバにたいしてツールを入れたり設定したりすること。
    </p>

    <p>
      それにたいし、Orchestrationとは、<br /> 複数のモジュール(サーバ、ストレージ、スイッチ)が組み合わさったシステムに<br /> ついての設定をしたりすること。
    </p>

    <ul class="org-ul">
      <li>
        <a href="http://wslash.com/archives/=5216">今年流行りそうな「インフラエンジニア」向けトレンドのまとめ その1 (Blue-Green DeploymentとImmutable Infrastructure編)</a>
      </li>
    </ul>

    <p>
      サーバの構築をprovisioningという大きな用語でとらえ、<br /> さらにそれを以下の3つに分類する言い方もある。
    </p>

    <ul class="org-ul">
      <li>
        Provisioning <ul class="org-ul">
          <li>
            Bootstrapping … OSインストール
          </li>
          <li>
            Configuration … サーバ単体構築
          </li>
          <li>
            Orchestration … システム構築
          </li>
        </ul>
      </li>

      <li>
        <a href="http://mizzy.org/blog/2013/10/29/1/">インフラ系技術の流れ &#8211; Gosuke Miyashita</a>
      </li>
      <li>
        <a href="http://mizzy.org/blog/2014/02/14/1/">Developers Summit 2014 で「サーバプロビジョニングのこれまでとこれから」という発表を行いました &#8211; Gosuke Miyashita</a>
      </li>
    </ul>
  </div>
</div>

<div class="outline-3" id="outline-container-sec-6-3">
  <h3 id="sec-6-3">
    Amazon と Google/ AWS と MVM
  </h3>

  <div class="outline-text-3" id="text-6-3">
    <p>
      2013年にAmazonが AWSという仮想化サービスを開始した。<br /> それに対抗するようにGoogleが Managed Virtual Machinesというサービスをスタートさせた。
    </p>

    <p>
      Amazon vs Googleという対立構造になるのだろうか??
    </p>

    <ul class="org-ul">
      <li>
        <a href="http://aws.amazon.com/jp/">クラウドコンピューティング なら アマゾン ウェブ サービス | 仮想サーバー、ストレージ、データベースのための Amazon のクラウドプラットフォーム(AWS 日本語)</a>
      </li>
      <li>
        <a href="http://www.publickey1.jp/blog/14/googleawsbigquery75.html">[速報]Google、AWS対抗をあらわにした値下げと新価格体系を発表。継続利用で自動値引き - Publickey</a>
      </li>
      <li>
        <a href="http://www.publickey1.jp/blog/14/googlemanaged_virtual_machinesgoogle_app_engine.html">[速報]Google、「Managed Virtual Machines」発表。Google App Engine内で仮想マシンを管理 - Publickey</a>
      </li>
    </ul>
  </div>
</div>

まとめ

<div class="outline-text-2" id="text-7">
  <p>
    今までの用語をまとめた自分の中でのイメージは以下のような感じ。
  </p>

  <p>
    ・・・
  </p>

  <p>
    インフラ構築のためのテストコードを書いて、<br /> vagrantのような仮想環境を用いてそのテストを検証する。
  </p>

  <p>
    TDDの小さなサイクルを繰り返しつつ、着実に手順を構築していく。
  </p>

  <p>
    仮想環境によってなんどもなんども手順がテストされて安全性が高まる。
  </p>

  <p>
    そして、本番のインフラ構築では十分仮想環境で検証したテストコードによって<br /> 自動でインフラが構築される。
  </p>

  <p>
    構築されたインフラは構築時から変更されていないことが保証されている。
  </p>

  <p>
    なにか不具合があれば、その環境を破棄してまた一から作り直す。
  </p>
</div>

26 Mar 2014, 11:52

Run Book Autmationとはなにかについて調べてみた

Run Book Autmationというキーワードについてまとめてみました。

Run Book Automation

この記事を書くきっかけになったのが、以下の本を買ったからです。

Run Book Automation(RBA)とは

構築手順を示したドキュメントを英語ではRun Bookと読んでいる。

Excelで設定項目に応じてパラメータシートを作成することが多い。以下、RBA本からの抜粋。

  • 構築の順序
  • 実際に投入するコマンドとそのパラメータ
  • 実際に操作するGUIオペレーション
  • コマンドの正常性確認方法
  • エラーの確認方法
  • エラーへの対処方法
  • 関係者に対する確認事項
  • 確認方法

そして、そのパラメータシートの自動化を Run Book Automationという。

各サイトからの引用とブックマーク

<div class="outline-text-3" id="text-2-1">
  <blockquote>
    <p>
      Run Book Automation (RBA) is the ability to define, build, orchestrate,<br /> manage and report on workflows that support system<br /> and network operational processes.
    </p>
  </blockquote>

  <ul class="org-ul">
    <li>
      <a href="http://en.wikipedia.org/wiki/Runbook">Runbook &#8211; Wikipedia, the free encyclopedia</a>
    </li>
  </ul>

  <blockquote>
    <p>
      ITの運用におけるマルチベンダーをまたいだ複雑な処理を、<br /> 1つのプロセスとして定義し、それを自動化していくこと。
    </p>
  </blockquote>

  <ul class="org-ul">
    <li>
      <a href="http://news.mynavi.jp/column/hyper-vcloud/002/">運用の効率化を考えていたらプライベートクラウドになった! (2) 注目を浴びるRunbook &#8211; 自動化のカギを握るテクノロジーと仮想化のツツキ方 | マイナビニュース</a>
    </li>
  </ul>

  <blockquote>
    <p>
      サーバー仮想化ソフトなどのインフラ管理製品には運用自動化機能が実装されつつあるが、<br /> ストレージやネットワークなど、他のシステム構成要素を含めた管理や、<br /> 運用プロセスの統合的な自動化ができないのが現状だ。<br /> そこで注目を集めているのが、<br /> IT運用管理に関するプロセスを自動化する「ランブック自動化(RBA)」である
    </p>

    <p>
      RBAを一言で言うと、従来のワークフローツールに、<br /> 既存の様々なIT運用管理ツール/機能との連携機能を組み入れた、<br /> IT運用管理自動化の仕組みを実現するテクノロジ
    </p>
  </blockquote>

  <ul class="org-ul">
    <li>
      <a href="http://it.impressbm.co.jp/e/2011/01/24/3281">IT運用管理プロセスを自動化し、ビジネス変化の速さに備えるRBA | IT Leaders</a>
    </li>
  </ul>

  <blockquote>
    <p>
      2011年現在、企業情報システムの運用管理の世界では、大きな変化が起こっている。<br /> 日々の運用作業から複数のシステムや部門をまたぐ運用プロセス、<br /> そしてリソースなどの制御を自動実行すること、<br /> すなわち「運用の自動化」が、急速に浸透している。
    </p>
  </blockquote>

  <ul class="org-ul">
    <li>
      <a href="http://itpro.nikkeibp.co.jp/article/Active/20111107/372843/">ITオペレーション(運用)の自動化(1)&#x2014;クラウド運用は自動化が大前提に &#8211; ガートナー直伝!IT導入ワン&#x2026;:ITpro Active</a>
    </li>
  </ul>

  <blockquote>
    <p>
      仮想サーバ環境なら簡単にできてしまうからだ、<br /> その結果、何が起こるか。仮想サーバの乱立だ。
    </p>

    <p>
      仮想化対応のポイントは「監視」と「制御」
    </p>
  </blockquote>

  <ul class="org-ul">
    <li>
      <a href="http://www.itmedia.co.jp/im/articles/1009/15/news118.html">特集:仮想化構築・運用のポイントを探る(5):“自動化”は仮想化運用管理の救世主 (1/2) &#8211; ITmedia エンタープライズ</a>
    </li>
  </ul>
</div></p>

感想

この言葉は最近では話題になっていないようで、一世代前のバズワードのように見える。

運用、監視、仮想化がキーワードのようだ。

RBA本の読書メモ

せっかくなので、書評も書いておく。

23 Mar 2014, 09:53

クールなオブジェクト指向言語 Coolを Linux Mintにインストール

Coolは、Classroom object Oriented Languageの略。

文字通り、教育用オブジェクト指向言語。

courseraで始まったCompilerの講義でつかう。この言語で、コンパイラの仕組みを学ぶ。

Linux Mintにインストールしたメモです。

環境

  • Linux Mint 16

インストール

まずは、依存ライブラリをインストール。


sudo apt-get install flex bison build-essential csh openjdk-6-jdk libxaw7-dev

つづいて、Coolをインストール。


sudo mkdir /usr/class
sudo chown $USER /usr/class
cd /usr/class
wget http://spark-university.s3.amazonaws.com/stanford-compilers/vm/student-dist.tar.gz
tar -xf student-dist.tar.gz
ln -s /usr/class/cs143/cool ~/cool

最後にパスを通す。


export PATH=/usr/class/cs143/cool/bin:$PATH

Hello Cool

お決まりのHello Worldをしてみる。

といっても、/usr/class/cs143/examples/hello_world.cl にサンプルがある。


class Main inherits IO {
   main(): SELF_TYPE {
        out_string("Hello, World.\n")
   };
};

コンパイルして実行。


$ cp /usr/class/cs143/examples/hello_world.cl .
$ coolc hello_world.cl
$ spim hello_world.s
SPIM Version 6.5 of January 4, 2003
Copyright 1990-2003 by James R. Larus (larus@cs.wisc.edu).
All Rights Reserved.
See the file README for a full copyright notice.
Loaded: /usr/class/cs143/cool/lib/trap.handler
Hello, World.
COOL program successfully executed
Stats -- #instructions : 152
         #reads : 27  #writes 22  #branches 28  #other 75

Emacs mode

こんなのがあるらしい。未検証だけど、リンクだけはっておく。

23 Mar 2014, 07:35

Programming Mobile Applications for Android Handheld SystemsでAndoroidアーキテクチャの基礎を体系的に学んだ

Androidの学習をcourseraをつかってしました。

[//www.youtube.com/embed/szmWnKKvj9s]

内容

Lecture

<div class="outline-text-3" id="text-1-1">
  <p>
    Android開発で必要な知識を体系的に習得できる。
  </p>

  <p>
    特徴は、知識ベースの網羅的解説。 実際にアプリをつくって楽しみましょうというスタイルとは、正反対。 Androidの構成要素を、毎週少しずつ、徹底的に叩き込まれる感じだ。
  </p>

  <p>
    たくさんの知識を一気に解説してくるので、頭に入りきれない。
  </p>

  <p>
    アダム先生の話し方は、とても形式的。
  </p>

  <p>
    概念の説明、デモアプリの説明、ソースコードの説明、このサイクルが繰りかえされる。 説明のためのフレーズまで、定形的に毎回同じという徹底ぶりだ。
  </p>

  <p>
    ジェスチャーが多めで、しかも週の後半に進にしたがってジェスチャーのレベルが上がっていくのがおもしろい。
  </p>

  <p>
    スライドが白黒で地味なせいもあり、講義を一度きいても不思議とほとんど頭に入らないのが辛い。
  </p></p>
</div></p>

Assignment

<div class="outline-text-3" id="text-1-2">
  <p>
    課題に取り組むことで、知識の整理ができる感じ。課題はPDF 3枚くらいの仕様を実装して、毎週提出する。
  </p>

  <p>
    膨大なサンプルのデモコードが結構役に立つ。これはありがたい。 ネットで見つかるソースよりも、課題のサンプルのほうがやくにたつ。 このコードを見ながら、課題でコピペで使えそうな部分を探す。
  </p>

  <p>
    驚いたことに、課題はすべて自動でテストされるのだ! Robotiumという受け入れテストツールを利用しているようだ。
  </p>

  <blockquote class="twitter-tweet" lang="ja">
    <p>
      CourseraのAndroid講義、Robotiumというテスティングフレームワークを使って自動テストされる。
    </p>

    <p>
      &mdash; きつね (@tsu_nera) <a href="https://twitter.com/tsu_nera/statuses/429948312783822848">2014, 2月 2</a>
    </p>
  </blockquote>

  <p>
  </p>

  <p>
    これは、Androidが吐き出すログをパースして期待通りの結果どうか判定する。Androidテスト技術、恐るべし。
  </p>

  <p>
    あと、掲示板に先生みずから頻繁にコメントしているのもうれしい。
  </p></p>
</div></p>

感想

Android開発は期待していたほどおもしろくない、ということが分かった。 いや、おもしろいアプリをつくっていないからかもしれない、けど。

副読本として参考書も読みつつ進めた。 このAndoroidの本も、同じように網羅的なので、講義との相性はいいかも。電子書籍版を買った。

<div class='amazlink-box' style='text-align:left;padding-bottom:20px;font-size:small;/zoom: 1;overflow: hidden;'><div class='amazlink-list' style='clear: both;'><div class='amazlink-image' style='float:left;margin:0px 12px 1px 0px;'><a href='http://www.amazon.co.jp/%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0Android-Zigurd-Mednieks/dp/4873115353%3FSubscriptionId%3DAKIAJBCXQ4WQGJ7WU3WA%26tag%3Dsleephacker-22%26linkCode%3Dxm2%26camp%3D2025%26creative%3D165953%26creativeASIN%3D4873115353' target='_blank' rel='nofollow'><img src='http://ecx.images-amazon.com/images/I/51kRjx9TAzL._SL160_.jpg' style='border: none;' /></a></div><div class='amazlink-info' style='height:160; margin-bottom: 10px'><div class='amazlink-name' style='margin-bottom:10px;line-height:120%'><a href='http://www.amazon.co.jp/%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0Android-Zigurd-Mednieks/dp/4873115353%3FSubscriptionId%3DAKIAJBCXQ4WQGJ7WU3WA%26tag%3Dsleephacker-22%26linkCode%3Dxm2%26camp%3D2025%26creative%3D165953%26creativeASIN%3D4873115353' rel='nofollow' target='_blank'>プログラミングAndroid</a></div><div class='amazlink-powered' style='font-size:80%;margin-top:5px;line-height:120%'>posted with <a href='http://amazlink.keizoku.com/' title='アマゾンアフィリエイトリンク作成ツール' target='_blank'>amazlink</a> at 14.02.23</div><div class='amazlink-detail'>Zigurd Mednieks<br /></div><div class='amazlink-sub-info' style='float: left;'><div class='amazlink-link' style='margin-top: 5px'><img src='http://amazlink.fuyu.gs/icon_amazon.png' width='18'><a href='http://www.amazon.co.jp/%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0Android-Zigurd-Mednieks/dp/4873115353%3FSubscriptionId%3DAKIAJBCXQ4WQGJ7WU3WA%26tag%3Dsleephacker-22%26linkCode%3Dxm2%26camp%3D2025%26creative%3D165953%26creativeASIN%3D4873115353' rel='nofollow' target='_blank'>Amazon</a> <img src='http://amazlink.fuyu.gs/icon_rakuten.gif' width='18'><a href='http://hb.afl.rakuten.co.jp/hgc/g00q0724.n763w947.g00q0724.n763x2b4/archives/c=http%3A%2F%2Fbooks.rakuten.co.jp%2Frb%2F11570632%2F&m=http%3A%2F%2Fm.rakuten.co.jp%2Frms%2Fmsv%2FItem%3Fn%3D11570632%26surl%3Dbook' rel='nofollow' target='_blank'>楽天</a></div></div></div></div></div>

この講座を受けて一番よかったのは、Androidの設計思想、MvCを勉強できたことだ。 Androidというシステムのなかで、オブジェクトがいかにしてやりとりしているかが分かった。

それぞれのAPIのつかいかたは時間がたつと忘れてしまうけれども、 大枠のAndroidアーキは頭に残り、またこれからにも役立っていくだろう。

22 Mar 2014, 09:40

RSpecのテスト結果をCSVで出力する

テスト項目表をExcelで作成する必要がある。

RSpecの実行結果をExcelにコピペするための楽な方法を考えてみたメモです。

RSpecのカスタムフォーマット

RSpecには、カスタムフォーマットという機能がある。

出力のフォーマットを自分でカスタマイズするための拡張ボイント。

この機能を利用して、CSVフォーマットでテスト結果を出力してみる。

前提条件

テスト項目表には、最低限以下のような項目を書く必要があると仮定する。

  • テスト番号
  • 大項目
  • 中項目
  • 小項目
  • 期待結果
  • 実施日

これらをRSpecのテストコードに埋め込む。

実装

メタデータをspecに埋め込む

<div class="outline-text-3" id="text-3-1">
  <p>
    RSpecのメタデータに、項目の情報を残す。デフォルトのメタデータは以下で見ることができる。
  </p>

  <pre><code>

it “テストです” do # すべての要素をみる example.metadata

# 特定の項目を見る
example.metadata[:description_args]

end

  <p>
    自分でメタデータを定義するには、 it &#8221; &#8220;, のあとに ハッシュ形式で書く。
  </p>

  <pre><code>

it “ほげほげであること” , :no => “1”, :date => “2014/03/22” do end

フォーマットスクリプトを作成する

<div class="outline-text-3" id="text-3-2">
  <p>
    フォーマットスクリプトは、デフォルトのフォーマッタを継承して作成する。
  </p>

  <p>
    必要なメソッドのみをカスタマイズする。
  </p>

  <ul class="org-ul">
    <li>
      initialise(output) はじめに呼ばれる
    </li>
    <li>
      example_started(example) サンプル開始時に呼ばれる
    </li>
    <li>
      example_passed(example) テスト成功時に呼ばれる
    </li>
    <li>
      example_passed(example) テスト失敗時に呼ばれる
    </li>
    <li>
      close() 最後に呼ばれる
    </li>
  </ul>

  <p>
    ほかにも、いろいろとメソッドがあるので、公式のドキュメント参照。
  </p>

  <ul class="org-ul">
    <li>
      <a href="http://rubydoc.info/gems/rspec-core/2.6.4/RSpec/Core/Formatters/DocumentationFormatter">Class: RSpec::Core::Formatters::DocumentationFormatter — Documentation for rspec-core (2.6.4)</a>
    </li>
  </ul>

  <p>
    今回は、Documentationフォーマットを継承する。
  </p>

  <pre><code>

def initialize(output) super(output) @results = Array.new end

def example_passed(example) super(example) result = createResult(example) result[:result] = “OK” @results << result end

def example_failed(example) super(example) result = createResult(example) result[:result] = “NG” @results << result end

def close output_csv() end

コマンド実行

<div class="outline-text-3" id="text-3-3">
  <p>
    コンソールから以下を叩く。
  </p>

  <pre><code>

rspec -I ../ -I . -r csv_formatter.rb csv_format_spec.rb -f CsvFormatter

  <p>
    -f のあとに自分がつくったフォーマッタのクラス名を渡す。
  </p>

  <p>
    -r のあとに自分がつくったスクリプトを渡す。
  </p></p>
</div></p>

コード

22 Mar 2014, 07:27

RSpecでWindows-31Jの文字コードを使うときのメモ

RSpecで Windows-31Jのエンコードを扱うときにハマったので、作業メモ。

Rubyファイルのエンコードについて

Rubyでは、ファイルのエンコードを判定するために、 ファイル冒頭のマジックコメントを利用している。


UTF-8の場合
# coding: utf-8

Windows-31Jの場合
# coding: Windows-31J

エンコードのことなる関係でRubyを利用するときは注意が必要。

Rubyでは、文字列のエンコードを変換するために、以下のメソッドがある。


# 戻り値として変更
str.encode!("UTF-8")

# 上書き変更
str.encode!("UTF-8")

# エンコードを調べる
str.encoding

RSpecでのエンコード

RSpecで文字列を比較するときは、当然文字コードが期待値と結果で同一な必要がある。

specファイルもテスト対象も同一の文字コードで記述すれば比較は問題ない。

しかし、普段Emacsに結果を表示していて、その表示がUTF-8でないと文字化けしてしまう。

しかたがないので、以下のようにした。

  • specファイルは UTF-8
  • テスト対象ファイルは Windows-31J
  • specからテスト対象を呼び出すときと、結果の比較で encodeメソッドを利用する。
it "日本語" do
  line = "SCENARIO_NAME = \'こんにちは\'".encode!("Windows-31J")
  @perser.parse(line, @regexp).should == "こんにちは".encode!("Windows-31J")
end

22 Mar 2014, 05:56

RubyからExcelを操作する方法について

RubyからExcel操作をする手順について調べてみた。

RubyからExcelを操作するライブラリ

RubyからExcelやスプレットシートを操作するライブラリはいくつかあるようだ。

RubyでExcelファイルを扱うライブラリの比較 – Qiita

標準ライブラリに含まれているものは、Win32OLEというものなので、これを試す。

環境

<div id="text-1-1" class="outline-text-3">
  <ul class="org-ul">
    <li>
      Windows 7 64bit
    </li>
    <li>
      cygwin
    </li>
    <li>
      Ruby 2.0
    </li>
  </ul>
</div>

Win32OLE

Win32OLE は、COM とか ActiveX などと呼ばれたりする技術を扱うためのライブラリ。

COM オブジェクトは WIN32OLE::new(ProgID)という形式で呼び出す。 Excelの場合は、ProgIDは’Excel.Application’となる。

利用できるメソッドは以下のコマンドで表示できる。

$ ruby -r win32ole -e "excel = WIN32OLE.new('Excel.Application');puts excel.ole_methods;"

Excelオブジェクトの整理

  • Application ・・・ Excelオブジェクト本体
  • WookBook ・・・ Excelワークブック
  • WookSheet ・・・ Excelワークシート
  • Range ・・・ Excelのセルやセルの集合。
  • Excelのクラスの説明

やることリスト

  • xlsx拡張子の既存ファイルを開く
  • 既存ファイルから情報を読みこむ
  • 既存ファイルから情報を書き込む
  • ファイルを保存する

ファイルオープン

<div id="text-2-1" class="outline-text-3">
  <p>
    Win32OLEを利用するには、wiin32oleをrequireする。
  </p>

  <div class="org-src-container">
    <pre class="src src-ruby">require <span style="color: #e6db74;">'win32ole'</span>

<div id="outline-container-sec-2-1-1" class="outline-4">
  <h4 id="sec-2-1-1">
    Applicationオブジェクト
  </h4>

  <div id="text-2-1-1" class="outline-text-4">
    <p>
      excelオブジェクト
    </p>

    <div class="org-src-container">
      <pre class="src src-ruby"><span style="color: #8f8f8f;"># </span><span style="color: #8f8f8f;">Excelオブジェクト生成</span>

excel = WIN32OLE.new(‘Excel.Application’) # FileSystemObject生成 fso = WIN32OLE.new(‘Scripting.FileSystemObject’) # デバッグ用表示 excel.visible = DEBUG_SHOW

<div id="outline-container-sec-2-1-2" class="outline-4">
  <h4 id="sec-2-1-2">
    WorkBookオブジェクト
  </h4>

  <div id="text-2-1-2" class="outline-text-4">
    <p>
      bookオブジェクトを作成してファイルを開く。
    </p>

    <div class="org-src-container">
      <pre class="src src-ruby"><span style="color: #8f8f8f;"># </span><span style="color: #8f8f8f;">指定したファイルを開く</span>

book = excel.Workbooks.Open(fso.GetAbsolutePathName(FILE_PATH))

<div id="outline-container-sec-2-1-3" class="outline-4">
  <h4 id="sec-2-1-3">
    WorkSheetオブジェクト
  </h4>

  <div id="text-2-1-3" class="outline-text-4">
    <p>
      シートの取得方法は以下。コレクションに従った記法もできるところが嬉しい。
    </p>

    <div class="org-src-container">
      <pre class="src src-ruby"><span style="color: #8f8f8f;"># </span><span style="color: #8f8f8f;">一番左のシートを取得</span>

sheet = book.Worksheets(1)

# シート名が “Sheet1” のシートを取得 sheet = book.Worksheets(“Sheet1”)

# bookに属するそれぞれのSheetについて操作 book.Worksheets.each {|sheet| puts sheet.Name }

    <ul>
      <li>
        <a href="http://d.hatena.ne.jp/maluboh/20070708#p1">2007-07-08 &#8211; まるぼ~の日記</a>
      </li>
    </ul>
  </div>
</div>

<div id="outline-container-sec-2-1-4" class="outline-4">
  <h4 id="sec-2-1-4">
    Rangeオブジェクト
  </h4>

  <div id="text-2-1-4" class="outline-text-4">
    <p>
      セルにアクセスする方法は以下。
    </p>

    <div class="org-src-container">
      <pre class="src src-ruby"><span style="color: #8f8f8f;"># </span><span style="color: #8f8f8f;">D5にアクセス</span>

cell = sheet.Cells.Item(4, 5) cell = sheet.Cells.Item(“5”, “D”) cell = sheet.Range(“D5”)

    <p>
      eachを利用してうまく処理するのがRubyをつかういいところ。
    </p>

    <div class="org-src-container">
      <pre class="src src-ruby"><span style="color: #8f8f8f;"># </span><span style="color: #8f8f8f;">列ごとに処理</span>

sheet.UsedRange.Rows.each do |row| # セルごとに処理 row.Columns.each do |cell| end end

# A1 ~ A5 を取得する方法 cells = sheet.Range(“A1:A5”) cells.each do |cell| end

指定したセルの読み書き

<div id="text-2-2" class="outline-text-3">
  <p>
    Valueメソッドで値を書き換える
  </p>

  <div class="org-src-container">
    <pre class="src src-ruby"><span style="color: #8f8f8f;"># </span><span style="color: #8f8f8f;">値の読み込み</span>

puts cell.Value

# 値の書き込み cell.Value = “HogeHoge”

ファイルを保存する

<div id="text-2-3" class="outline-text-3">
  <p>
    saveメソッドで上書き保存ができる。
  </p>

  <div class="org-src-container">
    <pre class="src src-ruby">book.save

  <p>
    Excel操作中に異常終了してしまうと、プロセスが残ってしまう。 Rubyの例外処理の仕組みをつかうのがTips
  </p>

  <div class="org-src-container">
    <pre class="src src-ruby">  <span style="color: #8f8f8f;"># </span><span style="color: #8f8f8f;">始め処理</span>

begin # 行いたい処理 sheet = book.Worksheets(1) sheet.Cells.Item(2, “C”).Value = “HogeHoge” ensure # 終わり処理 book.Close excel.Quit end

結果

Links