04

TechLION再録 拡大版

13

漢のUNIX

20
22

伊勢幸一、技術との出会い。
ゲームを取り巻くインフラ技術を語る！
後藤大地

第24回

縁の木、育てよう 第11回

白羽玲子

Ploneシンポジウムで聞いた

CMS比較とPloneが大学で人気な理由

24

ユニケージ開発手法コードレビュー 第17回

29

姐のBENTO30

法林浩之のFIGHTING TALKS

32

現役PG社長がプログラマーに期待する2つのこと

34

スズラボ通信

38

大内智明

第15回

法林浩之
武井康浩

すずきひろのぶ

第20回

未来に活きる!現場で使える!

データモデリング
熊野憲辰

第18回

42

ITエンジニアのためのマーケティング入門

44

IPv6新時代を体感しよう！第9回

48

人間とコンピュータの可能性

50

水間丈博

第5回

波田野裕一
大岩元

第28回

中小企業診断士が解説する、超実践的な会話術!

円滑コミュニケーションが世界を救う！ 第6回
濱口誠一

52

ビジネスシステムイニシアティブ協会 例会レポート

54

中小企業手作りIT化奮戦記

57

めざせシェル女子！ 第4貝63
65

JT IT部長 引地久之氏の挑戦とは
菅雄一

第18回

～貝殻高校、パソコン部の日常～
ちょまど

階層

桑原滝弥

３つの「がくりょく」

シェル魔人／編集後記

ちんじゅうちゃん
本誌名称についてvol.21より「USPMAGAZINE」
から「シェルスクリプトマガジン」に、変更となりました。
バックナンバーは「USP MAGAZINE」
としてお求めいただけます。

本誌正式名称は「シェルスクリプトマガジンvol.28」となります。

運用の仕事をなくすための団体、

協会とは？

燕去月
再録を巻頭拡大版でお届けします。
TechLION

世界で一番実行されているパソコンゲームとは？

MSP伊勢 幸一、 清 水 勲、 伊藤 学、 竹迫 良範

伊勢幸一、技術との出会い。
ゲームを取り巻くインフラ技術を語る！
聞き手：法林浩之、馮富久 まとめ：シェルスクリプトマガジン編集部

撮影：Tomocha

5月25 日、六本木 SuperDeluxe にて TechLION vol.21が開催されました。
第一部 獅子王たちの夕べでは

日本 MSP 協会事務局長・テコラス株式会社の伊勢幸一氏にお話しいただきました。

ユニークなデータセンターと日本 MSP 協会がすすめる IT 業界活性化の妙案に注目です。

清水勲氏、伊藤学氏、竹迫良範氏をゲストに迎えた第二部 ジャングルバス .com では、ゲームと IT をテーマに海外での運用からチート対策まで多彩なトークが繰り広げられました。

第一部

IT サファリパーク

久しぶりの獅子王登場、
各種団体のなんでも屋
法林：第一部は久しぶりの獅子王たち

団体といいますか、そういったところで雑用係をやっています。クラウド利用推社だったというだけです。スクウェアの証実験 TF、Open Compute Project

た。ライブドアは社名が変わったりして

法林：日本 MSP 協会で事務局長もやです。ということで、現在はテコラスに進機構とかですね、オープンクラウド実

Japan…まぁこんなことをやっています。

の夕べです。今回お招きしたのはテコラ

られているんですね。ある団体では会長

しゃいます、伊勢幸一さんです。皆様拍

結構すごいと思います。

伊勢：よろしくお願いいたします。

に転職を3回しておりまして、新卒で入いうタイトルでお話ししていただきます。

いう日立系の設備会社でした。機械設ス株式会社の技術研究所所長でいらっをやり、ある団体では事務局長をやり…

手でお迎えください！

伊勢：基本なんでも屋なので。今まで

法林：今日は「技術と IT ジョブと私」と
伊勢：皆さんよろしくお願いします。では簡単に自己紹介を。伊勢幸一です。

テコラス株式会社の技術研究所所長を所属しています。

座ったままでデータのやり取りができる事が衝撃だった

計をやっていたんですよ。その後、デジているかというお話。WIDE が発足した

ウェア（現スクウェア・エニックス）といというのが1989 年です。

マが「ゲーム」だということなんですが、がつながった、という訳ですね。

タルテクノロジーという SIer を経てスクの仕事が多く、大体は、IT 業界の任意

実は私、ゲームはあんまり関係なくてで2015 August

いますが、この10 年間は同じ団体なん伊勢：「技術と IT ジョブと私」という事

うゲーム会社に行きました。今日テー4後は2005 年にライブドアに入社しまし

社したのは日立設備エンジニアリングとやっております。何やってるんですか？

とよく聞かれるのですが、テコラス社外

すね、たまたま勤めた会社がゲーム会ですね、インターネットと私がどう関わっ
直後、機械工学屋から IT 業界に移った
法林：そこで伊勢さんとインターネット
伊勢：それまでインターネットとか知らグはファイナルファンタジー 7の開発が始 まった 時 でした。2D から3D に 変

法林：一人で全部やったんですか！（笑）

ピュータが使えるエンジニアが必要だとの21inch の tube モニタを一人でセッ

わって、シリコングラフィックスのコンいう事が求人広告に書いてあって、普通に面接を受けて採用していただきました。FF7ではひたすら開発環境の構築を行いました。グラフィックデザイ

伊勢 幸一さん
なかったですからね、正直。89年ってナーの人達が絵を描くときにはやっぱり

Macintosh を使うので、そのグラフィッ

クを UNIX-WS や Windows 環 境と共有する必要がある。Cap60サーバといまだ日本にネット普及してないですから。

うものがあったのです。

伊 勢：まだ FTP もできなかったので、

伊勢：そのころから運用ツールを自分で法林：そうですね。

UUCP メールとか…

法林：わかんないですよね、最近の人

法林：そういうものを用意していた、と。

書くようになりまして、スクウェアに入る前は C 言 語と Bourne Shell くらい（笑）

しか使っていなかったんですけど、このクエスト出して、GCC の値を分割して、て作るようになりました。この当時は、伊勢：GNU の GCC とかもらうときにリ

頃に色んな LL とか、JAVA とかを使っ

uuencode してもらって、メールもらっ

とにかくプログラミングが好きだった。

法林：何十通かくらいになりますよね。

ど…、今日この会場に、著者が４名居の IT 業界に来た、と。各会社で何をやっですよね。

て後で繋げる、みたいな。

伊勢：そんなことをやっている時代にこていたかというと、デジタルテクノロジー

は当時、SIer 的なことをやっていまして、でやったんですけど。

AWK とか。この本が最近出たんですけ

るとか、5 名のうち4名（笑）。…すごい
会場：笑

伊勢：若者が倒れたんです。100 人分

トアップするつらさ！
会場：笑。

ツールを作っていたら
大規模分散システム好きに
伊勢：この頃に色々自作するようになりまして、当時ラックマウント型のサーバってなかったんですけど…
法林：自作したんだ！？

伊勢：自作しました。筐体から中身まで全部自分たちで…筐体は私もともと機械設計屋なので自分で設計図面を描いて業者に渡しました。２U のね。
法林：型を起こしたんだ！

伊勢：他の自作ツールとしては、DLTのジュークボックス用のバックアップシ

ステムとか…バックアップツールのソフト

ウェアって出来が良くないんですよ。
会場：笑

伊勢：まぁ自分で売ってたからわかるんですけど。自分でアーキテクチャをスラ
イドして、安全なバックアップシステムを作って運用していました。あとはレンダ

富士通 S ファミリとか、松下電気のソル

ボーンとか覚えていますか？

リングキューディスバッチシステムとか、

伊勢：あとは DECstation とか SONY

必要なツールは作っていました。

法林：ソルボーン覚えてます。

スナップショットファイルシステムとか、
法林：無いから作るという事になったんNEWS など、国内で調達して周辺機器でしょうね。

を付けて流通させるということもやって

伊勢：いや、あるんですよ。

いました。デジタルテクノロジーではネッ

法林：あ、さっき言ったようにモノが良

トワーク周りやテクニカルサポートなどをやっていました。この頃は、とにかくネットワーク関連が好きだった。以前は

伊勢：1997年に、「アメリカに行け」とタは2分の1のオープンリールかフロッ

う会社が立ち上がりました。この会社は、業界に入って座ったままでデータをやりことですが、誰かが「俺ハワイに住みたにかくネットワークが好きで好きでしょ

ハワイで映画を作ろう！となったんです。

機械工学屋が機械工学をしていて、デー

ピーでやり取りしていたんですが、この取りできるというのがすごい衝撃で、とうがなかった。

法林：なるほど。

スクウェアへ転職してからプログラミング好きになった
伊勢：スクウェアに転職したタイミン

言われてですね、SQUARE USA とい

くないということですか？

伊勢：モノは良くないし、金がかかるんですよ。製品の質もダメだし、やっぱり

ライセンスポリシーがすごくダメなんです。

映画製作会社・ゲーム開発会社というこの頃のはとにかく大規模分散システいな」「映画作りたいな」って言ったので、play online というのをやり始めました。

馮：希望がそのまま。

伊勢：そうです、希望がそのまま実現してしまうというすごい会社でした。それから LA にもオフィスがあって、LA とホノルルを行ったり来たりしていました。
何をやったかというと、制作スタジオの立ち上げです。誰もいなかったので一人ムが好きだったと。この後日本に帰ってDC の設計と運用などをしていました。

法林：だいぶ DC 屋っぽくなりましたね。
伊勢：そうですね。そしてこの頃初めて

トランジットやバブリックピアリング、プ

ライベートピアリングを意識し始めました。最後に株式会社ライブドアですが、

さくっと行きます。
法林：はい。

5

伊勢：後の株式会社データホテル、現

いんじゃないか？と思い始めたんです。

本題です。

伊勢：わざわざラックとサーバを置く為

在のテコラス株式会社です。以上、さて法林：おお！

会場：笑に DC を建設するのではなくて、もとも

法林：ラスト10分で本題に入る！

お金のかかる設備は、金を稼がないと電源と回線があるところに、ラックとサーバを置きにいけばいいんじゃないの、と。これが所謂ホスティング事業者の発想なんですよ。結局、箱作った方が負けなんじゃないか？となって今進めか、という技術が必要で、ベアメタルプ

ロビジョニングや分散リソースの運用技術がキモです。それで去年の11月に日

本 MSP 協会を設立しました。何をやっているかというと「MSP の仕事をいかに無くしていくか」ということです。
法林：そうなんですか！？

伊勢：はい、自動化とか、運用設計ガ

イドラインとか、どんどん標準化したり

伊勢：2013年春頃にとある北の国から、ているのが、付帯設備の無い DC をいとか、ツールとか技術をどんどん公開、ないか？という話がありました。モジュー法林：なるほど。ほう…

していこう、という協会なんです。

横にどんどん長く繋げていくという DC

プロジェクトというものを現在進めてお伊 勢：なので、MSP 協 会というのは

これは、雪が積もると雪下ろしがとても

法林・馮：へー

よりは、これまでやってきた MSP のオ

ずるずるずるっと横に落ちる仕組み。屋法林・馮：Stand Alone Cabinet

いう、そういう協会なんです。そして、

自然エネルギーを活用した DC を作らルタイプで、20ラック1モジュールで、かにして作るか。

伊 勢：ということで、Movable の DCを作りました。形はドーム型なんですが、ります。

大変なので、雪下ろししなくても、ずる

伊勢：コード名 S.A.C といいます。

根のすぐ下に排気が溜まるようになっていて、その熱で屋根と雪の間に水ができて滑って落ちる、というスタイルです。

法林：へー！そういう設計なんだこれは。
伊勢：ドーム型は強度と材料のコスト費が一番少ないらしいです。面白いのは、上に空調があって、下にサーバがあるんです。普通 DC 屋さんはサーバのラックの上に水回りがくるというのは嫌がるんですけど、別にサーバ濡れたって構わないじゃん、という発想です（笑）
会場：爆笑

伊勢：サーバを大切にしようとすると、
DC コストとか運用コストってあがるんですよ。

法林：そういうことですよね。

伊勢：サーバ壊れても良いって思えば、運用コストや建設コストって安くできるんです。そして、北の国なので、夏以外は全部外気で冷却します。夏の30 度超えるときだけ雪をつかって冷やすという仕組みです。とまぁこういう DC を作ろうと試算してみました。ところが、投資回収に10年以上という計算に！何が問題かというと、1ラックあたりの DC 建

設コストが非常に高いという点です。
ラッ

クを立てる付帯設備にコストがかかる訳ですが、この付帯設備は金を稼がない

わけですよね。ユーザがお金を出すのは、ラックの中にあるサーバなんです。中身のサーバよりも建設費の方が高い！だったら DC って、ラックとサーバだけでい62015 August

会場：笑。

運用の仕事を
いかに無くしていくか

共有していって、運用エンジニアを無く
法林：ほー！

MSP の事業をを活性化させるというの

ペレーションをどんどん無くしていこうと需要にマッチしたサービスを提供していこうと。既得権者に刈り取られるだけでは、いつまでたっても IT 業界は活性化

していかないので、やっぱり IT 業界は
IT 業界で、正しいことを正しいように考

伊勢：このスライドにでているのがハーえて提供していこうということで活動してす。何が違うかというと、ラックが斜めしか無いんですけれども頑張っていこう

側に取っ手がついていて、下に可動式

終わりです。ありがとうございました！

載しても、ちゃんと運べます。横幅が、第二部 ジャングルバス .com

フラックの Stand Alone Cabinet でになっていて、この斜めになっている内の車輪がついていて、サーバを全部搭

一般マンションのエレベーターの幅より小さいので、普通のエレベーターで運べると。なので普通のマンションとか普通のオフィスの中に設置できると。
法林：すごいな

伊勢：問題は、点在する S.A.C をいかに需要に応じてデプロイして提供するいます。ということで、定年まで後数年

かなと思います。
（笑）以上で私の話は大人気ゲーム「モンスターストライク」
法林：では第二部に入りたいと思います。

ゲームと IT に関する3名のゲストをお呼びしました。伊勢さんにもコメンテー

ターとして入っていただきます。

伊勢：よろしくお願いいたします。

馮：早速トップバッターの mixi の清水さんにお話しいただきたいと思います。

よろしくお願いします。

清水：「モンストを支える IT インフラ」というタイトルで、ちょっと大げさ…。
法林：いやいや馮：今までにあまり表には出ていないお話ですよね。

清水：そうですね。私は株式会社ミク

シィの、モンストスタジオというところに所属しております。

法林：部署名なんだ。

で、「モンスターストライク」とは、とい

清水：モンスト専門の部隊ですね。

うことなんですけど、たくさんいるキャ

りましたよ。

2013年10月10日に正式リリースし、

かもしれませんね。現在入社四年目でが出ました。現在は日本が一番大きな

伊勢：エニックスにもドラクエ課ってあ
清水：ゲーム業界はそういうの多いの

もともとは SNS の mixi のインフラ面をずっとやっていました。モンストが出始

ラクターで、ゲームをやっていきます。
先に iOS 版が出て、 次に Android 版

規模なんですが、台湾、香港、マカオ、中国、北米、韓国という国でもグロー

めて、これはちょっとヤバいぞっていう

バル展開しています。

スターストライク」と、最近リリースした

伊勢：運営は一カ所なんですか？

というのを使って、自社で DC とつないで提供しています。ただ、AWS をがっつり使っているかというと、実はそうではなくて、意外とオンプレ比率が高い。
本番はほとんどオンプレです。リリース
初 期は AWS がメインだったんですけ

ど、徐々にオンプレに移していった形です。これは特徴かもしれないですね。

馮：これは何か理由があるんですか？

時にジョインして、今に至ります。
「モン

法林：各国語版があるってことですね？

「モンストスタジアム」のサーバ運用を

清水：それぞれの言語で、運営は一カスがすごく良いんです。実はマシンを買っ伊勢：一カ所で運営をしていて、各国

法林：クラウドは実は高いんですね。

やっています。モンストはもちろんやっていますが、モンハンも大好きです。モン所です。

つながりで（笑）

にサポートが居るような感じですか？

法林：モンハン好きな方も多いですよね

る感じですね。 世 界 累 計 利用者 数はりました。ほぼ毎日やっているくらいで

法林：すごい。

会場：笑

清水：多いですね、今日の昼休みもや清水：はい。全部会社の中でやってい3,000万人を突破しました。

清水：圧倒的にオンプレの方が性能が出るんです。あとはコストパフォーマン

た方が安い。

清 水：もともと SNS の mixi がずっとオンプレで運用してきたので、その辺のノウハウがあるからという点もあります。
ただ、海外版や、リリースしたばかりのモンストスタジアムは実は AWS だけ

清水：それから、ゲームの特徴を簡単だったりします。そこは分けていて、負うのでご紹介します。モンストは、エン

いうのがメインのゲームです。4 人で協増えたら移していく感じになるのかな。

ます。また、mixi は昔から SNS をやっモンスターを強化・進化させたり、ひっして、mixi や、Find Job!、あと最近だが起こるか、など。

す。自己紹介はこのくらいにして、mixiの事業について知らない人が多いと思にご説明します。
「ひっぱって遊ぶ」、とターテイメント事業ということでやってい力プレイができるのが売りです。あとは、ていて、メディアプラットフォーム事業とぱってぶつけるので、ぶつけたときに何と nohana など色んな会社がくっついてサービスを展開しています。

法林：分け方がモンストとそれ以外だよね。

清水：完全にそうなっちゃってますね。

伊勢：mixi さんはもともと SNS が母体

じゃないですか、母体とそれ以外が一

インフラエンジニアとしてスマートフォンゲームを支えていくためにはて、バーンと当たったらオンプレの方が効率いいよということですね。海外で当たったら、海外もオンプレにするんですか？

清水：ここからちょっと技術的な話。どと言ってこなかったので、ちょっとご紹

清水：そうですね、モンストがさらにということで、日本版はオンプレと AWS別格になっちゃったという感じですね。

伊勢：スタートアップとか、予測できな

いところは AWS でちょろっとやっておいんなインフラなの？っていうところは意外緒になってるんですね。それでモンストがさらに…。

荷がまだないものとか、これから徐々に介したいと思います。まずインフラ構成の併用です。AWS の Direct Connect

清水 勲さん7

清水：海外は現地の問題があると思う

マートフォンの最適化で大切なのは、レのままでいく可能性高いです。次にサー設計・構成を出来るだけ最初から考えので、そこはわからないですね。AWS

スポンスを早くすること。スケールする

バの構成ですが、物理サーバは EC2でておくこと。Chef、Ansible などのイ関係ない、Google とも関係ないお話です。元は何屋さんかというと、学生時

代は税理士を目指していたんですが、当時インターネットが流行っていてパソコ

OS は Ubuntu です。ディスクは SAS

ンフラのコード化や、データの増え方、

んど SSD にしています。アプリサーバ法など、最初に考えておくと後で楽でき

ト制作ユニット STUDIO Freesia を結

インフラはとっても大事ですと。急激なやっています。一時期制作会社に入っ

HDD、SSD、ioDrive で、最近はほとDB の分割の可能性、データの削除方

を200台くらい出しています。日本版だる。まとめると、ゲームリリース当初のけです。開発言語は Ruby で、フレームワークは Padrino を使っています。

スケールアウト、スケールアップが求めン部に入ったのですが、Web サイト制

作にのめり込んでその勢いで Web サイ
成したことが始まりです。今も Web をて、某自動車メーカーの Web サイト設

馮： 開 発 言 語が Ruby っていうのは、られるのがゲームならではなのかなぁと

清水：そうですね、mixi といえば Perl

存続すら危ういです。そしてクラウドのど…。

スタイルですが、GitHub で PR ベース

発体制や運用体制を強力に持っておく

伊藤：税理士の知識もあったので、お境にデプロイします。開発環境は Mac

らは以上です。

法林：みなさん OS X で開発するんでネットを駆使した地域活性清水：はい、もうみんな Mac ですね。

法林：では二人目のお話を伺いましょんかもやっていたので、地域の色んな所「INGRESS と地域活性とコミュニケー

いかを考えていました。今は地域活性mixi が変わったな、という点ですよね。

思います。スケールできないとゲームのという感じでしたからね。それから開発

特性をちゃんと理解して使う。あとは開の開発をしていて、1日に何回も本環必要が有ります。というところで、私かOS X が基本です。
すね。

コミュニケーションは HipChat を使っています。これも AWS のホスティングで動かしています。それから運用ツールですが、グラフは CloudForecast を使っています。また、アラートはずっと昔か

清水：ゲームと SNS は全く違うと思っていて、特に昼はゲームの方がイベントやったりとかで、かなり伸びています。

あとゲームと SNS の違いは、夜のピー

クタイムが若干ずれているかなと。ゲームは0時をすぎると一気にやめるとか。

伊勢：サラリーマンの活動時間と一致していますよね。12時にお昼休みに入って携帯を出しゲームを始める、そして、家に帰って18時から22時くらいまでやると。そのあとは、翌日があるので寝る。
法林：そうですね、面白い。

清水：インフラエンジニアとしてスマートフォンゲームを支えていくためには、ク
ラウドに対する考え方がいくつかあるのかなと思います。なんでもクラウドが良い！みたいな風潮が最近あるんですが、悪いところもあったりします。そしてス82015 Augustて辞めて、フリーランスになりました。

その 数 年 後 に 大 きな 地 震 が あって、
Ustream の関連のエバンジェリストなのお仕事を、特にネットを駆使した企画

てる人どれくらいいらっしゃいますか？

や、資格系の学校の講師をやっています。

馮：さすがにやっぱり多いですね伊藤：で、INGRESS ですが始めたの

伊藤：せっかくなので、INGRESS やっ

伊藤：青と言う人！…あれないですか。

金の事もわかっていたんで察してはいたんです。この会社まずいな、と思っション」です。よろしくお願いします。

あとプロビジョニングは Chef ですね。

は年末年始にガッとあがるとかあるじゃ

法林：おおお（笑）

を渡り見て、ネットを使って何か出来な

ちょっと挙手していただけますか？

馮：傾向はあるんですか、例えば mixi

社長が遊びすぎて潰してしまいましたけう。STUDIO Freesia の 伊 藤 さ ん でら使われている、Nagios なんかを使っています。集計は Fluentd とかですね、計などやったこともあります。最終的にの提案をしつつ、デザイン学校の講師
法林：色んな事をやっているんですね。

は iOS 版が出た2014 年 7月14日から

法林：少ないねです。で、何をやっているのかとう言うと、

法林：結構偏ってますね

この辺のことを私も動いています。今地

会場：笑

これは商店街の話ですが、人が来ない

伊藤：緑という人…あぁ…
伊藤：敵ですねぇ…

伊藤：INGRESS に関しては色々活動しているので、今日はそのご紹介をさせていただきます。インフラ関係とは全然地域活性です。最近騒がれていますが、域ってどんな風になっているかというと、のでシャッター街が増えてしまっている。
そして跡継ぎが居ないので高齢化が起きてしまっている、という悪循環になっちょっとだけいただいたんです。最初の伊藤：ゲーム上で何かではなくて、実際たらたくさんの人が「コレを作っている所をやらせてもらいました。でもこれは3日会やろうかという事になりました。

で、結局一人しかこなかったんですけど。

頃は私が関東で配っていました。そうしが見たい」という話になり、じゃあ見学
法林：名古屋まで行ったんですね。

伊藤：名古屋まで行って、右手にカメラ、やってきた事でなにかもらえる、というの間しかなかったのと、クリスマスだったの
会場：笑

伊藤：でも来てくれた人が居るというの

左手に iPhone で、Twitter で生中継しは嬉しいです。じつはこのミッションは

伊勢：ちなみにコレ通販はしていないん

わざやってくれたんです。それからそのてしまっているんですね。やりたいんだ

伊藤：通販今してます！

けて指定ミッションをクリアできたらワンい、という…。

ルドワイドに向けて？

法林：なかなか難しいですね。

ないですね、日本だけです。飴の着色と伊藤 学さんけど、よそ者には好き勝手やらせたくな
会場：笑

伊藤：どうして「よそ者には好き勝手やらながら見学会をやらせてもらいました。
ですか？

ドリンクというものでした。

伊藤：ワールドワイドに向けてはしてい伊藤：そうですね、この時は5 店舗許か香料が海外では NG なものがあるんですけど、それがわからないんです。なや企画屋さんが多いんです。ただ、実際まったら困る、ということで、今は日本の声を聞いてみると「一発で終わり」と。
馮：継続しない。

伊藤：継続できないものばっかりやって、収益を得る。例えば『助成金』をもらう事が目的になってしまっていて問題になるんです。INGRESS に関しては皆さん

ご存知の通り、地域活性のためのイベン

トをやっている地域があります。横須賀

市は、デザインもホームページ全部内

製しています。かっこいいメダルも作っているそうです。東村山市は、某ゲー次にやったイベントは年末から年始にか伊勢：あ、してるんですね。それはワーせたくない」という意見が出るのかというと、最近は地域活性をしようという NPO

一時間くらいかかるもので、それをわざので、送ってしまってトラブルになってしだけになっています。

一番重要なのは、地域が自立できること

法林：これは色んな店ですか？

可をもらえて「人が来なくてもいいじゃん、やろうよ」と温かい言葉をもらってやらせていただいて、これは二人の参加者（笑）。逆に、はしご酒の時はチケットが完売して INGRESS で確認がとれた人数は40 人でした。

法林：かなり増えましたね

伊藤：2日間やったんですが、2日目は私も受付をやって、「青ですか？緑ですか？」「どこから来たんですか？」「青で伊藤：それから私の方の企画では商店

すか？緑ですか？」って聞いて回ったら、街はなかなか自分たちで新しい事が出

法林：ちょっと遠い所から来てくれてい街ですね。先ほど言ったように、商店

意外にも、東京だとか…。

来ないので、私が今住んでる川崎の登たんですね。

みが有るのでやらせてくださいとお願い

よ、と。コレはコレとして成功でした。

酒」というイベントが行われるんですが、法林：大体、ミッションをやって何かす

戸の商店街で、地主さんともちょっと絡

伊藤：こんなこともなければ来ないです

しました。そして、一年に三回「はしご今後も色々な企画を準備しています。

一万円だけ予算を取っていただいたのるともらえる、という感じですか？

いるかというと・・・、INGRESS 飴っ

このときはミッションを用意して、まずを見れるものにしないと、効果測定がで

法林：INGRESS 飴知ってる人！おおすと。参加者がミッションをクリアした上

伊藤：要は金太郎飴ですね。名古屋の抽選で INGRESS モバイルバッテリーム会社の方が「中の人」をやっているそうなんですが、会社とは全然関係なく、個人で東村山市と連絡を取って運営したそうです。その中で、私がなにをしてて知ってます？

ごい、みんな知ってますね。

飴を作っている工房があるんですが、こで、何か面白い事やろうということで、

伊藤：そうですね、やっぱり何か結果

そのミッションをクリアしてきてください

きないっていう点があります。

ではしご酒のチケットを買ってくれたら、も聞いてみた所、地域活性で必要な事をプレゼント、という企画をやりました。

る人と、何をやったら何が起きて、お店

法林：限定ミッションをクリアして来店

ハッキリさせることなんです。そして一番

伊藤：色んなセミナーやってる方のお話

は、自分の地域で、普段付き合いがあ飴とガムもプレゼントしました。

や商店街にどんなメリットがあるのかをてる最中の動画を UP したら、一晩ですると、ワンドリンクサービスですか。

重要なのは、やった内容が、後で自分とがあったんですが、知り合いなので「欲せていただいています（笑）

法林：自立できる内容ってことですねと。

伊藤：リアルで報酬をもらえる、というが大事なのかなと。あとはエージェント

この社長がお友達で、INGRESS のエー

ジェントなんですね。彼がこの飴を作っ
世界中を駆け巡ってしまったっていうこしいな～」と言ったら、「じゃああげる」
法林：作ってくれた？

伊藤：いえ、この動画で作ったやつを

伊藤：はい、これは一応日本初と言わ法林：初なんだ！
事ですね。

法林：ああ、なるほどそういうことか！

たちでも出来るように。

伊藤：はい、自立できる内容にするのさん（住人）とできれば仲良くしたいので、リアルの交流もやろうと。これらを9掲げて、少しずつやっています。こんなところです。

マインスイーパを自動で解いちゃう“マインちゃん”
法林：では続きまして三番目のゲスト、サイボウズ・ラボの竹迫良範さんです。

竹迫：コピーライトにですね「Cybozu

Labs, Inc.」って書かれていまして、こ

竹 迫：こんなものを YAPC で 発 表したことが あります。37秒 で 上 級 をク

れはガンホーさんが作っているソフトな

リア し た こと が ありま す。Perl に はプンソースのライブラリを公開している

ジュールがあって、コレを使うとプログラ

んですけれども、サイボウズ・ラボはオーんですが、それを使っていただいたので、謝辞の中に入っています。

一切開発には関わっていないんですけど

竹 迫さん TechLION 二 回目の出 場でも、オープンソースじゃなくて売り上げ行為は悪なのか？」というタイトルでお会場：笑

お願いいたします。

ちゃんというものを作りました。ここでWin32::GuiTest というテスト用 の モ

ムを実行するだけで、メモ帳が起動して
foo、bar、baz などを打つ事も簡単にできます。他に、マウスもできます。自動でサインカーブを描くように、マウスをす。今日は「オンラインゲームのチートの0.01% でも欲しかったなと（笑）

話をしていただきます。それではよろしく

竹迫：私自身は、YAPC::Asia でマインいるんですか？

クイズなんですが、世界で一番プレイさされています。

33.8 歳で男女比6:4で社内結婚もよく

ラ（２）モンスト（３）マインスイーパどれ竹迫：あとスクリーンショットを自動であって、DS 部なんていうものもあります。

会場：（ざわざわ）

活 PLUS』という、INGRESS が出る前

会場：笑と頭のいい人は、数字のボタンを画像の無駄です。

けちゃうんです。ただこれデバッグが結竹迫：サイボウズ・ラボの竹迫といいます。どんな会社かというと、平均年齢れているゲームは何でしょう（１）パズドあります。公式クラブ活動が31部以上でしょう皆さん！？

ゲームといえば、自分は『コロニーな生

竹迫：…正解は、ソリティアです。

にあった位置ゲームなんですが。
馮：コロプラですね。

竹迫：そうです。PHS の位置情報を使っ

竹迫：世界で一番実行されている時間

動かすこともできます。自動でクリックも。
伊勢：これオープンソースで公開されて
竹迫：はい、Perl のライブラリで公開
伊勢：すごいですね。

撮るものなど。これらを組み合わせると、電卓のあるウィンドウだけを保存するな

んてことが出来る様になります。ちょっ
解析すると、マインスーパーを自動で解構大変で、暴走問題というのがあって、て、1キロ歩くとちょっとお金がもらえる、

キーボードの制御を奪っているんで、な

震災後にユーザーがどういう風に動いた

会場：笑

うだったとか。例えば GW に東京ディズ

USB メモリを使うんですね。autorun.

という。こういった位置情報のゲームは、

かなか停止が出来ないという。

かという統計情報だとか、何月何日にど

竹 迫：どうしたら良いのかというと。
inf に open=taskkill /F /IM perl.exe

ニーランドにいっぱい人が居たとか、そとして、USB をさすと…。

ういった情報を位置ゲームは収集してい法林：死んでくれるんですね。

るんですが、その時にチートをやろうとしていた人が結構居て、運営との戦いとかあったみたいなんです。

会場：爆笑

竹迫：そうですね。例えばですよ、一バイトの Perl の正規表現のプログラム

会場：笑。

竹迫：私 Perl が好きなので、52,000

人間と機械の立場が逆転か日に東京→九州→大阪→北海道…とめを作ったので、ちょっとデモします。

竹迫：これは応用で、ソフトウェアに脆「コレは怪しいだろう」と。

minechan.pl…

きます。

法林：昔からあった事なんだね。

ちゃめちゃ移動してる人がいて、運営が会場：笑法 林： お、 デ モ が で きるんで す ね。
竹迫：これ実行すると、マインスイーパ

竹迫：普通 BAN する（※【BAN する】

が起動して自動でマウスクリックされます。

調べると実は客室乗務員の人だったり。

れるんですね。

アカウント停止すること）んですが、色々
法林：不可能じゃない訳だ！

竹迫：あとトラックの運転手の方とかも弱性が無いかをしらみつぶしにテストで
法林：すごい。

竹迫：普通、正常系テストというのは、

法林：マインスイーパを自動で解いてく「実装」と「要望」があって、お客さん

馮：しかも登録までしてくれる。

実装されていなければ機能不足ですよの要望が実装されていれば満足して、

竹迫：爆弾の無さそうなところをランダね。セキュリティっていうのは「負の要法林：強い職種があるんだね。

していきます。画面の数字は確率を計算

どうできるかという事なので、してほし（パズドラ）はご存知ですか？コピーラ

で動かしてハイスコアの登録も自動で。

多かったです。

竹迫：あとですね、みなさんこのゲーム

イトの画面出した事ありますか？

法林：あんまり出さないのかな。

102015 August

ムにクリックしていって、ちょっとずつ潰

望」
なんです。してほしくない事に対して、しているところです。これでマウスを自動くない動作が、ちゃんとできないという

会場：笑

弱性になっちゃう。昔、ファミコンの「裏法林：すごい自動化！

のは堅い作りなんですが、できれば脆技」、あれって実は、「脆弱性」なんですよね。ゲームのチートはノウハウが溜まってないんです。セキュリティコンテストのSECCON で「サイバー攻防戦のリアル

タイム可視化」というものがあって、サイバー模擬戦みたいなものを NICT さん

が開発しました。サーバ6 台 24チーム

第三部



会場からも質問続出、
15 時の負荷とは
法林：三部の方に入りたいと思います。

オープンソースとプロプライエタリ
質問者：オープンソースが色々と便利になってくる中でも、やっぱり業務によっがそれぞれ攻撃をしているのをリアルタよろしくお願いします。この時間は、ゲー

法林：すごいね、悪い事してるのにかっます。

ここは外せないというのがもしあれば、

竹迫：そうなんですよね。
これはNIRVANA

カーの皆さん同士でも、多分聞きたいこ

竹迫：まあ、Excel と Word ですよ。

イムで可視化し攻略するという。
こ良く見える。

ムに関するあれこれを質疑応答で放談し
馮：会場の皆さんからか、あるいはスピーては、オープンにできない部分、プロプ

ライエタリのものを使わないといけない、
教えてください。
会場：笑改というシステムです。
最近はですね、「振り

ともいっぱいあるんじゃないかな。

馮：ありますね。

からいきましょうか。

させるというものですが、オンラインゲー

トラフィックグラフで、15時に小さい

ゲームバランスが崩れるとか、ユーザのうか？

けど。自分のスキルが及ばないところとラム取引なんかは不公平感ばりばりで個で す け れ ど、 モ ン スト 以 外 の ゲ ー

ケージを使うっていうのは基本ですね。

これは規制されないのか。オレオレ詐欺

内 で 色 々と イベ ント が あ る んで す。

用のソフトウェアが多かったんですか？

みたいな。モンストにはイベントを通知

コンシューマーのゲーム機だったんで、込め詐欺」ってありますよね。

竹迫：あれは機械じゃなくて人間に操作

ムのチートが悪いと言われているのは、不公平感からです。株式市場のプログ

人投資家とか不利じゃないですか、何で法林：じゃあまずは、参加者の皆さん

馮：外せない？

竹迫：絶対外せないですよね、仕事で

質問者：先ほどのスライドのモンストのきないですね。

ピークがあったんですが、これは何でしょ

伊勢：何でしょうね。基本的に無いです

清 水：15 時 に 限 った 話 で は な い ん

ム も そ う だ と 思 い ま す が、 ゲ ー ム

法林：伊勢さんは、何かないですか？

か、責任取りたくない部分は、商用のパッ法林：ゲームの開発って、昔だと、商伊勢：僕はスマートフォンとかではなく、はダメですけども、例えば大規模システ「この時間にこういうキャラが降臨する」

20億円で夢のようなシステムを作らせてしてくれる機能があって、通知があると詐欺 ”…なぜこれが摘発されないのか。

れで、ちょこっと伸びて、少し落ち着くい、という決まりがありました。

伊勢：多分それは逆で、我々 IT 業界のたんですね？

ンピュータが握っているんじゃないかな会社には15時に休憩があります。

リですけど、開発環境はほぼオープンな空 調 設 備で無 停 電。 超 高 級ですよ伊勢：休憩時間にちょっとトラフィック

法林：ああ、そうだったんですか。じゃムの導入とかで「発注していただければいただきます。
」というような ” システム

やはりアクセスが集中するんですね。そ会場：笑

みたいなことがあったのかなと。

ていたりして、実は会社の経営権はコ

人間には分からないんですけど、一般的

竹 迫： 最 近は株の取引を機 械がやっな。サーバ運用は24時間365日快適

会場：笑

その場合には SDK はプラットフォームが提供するものを使わなければいけな

法林：オープン・テクノロジーじゃなかっ伊勢：いや SDK は提供されるライブラ

ソースですね。

ね。データセンターには、機械が故障が上がるので、当然運営はトラフィック

あそこは割と前から、オープンだったと。

間と機械の立場が逆転しているんじゃですよ。イベントがあるから入ってくるので、商用のパッケージを使うというのはます、どうもありがとうございました。

ますって言うのが運営の基本です。

はシステムを外注して使うという。

法林：僕らが世間の常識を知らなかっ水さんは何かありますか？

すると人間が駆けつけてくれる。もう人ないかと。というところで、以上になりが上がるときにイベントを噛ませてくるん

ではなく、人が増えた時にイベントを噛
馮：なるほど。

たみたいな話だ。

ほぼ無いです。ただ、管理系の方たち
法林：そういう感じだったんですね。清清水：そうですね、モンストでいうと、さっ

清水：おやつ休憩みたいのがあるんです

き上げたソフトウェアは全部オープンソー

伊勢：おやつを食べるかどうかは知らなも、プロプライエタリのものはないなと

法林：休憩って言うのは確かにあると。

Excel、Word に近いですけど、OS で

ね。

いけど。

次、行きましょう。
竹迫 良範さん

伊勢：システムの運用とか業務システム

スです。ずっと色々考えていたんですけど
思っています。しいて言うなら、さっきのすよね。そのクライアントの OS。Mac
OS だったり Windows だったりです。

法林：なるほど。では次に行きましょうか。

11サポートとバランス

チートの定義と判断基準らないんだけど、自分たちが将来稼げる

質問者：ゲームという、ユーザーに近い

質問：ゲームの中でチートになりやすい、

短くなってきちゃうんで、運営の方は必ジャンルの中で、サポートの面でなにか気をつけていることや注意していることがあれば教えてください。

という点での定義や判断基準はなんでしょうか。

竹迫：数年前まではアイテムのプレゼン

法林：ユーザーサポート！

ト機能というのが結構普通にあってですはあまり見てないんですが、サポート用

りできたんです。でもそういう機能があがないと、効率よくサポートできない」

きて、裏で「お金を振り込んだら、この清水：そうですね、私はサポートの方の開発メンバーがいて、「こういうツール

ね、普通のユーザーがアイテム交換した

ると、リアルマネートレードなんかも出て

伊勢：チートされてもリアルマネーは減であろう利益がどんどんどんどん寿命が死になってチートを防ぐわけです。

オープンソースにしちゃうとだめなもの
清水：さっきの質問で補足というか、プロプラエテタリのソフトのことなんですけ

ども、開発する上でのツール的なところという時に手作業ではとても追いつかなアイテムをあげます」みたいな感じになっが居ます。あとは当然、窓口でユーザー

ムのトレードとかってないはずですね。

ソースではないというか、オープンソー

法林：あんまりないね。

法林：そういうものはありますね。

いので、そういうツールを開発する部隊

さんと直接やり取りするメンバーがいて、そこは体制として必須ですね。すごく大事にしているところです。
法林：なるほど。

てしまったので、最近はそういうアイテ

ソーシャルゲームなんてほとんどない。

竹迫：なくなってますね。だから、段々スにしちゃうとだめなところはあります。

伊勢：パッケージで購入するというのはないけど確かに SaaS は使いますよね。

いうのが増えてきているはずです。そう

竹迫：今年は Slack とか使ってる人がとっても、交換できなくなるとか、そうとかに対するクレームの二つがあると思いう仕組みで自動化のモチベーションをいます。やはり、真摯というか迅速に対提供されているものは比較的オープン

ゲームの作り自体が、自動でアイテムを伊勢：サポートって、トラブルに対するものと、ゲームのバランスとかシステム

で、たとえば HipChat とか、SaaS でなくしていくという感じです。

法林：そういうのが増えてる。
増えてるみたいですね。

伊勢：Slack とか普通に使っています

法林：なるほど。

ね。

増やしても、もともと仮想アイテムってないものも、良いものは使うというのがぎると、本来のゲームバランスが崩れてるもんでも何でもないんですね。

伊勢：有償のアプリケーションの使い方

炎上してる案件とかあるじゃないですか。

竹迫：では、何のためにそういう対策し応するのは当然ですが。あの、世のゲー

マーが「バランス、クソ。」と、ですね…。
会場：笑

伊勢：それに対して、あんまり気にし過

竹迫：結局そういうチートでアイテムを無いものですから、別に運営業者は減法林：また、そういうオープンソースで今は多いんですかね。

会場：笑

もパッケージで購入してオンプレで使う

これは、某外資系ベンダーの人が言ってないといけないかというと、ユーザーのてるものを、そのまま現金などで払って10% 以下らしいんですよ。その10% のムが複製できるという問題があったとしそっちの方に逆にシフトしていますね。

人はいないわけです。

がとうございます。ではこんなところで、しまいます。某掲示板とか、某 SNS で、いたんですけど、叫んでる人って全体の、ユーザーの意見をゲームのシステムに反映すると、逆にゲームのバランスが崩れてくるので、世の中の声の大きい人の言うことを聞くんじゃなくて、全てのユー
ザーがどう思っているのかを冷静に判断して、バランスの調整をかけたりする必

不公平感ですね。たとえば、レアアイテても、別に、複製ができたって損をする

馮：ただ、手に入らない人からすれば、なにやってるのと。

伊勢：そうですね。不公平感がすごく強まってくると、結局正当にお金を払っ要がある。サポートの人の心が弱って「こてゲームをしている人たちが離れてかするじゃないですか。逆にそれが他のとしては、ゲームの寿命が短くなっ

法林：やっぱり、ブレない心みたいなも

竹迫：まさにおっしゃる通りです。

れ対応しちゃおっかな」で調整したりとユーザーにとってはに良くない。
のが求められるんですね。

伊勢：まあ、ブレないというか、誰が言っいってしまうので、運営している側てくるので不利益がありますよね。

法林：そういった対策はしようと。
伊勢：そうですね。せっかく苦労

たかじゃなくて、何が正しいのかっていして作ったオンラインゲームなん

運営をしてくのが、やっぱり必要かなとです。

うのを根拠に、ゲームバランスの調整や
思います。

12

2015 August

で、なるべく長い間稼ぎたいわけ
法林：もちろんそうでしょう。

んじゃなくて、サービスとして提供され使うという利用形態は確かに残ってる。

法林：そういう手はありますよね、ありあっという間にお時間です。このあたり

で三部も締めたいと思います。出演者の皆さん、どうもありがとうございました。

オ ト ココマンドを極めるその先へ

題字「漢」小林 勇

BSDコンサルティング株式会社 取締役 最高技術責任者 後藤大地

self を実装してみよう！

データ処理に欠かせない
self コマンド1

ユニケージ開発手法で頻用されるコマンドのひとつに
self がある。これは awk '{print $3,$10,$1}' などの機能に相当するもので、指定した列のみを抜き出すという動きをする。
たとえば、次のようにアカウントデータを空白区切りのデータに変換して表示させてみよう。
プロンプト1.1 空白区切りのデータを用意% tail +3 /etc/passwd | head -10 | tr ' ' '_' | tr ':'' 'root * 0 0 Charlie_& /root /bin/shtoor * 0 0 Bourne-again_Superuser /root
daemon * 1 1 Owner_of_many_system_processes /root /usr/sbin/nologin
operator * 2 5 System_& / /usr/sbin/nologinbin * 3 7 Binaries_Commands_and_Source / /usr/sbin/
nologintty * 4 65533 Tty_Sandbox / /usr/sbin/nologin
kmem * 5 65533 KMem_Sandbox / /usr/sbin/nologin
games * 7 13 Games_pseudo-user /usr/games /usr/sbin/
nologinnews * 8 8 News_Subsystem / /usr/sbin/nologin
man * 9 9 Mister_Man_Pages /usr/share/man /usr/sbin/
nologin%手法の実装面での根幹をなしている。それが故に self コ
マンドはとても重要な役割を担っている。
プロンプト1.2 % tail +3 /etc/passwd | head -10 | tr ' ' '_' | tr ':'' ' | self 1 3 4 6root 0 0 /root
toor 0 0 /root
daemon 1 1 /root
operator 2 5 /bin 3 7 /tty 4 65533 /kmem 5 65533 /games 7 13 /usr/games
news 8 8 /man 9 9 /usr/share/man%

self コマンドの動作は UEC（https://uec.usp-lab.
com/）にマニュアルがあるのでそちらを読んでもらえればと思う。self コマンドはユニケージ開発手法の中でも特に頻用されるコマンドのひとつで、このコマンドの動作
速度はシステム全体の速度に大きく関与してくる。
代表的なコマンドだし、実用的なコマンドを実装する
サンプルとしても参考になるので、ここではシンプル版のself を実装してみよう。以降で、コマンドを開発する際の考え方の順序、うまい切り捨て方、フローとデータ構出力結果をさらに self 1 3 4 6のように絞り混むと、
1 列目、3列目、4列目、6列目のみが出力されるように造、実装の規模などを一通り示しておこうと思う。キー
ワードは小さく、繰り返しだ。

なる。データの選択、データの絞込みはユニケージ開発

13

フローを考える2

こまかいことは考えない

3

こうしたツールを開発するときのポイントは、最初から開発の初期の段階では、細かいことは考えない方がう

全部作ろうとせずに、小さい機能を実装して徐々に大きまくいく。たとえば最初から次のようなことを考えて実装

くしていくことだ。レゴブロックのブロックを作るように、にとりかかったとする。

機能を作り、それらを組み合わせて最後に動作するものを作ればいい。最初から大きく作ろうとするとなんだかよ
くわからないものになる。
まず、self の動作を考える。最初に引数を処理するはずだ。どの列を取り出すのか、どのファイルを処理するのか、それを決める必要がある。次に、指定されたファイルから1 行づつデータを読み込んで、指定された列だけを出力すればよい。処理の流れを整理すると次のようになるだろう。self に限らず、テキストデータをフロー処理するコマンドは概ね基本的にこんな流れになるだろう。
図 2.1 self コマンドの基本的な処理の流れ

・1 行あたりの最大データ長はメモリがある限り任意の長さを取れるものとする

・1 行あたりの最大のデータ数は目盛りがある限
り任意の数を取れるものとする

・引数にファイルが指定されていない場合には標準入力からデータを得るものとする

・N/M の指定で N 列目から M 列目までを意味す
るものとする・NF の指定で一番最後の列を意味するものとする
・NF-4といった表記で一番最後の列から4 列目を意味するものとする

・F.N.M といった表記で、N 列目の文字列のN 文字目

からM文字目までを切り出して出力するものとする

かなり大仰になってくるか、扱いやすいライブラリを導入することになるだろう。こういうときはまず条件を限定してしまう。例えば次のように条件の方を定めてしまう。
・1 行あたりの最大データ長はシステムのデフォル
トに準拠する・1 行あたりの最大のデータ数はシステムのデフォ
ルトに準拠する・引 数は f1 f2 f3... file とし、ファイルの指定は省略できないものとする

・フィールドは番号のみが指定できるものとする

・引 数の指定、処理されるファイルのフォーマット
はすべて正しいものとし、エラーチェックはおこ
なわない

こういった前提を定める、条件を絞り混むことで、ソー1 行ずつ読み込んで該当列だけ出力するところは、もうスコードを短く保ち、本質的な部分だけが書けるように

ちょっと分けて考えた方がよい。データを読み込む、デーなる。追加の機能や機能拡張については後々やっていけ

タを解析する、解析結果のデータから該当する列だけをばよい。このように段階を踏んで開発の工程を切り分け取り出す、といった流れになる。

ることが、素早く開発するポイントだ。

14

2015 Augustデータ構造を考える

4

int fields[arg_max], i;char *path;

次にこのフローを見ながら、どういったデータ構造で/* 引数解析 */path = argv[argc - 1];
fields[0] = argc - 1;
for (i = 1; i < fields[0]; i++)fields[i] = strtol(argv[i], NULL, 0);

データを保持すればいいかを考える。シンプルでわかりやすいものがよい。たとえばここでは、次のようなデータ
構造（配列）で引数に指定された「どの列をどの場所に出力するか」を保持するとする。

/* 解析結果出力 */printf("file: %s\n", path);
printf("target: ");for (i = 1; i < fields[0]; i++)printf("%d ", fields[i]);printf("\n");図 4.1

return (EX_OK);}

プロンプト4.3 arg の動作例

ユニケージでは列の指定は1からはじまるが、C 言語の配列のインデックスは0からはじまるので、C 言語側
でデータを入れる場所をインデックスの1からにしている。そのかわり、インデックスの0には指定された列の数を格納するものとする。
こうしたちょっとしたセマンティックの差がコーディン
グ時のバグのもとになることが多いので、揃えてしまうのは悪くない発想だ。
では引数を処理して、それを配列に展開するところだけをコーディングしてみよう。次のようになるだろう。
strtol() 関数を使って文字列を int に変換してデータを格納している。

% cc -o arg arg.c% ./arg 10 1 3 2 /COPYRIGHT
file: /COPYRIGHT
target: 10 1 3 2%

sysconf(_SC_ARG_MAX) は IEEE Std 1003.11988 (“POSIX.1”) で定められたインターフェースで、システムで定められている値の上限値や現在値などを取得するものだ。_SC_ARG_MAX は execve(2) ファミリー
で指定できる引数の最大のバイト数を定めているので、この値を流用している。sysconf(3) はいろいろ値を引っ張ってくるのに便利なので覚えておくとよいだろう。
return() では sysexits.h ヘッダで定義されている値

リスト4.2 引数を処理する arg.c#include <unistd.h>#include <limits.h>#include <stdlib.h>#include <stdio.h>#include <string.h>#include <sysexits.h>で終了している。任意の数字にするのではなく、システムが提供している値で統一しておけば、ほかのプラットフォームに移植するときなんかもマクロを定義したり一括置換だけで処理が完了したりするのでなかなか便利だ。

int
main(int argc, char *argv[]){
const int arg_max = sysconf(_SC_ARG_MAX);/** fields[0]* fields[1]* fields[2]
*
...
*/

指定されたフィールドの数
1つ目に指定されたフィールド番号
2つ目に指定されたフィールド番号15

入出力を考える

5

1 行ごとに入出力を繰り返しているだけなので、動きとしては cat(1) と同じだ。

次に入出力を実装してみよう。1 行読んで、1 行出力して、読み込む行がなくなったら処理を終了するコマンドのソースコードは次のようになる。

データ構造を考える パート２

6

次に分析と出力部分も考える。できればアルゴリズムがリスト5.1 1 行ごとに読み込んでは出力する cat.c#include <unistd.h>#include <stdio.h>#include <sysexits.h>
int
main(int argc, char *argv[]){
const int line_max = sysconf(_SC_LINE_MAX);
FILE *fp;
char buf[line_max];
fp = fopen(argv[1], "r");while (NULL != fgets(buf, line_max, fp))
printf("%s", buf);
fclose(fp);return (EX_OK);（実装が）簡単になるようなデータ構造が望ましい。実装を複雑にしたくない。先ほど fields[] という配列を作って、配列のインデックスとコマンドラインで指定された列の順番を対応させて格納したのだから、これがそのまま使える入力データ用のデータ構造が欲しい。
たとえば3つ目に指定された列数は2、つまり field[3]の値が2。これをそのまま使って pbuf[field[3]] のようにしたら2 列目のデータ（文字列）にアクセスできる、ようにすると、実装がとてもスッキリする。言葉でまとめるとちょっと意味がわかりにくいが、図にまとめると次のようになる。
図 6.1 入 力データ解析およびアクセス用のデータ構造}

ここでの ポイントは1 行 あたりの 最 大 バイト数 をsysconf(_SC_LINE_MAX) で 取 得 して い ること だ。
FreeBSD 10.1-RELEASE のデフォルト値 は2KB になっている。大きめのデータを処理するにはちょっとこの値は少ないかも知れないので、必要があれば拡張してもらえればと思う。
実行すると次のようになる。

こうすれば、たとえば、2番目に指定された列番号はfields[2]、2 番目の列の文字列は pbuf[fields[2]] とし

プロンプト5.2 cat の動作例
% cc -o cat cat.c% ./cat /COPYRIGHT | head# $FreeBSD: releng/10.1/COPYRIGHT 260126 2013-12-31
12:24:38Z gjb $#@(#)COPYRIGHT 8.2 (Berkeley) 3/21/94
The compilation of software known as FreeBSD is
distributed under the following terms:
Copyright (c) 1992-2014 The FreeBSD Project. All rights
reserved.
Redistribution and use in source and binary forms,
with or without modification, are permitted provided
that the following conditions%

16

2015 Augustてアクセスできるようになる。入力されたデータの空白をそのまま \0に置き換えることで、新しくメモリを確保することなくそのデータを使い回しているところがポイントだ。あとはそれぞれの文字列の先頭を指すようにポイン
タを当てはめた配列を用意すればよいというわけだ。
これを実装してみる。次のサンプルでは、pbuf[] まで作成し、あとは確認のために奇数の行だけ出力させるといったことを実施している。

リスト6.2 入力行を解析するところまで実装した cat2.c#include <unistd.h>#include <stdio.h>#include <sysexits.h>
int
main(int argc, char *argv[]){
const int line_max = sysconf(_SC_LINE_MAX);
const int arg_max = sysconf(_SC_ARG_MAX);
FILE *fp;
char buf[line_max];char *pbuf[arg_max], *p;
int i, j;
fp = fopen(argv[1], "r");while (NULL != fgets(buf, line_max, fp)) {/** 行を分解*pbuf[i] が i番目のフィールドの文字列の*先頭を指すように設定*/
i = j = 1;
pbuf[i] = p = buf;
while (*p != '\0') {switch (*p) {case ' ':*p = '\0';
pbuf[++i] = p+1;++j;break;
case '\n':*p = '\0';++j;break;}++p;}/* 奇数行を出力 */for (i = 1; i <= j; i++, i++)printf("%s ", pbuf[i]);printf("\n");}fclose(fp);return (EX_OK);}

実行すると次のようになる。
プロンプト6.3 cat2の実行例% ./cat2 /COPYRIGHT | head# releng/10.1/COPYRIGHT 2013-12-31 gjb (null)#@(#)COPYRIGHT 8.2 3/21/94
The of known FreeBSD distributed the following

Copyright 1992-2014 FreeBSD All reserved.
Redistribution use source binary with without
modification, permitted that following wing%

これで引数の分析、1 行入力しての分析と加工、そこからの出力のすべてのブロックが実装できたことになる。
それでは、これらブロックをつなぎ合わせてみよう。

華麗にがっちゃんこ7必要となる基礎技術はすべて実装したので、あとはこ
れらを結合して目的とする動作を実現すればよい。だい
たい次のような実行になるだろう。今まで掲載したソー
スコードを綺麗につぎはぎしたものだ。
リスト7.1 s elf コマンド第一弾#include <unistd.h>#include <limits.h>#include <stdlib.h>#include <stdio.h>#include <string.h>#include <sysexits.h>
int
main(int argc, char *argv[]){
const int line_max = sysconf(_SC_LINE_MAX);
const int arg_max = sysconf(_SC_ARG_MAX);/** fields[0]指定されたフィールドの数* fields[1]
1つ目に指定されたフィールド番号* fields[2]2つ目に指定されたフィールド番号*...
*/
int fields[arg_max], i, j;char *path, buf[line_max], *pbuf[arg_max], *p;
FILE *fp;/* 引数解析 */path = argv[argc - 1];
fields[0] = argc - 2;
for (i = 1; i <= fields[0]; i++) {j = strtol(argv[i], NULL, 0);fields[i] = j;}
fp = fopen(path, "r");while (NULL != fgets(buf, line_max, fp)) {/** 行を分解* pbuf[i] が i番目のフィールドの文字列の* 先頭を指すように設定

17

*/i = j = 1;
pbuf[i] = p = buf;
while (*p != '\0') {switch (*p) {case ' ':*p = '\0';
pbuf[++i] = p+1;++j;break;
case '\n':*p = '\0';++j;break;}++p;}/* 指定フィールドを出力 */for (i = 1; i < fields[0]; i++)printf("%s ", pbuf[fields[i]]);printf("%s\n", pbuf[fields[fields[0]]]);}
fclose(fp);return (EX_OK);}

処理速度の違いを調べたいので、1.8GB ほどあるテス
トデータを用意しておく。わかりやすいように1列目には1、10 列目には10という値が入っているデータだ。
プロンプト7.2 速度チェック用の試験データ% head data
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15% filesize data
1911685120% gyo data
53102365%

これを作 成した 簡 易 self、awk（One True Awk;
原 作 者 による AWK 本 で 解 説されている awk 実 装。
FreeBSD 10.1の awk はこのオリジナル awk になっている）、高速に動作する mawk で動作を比較してみる。

182015 August

これは余談だが、awk の実装系としては mawk が高速だ。awk の実装系を使うときは mawk を使うというのをデフォルトにするのは、なかなか悪くない選択肢だ。
プロンプト7.3 作成した簡易 self
% /usr/bin/time -lph ./self 1 10 2 7 data > /dev/null
real 27.92
user 27.70
sys 0.212028 maximum resident set size
4 average shared memory size
4 average unshared data size
3199 average unshared stack size
105 page reclaims
0 page faults
0 swaps
0 block input operations
0 block output operations
0 messages sent
0 messages received
0 signals received
149 voluntary context switches
655 involuntary context switches%

プロンプト7.4 awk（One True Awk）
% /usr/bin/time -lph awk '{print $1,$10,$2,$7}' data >/dev/null
real 75.23
user 75.02
sys 0.20
2600 maximum resident set size
136 average shared memory size
12 average unshared data size
128 average unshared stack size
184 page reclaims
0 page faults
0 swaps
0 block input operations
0 block output operations
0 messages sent
0 messages received
0 signals received
398 voluntary context switches
1609 involuntary context switches%

プロンプト7.5 mawk% /usr/bin/time -lph mawk '{print $1,$10,$2,$7}' data >/dev/null
real 39.01
user 37.99
sys 0.992480 maximum resident set size
136 average shared memory size
68 average unshared data size
128 average unshared stack size

159
1
0
3
0
0
0
0
210
826

page reclaims
page faults
swaps
block input operations
block output operations
messages sent
messages received
signals received
voluntary context switches
involuntary context switches%

グラフで比較すると次のようになる。短い方が性能がよい。
図 7.6 実行速度比較ばもっと速度が欲しいなら高速になるように実装すればよいし、機能が欲しいなら順次追加していけばよい。
でもこれまで繰り返し述べてきたように、もっとも大切
なのは手を動かして「まずは作ってみる」ことだ。エンジ
ニアリングとは現実との不断の対話と科学技術の絶えることのない学習に過ぎない。最新の科学を学び、エンジ
ニアがそれを技術で現実化する。科学を応用して感じることができる何かを作る。そのとき実現できることを実現させるのがエンジニアリングだ。ハードだろうがソフトだ
ろうが、まずは作って試してナンボということである。

さらに先へ

8

いままで説明してきた KISS の原理を超えるのは、現実がそれを超える要求をしてきたときになる。たとえばこの実装だと実行速度が遅いとか、メモリを使いすぎるとか、そういった状況になったときに次の一手として「高速化」や「省メモリ化」を模索すればよい。
そういったアルゴリズムやデータ構造は古くから研究されているし、優れた実装も多くでている。素の C でこのようになにも考えないようなコードを書いた場合、実は本質的にとても高速なのでこれを超える速度となるとたったこれだけ、特に高速化技巧を入れたわけでもな･･･ プロセッサの専用命令を使うようにアセンブラを使う

く、C 言語の教科書に書かれているような単純なコー必要が出てくるのでなかなか難しいところがあるが（複雑

ドだけで作ったコマンドがもっとも高速に動作している。

にし過ぎるとソースコードそのものが短命になる）、高速

awk と比較して3 倍弱ほど早い。mawk はさすがに高速化や省メモリ化やり方はいくらでもある。

だが、それでも自作版の self の方が高速だ。

技術に正解はないし、それは日々書き換わっていく。

コマンドをシンプル、単機能で作成することの利点はこ

いつでも書ける、書き換えられる、対応できる、そしてこにもある。シンプルに開発しても既存のコマンドよりもそれをこなす知識と経験、ないしは実験を経ておく、と高速に動作するものが作れる。まずこのように機能としいうのが漢の UNIX 的にはとても重要だ。毎度のことなては確実に動作するが実装はシンプル、といったものをがら、みなさんには是非、手を動かして実装をしてもら作って、そこから必要に応じて改善すればよい。たとええればと思う。

書籍紹介『フルスクラッチから１日でCMSを作る シェルスクリプト高速開発手法入門』
業務システムについて詳しい話をすることはできないが、本書では実際に発生したインシデン
トからいかにシェルを活用してシステムを構築したのかが、時系列にそって説明されている。実際のシステム開発の参考になるはずだ。また、コマンドやオプションの使い方も丁寧に説明があるので、コマンドスキルをあげたいUNIXユーザにもぜひお薦めしたい内容になっている。
引用元：http://ascii.asciimw.jp/books/books/detail/978-4-04-866068-6.shtml

19

ア！
ニケージエンジニ
これであなたもユ

ユニケージ開発手法教育講座「ユニケージ開発手法教育講座」は、ユニケージ開発手法におけるデータ管理の方法や、オリジナルコマンドの使用方法などをハンズオン形式で具体的に学べる講座です。UNIX の基礎からユニケージ開発手法による開発プロジェクトの進め方まで、ユニケージエンジニアとしてのトータルスキルを習得できます。

http://www.usp-lab.com/LECTURE/CGI/LECTURE.CGI
ジ
ユニケー
講座
基礎技術

充実中！
続々と新講座もK - BASIC

ユニケージ基礎編

K - WEB

WEBアプリケーション編

K - BATCH

バッチ処理編（ウェブアプリケーション処理）

K - ARCH

ユニケージアーキテクチャ編

K - SETUP

ユニケージ開発環境セットアップ編

K - UNYO

システム運用・管理編

K - PROJECT

プロジェクトマネジメント・人材育成編

K - SQL

速習：SQL からの移行編

K - STAT

ユニケージにおける統計コマンド編

UNIX 初心者のための講座などもご用意しています。

http://techlion.jp/# SNS

https://www.facebook.com/usp.techlion@techlion_staff | hashtag | #TechLION

日々新技術が誕生するITの世界。

そしてその新しい技術を追い求め、

自らを高めんと研鑽する IT エンジニアたち。

「 TechLION 」は、

そんな技術の草原で百獣の王を目指すエンジニアたちが集う
新感覚トークライブ！

彼らの激白と酒の力で、IT 技術の面白みと深さをともに分かち合いませんか。

上記のサービス内容は 2015 年 7 月現在のものです。最新の情報はホームページにてご確認ください。

ISBN 978-4-904807-22-4
C3455 ￥500

USP 研究所
定価（本体 500 円＋税）