<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
    <title>Cybozu Developer Network</title>
    <link rel="alternate" type="text/html" href="http://cydn.cybozu.co.jp/" />
    <link rel="self" type="application/atom+xml" href="http://cydn.cybozu.co.jp/atom.xml" />
   <id>tag:cydn.cybozu.co.jp,2008://1</id>
    <link rel="service.post" type="application/atom+xml" href="http://cydn.cybozu.co.jp/mt/mt-atom.cgi/weblog/blog_id=1" title="Cybozu Developer Network" />
    <updated>2008-10-29T09:42:10Z</updated>
    
    <generator uri="http://www.sixapart.com/movabletype/">Movable Type</generator>
 
<entry>
    <title>地方でプログラマは育つのか</title>
    <link rel="alternate" type="text/html" href="http://cydn.cybozu.co.jp/2008/10/programmers_in_matsuyama.html" />
    <link rel="service.edit" type="application/atom+xml" href="http://cydn.cybozu.co.jp/mt/mt-atom.cgi/weblog/blog_id=1/entry_id=491" title="地方でプログラマは育つのか" />
    <id>tag:cydn.cybozu.co.jp,2008://1.491</id>
    
    <published>2008-10-29T09:08:29Z</published>
    <updated>2008-10-29T09:42:10Z</updated>
    
    <summary> こんにちは。サイボウズ松山開発部の門屋です。 来春発売予定のデヂエ 8 の開発...</summary>
    <author>
        <name></name>
        
    </author>
        <category term="" />
    <content type="html" xml:lang="ja" xml:base="http://cydn.cybozu.co.jp/">
        <![CDATA[<p class="entry-cut">
<img alt="松山オフィス" src="http://cydn.cybozu.co.jp/images/matsuyamaoffice.jpg" width="309" height="240" />
</p>

<p>
こんにちは。サイボウズ松山開発部の門屋です。<br/>
来春発売予定の<a href="http://kantan.cybozu.co.jp/topics/office8/">デヂエ 8</a> の開発責任者を務めています。<br/>
サイボウズでは、2008年3月に愛媛県松山市に松山オフィスを開設し、同8月に松山で製品開発を行うセクションとして、松山開発部が立ち上がりました。<br/>
現在はデヂエ 8 のデバッグに追われるかたわら、松山開発部をこれから<b>サイボーグ009</b>や<b>麦わら海賊団</b>のように卓越した組織にするためにはどうすればよいか、試行錯誤しているところです。
</p>
<h4 class="entry-topic">カラ求人？</h4>
<p>
先日、たまたま見かけた2ちゃんねるの書き込みで、サイボウズは知名度を上げるために求人しているように見せかけて、実は松山で求人などしていないのではないか、というのがありました。
</p>
<p><b><h2>いやいや、めちゃめちゃ求人してますよ！！</h2></b></p>
<p>
うそだと思うなら、<a href="http://cybozu.co.jp/company/job/">エントリー</a>してみてください。海賊王になるには、航海士やコックや医者や船大工が必要だと麦わらの人が言ってました。自分こそはロロノア・ゾロやトニートニー・チョッパーにふさわしいという方はぜひ。<br/>
</p>
<p>
松山に移ってから数ヶ月経ち、その間実際に何人か面接もさせていただいているのですが、ひとつ痛感することがあります。<br/>
それは、<b>「地方ではプログラマの地位が圧倒的に低い」</b>ということです。<br/>
ある方は、プログラミングというのはコーダーと呼ばれる、派遣社員のする仕事だとおっしゃっていました。<br/>
情報処理やなんちゃらの資格のある正社員は設計の仕事ができてお給料も多くもらえるため、そちらの方が人気が高いそうです。<br/>
わたしは、それを聞いて悲しくなると同時に、まともなプログラマが地方に住みたがらないのも、無理はないなと思いました。<br/>
剣豪上泉秀綱なら、きっとこう言うでしょう。<b>「我々が命と見立てたコードは、そんな小さなものかね？」</b><br/>
事実、わたし自身もプログラマが地方に住む難しさを、身をもって経験しています。<br/>
</p>
<h4 class="entry-topic">プログラマが地方に住むということ</h4>
<p>
わたしは大学を卒業してから、東京にある小さなSIerに勤めていました。<br/>
25歳のときに子どもができたのをきっかけに妻の体調が悪くなり、しばらく妻の両親のいる松山で静養していたのですが、<br/>
回復の見込みが立たないということでわたしも一緒に戻ることを決意しました（松山はわたしの地元でもあります）。<br/>
</p>
<p>
そのとき思ったのは、「あーこれでもう仕事で何かを成し遂げることもなくなった。あとはみかん栽培でもして余生をゆっくり過ごそう」<br/>
ということでした。本当は地元で就職するつもりだったのですが、当時勤めていた会社の社長のご好意で、松山に小さな事務所を借りてそこで東京から持ち帰った仕事をすることになりました。<br/>
6年以上もそんな感じで仕事を続けていたのですが、地元で受注した案件はひとつもありません。まあ、これはわたしが営業をしなかったせいもあるのでしょうが、まわりから聞こえてくる話だと、地元の大手メーカー系SIerでも状況は同じようなもので、仕事のほとんどは東京から発注されるため、技術者は東京と地方とを行ったり来たりして、ひどいときには東京に何年も常駐しないといけないのだそうです。<br/>
</p>
<p>
これでは最初から東京に住むのと何の変わりもありません。実際この業界には、地方に帰ったものの、仕事がないからやっぱり東京に戻ってきたという人も多くいます。<br/>
</p>
<p>
わたしは頻繁に東京と松山とを往復する生活だったものの、それほど会社に縛られることはなかったため、空いた時間にイーサネットのプロトコルアナライザを作ってフリーウェアとして公開したり、たまたま縁のあった出版社が発行する雑誌に記事を書かせていただいたりと、地方在住のプログラマとしてはそれなりに有意義な仕事をさせていただきました。でもこれは運が良かったのだと思います。<br/>
結局、サイボウズ松山オフィスの立ち上げに加わるかたちで転職することになったのですが、5年前のわたしから見たら想像もつかないでしょう。<br/>
地道にやりたいことをやってたら、なんとか道が繋がってたという感じです。
最初から地元企業に身を寄せていたら、こうはなっていなかったと感じます。<br/>
</p>
<h4 class="entry-topic">地方にプログラマはいないのか</h4>
<p>
一方で、地方に優秀な学生や技術者がいないかというと、そんなことはありません。<br/>
先日、弓削商船高等専門学校を訪問してきました。瀬戸内海に浮かぶ弓削島という小さな島にある学校です。<br/>
</p>
<p>
その学校のマイコン部（！）では毎年高専のプログラミングコンテストに出場していて、優秀な成績をおさめています。<br/>
2007年の大会で最優秀賞を獲得したメンバーのひとりが、今サイボウズ松山開発部で活躍してｗいます。<br/>
長尾教官の熱心なご指導のもと、メイド喫茶もない離島で黙々とプログラミングに勤しむ学生たちの姿を見て、わたしはちょっと感動してしまいました。<br/>
要は、需要と供給のバランスが成り立っていないだけなのです。<br/>
優秀な学生や技術者が東京に出て行かなくても正当に評価される場を提供できれば、みんなが幸せになれると確信しました。<br/>
</p>
<p>
われわれは、地方で開発することに楽園のような夢を描いているわけではありません。<br/>
自分たちの手で松山を発展させてやるなどと大それたことも考えていません。それは行政のやるべきことだからです。<br/>
地方都市から世界へ羽ばたくぜイェーイとか簡単には口に出せません。本気でそうしたい人は、まずシリコンバレーに行くべきです。<br/>
地方にいるディスアドバンテージをきちんと認識したうえで、それでもサイボウズで、松山で開発がしたい、という仲間と一緒に、何かを成し遂げたいと思います。<br/>
そうしないと、みかん栽培を諦めた甲斐がありません。
</p>
<h4 class="entry-topic">手はじめに</h4>
<p>
サイボウズでは、2008年11月22日にエンジニアの交流の場として、<a href="http://cybozu.co.jp/company/job/2010conference.html">「ITバレー・カンファレンス＠まつやま」</a>を開催することにしました。<br/>
講演者のそうそうたる顔ぶれの中、僭越ながらわたしもお話をさせていただくことになっています。<br/>
サイボウズでどのように開発を行っているか、ご興味のある方はぜひ<a href="https://info.cybozu.co.jp/corp/job/2010/conference/">お申し込み</a>をお願いいたします。<br/>
</p>]]>
        
    </content>
</entry>
<entry>
    <title>システム管理の心がけ</title>
    <link rel="alternate" type="text/html" href="http://cydn.cybozu.co.jp/2008/10/sys_ad_mind_set.html" />
    <link rel="service.edit" type="application/atom+xml" href="http://cydn.cybozu.co.jp/mt/mt-atom.cgi/weblog/blog_id=1/entry_id=488" title="システム管理の心がけ" />
    <id>tag:cydn.cybozu.co.jp,2008://1.488</id>
    
    <published>2008-10-23T09:42:29Z</published>
    <updated>2008-10-23T09:58:30Z</updated>
    
    <summary> はじめまして。 システム開発部インフラチームの川上です。 2008 年 1 月...</summary>
    <author>
        <name></name>
        
    </author>
        <category term="" />
    <content type="html" xml:lang="ja" xml:base="http://cydn.cybozu.co.jp/">
        <![CDATA[<p>
はじめまして。
システム開発部インフラチームの川上です。
2008 年 1 月に中途入社し、
システム管理者として働いています。
</p>

<p>
この記事では、
私がシステム管理の業務を行なう上で
実践していることや心がけていることについて
書いてみます。
</p>

<h4 class="entry-topic">メールシステムの管理</h4>

<p>
現在私が担当している主な業務の 1 つが、
メールシステムの管理です。
このシステムは 2008 年 4 月に前任者から引き継いだもので、
その時点で既に十分に安定稼働していました。
よって、
安定性を維持しつつ
環境の変化に応じて変更を加えるのが管理の基本となります。
</p>

<p>
メールシステムの目的は、
「配送すべきメールを配送すること」
です。
一方、
配送すべきではないメール (SPAM メールやウイルスメール) が
社内に入ってこないようにするための対策も欠かせません。
ただし、
この対策はやり過ぎると
一部の正常なメールが配送されなくなる事故に繋がりかねないので、
さじ加減が重要です。
</p>

<p>
通常、
メールシステムは
役割の異なる複数台のメールサーバで構成されています。
これらが全体として正しく協調動作する状態を維持するためには、
システム状態の把握が欠かせません。
人で例えるならば、
日々の健康管理と同じと言ってよいでしょう。
つまり、
健康状態を毎日チェックし、
病気や怪我の予防に気を配り、
早期発見と早期治療によって被害を最小限に食い止めるといった感じです。
システム状態の把握に役立つのが、
システム内部からの報告機能と、
システム外部からの監視機能です。
毎日のことなので、
これらを上手に利用して管理コストを小さくするのが肝です。
</p>

<h4 class="entry-topic">ツールへのこだわり</h4>

<p>

<p>「弘法筆を選ぶ」と「弘法筆を選ばず」という<br />
相反する 2 つのことわざがあります。<br />
システム管理のツールには、<br />
ソフトウェア (コマンドやテキストエディタ) から<br />
ハードウェア (キーボードやマウス) まで様々ありますが、<br />
吟味して習熟したものを使うのが「筆を選ぶ」で、<br />
その場にあるものを使うのが「筆を選ばず」だと思います。<br />
基本的には前者を重視すればおおむねカバーできますが、<br />
トラブル対応時には選択肢が存在しない場合もよくあるため、<br />
後者も求められます。<br />
</p></p>

<p>
また、
既存のツールを利用するだけでなく、
必要に応じてツールを自作しています。
Linux 環境であれば、
シェルスクリプトと Ruby を使っています。
一般的に、
スクリプト言語は短い記述で定型業務を効率化できる点がありがたいです。
</p>

<h4 class="entry-topic">心がけ</h4>

<p>
システム管理の業務を行なう上で、
心がけていることが幾つかあります。
</p>

<ul>
  <li>傍目八目</li>

<p>      <p><br />
      システムに変更を加えたり、<br />
      トラブルに対応する際は、<br />
      1 人だけで作業するのではなく同僚に隣で立ち会ってもらうべきです。<br />
      傍観者による冷静で的確な判断が期待できるので、<br />
      ミスを防止したり思考の行き詰まりから抜け出すのに<br />
      効果があります。<br />
      </p><br />
  <li>バランス</li><br />
      <p><br />
      特定の技術や構成要素にとらわれ過ぎると、<br />
      それ自体が将来のリスク要因になりがちです。<br />
      システムの設計段階からバランスを考慮しておくだけでなく、<br />
      既存のシステムを定期的に見直したり、<br />
      手持ちの技術や知識をときどき棚卸しするのが望ましいです。<br />
      </p><br />
  <li>プライベートの時間を大事に</li><br />
      <p></p>

<p>      オーバーワーク状態が恒常的になると、<br />
      心身の健康やプライベートの時間が犠牲となり、<br />
      自分自身だけでなく周囲の人々も不幸になります。<br />
      無理をしないことが一番です。<br />
      </p><br />
</ul></p>

<h4 class="entry-topic">終わりに</h4>

<p>
IT の世界は変化が激しいため
システム管理にも様々な影響がありますが、
それは表面的な部分に集中していて、
土台部分は昔からあまり変わっておらず、
おそらく今後もそれほど変わらないのではないかと思います。
基礎の重要性をしみじみと感じることが多い今日この頃です。
</p>]]>
        
    </content>
</entry>
<entry>
    <title>私がサイボウズを選んだ理由 vol.2</title>
    <link rel="alternate" type="text/html" href="http://cydn.cybozu.co.jp/2008/10/why_choose_cybozu_vol2.html" />
    <link rel="service.edit" type="application/atom+xml" href="http://cydn.cybozu.co.jp/mt/mt-atom.cgi/weblog/blog_id=1/entry_id=482" title="私がサイボウズを選んだ理由 vol.2" />
    <id>tag:cydn.cybozu.co.jp,2008://1.482</id>
    
    <published>2008-10-10T01:21:56Z</published>
    <updated>2008-10-13T23:56:55Z</updated>
    
    <summary> はじめまして、品質保証部新入社員の吉見真耶です。 CyDN編集部の一員として、...</summary>
    <author>
        <name></name>
        
    </author>
        <category term="" />
    <content type="html" xml:lang="ja" xml:base="http://cydn.cybozu.co.jp/">
        <![CDATA[<p class="entry-cut">
<a href="#" title="私がサイボウズを選んだ理由 vol.2">
<img alt="CyDN_pict2_yoshimi.jpg" src="http://cydn.cybozu.co.jp/images/CyDN_pict2_yoshimi.jpg" width="300" height="200" />
</a>
</p>

<p>
<br/>
はじめまして、品質保証部新入社員の吉見真耶です。<br/>
CyDN編集部の一員として、
今回は私がどうしてサイボウズを選んだかを書こうと思います。
</p>
<h4 class="entry-topic">サイボウズとの出会い</h4>
<p>
私がサイボウズを選んだのは就職活動の際に最も重視していた事が、
明るく楽しい会社であること、だったからです。
何事も楽しんでやりたいと思っている私は、
楽しみながら、中身も充実した仕事のある会社を探していました。
そんな中で出会ったのがサイボウズという会社でした。
<br/><br/>
就職活動中、大阪ドームの就職フォーラムでカップ麺を配っている企業があったのです。
しかも、その会社は就職フォーラムなのに企業説明を一切してませんでした。
どんな会社か気になってみてみると、
そこには「サイボウズ」という聞きなれない企業名がありました。
就職フォーラムから帰って検索してみたところ、
サイボウズという会社は愛媛出身のIT企業である事がわかりました。
私自身が、愛媛県出身だったこともあり、さっそく会社説明会の参加を申し込みました。
これが、私とサイボウズとの出会いです。
</p>
<h4 class="entry-topic">サイボウズで働く</h4>
<p>
会社説明会、面接、会社見学とサイボウズのことを知るほどに、
サイボウズという会社に興味を持ちました。
特に魅力を感じたのは、サイボウズで働く人の人柄です。
入社までに、何度かお話する機会があったのですが、
楽しそうに仕事をする先輩達、優しく接してくれる上司の方々、
それでも仕事はちゃんとやっている、といった印象を強く受けました。
そんなサイボウズのイメージは入社後でも大きく変わっておらず、充実した毎日を過ごしています。
入社してからまだ半年もたっていませんが、サイボウズで働く人は本当にステキな人が多いと感じます。
</p>
<br/>
そんなサイボウズの一員として、お客様に喜んでいただけるよう、これからもがんばっていこうと思います。
みなさん、よろしくお願いします]]>
        
    </content>
</entry>
<entry>
    <title>私がサイボウズを選んだ理由 vol.1</title>
    <link rel="alternate" type="text/html" href="http://cydn.cybozu.co.jp/2008/10/why_choose_cybozu_vol1.html" />
    <link rel="service.edit" type="application/atom+xml" href="http://cydn.cybozu.co.jp/mt/mt-atom.cgi/weblog/blog_id=1/entry_id=477" title="私がサイボウズを選んだ理由 vol.1" />
    <id>tag:cydn.cybozu.co.jp,2008://1.477</id>
    
    <published>2008-10-01T08:40:38Z</published>
    <updated>2008-10-01T09:36:57Z</updated>
    
    <summary> はじめまして。CyDN 編集部の北崎です。 2008年4月に新卒で入社し、現在...</summary>
    <author>
        <name></name>
        
    </author>
        <category term="" />
    <content type="html" xml:lang="ja" xml:base="http://cydn.cybozu.co.jp/">
        <![CDATA[<p class="entry-cut">
<img alt="私がサイボウズを選んだ理由 vol.1" src="http://cydn.cybozu.co.jp/images/why_choose_cybozu_vol1.JPG" width="220" height="170" />
</p>

<p>
はじめまして。CyDN 編集部の北崎です。
</p>

<p>
2008年4月に新卒で入社し、現在は開発部に所属しています。<br />
といっても、2ヶ月前の8月まで研修期間と業務経験が浅いので、
私がサイボウズを選んだ理由をお話したいと思います。
</p>

<h4 class="entry-topic">ものづくりの会社</h4>

<p>
ソフトウェアに関する会社と一口に言っても、いくつかの業態に分類できます。
パッケージを開発する会社、受託で開発する会社、機器に組み込むソフトを開発する会社など、
やっている仕事は会社によって様々です。
当然ながら、仕事が違えば会社が目指すものも異なることが多く、
それが社風となって現れると思います。<br />
それぞれの会社に良いところはたくさんありますが、
私は、サイボウズの良いところはコツコツと真摯に製品開発に取り組む姿勢だと思いました。
</p>

<p>
採用活動や製品群を見ると、サイボウズには随所に遊び心が散りばめられています。
しかしその裏には、少しでも多くのユーザーに使いやすい製品を届けたい、という想いが感じられます。
ソフトウェアは無形の製品ですが、メーカーであるという点ではサイボウズも「ものづくり」の会社です。
作り手がこだわりを持ちながらも、自分たちのエゴではなく、
ユーザーのことを考えた自社パッケージソフトを開発する姿勢。
これが私がサイボウズに惹かれた点です。
</p>

<h4 class="entry-topic">人を大切にする会社</h4>

<p>
サイボウズは人事制度がユニークであることも大きな魅力です。
持株会制度の奨励金や育児休暇、部活動などは、テレビや雑誌で取り上げられることもあります。
先日は部活動の合同合宿と題して、複数の部活動で一緒に一泊二日の合宿に出掛けました。<br />
他の会社には無い斬新な制度、という面で取り上げられることが多いですが、
こうした制度のひとつひとつは、より長くより多くの社員が一緒に働いていけるように、
社員ひとりひとりの意見を真剣に検討してきた結果と言えます。
どんなに素晴らしい制度を作ったとしても、現実が変化し続けていく以上、
制度と現実が乖離してしまうことは珍しくありません。<br />
サイボウズでは、社員の声が実際の制度に反映され、部署をまたいだ交流も活発に行われているのです。
これは、会社説明会や会社見学でも実感できた魅力的なことです。
現状に即した人事制度は、人を大切にする企業風土の賜物だと思います。
</p>

<p>
このような環境で働くことで、社員同心が納得するまで話し合いを重ねることができ、
それがよりよい製品につながっていくのだと思います。
</p>

<h4 class="entry-topic">働き始めてみて...</h4>

<p>
実際に働き始めて数ヶ月が経過しますが、
入社前に抱いた印象はおおよそ間違ってなかったと思います。<br />
社内では、自社製品を大切にすると同時に、より良いものにしていくために日々話し合いが重ねられています。
意見を出せばチームのメンバーは真剣に検討してくれますし、
部署に囚われないコミュニケーションも育まれています。
</p>
<p>
これからも、CyDN を通してサイボウズの雰囲気を伝えていければ幸いです。
まだまだ未熟な点が多いですが、どうぞ今後ともよろしくお願いします！
</p>]]>
        
    </content>
</entry>
<entry>
    <title>Google の 脆弱性検査ツール Ratproxy 調査報告</title>
    <link rel="alternate" type="text/html" href="http://cydn.cybozu.co.jp/2008/09/google_ratproxy.html" />
    <link rel="service.edit" type="application/atom+xml" href="http://cydn.cybozu.co.jp/mt/mt-atom.cgi/weblog/blog_id=1/entry_id=476" title="Google の 脆弱性検査ツール Ratproxy 調査報告" />
    <id>tag:cydn.cybozu.co.jp,2008://1.476</id>
    
    <published>2008-09-05T07:59:21Z</published>
    <updated>2008-09-05T08:04:14Z</updated>
    
    <summary> はじめまして。品質保証部のテストツールチームです。 テストツールチームは、これ...</summary>
    <author>
        <name>CYDN編集部</name>
        
    </author>
        <category term="" />
    <content type="html" xml:lang="ja" xml:base="http://cydn.cybozu.co.jp/">
        <![CDATA[<p>
はじめまして。品質保証部のテストツールチームです。
</p><p>
テストツールチームは、これまで製品ごとにばらつきのあったツールによる検証方法の統一を目指し、<br />
テストの自動化・性能検証・脆弱性検査を行っています。<br />
今後国内外の拠点にスムーズに技術移管できるよう、資料の準備を進めてもいます。
</p><p>
今年アルバイトで品質保証に来てくださった方は、このチームに配属されています。<br />

<p>今回ご報告するのは、そのうちの一人が中心となって調べてくれた、<br /><br />
7月初めにGoogleから公開されたWebアプリケーションの脆弱性検査ツールRatproxyの調査結果です。<br />
</p><p><br />
Ratproxyは、ブラウザから操作した際のクライアント／サーバー間の通信を分析して脆弱性の検査を行います。<br /><br />
検査結果はhtmlで出力されるためブラウザで開いて確認しますが、検出された脆弱性の説明が<br /><br />
簡潔にわかりやすく示されています。<br />
</p></p>

<h4 class="entry-topic">RatProxy</h4>
<p>
公式サイトはこちらです。<br />
<a href="http://code.google.com/p/ratproxy/" title="" target="_blank">

<p>      http://code.google.com/p/ratproxy/</a><br />
</p><p><br />
こちらからRatproxyを入手したりWikiを見ることができます。<br />
WikiにはRatproxyの機能や使用方法が紹介されています。<br /><br />
インストールと操作方法につきましては<br />
国内のサイトで既に紹介されているため、本稿では省略させていただきます。<br />
</p></p>

<h4 class="entry-topic">RatProxyで検出できる主な脆弱性</h4>
<p>
<dl class="list-dl-subhead">
  <dt><span>クロスドメイン</span></dt>
      <dd>異なるドメインとの通信を検出します。<br />

<p>      これが検出された場合、ユーザーが意図しないデータが送信される可能性があります。</dd><br />
  <dt><span>機密データを含むヘッダーの、プロキシサーバー等へのキャッシュの危険性</span></dt><br />
      <dd></dd><br />
  <dt><span>クロスサイトスクリプティング（XSS）</span></dt><br />
      <dd>これには、次のような、XSSによる攻撃を引き起こす可能性のある状態も含まれます。<br />
       <ul><br />
        <li>HTTPヘッダーで示されたファイル情報が、実際に通信されたファイルと一致していない</li></p>

<p>        <li>文字コードの指定が適切ではない</li><br />
       </ul><br />
      </dd><br />
  <dt><span>クロスサイトリクエストフォージェリ（XSRF／CSRF）</span></dt><br />
      <dd>※RatproxyではXSRFと略されますが、本稿ではCSRFとします。<br /><br />
      攻撃を防ぐためのトークンが、データのPOST時に用いられているかを検査します。</dd><br />
</dl></p>

<p>  その他の検出可能な攻撃は、RatProxyインストール先に作成されるmessages.listで確認できます。<br />
</p></p>

<h4 class="entry-topic">サイボウズ製品の検査</h4>
<p>
現在サイボウズで開発中の製品をRatproxyで検査しました。<br />
コマンド実行時の引数にはWikiで案内されている「-lextifscgjm」を使用しています。<br />
その結果、多数の脆弱性が検出されました。
</p><p>
ところでどのようなツールであっても、検査結果が対象製品の脆弱性に相当するかという判断は<br />
人が行わなくてはなりません。<br />

<p>筆者の知る限り、実際に機密データを入手したりシステムにダメージを与えることが可能であるかまでを<br /><br />
ツールに完璧に判断させることはできないようです。<br /><br />
一例として、クライアントリクエストに埋め込んだ攻撃コードがサーバーレスポンスに残っている場合に、<br /><br />
実行不可能な状態に無効化されていても脆弱性と報告されることがあります。<br />
</p><p><br />
以下にRatproxyにより検出された報告の一部と、それを人手で分析した結果をご報告します。<br />
</p><p><br />
次の脆弱性が「HIGH」で検出されました。<br />
  <dl class="list-dl-subhead"><br />
     <dt><span>Bad or no charset declared for renderable file</span></dt><br />
     <dd>文字コードの指定が適切ではないという報告です。<br /></p>

<p>     ここで懸念されている文字コードによる脆弱性とは、UTF-7エンコーディングによる<br />クロスサイトスクリプティングのようです。<br /><br />
     <br /><br />
     製品ではShift-JISが指定されていますが、Ratproxyの設定ファイルにはShift-JISが載っていないため<br />報告されたようです。<br /><br />
     Shift-JISであることの製品の脆弱性有無は別途調査が必要でしょう。</dd></p>

<p>     <dt><span>POST query with no XSRF protection</span></dt></p>

<p>     <dd>ログイン画面で検出されました。<br /><br />
     CSRF攻撃が問題となるのはユーザーが意図しないデータをPOSTすることであるため、<br /><br />
     この画面におけるCSRF攻撃のリスクは非常に低いと判断しました。</dd><br />
  </dl><br />
</p><p><br />
また、次のような脆弱性が「MIDIUM」で検出されました。<br />
  <dl class="list-dl-subhead"><br />
     <dt><span>Inline PNG image</span></dt></p>

<p>     <dd>サーバーレスポンスのHTTPヘッダーにPNG画像のContent-Dispositionが指定されていないという報告です。<br /><br />
     問題となった画像がユーザーにより添付されたものである場合はXSSの脆弱性となりえますが、<br /><br />
     製品の提供する画像であるため問題ないと判断しました。</dd></p>

<p>     <dt><span>Cross-domain POST requests</span></dt><br />
     <dd>今回検査した製品は情報提供サイトと定期的に通信を行ってるため検出されました。<br /><br />
     通信可能な内容が適切に制限されていれば、問題なしと判断してよいでしょう。</dd></p>

<p>  </dl><br />
「LOW」では、JavascriptやAjaxを使用している箇所が多数検出されました。<br /><br />
ここでの報告だけでは攻撃が可能であるかまでは判断できないため、<br /><br />
他の手段により脆弱性検査を実施する際の参考情報としました。<br />
</p></p>

<h4 class="entry-topic">他のツールとの比較</h4>
<p>
  普段サイボウズで使用しているツールで検出可能なXSS脆弱性を、Ratproxyが検出するか試しました。<br />
  XSSはサイボウズ製品にとって大問題となりうる脆弱性です。

</p><p>
  確認したXSS脆弱性は次の４タイプです。いずれも攻撃コードはURLエンコードされています。
<ol>
  <li>URLパラメーターに攻撃コードを挿入して画面を開くとXSSが実行される</li>
  <li>URLパラメーターに攻撃コードを挿入して開いた画面で項目をクリックするとXSSが実行される</li>
  <li>hiddenパラメーターに攻撃コードを挿入してPOSTするとXSSが実行される</li>
  <li>マルチパートで送信されるhiddenパラメーターに、攻撃コードを挿入してPOSTするとXSSが実行される</li>
</ol>

<p>Ratproxyが検出できたのは 3. のみであり、しかもLOWレベルでした。<br /><br />
そこで<a href="http://www.parosproxy.org/index.shtml" title="Paros公式サイト" target="_blank"><br />
Paros</a>というフリーのツールでも試したところ、 3. と 4. が高レベルの脆弱性として検出されました。<br />
</p></p>

<h4 class="entry-topic">サイボウズ品質保証部でのRatproxyの位置づけ</h4>
<p>
Ratproxyで検出される脆弱性の種類は、<br />
不特定多数がアクセスするサービスを提供されているGoogle社ならではという印象を受けました。<br />
既存のツールでは未対応の脆弱性を検出できるように、開発されたのであろうと想像されます。
</p><p>

<p>以上の特性を踏まえますと、XSS等の脆弱性は他のツールで検査し、<br /><br />
さらにRatproxyを併用することがWebアプリケーションの脆弱性検査には効果的でしょう。<br />
</p></p>]]>
        
    </content>
</entry>
<entry>
    <title>『サイボウズ ガルーン 開発ブログ』が公開されました</title>
    <link rel="alternate" type="text/html" href="http://cydn.cybozu.co.jp/2008/09/groonblog_start.html" />
    <link rel="service.edit" type="application/atom+xml" href="http://cydn.cybozu.co.jp/mt/mt-atom.cgi/weblog/blog_id=1/entry_id=474" title="『サイボウズ ガルーン 開発ブログ』が公開されました" />
    <id>tag:cydn.cybozu.co.jp,2008://1.474</id>
    
    <published>2008-09-01T08:40:14Z</published>
    <updated>2008-09-01T08:46:33Z</updated>
    
    <summary>CyDN 編集部の河内山です。 本日『サイボウズ ガルーン 開発ブログ』が公開さ...</summary>
    <author>
        <name></name>
        
    </author>
        <category term="" />
    <content type="html" xml:lang="ja" xml:base="http://cydn.cybozu.co.jp/">
        <![CDATA[<p>CyDN 編集部の河内山です。</p>
<p>本日『<a href="http://cydn.cybozu.co.jp/garoon/" target="_blank">サイボウズ ガルーン 開発ブログ</a>』が公開されました。</p>
<p>『<a href="http://g.cybozu.co.jp/garoon/" target="_blank">サイボウズ ガルーン</a>』に関わるエンジニアが開発状況をお伝えしていきますので、『<a href="http://cydn.cybozu.co.jp/office/" target="_blank">サイボウズ Office 開発ブログ</a>』と合わせてよろしくお願い致します。</p>
<p>●サイボウズ ガルーン 開発ブログ<br/>
<a href="http://cydn.cybozu.co.jp/garoon/" target="_blank">http://cydn.cybozu.co.jp/garoon/</a></p>]]>
        
    </content>
</entry>
<entry>
    <title>問題からアプローチする</title>
    <link rel="alternate" type="text/html" href="http://cydn.cybozu.co.jp/2008/07/approache_problem.html" />
    <link rel="service.edit" type="application/atom+xml" href="http://cydn.cybozu.co.jp/mt/mt-atom.cgi/weblog/blog_id=1/entry_id=465" title="問題からアプローチする" />
    <id>tag:cydn.cybozu.co.jp,2008://1.465</id>
    
    <published>2008-07-29T08:35:24Z</published>
    <updated>2008-07-29T08:38:44Z</updated>
    
    <summary> こんにちは。 UI設計部の松井です。 何から考える？ 突然ですが、ユーザインタ...</summary>
    <author>
        <name></name>
        
    </author>
        <category term="" />
    <content type="html" xml:lang="ja" xml:base="http://cydn.cybozu.co.jp/">
        <![CDATA[<p>
こんにちは。<br />
UI設計部の松井です。
</p>
<h4 class="entry-topic">何から考える？</h4>
<p>
突然ですが、ユーザインタフェース（以下UI）の改善を行うことになった場合、まず何から考えますか？「こういう機能があったらいい」「このボタンとこのボタンをここそこに配置すればいい」というようなことから考えてしまうことはないでしょうか。これは改善案から考えている状態であり、あまり望ましい状態でありません。
</p>
<p>
なぜかというと、改善案ばかりに考えがいってしまい、そもそも何が問題なのか、何をどう改善したいのかがあまり考えられていない可能性があるためです。ここの考えが甘いと、その改善案に対する論理的な説明や、複数出した改善案の中からひとつに決める際の決め手がなくなってしまいます。
</p>
<p>
ということで、今回はUIの改善を行う際に、改善案からではなく問題からアプローチしていくやり方をご紹介させていただきたいと思います。
</p>
<h4 class="entry-topic">問題からアプローチする</h4>
<p>
概要は先であらかた述べてしまいましたが、改善案からではなく、問題から考えるようにします。<br>
これをもうすこし詳しくすると
</p>
<ol>
<li>問題を明確にする</li>
<li>原因を洗い出す</li>
<li>原因に対して処置案を考える</li>
</ol>
<p>
という順で考えるようにするということです。
</p>
<h5 class="subhead1">1.問題を明確にする</h5>
<p>
問題を解決（改善）するために、まずは問題が何であるかを明確にする必要があります。そのために、自分が考える問題を、以下の順で整理します。
</p>
<ul>
<li>誰が、どんな状況で、どういった目的を達成する時に起きることか</li>
<li>その人が、その状況で、その目的を達成するためには、今のUIを使うとどのような手順になるのか</li>
<li>それを最終的にどうしたいか（ゴールはどこか）</li>
</ul>
<p>
これらを行い、現状とゴールを整理することで、改善案を検討する際や出した改善案の評価をする際の指針とすることができます。
</p>
<h5 class="subhead1">2.原因を洗い出す</h5>
<p>
ゴールにいくためには何をする必要があるのか、それをするために、今のUIの何が影響しているか、ということを洗い出します。
</p>
<h5 class="subhead1">3.原因に対して処置案を考える</h5>
<p>
洗い出した原因のひとつひとつに対して、どうすればそれを変えることができるかの処置案を考えます。全ての項目で行うのは時間や相関関係の都合で現実的ではないので、影響度の高そう（優先度の高い）なものに対してある程度行います。
</p>
<h4 class="entry-topic">問題、原因、処置案を考えてから</h4>
<p>
この段階では、<br><br>
問題が明確になり、その問題の原因がいくつか考えられており、それぞれの原因に対して処置案も出ている。<br><br>
という状態のはずなので、次に行うことは実際に機能や画面としてどういったものにするかの最終的な落としどころの調整になります。
</p>
<p>
処置案は個別の原因に対する処置案ではあるかもしれませんが、それらを踏まえてひとつの最終的な仕様に落とし込む際には若干の調整が必要になることがあります。個別の処置案を全てそのまま取り入れなくとも十分改善が期待できたり、それぞれが反発・矛盾している場合には調整が必要になります。 </p>
<p>
これらの調整の仕方はケースによって異なるのでなんともいえませんが、ゴールに一番近づける形で優先度をつけ、妥協点を見極めることが必要になります。</p>
<p>
そんなところでしょうか。
</p>
<h4 class="entry-topic">最後に</h4>
<p>
ということで、今回はUIの改善を行う際に、改善案からではなく問題からアプローチしていくやり方をご紹介させていただきましたが、いかがだったでしょうか。インタフェースを論理的に考えるにはどうしたらいいんだろう、と悩んでいる方のお力になれれば幸いです。</p>]]>
        
    </content>
</entry>
<entry>
    <title>魅力ある文章を書くためのヒント</title>
    <link rel="alternate" type="text/html" href="http://cydn.cybozu.co.jp/2008/07/writing.html" />
    <link rel="service.edit" type="application/atom+xml" href="http://cydn.cybozu.co.jp/mt/mt-atom.cgi/weblog/blog_id=1/entry_id=464" title="魅力ある文章を書くためのヒント" />
    <id>tag:cydn.cybozu.co.jp,2008://1.464</id>
    
    <published>2008-07-25T06:29:34Z</published>
    <updated>2008-07-25T06:40:41Z</updated>
    
    <summary>はじめまして。 ドキュメント部の北野と申します。 わたしが所属するドキュメント部...</summary>
    <author>
        <name>CYDN編集部</name>
        
    </author>
        <category term="" />
    <content type="html" xml:lang="ja" xml:base="http://cydn.cybozu.co.jp/">
        <![CDATA[<p>はじめまして。<br /><br />
ドキュメント部の北野と申します。<br />
</p></p>

<p>
わたしが所属するドキュメント部の仕事には、大きく分けて、次の2つがあります。<br />
<ul>
    <li>マニュアルやヘルプなど、製品を使うための情報を提供する</li>
    <li>画面に表示する用語や、メッセージなどを提供する</li>

<p>  </ul><br />
</p></p>

<p>
「言葉」や「文章」がキーになる仕事です。<br />
製品を使っていただくお客さまに向けて、<br />
論理的でわかりやすく、正確である文章を提供するのはもちろんですが、<br />
さらに、きらりと光る魅力のある文章を書いてみたいと、日ごろから思っています。
</p>

<p>
だらだらと書かれた文章は、読む魅力に欠けます。<br />

<p>読んでみようかなという気にさせるのは、ある種のセンスではないかと思うのです。<br /></p>

<p>
では、センスのあるきらりと光る魅力のある文章を書くためには、
どうしたらよいでしょう？
</p>

<p>
わたしは、それは<em class="em-b">感性を磨く</em>ことではないかと思っています。
</p>

<p>
感性を磨くために必要なこと。<br />
まずは、いろいろなものを見て自分の言葉で表現することだと思います。<br />

<p>きれいな花を見て、美しいと感じたとき、<br /><br />
絵画や彫刻などの美術品を見て、感動したとき、<br /><br />
旅先で目にした光景に、心が震えたとき<br /><br />
とにかく感じたままを、表現してみるのです。<br /><br />
</p></p>

<p>
そして感じたものを表現するときに、どんな言葉を使うのか、<br />
さらに頭を悩ますところです。<br />
感じたものを表現するのにふさわしい言葉はどれなのか、<br />

<p>人は無意識のうちに、言葉を選択しています。<br /><br />
言葉の選択肢は多ければ多いほど、表現にも幅が出ます。<br /><br />
選択肢を増やすこと、それはイコール、語彙を増やすことです。<br /><br />
とにかくいろいろな本を読んでみる。<br /><br />
毎朝欠かさず新聞を読む。<br /><br />
語彙を増やすためのヒントは、日々の生活に溢れています。<br /><br />
</p></p>

<p>
とはいうものの、こうして文章を書いていても、<br />

<p>魅力のある文章とはほど遠いものだと痛感しています。<br /><br />
つねに提供する文章の向こうには、読んでくれる相手がいることを意識して、<br /><br />
読みやすい文章、続きを読みたくなる文章、<br /><br />
そんな文章を書き続けていきたいと思っています。<br /></p>

<div class="clear"></div>
]]>
        
    </content>
</entry>
<entry>
    <title>サイボウズ社内の開発体制について</title>
    <link rel="alternate" type="text/html" href="http://cydn.cybozu.co.jp/2008/07/system_development.html" />
    <link rel="service.edit" type="application/atom+xml" href="http://cydn.cybozu.co.jp/mt/mt-atom.cgi/weblog/blog_id=1/entry_id=463" title="サイボウズ社内の開発体制について" />
    <id>tag:cydn.cybozu.co.jp,2008://1.463</id>
    
    <published>2008-07-24T08:55:00Z</published>
    <updated>2008-07-24T09:08:09Z</updated>
    
    <summary> こんにちは、開発部の仁科です。 今回はサイボウズ社内の開発体制について、今実際...</summary>
    <author>
        <name></name>
        
    </author>
        <category term="" />
    <content type="html" xml:lang="ja" xml:base="http://cydn.cybozu.co.jp/">
        <![CDATA[<p>
こんにちは、開発部の仁科です。<br/>
今回はサイボウズ社内の開発体制について、今実際に所属しているガルーンチームの例を交えながらご紹介したいと思います。<br/>
私自身、ソフトウェア会社の開発体制というと、漠然と部長が開発メンバーを取りしきっていて、その下にプログラマーがいて…というようなイメージを持っていたのですが、サイボウズはそれとはちょっと違っていて驚いた思い出があります。
</p>

<h4 class="entry-topic">組織構造から見た開発体制</h4>

<p>
まずは組織の構成からご紹介したいと思います。<br/>
私達開発メンバーは、社内の組織としては開発本部に所属していて、さらにその中でいくつかの部に分かれています。
</p>

<h5 class="subhead1">開発部</h5>
<p>
私たちプログラマーが所属しているのが、この開発部です。<br/>
開発部内ではさらにOffice開発グループ、デヂエ開発グループというように、いくつかのグループに分かれています。ガルーン開発グループも、位置づけとしてはここにあります。<br/>
各グループはその名の通り、大抵1つの製品を担当していますが、ネットサービス開発グループ、モバイル/リモートグループのように、複数の製品/サービスに関わっているグループもあります。<br/>
組織的には開発部長が私の上司になりますが、それぞれのグループはそのマネージャーが束ねています。<br/>
ガルーン開発グループでも、マネージャーが誰にどんなタスクを振るかというような判断をしたり、わかりやすい例で言えば毎朝開催される朝会を進行したりしています。
</p>

<h5 class="subhead1">プロダクト管理部</h5>
<p>
私が所属しているわけではないのですが、開発部とは特に切っても切れない関係にある部なので、少し触れさせてください。<br/>
開発部とは別の部署として、各製品のプロダクトマネージャー（PM）が所属するプロダクト管理部があります。<br/>
PMは実際に製品を開発する際に、開発計画を立案し、開発メンバーを集め、製品リリースまでメンバーを引っ張ってくれます。<br/>
サイボウズでは製品仕様に営業の意見が強く反映されることが度々あるのですが、そういう場合に開発本部以外の本部との調整を担当しているのもPMです。
</p>

<p>
他にも開発本部内には品質保証部・システム開発部・UI設計部などなど、数多くの部があり、それぞれその分野のエキスパートが組織を形勢しています。<br/>
そちらの詳細については、ここでご説明するよりも、ぜひCyDNで公開されている他の記事を読んでみてください。
</p>

<p><br />
<h4 class="entry-topic">開発プロジェクトから見た開発体制</h4></p>

<p>
さて、ここまでご紹介した中で、ずいぶんと製品開発の関係者が組織的には分断されているじゃないかという印象を持った方も多いと思います。<br/>
組織的には、UIを作ってくれる人、ドキュメントを書いてくれる人、テストを専門的に実施してくれる人などなど、製品を開発する上で必要になる人達が、実は『開発部』の中にはいません。<br/>
ここで触れなければならないのがプロジェクトです。
</p>

<p>
実際に製品を開発し、リリースするまでの過程で存在しているのがプロジェクトです。<br/>
2008年4月にリリースされたガルーン2でも、PMによって開発プロジェクトが計画され、開発本部内の各部からメンバーが集まり、実際の開発を進めました。<br/>
ガルーン2ではどの部からも大抵服数人がまとまって参加していて、それぞれチームを組んでいました。ここで各チームについて簡単に説明します。
</p>

<h5 class="subhead1">PM（プロダクトマネージャー）</h5>
<p>
PMは製品の要件について判断/決定をし、製品を作り、リリースするまでの計画を立案します。<br/>
プロジェクト全体の進捗を管理して、全体の舵取りをするのもPMの役目です。<br/>
大抵は一つのプロジェクトに1人ですが、ガルーン2のようにプロジェクトの規模自体が大きい場合には、2人以上いることもあります。
</p>

<h5 class="subhead1">開発チーム</h5>
<p>
開発部のグループのマネージャーが開発責任者としてまとめている、PGチームです。要件から仕様書を作り、実装をし、不具合を改修し…ということを日常の仕事にしています。<br/>
ガルーン2.5ではだいたい9人くらいいましたが、今進んでいるガルーン2.5.1では6人になっています。（人数だけについて言うなら、製品規模からするとずいぶん少ない人員でまわしているという人もいるらしいです。）<br/>
過去の例では、だいたい一人1アプリくらいをざっくりと割り振られて、それにコードレビュー担当として、もう一人PGがサポートにつく、というやり方をとっています。
</p>

<h5 class="subhead1">QAチーム</h5>
<p>
サイボウズの製品開発の特色（だと個人的には思っている）試験チームです。<br/>
品質保証担当者と呼ばれるリーダーが製品の試験計画を立案/進行し、実際のQAチームをまとめています。<br/>
QAはテストエンジニアとしてのスキルに特化した人達で、そういう人材を社内に持っているというのも、私が学生時代に驚いたことの一つでした。
</p>

<p>
この3者は要件/実装/試験と、比較的3すくみ状態になりやすいので大きく取り上げましたが、他にもUIやドキュメントからも人が集まってプロジェクトメンバーが構成されています。<br/>
ガルーン2ではベトナムのとある会社にも一部作業を出していたので、そういう意味ではメンバーは社内だけに留まってはいませんでした。
</p>

<p>
ただし、開発部内のグループは別として、UIやQAメンバーを実際に割り当てるのは各部の部長です。部長はその時々で部内の空いている人員を見ながら、どのプロジェクトに誰をアサインするという人事的な役割を担っています。<br/>
開発部ではグループごとに担当製品が決まっていますが、例えば会社として注力したい製品については、他のグループから人員を異動したり、ということもあります。<br/>
ここで強調したいのは、実際の開発作業をとりしきるポジションと、組織長としてのポジションとが切り離されている点です。
</p>

<p><br />
<h4 class="entry-topic">まとめ</h4></p>

<p>
サイボウズの組織構造は、製品の開発メンバーとは直結していません。<br/>
製品開発時に実際にリーダー的なポジションとなるPM、開発責任者と呼ばれる人達は、組織的な上長ではありません。<br/>
それは、組織構造と製品開発とで責任範囲を変えることで、それぞれのリーダーが自分の役割に専念できるようにするという意味が強いと思います。<br/>
この組織構造的な工夫も、実はサイボウズの製品作りへのこだわりのひとつなんじゃないかと、個人的には感じています。
</p>]]>
        
    </content>
</entry>
<entry>
    <title>今年の夏こそ&apos;08</title>
    <link rel="alternate" type="text/html" href="http://cydn.cybozu.co.jp/2008/07/pinpon.html" />
    <link rel="service.edit" type="application/atom+xml" href="http://cydn.cybozu.co.jp/mt/mt-atom.cgi/weblog/blog_id=1/entry_id=462" title="今年の夏こそ'08" />
    <id>tag:cydn.cybozu.co.jp,2008://1.462</id>
    
    <published>2008-07-23T05:16:11Z</published>
    <updated>2008-07-23T05:20:33Z</updated>
    
    <summary> はじめまして。 モバイル＆リモート開発グループの今(コン)です。 擬音語ではあ...</summary>
    <author>
        <name></name>
        
    </author>
        <category term="" />
    <content type="html" xml:lang="ja" xml:base="http://cydn.cybozu.co.jp/">
        <![CDATA[<p>
はじめまして。<br/>
モバイル＆リモート開発グループの今(コン)です。<br/>
擬音語ではありません。恐れながら私の苗字です。<br/>
</p>
<p>
最近、年齢と共に上昇を始めた体脂肪率に悩まされています。<br/>
Eclipse をどれだけ速く操ろうとどうやら脂肪は燃えないようで、大学入学時点で ７％ 程であった体脂肪率は、いまやその数倍。。<br/>
食料価格以上の高騰に、さすがに焦りを感じ始めました。<br/>
</p>
<p>
このままではいけない。<br/>
そう考えていた矢先、社内で「ぴんぽん部」が設立されたという話を聞きつけました。
</p>
<p>
サイボウズでは、５人以上の社員が集まれば新しく部を設立することができます。<br/>
また、部活動支援制度が設けられており、定期的に活動していると会社から部費が支給されます。部費の力なのかは定かではありませんが、基本的にサイボウズ社員の
部活動に対するモチベーションは高く、社内の<a href="http://g.cybozu.co.jp/blog/" target="_blank">サイボウズブログ</a>には日々楽しげな活動
報告が投稿されています。
</p>
<p>
ぴんぽん部は、そんな数ある社内部活動の中の一つで、みんなで集まって卓球をしたりピザを食べたりする部活動です。<br/>
私は卓球のダイエット効果の高さに注目していたこともあって、迷わず入部しました。<br/>
ちなみに、私が現在所属している部活動は以下の通りです。(参加回数順)<br/>
<ul>
  <li>野球部
  <li>そうじ部
  <li>ぴんぽん部(卓球)
  <li>スラムダンク部(バスケットボール)
  <li>バドミントン部
</ul>
ちょっと入り過ぎたかな？と思うくらいがちょうど良いらしいです。
</p>
<p>
ぴんぽん部は近々卓球台を購入し、会社にいながら卓球を楽しむ計画が進行中とのこと。<br/>
本当に実現するのかと初めは半信半疑でしたが、つい先日本当に卓球台が届いていました。<br/>
この大人たち、本気です(笑
</p>
<p>
<font size="-1">
▼届いた卓球台でさっそく王子サーブを繰り出す様子<br/>
<a href="http://cydn.cybozu.co.jp/images/pinpon.jpg"><img class="border1" src="http://cydn.cybozu.co.jp/images/pinpon.jpg" width="400" height="300" alt="卓球台" /></a><br/>
※通常のものはさすがに収納スペースに困るだろうということで、ミニサイズになりました。
</font>
</p>

<p>
実際に届いた卓球台を見て、俄然テンションも上がりました。<br/>
今年の夏は、卓球で決まりです！<br/>
</p>
<p>
興味をもっていただけた方は、一度遊びにいらしてみてはいかがでしょうか？<br/>
心よりお待ちしています。＾＾
</p>]]>
        
    </content>
</entry>
<entry>
    <title>開発本部体験ツアー</title>
    <link rel="alternate" type="text/html" href="http://cydn.cybozu.co.jp/2008/07/tourhtml.html" />
    <link rel="service.edit" type="application/atom+xml" href="http://cydn.cybozu.co.jp/mt/mt-atom.cgi/weblog/blog_id=1/entry_id=460" title="開発本部体験ツアー" />
    <id>tag:cydn.cybozu.co.jp,2008://1.460</id>
    
    <published>2008-07-18T05:12:44Z</published>
    <updated>2008-07-18T05:17:51Z</updated>
    
    <summary> こんにちは。 品質保証部の徳永です。 私は現在、｢サイボウズ Office 7...</summary>
    <author>
        <name></name>
        
    </author>
        <category term="" />
    <content type="html" xml:lang="ja" xml:base="http://cydn.cybozu.co.jp/">
        <![CDATA[<p>
こんにちは。<br />
品質保証部の徳永です。
</p>

<p>
私は現在、｢サイボウズ Office 7｣ 次期バージョンに QA エンジニアとして携わっています。<br />
QA エンジニアってなに？という方は、<a href="http://cydn.cybozu.co.jp/2007/04/post_40.html" title="" target="_blank"> こちら </a>をご覧ください。
</p>

<p>
さて今回は、開発本部の日常について皆さんにお伝えしたいと思います。<br />
各記事で書かれている内容から伝わるものもあると思いますので、他の記事では触れられることの無かったような (些細な？) 部分をチョイスして書いていこうと思います。
</p>

<p><br />
<h4 class="entry-topic">仕事中</h4></p>

<p class="entry-cut">
<a href="#" title="開発部体験ツアー">

<p><img src="http://cydn.cybozu.co.jp/images/Slippers.jpg" width="220" height="170" alt="スリッパ" /><br />
</a><br />
</p></p>

<p>
業務時間内の開発本部フロアは基本的に静かです。<br />
ただし、ちょっとした相談や話し合いはフロア内のあちこちで行われ、席の行き来も頻繁に行われます。<br />
違うフロアで仕事をしている人 (営業・人事等) とは、インスタントメッセンジャーで連絡を取ったりもします。
</p>

<p>
社員は自席で、それぞれが集中できる方法をとりながら仕事をしています。<br />
靴をスリッパに履き替えたり、音楽を聴いたり…と、方法は人によって様々です。<br />
服装も自由ですので、かなりストレスの少ない状態で仕事ができる環境だと思います。
</p>

<p><br />
<h4 class="entry-topic">会議</h4></p>

<p>
会議では、プロジェクトの進捗を確認したり、製品トラブルでお問い合わせをいただいたお客様への対応を決定したり、製品のリリース時にどんな要望を取り入れるかを検討したりします。<br />
会議はそれぞれのメンバーが忙しい中、顔を合わせて口頭で話せる数少ない機会ですので、問題への対応方針や重要な判断を決定をする貴重な時間となります。
</p>

<p>
また、定例で開かれる会議の他にも、突発的に上司に相談したい問題が出てきた場合は自由に上司の予定をおさえ、相談する機会を作ることができます。<br />
もちろん、会議室・参加者の時間の確保はすべてグループウェア上で行います。
</p>

<p><br />
<h4 class="entry-topic">QA エンジニア</h4></p>

<p>
QA エンジニアとしての仕事についても少し触れておきたいと思います。<br />
現在私は ｢サイボウズ Office 7｣ 次期バージョンの試験担当として、試験計画を立て、試験実施の管理をしています。<br />
試験を実施してくださるテスターの方と連絡を取ったり、不具合の確認を行ったりと、次のリリースに向けての仕事を行っていますが、
その他にも現在リリースされている製品のトラブル調査を行ったりしています。
 (その辺についてもっと詳しく知りたい！という方は、<a href="http://cydn.cybozu.co.jp/2008/03/report_qa.html" title="" target="_blank"> こちら </a>の記事をご覧ください。)<br />
お客様の元に届く製品がより良いものになるよう日々製品と向かい合う作業は、大変ですがとても魅力的な仕事だと思っています。
</p>

<p><br />
<h4 class="entry-topic">女性比率</h4></p>

<p>
開発本部に限っていうと、女性の比率は全体の約 20 ％です。<br />
(ちなみに、会社全体でみると、全体の 30 ％程度が女性社員です。)<br />
開発本部内で比較的女性が多いのは、<a href="http://cydn.cybozu.co.jp/2007/04/post_39.html" title="" target="_blank">
 ドキュメント部 </a>、<a href="http://cydn.cybozu.co.jp/2007/04/post_38.html" title="" target="_blank"> プロダクト管理部 </a>、
そして我が<a href="http://cydn.cybozu.co.jp/2007/04/post_40.html" title="" target="_blank"> 品質保証部 </a>です。<br />
開発本部に所属している女性社員は、心なしかさっぱりとした性格の方が多い気がします。(私自信も含め。)
</p>

<p>
もちろん、バレンタインには女性社員で力 (お金？) を合わせて、男性社員にチョコレートをプレゼントしました。<br />
そういった気持ちも忘れず、日々頑張っています。
</p>

<p><br />
<h4 class="entry-topic">おやつ・休憩</h4></p>

<p>
お昼休みは基本的に 12:00～13:00 と定められていますが、それ以外の休憩時間は自由です。<br />
タイムマネジメントは個人に任されていますので、お腹がすいたり、ちょっと一服…というときには自由に休憩を取ることができます。<br />
アイスを食べたりコーヒーを飲みに行ったり、喫煙所で休憩したりと、思い思いに気分転換を図ります。<br />
私の席からは東京ドームや小石川後楽園が見えますので、ときどきぼーっと外を眺めて目を休めたりもしています。
</p>

<p><br />
<h4 class="entry-topic">残業…？</h4></p>

<p>
サイボウズの就業定時は 18 時なのですが、18 時以降のフロアの様子について触れてみたいと思います。<br />
時期や人によって様々ですが、だいたい 19 時ごろまでは仕事を続ける人が多いようです。<br />
もちろん、さくっと 18 時に退社する日もありますが、私の場合はだいたい 19 時～ 20 時頃に退社する日が多いです。
</p>

<p>
また、定時後に社内の部活動や勉強会へ参加することもあります。<br />
私が参加しているもののひとつにベトナム語講座があります。講座は週に 1 度開催されています。<br />
現在開発本部には<a href="http://cydn.cybozu.co.jp/2008/04/offshore_development_communication.html" title="" target="_blank"> ベトナム出身の社員 </a>
が 2 名いますので、その方たちに講師をしてもらいコツコツとベトナム語を学んでいる最中です。
</p>

<p>
ということで、私の普段の生活を書き連ねる形となりましたが、こういった些細な部分にも魅力を感じてもらえたらいいな、と思っています。<br />
興味を持たれた方・真相を確かめたい方などなど、ぜひ一度会社に足を運んでください。<br />
お待ちしております！
</p>]]>
        
    </content>
</entry>
<entry>
    <title>サイボウズらしいUIを作る7つの方法</title>
    <link rel="alternate" type="text/html" href="http://cydn.cybozu.co.jp/2008/06/ui_seven_method.html" />
    <link rel="service.edit" type="application/atom+xml" href="http://cydn.cybozu.co.jp/mt/mt-atom.cgi/weblog/blog_id=1/entry_id=456" title="サイボウズらしいUIを作る7つの方法" />
    <id>tag:cydn.cybozu.co.jp,2008://1.456</id>
    
    <published>2008-06-30T06:37:19Z</published>
    <updated>2008-06-30T06:56:13Z</updated>
    
    <summary> こんにちは。UI設計部の小田と申します。 今回は、サイボウズ製品のUIを考える...</summary>
    <author>
        <name>CYDN編集部</name>
        
    </author>
        <category term="" />
    <content type="html" xml:lang="ja" xml:base="http://cydn.cybozu.co.jp/">
        <![CDATA[<p>
こんにちは。UI設計部の小田と申します。<br />
今回は、サイボウズ製品のUIを考える上で重要な7つの方法をご紹介いたします。<br />
</p>

<h4 class="entry-topic">企業理念を思い出す</h4>

<p>
サイボウズの企業理念は「情報サービスの大衆化」です。<br />
簡単で便利で安いをモットーにしています。<br />
UIを考える上での最上級の判断軸となります。
</p>

<h4 class="entry-topic">初めて触る人の気持ちになる</h4>
<p>
初めて使うソフトウエアの画面を見たときに、どこから手をつけていいかわからないではなく、まず手探りで使い始められるということを重視しています。<br />
例えば、以下のようなことに配慮しています。<br />
<ul>
<li>難しそうなイメージや心理的ストレスを与えていないか</li>

<p><li>初めて触る人にわかりにくい言葉使いを使っていないか</li><br />
<li>操作中に現在地、現在の状態が把握できるか</li><br />
<li>操作中に画面遷移をする又は、その箇所があるときわかりやすく情報を出しているか</li><br />
<li>実行したいタスクを達成する為に、どのツールを選択すればよいか判断しやすいか</li><br />
<li>そもそも、何ができるツールかわかりやすいか</li><br />
<li>自然な流れでタスク達成までの操作ができるか</li><br />
<li>初めて触るユーザーにもわかる標準的なインタラクションになっているか</li><br />
<li>操作につまづく人を焦らせないよう支援しているか</li><br />
</ul></p>

<p>その他実際に、新入社員や中途で入社してくる社員に使い勝手のヒアリングやユーザーテストの被験者になってもらったりしています。<br />
</p></p>

<h4 class="entry-topic">毎日使ってる人の気持ちにもなる</h4>
<p>
既に数年サイボウズ製品を使ってらっしゃるユーザー様にも便利に使っていただけるように考えています。<br />
例えば、毎日使っていると邪魔に感じるメニューがあったり、操作の流れがわかっているので手間を省略したくなったり、自分の使い方に合わせてカスタマイズしたいと感じると思います。毎日使っているからこそ効率的に使えるような配慮は欠かせません。
</p>

<h4 class="entry-topic">製品を組み合わせたときを考えてみる</h4>
<p>
ガルーンやOfficeがプラットフォームとなりその他の製品を組み合わせて使うということを目指しています。<br />
組み合わせた時に、それぞれの製品でインタフェースやインタラクションが全く異なっていると使い勝手は損なわれます。組み合わせた時も自然に使えるように配慮は欠かせません。

</p>

<h4 class="entry-topic">今後の製品リリースを気にする</h4>
<p>
製品リリースごとに使いやすく進化していくことを理想としています。<br />
しかし、残念ながら必ずしも開発順番通りにリリースとは限らないので進化が前後してしまわないように気をつけています。
</p>

<h4 class="entry-topic">さらに「もっと楽にならないか」を考える</h4>
<p>
技術は日々進歩し、ユーザー様の仕事場の環境も日々変化しています。<br />
1年前には使えなかった方法でも、来年には効率的で有効な方法になっている事も大いにあります。
さらに、もっと…と以前葬ったアイディアも棚卸しして考えることを行っています。
</p>

<h4 class="entry-topic">「遊び心」を忘れない</h4>
<p>
毎日楽しく使って頂けるための味付けを忘れてはいけない。。。<br />
これはサイボウズの伝統ですが、ここ最近は薄味が好まれるようです。
</p>

<p>
これらは私たちがいつもUI設計で実践している方法ですが、一般的な方法ばかりです。<br />
しかし、当たり前のことをちゃんと取り組むことのできるのがサイボウズという会社ではないかと思います。<br />
<br />
こういう仕事がしたい！と思われた方は<a href="http://cybozu.co.jp/company/job/" title="サイボウズ採用情報" target="_brank">エントリー</a>お待ちしています。

<p><br />
</p></p>]]>
        
    </content>
</entry>
<entry>
    <title>製品開発を通して学んだもの</title>
    <link rel="alternate" type="text/html" href="http://cydn.cybozu.co.jp/2008/06/learn_development.html" />
    <link rel="service.edit" type="application/atom+xml" href="http://cydn.cybozu.co.jp/mt/mt-atom.cgi/weblog/blog_id=1/entry_id=455" title="製品開発を通して学んだもの" />
    <id>tag:cydn.cybozu.co.jp,2008://1.455</id>
    
    <published>2008-06-26T09:37:11Z</published>
    <updated>2008-06-26T09:38:41Z</updated>
    
    <summary> はじめまして。 サイボウズOffice開発チームの梶田です。 私がサイボウズに...</summary>
    <author>
        <name></name>
        
    </author>
        <category term="" />
    <content type="html" xml:lang="ja" xml:base="http://cydn.cybozu.co.jp/">
        <![CDATA[<p>
はじめまして。<br />
サイボウズOffice開発チームの梶田です。
</p>
<p>
私がサイボウズに入社してから現在の「<a href="http://kantan.cybozu.co.jp/office7/" title="Office7" target="_blank">Office7</a>」開発を通してどのよなことを学び、何を感じとってきたのかについて
できるだけ堅苦しくならないように書きたいと思いますので、どうぞ最後までお付き合いください。<br />
</p>
<h4 class="entry-topic">入社～1年</h4>
<p>
入社して最初の1年目は主にサイボウズ製品全般のメンテナンス業務に携わりました。
実際に世の中にリリースしていく製品の試験や試験を行うための手順書作成から始まり、システムの再構築を行うための概要設計書を作成したり、他社との共同メンテナンスのための仕様書作成や簡単なプログラムの修正などを行ったこともありました。
</p>
<p>
この頃はガリガリとプログラムを書いたりすることはなかったのですが、浅く広くといった感じで様々な製品開発に触れることができ、チーム以外の多くの人達と関わりをもつことができたことは良かったと思います。
</p>
<h4 class="entry-topic">2年～現在</h4>
<p>
入社してから丁度1年が経とうとしていた時期にOffice7開発の話が持ち上がり、開発チームの一員として加わることになりました。しかし、製品を開発していくためのスキルはまだなく、勉強しながら徐々に作っていく感じでした。もちろん知識的にも技術的にも足らない部分が多く、苦労した点はたくさんありましたが、自分が作った製品が世の中にリリースされた時の達成感は大きかったです。
</p>
<p>
ましてや、打ち上げでのビールと焼肉は格別でした。
</p>
<h5 class="subhead1">製品作りの考え方</h5>
<p>
現在はOffice7の時期バージョンの製品開発を行っています。<br />
これまでのOffice7開発を通して、製品を作る全体的なプロセスを経験し、開発してくために必要な最低限の知識や技術を身につけることができたことと、ゼロから作りあげていく面白さを感じることができました。そして特に重要だと感じたことは製品作りへの考え方でした。ここで言う考え方とは、ユーザーが求めているものに対してどう解決すればよいかを考え抜く力です。
</p>
<p>
ユーザーから「こうして欲しい！」という機能の要望があったとしても、「じゃぁ、追加しましょう」というのではなく、
</p>
<ul>
 <li>なぜその要望を求めているのか</li>
 <li>その要望に至った背景は何か</li>
 <li>その機能は本当に必要なのか</li>
 <li>実際の問題は違うところにあるのではないか</li>
</ul>
<p>
このように考えることで、問題となっている本質をしっかりと捉えることができ、初めて機能として形が見えてきます。
</p>
<p>
極端な話、知識は覚えればいいですし、技術は実際に手を動かすことで身につくかもしれません。しかし、本当に良い製品作りの考え方というものはいくら本を読んで勉強しても身に付くものではありません。多くの経験と、常に目的を見失わず奥深くまで考え抜く力が必要になると思います。<br />
同じ要件であっても、この解決の方向性の違いにより最終的に出来上がってくる機能は全く違ってきます。情報を扱う場合も同じです。同じ情報なのに操作する手段や見せ方が違うだけで、使いやすさが格段に変わってきます。
</p>
<p>
サイボウズは顧客満足度7年連続1位という実績がありますが、これらの考え方に基づいた製品開発が今の実績を積み重ねてこれた一つの要因ではないかと思います。
</p>
<h5 class="subhead1">他部署との連携</h5>
<p>
1つの機能を作成するにも様々な部署との協力も必要不可欠です。<br />
デザインを担当するUIチームや製品内の文言を考えるドキュメントチームなど、部署の枠組みを超えて直接話し合いながら仕様を固めていきます。どんな些細な機能であっても、納得できるものができるまで何度も議論し、お互いの意見を吸収しながら最終的なものへと仕上げていきます。最初に決めた仕様がそのまま最終的な実装となることはほとんどありません。このようなことができるのも、自社開発ならではの良さだと思います。
</p>
<h5 class="subhead1">最後に</h5>
<p>
サイボウズの開発部にはもっと良いものを作ろうという熱い心を持った人達ばかりだと思います。<br />
その中でも私の所属するOfficeチームは、ひときわ熱いチームであると勝手ながら思っていますが。。。<br />
より良い製品を継続して提供し続けていくということは大変難しいことです。しかし、そんな想いを持っていればこそ、さらに満足していただくことができる製品が生まれてくるのだろうと私は思います。
</p>
<p>
私自身まだまだ力不足なところはありますが、これからさらに満足いただける製品作りを目指して邁進していきたいと思っています。
</p>]]>
        
    </content>
</entry>
<entry>
    <title>会社を中から支えています</title>
    <link rel="alternate" type="text/html" href="http://cydn.cybozu.co.jp/2008/06/support_in_house.html" />
    <link rel="service.edit" type="application/atom+xml" href="http://cydn.cybozu.co.jp/mt/mt-atom.cgi/weblog/blog_id=1/entry_id=454" title="会社を中から支えています" />
    <id>tag:cydn.cybozu.co.jp,2008://1.454</id>
    
    <published>2008-06-25T01:46:59Z</published>
    <updated>2008-06-25T02:45:11Z</updated>
    
    <summary> はじめまして。  システム開発部開発チームの藤澤です。 今回は、私が主に担当し...</summary>
    <author>
        <name></name>
        
    </author>
        <category term="" />
    <content type="html" xml:lang="ja" xml:base="http://cydn.cybozu.co.jp/">
        <![CDATA[<p>
はじめまして。<br /> 
システム開発部開発チームの藤澤です。
</p>
<p>
今回は、私が主に担当している販売管理システムの開発についてお話させていただきたいと思います。
</p>
<h4 class="entry-topic">販売管理システムとは</h4>
<p>    販売管理システムとは、「どのお客様に、何をどれだけ売ったか」を管理するシステムのことで、サイボウズでは自社で開発したものを使用しています。<br />
製品とは違い、表舞台に出てくることはまずありませんが、会社の売上を管理する重要なシステムです。
</p>
<p>
その販売管理システムですが、一度作ったら終わりと言うわけではありません。<br />
不具合の改修や、新製品の販売対応などで、開発を続けていく必要があります。
</p>
<p>
私はここ 2 年ほど販売管理システムの開発を担当しています。 <br />
今回は、その体験をお話します。
</p>
<h4 class="entry-topic">2 年目(挑戦)</h4>
<p>
最初は、先輩社員の作成した仕様書、設計書をもとに軽微な改修を担当する、いわゆるプログラマーとしてスタートしました。<br />
右も左もわからないまま、業務知識を必要とするシステムの改修に最初は戸惑ったりもしましたが、先輩社員の助けもあり、順調に仕事をこなしていくことができました。
</p>
<p>
ある程度経験をつんだころ、先輩社員から「そろそろ仕様書を書いてみよう」と言われて行ったのが、<a href="http://kantan.cybozu.co.jp/office7/" title="サイボウズ Office 7" target="_brank">Office 7</a>のリリースに対応する改修作業でした。<br />
会社の主力製品の販売対応の仕様作成を任されることになり、身の引き締まる思いで仕事をしていたことを覚えています。<br />
今までの積み重ねが評価された、と実感したときでもありました。
</p>
<h4 class="entry-topic">3 年目(飛躍)</h4>
<p>
現在は単なる開発者という立場から、販売管理システムの開発責任者として、システムの内部統制対応を行っています。<br />
提案依頼書や開発計画書の作成といった上流工程はもちろん、関係部署との折衝、システムのコーディングや試験などの下流工程までを、ほぼ一人で管理、実施しています。
</p>
<h4 class="entry-topic">これまでを振り返って</h4>
<p>
もともとは配属先の上司から、「プログラムを書いてみないか」との一言がきっかけで、担当して早 2 年。<br />
その間、挫折しそうになりながらも、やる気と情熱だけは持ち続け努力してきました。<br />
その結果、入社 3 年目ながら、開発責任者という責任と、やりがいのある仕事を任されることになり、毎日が充実しています。
</p>
<p>
このようにやる気と情熱があれば、入社年数が若くても責任ある仕事を任される環境がサイボウズにはあります。<br />
やりがいのある仕事がしたいと思っている方は、是非サイボウズに<a href="http://cybozu.co.jp/company/job/" title="サイボウズ採用情報" target="_brank">エントリー</a>してみてください。
</p>]]>
        
    </content>
</entry>
<entry>
    <title>オープンソースことはじめ －Scheme インタプリタ Mosh をいじってみよう－</title>
    <link rel="alternate" type="text/html" href="http://cydn.cybozu.co.jp/2008/06/oss_mosh.html" />
    <link rel="service.edit" type="application/atom+xml" href="http://cydn.cybozu.co.jp/mt/mt-atom.cgi/weblog/blog_id=1/entry_id=453" title="オープンソースことはじめ －Scheme インタプリタ Mosh をいじってみよう－" />
    <id>tag:cydn.cybozu.co.jp,2008://1.453</id>
    
    <published>2008-06-24T09:39:35Z</published>
    <updated>2008-06-25T06:05:27Z</updated>
    
    <summary>こんにちは。研究開発部の佐野と申します。 普段、オープンソースソフトウェア(OS...</summary>
    <author>
        <name></name>
        
    </author>
        <category term="" />
    <content type="html" xml:lang="ja" xml:base="http://cydn.cybozu.co.jp/">
        <![CDATA[<p>こんにちは。研究開発部の佐野と申します。</p>

<p>普段、オープンソースソフトウェア(OSS) を使っているけれども、OSS を改造してみたことはない。
そもそも、OSS は自分で改造できるものだと考えたことがない。でも、OSS の改造ができるようになった未来の自分にちょっと興味がある。
今回は、そんな読者を対象に、OSS を改造できるようになる「OSS 改造メソッド」をご紹介します。
そして、「OSS 改造メソッド」の実践として、サイボウズラボ発の Scheme インタプリタ <a href="http://code.google.com/p/mosh-scheme/" target="_blank">Mosh</a> の文字エンコーディングの処理を少しだけ改造してみます。
</p>

<h4 class="entry-topic">OSS 改造メソッド</h4>

<p>OSS を自力で改造できるようになりたい！でも、具体的にそのようなスキルを身につけるには、どうしたら良いのかわからない。
この問いに答えてみます。</p>

<p>OSS を自力で改造できるようになるまでに、どんなステップを踏めば良いのか、私なりに考えてみました。そうすると、4 つのステップが出てきました。</p>

<ol>
  <li>改造の対象 OSS の選択</li>
  <li>自力でビルド: ソフトウェアを自分でビルドしたくなる体質になる</li>
  <li>1 行ハック: ソフトウェアの改造に目覚める</li>
  <li>対象 OSS へ飛び込む</li>
</ol>

<p>では、これらの 4 つのステップについて、順に説明していきます。</p>

<h5 class="subhead2">改造の対象 OSS の選択</h5>

<p>世の中には、OSS で溢れかえっています。それらの OSS から、どの OSS を選んで、改造する対象とするのか。</p>

<p><br />
<p>選択する際の指針は、<b>何に興味があって、対象から何を学びたいのか？</b>という問いに自分なりに答えてみることで明らかになってきます。</p></p>

<p><br />
<p>今回、OSS の題材として、Scheme インタプリタの Mosh を取り上げることにしましたが、その理由を挙げてみます。</p></p>

<ol>
  <li>対象が自分にとって適度な複雑さを持っている</li>
  <li>処理系内部の文字エンコーディングの処理に興味がある</li>
  <li>ビルドが必要である</li>
</ol>

<p>1 つめ。私は興味を持ったソフトウェアは、まず対象の複雑さに目を向ける癖があります。
対象の複雑さをつかむことで、「このソフトウェアを自分で改造できるようになるか」について判断をします。
Mosh のコードを取ってきて、ディレクトリ構造、コードの量、コードそのものをざっと見てみた結果「これなら改造できそう」という感触を受けました。
そういう感触を受けたのは、C++ を Better C として使っている Mosh の「シンプルさ」が伝わってきたのが一番大きいと思います。
</p>

<p>2 つめ。最近の興味の 1 つとして、処理系における文字エンコーディングの処理があります。
具体的に言うと、処理系での Unicode をどのように扱うのかといった問題や、文字エンコーディングの変換処理です。
Mosh のコードを少し読んでみて、この興味を満たしてくれる感触を受けました。
そのように感じたのは、後述しますが、Mosh では、内部エンコーディングに UTF-32、入出力エンコーディングに UTF-8 のみをサポートしており、
それがコードの「シンプルさ」につながっているからです。
</p>

<p>3 つめ。後述する自分でビルドすることの大切さを伝えるためには、前提としてビルドが必要なソフトウェアを選択する必要がありました。
Mosh はベースが C++ で書かれており、ビルドを必要とします。
</p>

<p>実際問題、この 4 つのステップの中で「対象 OSS の選択」が一番難しいと私は感じています。
自分の今の興味、スキルなどを総合的に理解したうえで、無数にある OSS から 自分にとって意味のある OSS を選び出す「眼力」が必要となるからです。
「眼力」は、いくつもの OSS をさわってみて、少しずつ鍛えていくしかないかと思います。
</p>

<p></p>

<h5 class="subhead2">自力でビルド: ソフトウェアを自分でビルドしたくなる体質になる</h5>
<p>昨今では、OSS の多くは、apt や yum を使えば簡単にソフトウェアをインストールできてしまいます。
簡単にソフトウェアを使い始められます。依存関係の解決も自動的に行ってくれます。便利ですね。
でも、便利になった一方で、教育的な観点からプログラマに与える弊害は、非常に大きいと考えています。
</p>

<p>何が弊害かと言うと、与えられたものをそのまま使う体質になってしまい、「ソフトウェアは自分で改造できるものだ」
という感覚を失ってしまうことが弊害だと思います。このような体質は、プログラマとして不健全な状態だと思います。
直したい時に直せる。面白いことを閃いた時に、ちょっと改造できる。それがプログラマの本来あるべき姿ではないでしょうか？
</p>

<p>もしパッケージインストールに慣れてしまっているのなら、今日から体質改善しましょう。
「ソフトウェアは自分でビルドするものだ！」そう心に刻み込んでください。
</p>

<p>では、ソフトウェアを自分でビルドできるようになると、何が嬉しいのでしょうか。
それは、単純で、<b>興味のある OSS を自分で改造できる可能性が生まれる</b>ということです。
</p>

<p>パッケージインストールに頼っていたら、パッケージインストールされるソフトウェアを改造しようにもできません。
逆に考えると、パッケージインストールに頼っていては、いつまでたっても OSS の改造ができるようになる可能性は見えてきません。
</p>

<p>とはいうものの、パッケージインストールは便利なので、「絶対に使うな！」とまでは言えません。
実際、私もパッケージインストールの恩恵を受けています。
普段よく使っているソフトウェアで、パッケージインストールしていたものを徐々に、自力でビルドして使えるようにしていけば良いと思います。
</p>

<p></p>

<h5 class="subhead2">1 行ハック: ソフトウェアの改造に目覚める</h5>
<p>さて、幾度のビルドの試練を乗り越え、OSS を自分でビルドできる体質になりました。(と仮定します)
自力でビルドができるようになれば、あと少しで、OSS を自力で改造できるようになります。本当です。
</p>

<p>ここで、私がおすすめするメソッドを紹介しましょう。</p>

<p>名付けて「１行ハック」。</p>

<p>やり方は簡単です。</p>

<p>まず、ソフトウェアが実行されたら、1) その影響を観測でき、2) 絶対に実行される場所に、1 行コードを追加します。
例えば、C 言語だと main 関数のはじめあたりが良いでしょう。
コマンドラインで動作するツールなら、printf(3) 関数 なんかを呼び出して標準出力に「Hello, World」
と表示されるようにしてみましょう。そして、ビルドをします。
ビルドがうまくいったら、実行してみて下さい。
実行結果に、自分が書いたコードが影響していることを確認します。
</p>

<p>これだけです。実に簡単ですね。</p>

<p>こんなことに何の意味があるのか？そう疑問に持たれるかもしれません。</p>

<p>1 行ハックでは、<b>実際に１行でもコードを追加すれば、関心を持っているソフトウェアの挙動に影響を与えられるという、
面白さの実感してもらう</b>ことに意味があります。
たった1 行だけのコードの追加なんて一見意味の無いように思えますが、実際にやってみると、不思議なもので、「自分でもこのソフトウェアを
改造できるんだ」という気持ちが湧き出てきます。
</p>

<p>だまされたと思ってやってみてください。そして、ここでつかんだ気持ちと感覚を大切にしてください。</p>

<p><br />
<h5 class="subhead2">対象 OSS へ飛び込む</h5></p>

<p>１行のコード追加ができれば、後は本当に意味のあるコードを書いていくのみです。面白そうなコードを追いかけて、改造を試みます。
単にコードを読むだけでなく、<b>少しでも良いので実際に改造してみる</b>のがポイントです。
改造することで、自分の血となり肉となります。改造を通して、対象 OSS から良い技術を盗み出しましょう。
</p>

<h4 class="entry-topic">Mosh で実践してみよう</h4>
<p>ここでは、OSS 改造メソッドを、Mosh で実践してみます。</p>

<h5 class="subhead2">Mosh とは?</h5>
<p>ここで、Mosh について簡単に説明しておきます。
Mosh は、<a href="http://labs.cybozu.co.jp/blog/higepon/2008/05/scheme_mosh_001.html" target="_blank">作者の説明</a>から引用すると
「<a href="http://www.r6rs.org/">R6RS</a>という Scheme の新しい言語仕様に準拠することを目指している高速な Scheme インタプリタ」です。
</p>

<h5 class="subhead2">自力でビルド</h5>
<p>自力でビルドするところからはじめましょう。</p>

<p>手元の開発環境では、Cent OS 5.1 (32 bit) を利用しました。</p>

<p>Mosh は、ビルドに Gauche が必要となるので、まずは、Gauche をビルドしてインストールします。</p>

<pre class="source">
% cd ~/src
% wget wget http://prdownloads.sourceforge.net/gauche/Gauche-0.8.13.tgz
% tar zxvf Gauche-0.8.13.tgz
% cd Gauche-0.8.13
% ./congigure
% make
% sudo make install
</pre>

<p>次に、Mosh をビルドします。</p>
<pre class="source">
% cd ~/src
% wget http://mosh-scheme.googlecode.com/files/mosh-0.0.4.tar.gz
% tar zxvf mosh-0.0.4.tar.gz
% cd mosh-0.0.4
% ./configure
% make
</pre>

<p>手元の環境で、Mosh をビルドすると、以下のようなエラーが出ました。</p>

<ul>
  <li>Port.h:87: error: 'exit' was not declared in this scope</li>
  <li>read.cpp:202: error: 'LONG_MAX' was not declared in this scope</li>
</ul>

<p>そこで、Mosh の scheme.h に以下の変更を加えることで、Mosh をビルドできるようになりました。</p>

<pre class="source">
% diff -u scheme.orig.h scheme.h
--- scheme.orig.h       2008-06-23 20:04:17.000000000 +0900
+++ scheme.h    2008-06-23 20:43:33.000000000 +0900
@@ -52,6 +52,10 @@
 #include <stdio.h>
 #include <signal.h>

<p>+// [PATCH BEGIN]<br />
+#include &lt;stdlib.h&gt;<br />
+#include &lt;climits&gt;<br />
+// [PATCH END]<br />
 //#define DUMP_ALL_INSTRUCTIONS<br />
 //#define TRACE_INSN<br />
 #define INSN_LOG_FILE "/tmp/mosh-insn.log"<br />
</pre></p>

<p>Mosh のビルドが完了すると、現在のディレクトリに「mosh」が生成されます。</p>

<p>Mosh は make testを実行することで、テストできます。</p>

<pre class="source">
% make test
(省略)
test ((char<? #\c #\b)), expects #f ===> ok
test ((cons* 1 2 3 4)), expects (1 2 3 . 4) ===> ok
test ((cons* 1)), expects 1 ===> ok
passed.
</pre>

<p>どうやら、期待通りに動作しているようです。</p>

<p>自分でも mosh を実際に動かしてみます。1 + 2 の計算をさせてみましょう。</p>

<pre class="source">
% ./mosh
mosh>(+ 1 2)
3
</pre>

<p>評価した結果、 「3」が出力されました。ビルド成功です。</p>

<p><br />
<h5 class="subhead2">1 行ハック:「Hello, World!」と表示させてみる</h5></p>

<p>1 行ハックを Mosh で試してみましょう。
mosh 起動直後に、コンソールに「Hello, World!」と表示させてみることにします。
</p>

<p>C++ では、プログラムは main 関数から実行されます。ですので、main 関数をまず探してみる必要があります。</p>

<p>grep を使って main 関数を調べてみます。</p>
<pre class="source">
% grep -rn "main(" .
./gc-7.1alpha3/add_gc_prefix.c:4:int main(argc, argv, envp)
./gc-7.1alpha3/configure:8473:int main(){nm_test_var='a';nm_test_func();return(0);}
./gc-7.1alpha3/configure:9161:lt_simple_link_test_code='int main(){return(0);}\n'
./gc-7.1alpha3/configure:12735:lt_simple_link_test_code='int main(int, char *[]) { return(0); }\n'
(省略)
</pre>

<pre class="source">
% grep -rn "main(" . | wc -l
87
</pre>

<p>87 件もヒットしました。さて、どのファイルに、mosh の main 関数があるのでしょうか？</p>

<p>1 つ 1 つ怪しそうなファイルをみていくのも 1 つの手ですが、ここは賢く確実に探す方法でいきたいと思います。<br />
gdb を使います。</p>

<p>main 関数でブレークポイントをセットしてみます。<br />
<pre class="source"><br />
% gdb ./mosh<br />
(gdb) b main<br />
Breakpoint 1 at 0x804a5c0: file main.cpp, line 99.<br />
</pre></p>

<p>「Breakpoint 1 at 0x804a5c0: file main.cpp, line 99.」に注目してください。<br />
main.cpp の 99 行目に main 関数が書かれていることがわかりました。</p>

<p>このように、gdb を使えば、瞬時に目的のファイルを探し出すことができます。ただし、デバッグ情報付き(gcc では -g オプション)でビルドされている必要があります。</p>

<p>では、main.cpp を見てみます。</p>

<pre class="source">
(省略)
int main(int argc, char *argv[])
{
    int opt;
    bool isRepl          = false;
    bool isTestOption    = false;
    bool isCompileString = false;
    bool isProfiler      = false;

<p>    while ((opt = getopt(argc, argv, "htvpVc")) != -1) {<br />
(省略)<br />
</pre></p>

<p>この while 文の前に、printf(3) 関数を呼ぶように変更を加えたら、確実に printf(3) 関数が呼ばれそうですね。</p>

<p>では、やってみましょう。</p>

<p>以下のように変更を加えました。</p>

<pre class="source">
$ diff -u main.cpp main.orig.cpp
--- main.cpp    2008-06-23 21:03:26.000000000 +0900
+++ main.orig.cpp       2008-06-23 20:55:01.000000000 +0900
@@ -104,8 +104,6 @@
     bool isCompileString = false;
     bool isProfiler      = false;

<p>-    printf("Hello, World!\n");<br />
-<br />
     while ((opt = getopt(argc, argv, "htvpVc")) != -1) {<br />
         switch (opt) {<br />
         case 'h':<br />
</pre></p>

<p>再度ビルドして、mosh を実行してみます。</p>

<pre class="source">
% make
% ./mosh
Hello, World!
mosh>
</pre>

<p>mosh のプロンプト(mosh>)の前に「Hello, World!」が表示されました。1 行ハック成功です。</p>

<p>適切な場所にコードを書けば、対象ソフトウェアに簡単に影響を与えられることを実感して頂けたと思います。</p>

<p><br />
<h4 class="entry-topic">対象 OSS へ飛び込む: Mosh における文字エンコーディングの処理の改造</h4></p>

<p>この記事の冒頭で、「処理系内部の文字エンコーディングの処理に興味がある」と言いました。
つまり、処理系における入出力エンコーディングや内部エンコーディング、がどのように実装されているのかに興味があります。
なぜ興味があるかと言うと、地味だけれども、処理系全体に影響を与えるとても大切なパートだからです。
</p>

<p>ここでは、思い切って Mosh 内部の文字エンコーディングの処理を追いかけて、改造に挑戦してみたいと思います。
</p>

<p><br />
<p>(Mosh 内部の文字エンコーディングの処理を追いかける話まで記事にすると、非常に長くなるので割愛させていただきます。)</p></p>

<p>Mosh のコードを読んでみた結果、Mosh 内部の文字エンコーディングの処理は以下のようになっていることがわかりました。</p>
<ul>
<li>内部エンコーディングは、UTF-32 (<a href="http://code.google.com/p/mosh-scheme/source/browse/tags/mosh-0.0.4/Regexp.cpp" target="_blank">Regexp.cpp</a> 参照))</li>
<li>外界との入出力エンコーディングは UTF-8 (<a href="http://code.google.com/p/mosh-scheme/source/browse/tags/mosh-0.0.4/Port.h" target="_blank">Port.h</a> 参照)</li>
<li>UTF8Codec クラスで、UTF-32(内部エンコーディング)と UTF-8 の相互変換する (<a href="http://code.google.com/p/mosh-scheme/source/browse/tags/mosh-0.0.4/Port.h" target="_blank">Port.h</a> 参照)</li>
</ul>

<p>既存の Mosh の実装では、Mosh の入出力文字エンコーディング UTF-8 しかサポートされていません。
ですので、外界との入出力エンコーディングに UTF 8 以外でも改造してみたら面白そうです。
今回は、簡単のため、出力エンコーディングの改造に集中します。入力エンコーディングは、UTF-8 のままで進めます。
</p>

<p>出力エンコーディングの改造は、2 つのステップに分けて改造してみます。小さい問題に分解した方が、ステップを踏みやすくなるからです。</p>

<ol>
<li>内部エンコーディングのまま出力させてみる</li>
<li>出力エンコーディングを iconv(3) で変換させてみる</li>
</ol>

<p>(今回は、あくまで自分の理解を深めるために実験的に改造しています。実用的なコーディングにはなっていないので、その点については注意して下さい。)</p>

<h5 class="subhead2">内部エンコーディングのまま出力させてみる</h5>

<p>次のような改造をしてみました。</p>
<ul>
<li>mosh に -z オプション付きで、実行されると今回実装した Codec (MyCodec)を使用</li>
<li>MyCodec の入力エンコーディングは、UTF8Codec に委託して、UTF-8 を使用</li>
<li>MyCodec の出力エンコーディングは、内部エンコーディング(UTF32)を使用</li>
</ul>

<p>修正したコードの差分は以下の通りです。</p>

<pre class="source">
--- main.orig.cpp       2008-06-23 20:55:01.000000000 +0900
+++ main.cpp    2008-06-24 00:54:27.000000000 +0900
@@ -103,8 +103,15 @@
     bool isTestOption    = false;
     bool isCompileString = false;
     bool isProfiler      = false;
+#ifdef USE_MY_CODEC
+    bool useMyCodec      = false;
+#endif // USE_MY_CODEC

<p>+#ifdef USE_MY_CODEC<br />
+    while ((opt = getopt(argc, argv, "htvpVcz")) != -1) {<br />
+#else<br />
     while ((opt = getopt(argc, argv, "htvpVc")) != -1) {<br />
+#endif // USE_MY_CODEC<br />
         switch (opt) {<br />
         case 'h':<br />
             showUsage();<br />
@@ -124,6 +131,11 @@<br />
         case 'c':<br />
             isCompileString = true;<br />
             break;<br />
+#ifdef USE_MY_CODEC<br />
+        case 'z':<br />
+            useMyCodec = true;<br />
+            break;<br />
+#endif // USE_MY_CODEC<br />
         default:<br />
             fprintf(stderr, "invalid option %c", opt);<br />
             showUsage();<br />
@@ -148,7 +160,16 @@<br />
 #endif</p>

<p><br />
+#ifdef USE_MY_CODEC<br />
+    Transcoder* transcoder;<br />
+    if (useMyCodec) {<br />
+        transcoder = new Transcoder(new MyCodec, Transcoder::LF, Transcoder::IGNORE_ERROR);<br />
+    } else {<br />
+        transcoder = new Transcoder(new UTF8Codec, Transcoder::LF, Transcoder::IGNORE_ERROR);<br />
+    }<br />
+#else<br />
     Transcoder* transcoder = new Transcoder(new UTF8Codec, Transcoder::LF, Transcoder::IGNORE_ERROR);<br />
+#endif // USE_MY_CODEC<br />
     TextualOutputPort outPort(TextualOutputPort(new FileBinaryOutputPort(stdout), transcoder));<br />
 #ifdef TRACE_INSN<br />
     errOut = fopen(INSN_LOG_FILE, "w");<br />
</pre></p>

<pre class="source">
--- Port.orig.h 2008-06-24 00:12:20.000000000 +0900
+++ Port.h      2008-06-24 00:46:30.000000000 +0900
@@ -363,6 +363,46 @@
     }
 };

<p>+#ifdef USE_MY_CODEC<br />
+class MyCodec : public Codec<br />
+{<br />
+public:<br />
+    MyCodec()<br />
+    {<br />
+        utf8codec_ = new UTF8Codec();<br />
+    }<br />
+<br />
+    ~MyCodec()<br />
+    {<br />
+        delete utf8codec_;<br />
+    }<br />
+<br />
+    // Be careful, buf is shared.<br />
+    int out(BinaryOutputPort* port, ucs4char u)<br />
+    {<br />
+        static uint8_t buf[4];<br />
+        const int size = out(buf, u);<br />
+        return port->putU8(buf, size);<br />
+    }<br />
+<br />
+    // Output as UTF32<br />
+    int out(uint8_t* buf, ucs4char u)<br />
+    {<br />
+        memcpy(buf, &u, sizeof(ucs4char));<br />
+        return sizeof(ucs4char);<br />
+    }<br />
+<br />
+    // Input as UTF8<br />
+    ucs4char in(BinaryInputPort* port)<br />
+    {<br />
+        return utf8codec_->in(port);<br />
+    }<br />
+<br />
+private:<br />
+    UTF8Codec *utf8codec_;<br />
+};<br />
+#endif // USE_MY_CODEC<br />
+<br />
 class Transcoder EXTEND_GC<br />
 {<br />
 public:<br />
</pre></p>

<p><br />
<p>UTF32 で出力できているかどうか確認してみます。確かに、UTF32で出力できています。</p><br />
<pre class="source"><br />
% cat my_script.scm<br />
(print "あいう")</p>

<p>% ./mosh -z my_script.scm | od -x<br />
0000000 3042 0000 3044 0000 3046 0000 000a 0000<br />
0000020</p>

<p>% echo "あいう" | iconv -f UTF8 -t UTF32LE | od -x<br />
0000000 3042 0000 3044 0000 3046 0000 000a 0000<br />
0000020<br />
</pre></p>

<p><br />
<h5 class="subhead2">出力エンコーディングを iconv(3) で変換させてみる</h5><br />
<p>次のような改造をしてみました。</p><br />
<ul><br />
<li>mosh に -z オプション付きで、実行されると今回実装した Codec (MyCodec)を使用 (先ほどと変わらず)</li><br />
<li>MyCodec の入力エンコーディングは、UTF8Codec に委託して、UTF-8 を使用 (先ほどと変わらず)</li><br />
<li>MyCodec の出力エンコーディングは、iconv(3)を用いて EUC-JP に</li><br />
</ul></p>

<p><br />
<p>修正したコードの差分は以下の通りです。</p></p>

<pre class="source">
--- Port.orig.h 2008-06-24 00:12:20.000000000 +0900
+++ Port.h      2008-06-24 01:53:02.000000000 +0900
@@ -363,6 +363,68 @@
     }
 };

<p>+#ifdef USE_MY_CODEC<br />
+#include &lt;assert.h&gt;<br />
+#include &lt;iconv.h&gt;<br />
+<br />
+class MyCodec : public Codec<br />
+{<br />
+public:<br />
+    MyCodec()<br />
+    {<br />
+        utf8codec_ = new UTF8Codec();<br />
+#define INTERNAL_ENCODING "UTF-32LE"<br />
+#define OUTPUT_ENCODING "EUC-JP"<br />
+        cd_ = iconv_open(OUTPUT_ENCODING, INTERNAL_ENCODING);<br />
+        assert(cd_ != (iconv_t)-1);<br />
+    }<br />
+<br />
+    ~MyCodec()<br />
+    {<br />
+        int ret;<br />
+<br />
+        delete utf8codec_;<br />
+        ret = iconv_close(cd_);<br />
+        assert(ret == 0);<br />
+    }<br />
+<br />
+    // Be careful, buf is shared.<br />
+    int out(BinaryOutputPort* port, ucs4char u)<br />
+    {<br />
+        static uint8_t buf[4];<br />
+        const int size = out(buf, u);<br />
+        return port->putU8(buf, size);<br />
+    }<br />
+<br />
+    int out(uint8_t* buf, ucs4char u)<br />
+    {<br />
+        size_t inbyteleft;<br />
+        size_t outbyteleft;<br />
+        size_t ret;<br />
+        char *in = (char*)&u;<br />
+        char *out = (char *)buf;<br />
+<br />
+        inbyteleft = 4;<br />
+        outbyteleft = 4;<br />
+<br />
+        ret = iconv(cd_, &in, &inbyteleft, &out, &outbyteleft);<br />
+        assert(ret != -1);<br />
+<br />
+        return 4 - outbyteleft;<br />
+    }<br />
+<br />
+    // Input as UTF8<br />
+    ucs4char in(BinaryInputPort* port)<br />
+    {<br />
+        return utf8codec_->in(port);<br />
+    }<br />
+<br />
+private:<br />
+    UTF8Codec *utf8codec_;<br />
+    iconv_t cd_;<br />
+};<br />
+#endif // USE_MY_CODEC<br />
+<br />
 class Transcoder EXTEND_GC<br />
 {<br />
 public:<br />
</pre></p>

<p><br />
<p>ECU-JP で出力できているかどうか確認してみます。確かに、ECU-JP で出力できています。</p><br />
<pre class="source"><br />
% cat my_script.scm<br />
(print "あいう")</p>

<p>$ ./mosh -z my_script.scm | od -x<br />
0000000 a2a4 a4a4 a6a4 000a<br />
0000007</p>

<p>% echo "あいう" | iconv -f UTF8 -t EUC-JP | od -x<br />
0000000 a2a4 a4a4 a6a4 000a<br />
0000007<br />
</pre></p>

<p><br />
<h4 class="entry-topic">おわりに</h4></p>

<p>今回は、Mosh を実例として、OSS を改造できるようになるまでのステップ(OSS 改造メソッド)を示しました。
今回示したように、興味のある OSS を改造しながらさわることで、より深くその OSS を理解できます。
面白そうだな、と思った方は是非一度 OSS いじりにチャレンジしてみてください。</p>]]>
        
    </content>
</entry>

</feed> 

