バッチのテストの難しさ

さてかなり久しぶりの投稿です。


自分はかなり詰めが甘いほうで良く下らないバグをだします。ですので最近はテストコードの信者になりつつあります。
おそらく、RailsというかRubyがテストが良く書かれる文化だとは感じていますが、バッチが一番の曲者。
View側も最近はCapybaraをはじめとして受け入れテストも可能になり、またJavaScriptのテストツールも整いつつあります。
これにより以前ではかなりテストし辛い部分までテストコードを書くことが可能になっています。またJenkinsにより自動テストの環境が整い、さらにはVagrantなどでDevOpsも可能になり、私がエンジニアになった約10年ほど前とは根本的に異なる時代になって来ました。


ところが、個人的に難しいと考えているのがバッチです。
このバッチのテストが非常に難しい。自動テストを正しく行おうとすれば、現実の全データでテストを行うのが理屈上正しいのですが、バッチの実行を行うと、数日から1週間は必要という開発としてはまずありえない時間が必要になります。
Factorygirlを使ってダミーデータを用意すれば良い? それはそうなのですが、ダミーデータと言えども正常パターン、異常パターンを作成するのはまず無理。用意出来るならばすでに用意してテストもしています。


また、バッチは長年の経験を集めた実装で、また実装がテストしやすいようにはなっていない。必要な環境変数が多々必要だったり、特定の順番で複数のバッチを動作させることが前提だったり。また、リファクタリングも難しくテストコードも非常に書きづらい。
言語に限らずバッチはどこの環境でもこのような難しさを秘めている場合がほとんどな気がします。
ここ最近始めた方法として、バッチの中にtestというメソッドを用意して、最低限の動作を行う処理を書いておきテストを行う、という非常にいい加減な事をしてお茶を濁しています。


良い方法がないかこれからも探していきますが、私程度では解決方法は見つからず...。
どうしたものでしょうかね。

新規サービス公開

最終更新から1年ほど。
ここ最近色々ありまして更新できていませんでしたが、またちょっとづつ更新していこうかと思います。


最近の出来事。
色々あって、転職をしました。
今回もWeb系の会社。前職と違うのは今回のほうがユーザの生活に役に立ている点だと思います。
前職は会社としては利益がありましたが、目の前の稼ぎに対してしか見れずユーザを満足させていたかというとかなり疑問が残りました。
ここもそれなりに忙しいですが、堅実ですし良い雰囲気の会社だと思います。
さて、プライベートで開発する時間が取れるかは不安ですが、会社にだけ頼るのもちょっと問題かと思いますし頑張って行きたいです。

新サービス "2chまとめストリーム"公開!

もうすぐ1ヶ月ほど立ちますが、Railsの練習で前職の中の良い方と2人で作成しました。
http://www.2chstream.com/


よくある2ch記事のまとめサイトのまとめです。
勉強するにあたって、まずは簡単なサービスが良いと判断しました。
このサイトのようなタイプの良い所は、データを集めてそれを公開するだけです。
ユーザ管理や大量のデータを扱う必要は無く、デザインもシンプルに出来ます。

LinuxCの更新

LinuxCの更新。
忙しく手付かずになっていたLinuxCをまた少しづつですが、記事を増やしています。
その効果があったのか多少ではありますがPVが増えているようです。有難い話ですね。
IPを見るとユーザは大学や企業が多いようで、平日のアクセスが多く土日になるとガクッとPVが下がるようです。

今後

LinuxCはまだまだ書く内容はあるので少しづつ更新はしていきます。
また、個人で何か新しい開発をしていきたいですね。

HTML5メモ

最近気になるのがHTML5
そこで色々情報をメモしてみます。
JavaScriptHTML5と必須の知識ですがそれは次回ということで。

入門 HTML5

入門 HTML5

最近中古で入手した本です。
HTML5までのHTMLの流れから、文章の構造や意味に焦点を置いた点、videoやcanvasをはじめとした目新しい機能の紹介等、広く浅く紹介といった内容です。

リンク

入門用
http://html5.imedia-web.net/
http://w3g.jp/blog/studies/html5report

色々情報がまとまっています。
http://hyper-text.org/archives/2009/11/html5_resources.shtml

ブラウザの対応状況など最新の情報が公開されています。
http://html5please.us/
http://caniuse.com/
http://mobilehtml5.org/

SlideShare

SlideShareHTML5で検索して目についたのをメモ

HTML5について基礎から色々情報がまとまっています
http://www.slideshare.net/shumpei/what-is-html5-at-css-nite-osaka

こっちも同じように基礎の説明です。
http://www.slideshare.net/myakura/html5-2480964

これも基礎系
http://www.slideshare.net/futomihatano/html5-9066829

Web Intentsについて。Webのパイプのようなイメージです。
http://www.slideshare.net/shumpei/web-intents

HTML5について最新の仕様についてまとまっています。
http://www.slideshare.net/shumpei/html5api-10703643

nanocを使って静的サイトを作ろう2

前回の続きになります。


今回は新しいページの作成に挑戦します。

ディレクトリとファイルの解説

まずは前回と少し被りますが、ディレクトリの構成です。

$ ls -F
Rakefile  Rules  config.yaml  content/  layouts/  lib/  output/  tmp/
$ ls -F layouts/
default.html
$ ls -F content/
index.html  stylesheet.css

まず、layouts/default.htmlが全体で使われるテンプレートになります。
次に、content/index.htmlがトップページです。
処理としては、layouts/default.htmlにcontent/index.htmlが埋め込まれます。結果はoutput/に作成されます。


layouts/default.htmlの中身を見てみます。

$ cat layouts/default.html 
<!DOCTYPE HTML>
<html lang="en">
  <head>
    <meta charset="utf-8">
    <title>A Brand New nanoc Site - <%= @item[:title] %></title>
    <link rel="stylesheet" type="text/css" href="/style.css" media="screen">
    <meta name="generator" content="nanoc 3.2.3">
  </head>
  <body>
    <div id="main">
      <%= yield %>
    </div>
    <div id="sidebar">
      <h2>Documentation</h2>
      <ul>
        <li><a href="http://nanoc.stoneship.org/docs/">Documentation</a></li>
        <li><a href="http://nanoc.stoneship.org/docs/3-getting-started/">Getting Started</a></li>
      </ul>
      <h2>Community</h2>
      <ul>
        <li><a href="http://groups.google.com/group/nanoc/">Discussion Group</a></li>
        <li><a href="irc://chat.freenode.net/#nanoc">IRC Channel</a></li>
        <li><a href="http://projects.stoneship.org/trac/nanoc/">Wiki</a></li>
      </ul>
    </div>
  </body>
</html>

"<%= yield %>" という部分があります。ここにcontent/index.htmlが埋め込まれます。
この記法はERBというRubyのデフォルトのライブラリとして実装されていて、任意のテキストファイルにRubyスクリプトを埋め込む書式です。

新規ページの作成

簡単な動作を理解したところで実際に新規ページを作成します。

手っ取り早く行うためにindex.htmlをコピーして使います

$ cp content/index.html content/test.html


ちなみにページを1から作成したい場合は"create_item"オプションがあります。

$ nanoc create_item test
      create  content/test.html
An item has been created at /test/.


これが修正した内容です。

$ cat content/test.html 
---
title: Test <!-- 修正部分 -->
---

<h1>Test Page</h1> <!-- 修正部分 -->

<p>You've just created a new nanoc site. The page you are looking at right now is the home page for your site. To get started, consider replacing this default homepage with your own customized homepage. Some pointers on how to do so:</p>

<ul>
  <li><p><strong>Change this page's content</strong> by editing the "index.html" file in the "content" directory. This is the actual page content, and therefore doesn't include the header, sidebar or style information (those are part of the layout).</p></li>
  <li><p><strong>Change the layout</strong>, which is the "default.html" file in the "layouts" directory, and create something unique (and hopefully less bland).</p></li>
</ul>

<p>If you need any help with customizing your nanoc web site, be sure to check out the documentation (see sidebar), and be sure to subscribe to the discussion group (also see sidebar). Enjoy!</p>


修正部分をコメントで示しています。"Home"を"Test"に、"A Brand New nanoc Site"を"Test Page"に変更しました。


この修正を表示するために"compile"オプションを使用してhtmlを作成します。

$ nanoc compile
Loading site data...
Compiling site...
   identical  [0.02s]  output/index.html
   identical  [0.00s]  output/style.css
      create  [0.00s]  output/test/index.html

Site compiled in 0.10s.

output/test/index.htmlが作成されているのが分かります。


新しいファイルが作成されたので表示をしてみます。
この状態でブラウザから"http://localhost:3000/test/"にアクセスしてください。修正した内容が表示されれば成功です。

$ nanoc view
[2012-01-24 23:16:22] INFO  WEBrick 1.3.1
[2012-01-24 23:16:22] INFO  ruby 1.9.3 (2011-10-30) [x86_64-linux]
[2012-01-24 23:16:22] INFO  WEBrick::HTTPServer#start: pid=25689 port=3000

HTML上の階層

content/test.htmlを作成しましたが、これがHTML上の位置でどのようになるかを説明します。
これを理解していないと、サイト内リンクが作成出来ない状態のままになります。

単体ファイル

"content/hoge.html"の場合、"output/hoge/index.html"として作成されます。
このようになっている理由を想像すると、2つ理由があります。
1つ目の理由は、"content/hoge.html"にアクセスするために、"http://localhost:3000/content/hoge/"だけでアクセスできるようにという配慮だと思われます。
2つ目の理由は、複数ファイルへの対処です。これは次で説明します。

複数ファイル

"http://localhost:3000/hoge/*.html"という形で、サブディレクトリを作り複数のファイルをまとめて管理する場合の方法です。
この場合、content/hoge/というディレクトリを作成しその下にファイルを作っていく流れになります。
当初、"content/hoge.html"を作成していたが、ページが増えてきて1つのページを複数に分けたいという欲求が出てきた場合、"content/hoge/"を作成し、次に"content/hoge.html"を"content/hoge/index.html"にするだけで対応ができます。


最初からこのようにサブディレクトリを作成したい場合は"create_item"オプションで一度に作成できるようになっています。

$ nanoc create_item hoge/index
      create  content/hoge/index.html
An item has been created at /hoge/index/.

あとはhoge/index.htmlを修正し、新しいファイルが欲しければ"create_item"オプションを使えば良いのです。

URLはどうなるか?

"content/test.html"の場合、"http://localhost:3000/test/index.html"というリンクになります。


これを確かめるために"content/index.html"にこのように"test/"へのリンクを作成してみます。

$ cat content/index.html 
---
title: Home
---

<h1>A Brand New nanoc Site</h1>

<a href="test/">test page<a> <!-- 追加 -->

<p>You've just created a new nanoc site. The page you are looking at right now is the home page for your site. To get started, consider replacing this default homepage with your own customized homepage. Some pointers on how to do so:</p>

<ul>
  <li><p><strong>Change this page's content</strong> by editing the "index.html" file in the "content" directory. This is the actual page content, and therefore doesn't include the header, sidebar or style information (those are part of the layout).</p></li>
  <li><p><strong>Change the layout</strong>, which is the "default.html" file in the "layouts" directory, and create something unique (and hopefully less bland).</p></li>
</ul>

<p>If you need any help with customizing your nanoc web site, be sure to check out the documentation (see sidebar), and be sure to subscribe to the discussion group (also see sidebar). Enjoy!</p>


compileを行うとリンクが作成されてリンクをクリックすると正しく移動する事が分かります。



いかがだったでしょうか? nanocを使うと空ページのテンプレートの作成やディレクトリ構成を深く考える必要が無く、簡単にHTMLを作成できる事ができました。
次回は、コンパイル時のルール修正について解説します。

nanocを使って静的サイトを作ろう1

nanocrubyで作られた静的HTMLのためのCMSです。自分でカスタマイズも可能で非常に便利なツールです。
個人で運営するwikiシステムのように表示する内容はあまり変化しないのに、わざわざwikiを動かすために無駄にCPUやメモリを使うというのは無駄です。
これだけで安いレンタルサーバを借りれないのはお金の面でも無駄です。

でもブログなどのようにユーザからコメントが欲しい、という要望もあるかもしれません。しかし現在のはてなブログを見てください。コメントを書き込むようにできているのに、いまや「はてブ’でコメントをする方法が普通になってきています。またtwitterを使う場合もあるでしょう。これはコメントのような情報を外部ツールを利用する流れと言えます。コメントを自分で一ヶ所で管理できるのが良いのかもしれません。
それならばいっそのこと、HTMLやCSSを多少なりとも扱えるのであれば、静的サイトで公開したほうがよっぽど良いでしょう。

http://jhistory.info/http://linuxc.info/もnanocを使って作成しています。
まだ私はnanocを使いこなせていませんが、本当に便利なツールで助かっています。しかし情報がまだ少ないので私が分かる範囲で情報を公開しようと思います。
今回は、nanocのインストールからHTMLの表示までを書いていきます。

インストール

インストールはgemでインストールできます。

$ gem install nanoc
$ gem install adsf

さてこれで準備が出来ました。ちなみにadsfはnanocをローカルサーバで動かして表示するときに必要になります。インストールしておいた方が無難です。

サイトを作る

まずはサイトの雛形を作ります。site_nameにはサイト名を入れてください。

$ nanoc create_site site_name
      create  config.yaml
      create  Rakefile
      create  Rules
      create  content/index.html
      create  content/stylesheet.css
      create  layouts/default.html
Created a blank nanoc site at 'site_name'. Enjoy!

この様な構成になっています。

$ ls site_name
Rakefile  Rules  config.yaml  content  layouts  lib  output

簡単に説明をすると、layouts/はサイトの共通部分です。content以下に異なる部分を書いてきます。
そして最終的にoutput/以下に公開するサイトのデータが作成されます。
それ以外はサイトを作る際のルール等を記述する部分です。

では早速サイトを作成しましょう。

$ nanoc compile 
Loading site data...
Compiling site...
      create  [0.03s]  output/index.html
      create  [0.00s]  output/style.css

Site compiled in 0.08s.

これでoutput/にファイルが出来ているはずです。これが最終的に表示するデータとなります。
Webサーバにアップロードするのはこのoutput以下のファイルになります。

そして、ローカルサーバの立ち上げを行います。

$ nanoc view
[2012-01-16 22:43:52] INFO  WEBrick 1.3.1
[2012-01-16 22:43:52] INFO  ruby 1.9.3 (2011-10-30) [x86_64-linux]
[2012-01-16 22:43:52] INFO  WEBrick::HTTPServer#start: pid=13902 port=3000


このような表示がされれば大丈夫です。
f:id:khondalit:20120116225003j:image


これでnanocを使ったWebサイト構築
次回はlayaout、contentを編集して表示を変更していく方法になります。

Webサイトを公開するために行った事

将来の自分やこれからWebサイトを公開したいと考えている人のために、忘れないうちに今回行った作業を書いておきます。
今回公開したサイトは静的サイトですので、動的なサイトは考慮に入れていませんが基本は同じはずです。

テーマを決める

昨年公開されたアフィリエイトで月万単位稼ぎたい奴に向けての秘伝テクニックを公開に「とにかくマニアックであれ!」というのは正しいのではないでしょうか。
この記事はアフィリエイトでお金を稼ぐという内容ですが、儲け度外視の趣味のサイトでも同じでしょう。
きちんとテーマを決めましょう。

Webサイト作成

テーマが決まったらまず、作る内容を大きく2つに分けて考えました。それは書く内容とデザインです。内容についてはテーマが決まっているのでサイトの構成あたりに悩みますが、それより大変なのがデザインです。

自分はプログラマなため、デザインは非常に苦手です。アルゴリズムを考えるのは得意分野ですが、デザインなど本質ではないため蔑ろにしがちです。でもそれは間違いなのです、いや本質的にはそれが正しいのですが人は見かけにすごくこだわります。理由は自分には理解できません。でも同じ内容を書いていてもデザインを重要視するのです。

しかし既に書いた通りデザインは苦手です。HTML、CSSは理解できます、書けます。でも効果的な使い方が分からないのです。ここの文字は何色が良い?、どのフォントを使えば良い? 分かりません。

でも大丈夫です。Webデザインのテンプレートをフリーで公開しているサイトがたくさんあります。これらを利用しましょう。自分ですべて作りたい? 大事なことですが下らないプライドは捨てましょう。大切なのはサイトを作り公開することです。デザインを勉強したいのであれば、後からゆっくり勉強することです。

Webサイト名とドメイン取得

出来ることならば、サイト名とドメイン名は一致させた方がよいでしょう。これらが決まればドメインを取得します。また、安いですがドメイン取得にはお金が掛かります。

今回はお名前.comを利用しました。他のサービスは知りませんがこのサービスでは定期的にセールスをしていますので利用した方がお得です。1年間で数百円から数千円程度です。
特に学生さんなどのお金がないかたは".com"が良いなどのこだわりは捨てて安いのを借りましょう。jhistory.infoは99円で取得できました。
また、whoisの代行も行ってくれます。これはドメインは誰が所有しているかが分かるのですが、ここに自分の名前を公開支度ない場合、情報の肩代わりをしてくれます。

サーバを借りる

最後にサーバを用意する必要があります。もちろん自宅のPCを24時間起動しておいてサーバを自分で公開することも出来ますが、よほどの技術がないと止めた方がよいです。電気代もバカになりません。

今回はさくらのレンタルサーバのスタンダードタイプを利用しました。
初期費用は掛かりますがこれで月500円は非常にお得です。Rubyを初めとした有名どころのプログラム言語も使えるそうです。
また、容量も大きいのでデータの置き場所にも使えそうです。私は公開しているサイトの管理をするためにgitを利用していますが、ここにgitのリポジトリを置いています。

メールやtwitter等のIDを取得する

追加で最後に、これは必須ではありませんが可能であれば利用するサービスでのIDは取得しておいた方がお得です。
自分の場合メールはgmailを利用しています。
容量が多いのもうれしいのですが、有名な機能のメールアドレスを増やせるのがうれしい機能です。
たとえば、khondalitというIDで取得した場合、gmailのアドレスはkhondalit@gmail.comとなります。あとは簡単でkhondalit+hoge@gmail.comという形で"+文字列"をIDの後につけてもメールを受信できることです。
公開するサイト毎に連絡先として"+サイト名"でメールを公開すると非常に便利です。あとはgmailのフィルタ機能を利用すればどのサイトからメールが送られてきたかがすぐに分かります。

細かな設定は書いていませんが、ひとまずここまで行えばあとはサイトを公開するだけです。
次回は静的なサイトを作るために利用しているツールについてでも書きたいと思います。

ブログ開始

さて、ブログの開始です。

まずは自己紹介から。前職は泥臭い現場で、現在はWeb業界に転職したおっさんです。

このブログの目的ですが、Web開発を一人で勉強していくこと。仕事では色々経験させてもらっているのですが、それでも勉強不足は否めません。そこで、いままでの名義とは違う名義で個人開発をスタートしようと思いたち昨年からコツコツサイトを作り始めました。とはいってもしょぼい静的サイトです。Webの発展してきた流れを自分自身で一から体験していく形になるかと思います。

 

** http://jhistory.info/

日本史の解説サイト。元々日本史好きなので作り始めました。

目的は自分でデザインを何とかして、ドメインをとったり普段触らないWebサイトを公開するまでの流れを経験するのが目標でした。当然現在は一応公開できているので、目的は最低限達成したといえるでしょう。とはいえ内容が0なので更新はしていくつもりです。

 

** http://linuxc.info/

前職で経験した泥臭い開発の一つにLinux + C言語、というのがあります。もちろんそれ以外も色々経験しましたけど。

その中で感じたのはC言語入門サイトはありますが、初心者向けのLinuxを使った開発入門サイトはほぼないに等しいということです。これは実際おかしな話です。Rubyが盛り上がってきたころにはRuby入門サイトが出てきましたし、Lispのようなマニアックな言語の入門サイトもあります。でもLinuxC言語というのはほとんど見かけません。これは参入する価値はあるだろうと考えたわけです。


開発の目的はjhistoryとほとんど同じですが追加目標として、アフィリエイトの利用がありあります。儲けはべつにいいのですが、アフィリエイトは今や当たり前にあるものですが、その流れを分かっていない。たとえば、AmazonやGoogle等にアフィリエイトの申し込みをして、公開して、お金を受け取るその流れを全然知らないというのが一つの理由です。やはり体験するのは大事です。

もう一つの理由はアフィリエイトの本の情報です。例えば、表紙の画像があるだけでもプログラミング入門サイトとしては非常にありがたいです。本はプログラミングのためには必須の道具ですが、どの情報がどの本にあるかを初心者は知らないのです。つまり、プログラミング入門サイトとアフィリエイトは情報の入手という意味では非常に相性が良いのです。

 

当分の間はこの2サイトの更新と仕事に追われる日々になりそうです。