USP MAGAZINE

春を感じよう。案ずるより動き出そう。

日本で唯一のシェルスクリプト総合誌「シェル芸」に効く

AWK処方箋

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

ユニケージ開発手法教育講座「ユニケージ開発手法教育講座」は、ユニケージ開発手法におけるデータ管理の方法や、オリジナルコマンドの開発プロジェクトの進め方まで、ユニケージエンジニアとしてのトータルスキルを習得できます。

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

も充実中！
続々と新講座K1

コマンド学習編

K2

シェルスクリプト学習編（帳票・バッチ処理）

K3

シェルスクリプト学習編（ウェブアプリケーション処理）

K4

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

K5

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

K6

システム運用・管理編

K7

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

KSQL

SQL エンジニアのためのユニケージ活用編

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

技術の草原で百獣の王を目指す

TechLION エンジニアたちの新感覚トークライブ！
上記のサービス内容は 2014 年 3 月現在のものです。
最新の情報は弊社ホームページにてご確認ください。

http://techlion.jp/

ISBN 978-4-9048-0706-4
C3455 ￥500

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

新創刊記念対談

2014 April vol.12

使用方法などをハンズオン形式で具体的に学べる講座です。UNIX の基礎からユニケージ開発手法による「東京」的なものに染まり過ぎない
生き方とは教えて先輩♥

サーバー運用
お助けTipsHaskellでやってはいかんのか？

太田智美がスゴい人と盃をかわしつつ
インタビューする企画

今月のエクストリームエンジニア

2014 April vol.12

C o n t e n t s
04

新連載「シェル芸」に効く

AWK処方箋
斉藤博文

08 新創刊記念対談「東京」的なものに染まり過ぎない生き方とは[ 前編 ]

サイファー・テック吉田基晴× USP 研究所 當仲寛哲

38 新連載りゅうちの工作員日記
りゅうちてつや42 新連載IPv6新時代を体感しよう！

10 新連載ユニケージ開発手法
コードレビュー
大内智明

14

波田野裕一

46 新連載 シェル芸勉強会後追い企画

Haskell でやってはいかんのか？

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

データモデリング 第 2 回

上田隆一

熊野憲辰

17

新連載

金融システムにおけるUNIXの歩み

50

スズラボ通信 第4 回

52

すずきひろのぶ22 新連載 教えて先輩♡

サーバー運用お助け Tips
濱田康貴

28
30

漢のUNIX 第 9 回

後藤大地

34

中小企業手作り IT 化奮戦記 第 10 回
菅雄一

UNIXネイティブの電子工作塾 第 4 講
大野浩之

58

新連載

ハッカソン交遊録 山男のつぶやき

藤川恵一

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

大岩元

今月のeXtreme Engineer

太田智美

千貫素成

18

新連載

60

シェルスクリプト大喜利
第12 回

65 何か転換点はないか シェル魔人／編集後記

「東京」的なものに染まり過ぎない
生き方とは

USP MAGAZINE
新創刊記念対談

吉田 基晴
當仲 寛哲
Motoharu
Yoshida[ 前編 ]

NobuakiTounaka

暗号化技術を活用したデジタルデータの著作権保護システ
ム（DRM）などの開発・販売を手がけるサイファー・テック
株式会社は、徳島県の南東にある海部郡美波町に 2012
年に開発拠点を開設、2013 年には本社を同地に移転した。
また同社代表取締役社長の吉田基晴氏は地域活性を手掛ける「あわえ」（地元の方言で路地という意味）を立ち上げた。

美波町で稲作を行う
サイファー・テック

限界集落に近いと言われる町に移った理由とは、そして地元で生きるエンジニアの生活とは。吉田基晴社長と、當仲用いて違法コピーを防止するデジタルコンテンツの著作

寛哲 USP 研究所 代表取締役所長が語り合った。

権管理（DRM）製品の提供や、企業の情報漏洩対策の支

吉田 2003 年の設立以来、サイファー・テックは東京に援などを柱にしています。また美波町の本社では、地域の本社を構えていました。しかし、2012 年に徳島県海部郡

人といっしょにさまざまな活動をしています。地元の中学

美波町に開発オフィスを設立したのをきっかけに 2013 年

校に社員がお邪魔して生徒にコンピュータの使い方を教に同町へ本社を移転しました。
この町は僕の生まれ故郷で、える出張授業をやったり、高齢者の方にパソコンや SNS

NHK の朝の連続ドラマ「ウェルかめ」の舞台にもなったの使い方を教える教室を開いたり、さらに毎年夏には全海に程近い町です。

国各地の大学生を対象に地域活性につながるアプリを開當仲 海亀の産卵で有名なところですね。僕、学生時代に発するインターンシップ（就業体験）を実施。2013 年の徳島から高知の室戸岬まで歩いたことがあるんですよ。途

インターンでは「電球が切れて付け替えられない」など

中で日が暮れて駅のベンチで寝たりしながら。

の困り事を高齢者の方がつぶやくとその内容が支援者の

吉田 ひょっとしたら美波町の近くも通ったかもしれませ

スマフォ画面に表示される「みなみてボタン」というアプんね。美波町は農業と漁業、観光の町で人口は約 7500 人。

リをその学生達が作り、徳島県から表彰を受けました。美

日本有数のサーフィンエリアとしても知られていて、当社

波町初の IT 企業として僕らにできることを探し、取り組オフィスの目の前には海が広がっているので、朝一番に波んでいます。

乗りしてから仕事に来るエンジニアや、IT ワークの間にオ

當仲 仕事があれば地方で暮らしたいという人は多いよ

フィスに隣接する水田で稲作に励む社員もいます。釣り、うですね。先日、佐賀県で地域貢献に取り組む企業の方

舟遊び、農業体験、お祭りや運動会などのイベント、防災にお会いしたときもそう伺いました。

活動の参加。どれも特別なことではなくて、生活に溶け込吉田 ええ。当社の社員も地元出身者だけでなく、関東んでいます。結構忙しいですが僕らはそのスタイルを「半など町外から移住してきた人がいます。東京に本社があっX（エックス）半 IT」と呼んでいます。

たときより、一緒に仕事をしたい思う仲間が集まりますね。

■求人広告に反応なし

創業まもない頃は東京で求人広告をかなり出したのです
が、応募がほとんどなくて、採用には苦戦しました。暗号吉田 僕は月の半々くらいで徳島と東京を行ったり来たり化技術にはセキュリティに関する高い専門性が必要です。

しています。サイファー・テックでは主に、暗号化技術を田舎と違って東京のように人が大勢いる場所ならば、と8

USP MAGAZINE 2014 April思い込んでいたのですが、反対でしたね。美波町にオフィやし、遊ぶことに力を入れていましたが、「務め」や「暮スを作ってからは、社員の数は3 倍に増えました。サーフィ

らし」をしっかりと担えてこそ、本当の大人だと思えるよン好きな人、農業に取り組みたい人とか、IT ワークの合うになってきました。務めというのは、共同での草刈りや、間を縫って遊びや暮らし、地域の活動に飛び回る人が多神社の傷んだ部分をみんなで修繕するといったコミュニ

いですね。

ティでのちょっとした活動です。務めや暮らしにもエネル當仲 うちはお客さんの業務システムを作る SI を主体にギーを使っているから、美波町の地域社会がなんとか回っやっている会社ですが、2005 年の創業のころは有限会社ているんだと気付きました。

というだけで相手にしてくれない人もいました。会社にブ當仲 東京にいると、いいこと、楽しいこともあるけれ

ランドも信用もないので、社員集めはもっぱら呑み屋さん

ど、「毒」もたくさんもらうんですよね。テレビをつけるで話をして「君コンピュータいじれる？」「Excel ならちょっと、おいしいお店とか綺麗な服とか、おしゃれな街だとか、と使えます」「そう、じゃあうちきて勉強しながら仕事しな

どうもバイアスのかかった情報がセレクトされてやたらたい？」。ナンパみたいにいろんな人に声をかけてました。

くさん流れてくる。東京にいるとかえって外の世界がわか■美波町に本社を移したきっかけ

らなくなります。お金があれば世の中何でもできるような

吉田 僕は 2008 年頃から千葉で仲間と稲作に挑戦してていて、そのそれぞれは小さくても膨大な営みが重なっていました。
「やるならできるだけ機械を使わず、手作り、

僕らがこうやって仕事したり生活したりしているのに、そそして無農薬でやろう」なんて調子のいいことを言っていれが見えなくなっていくのが東京のコワいところですね。

ましたが、そんなに生易しいものじゃありませんでした。

吉田 徳島県は全体で見ると、65 歳以上の高齢者が 5

かがんで田植えをすると、なまった足腰がすぐ立たなくな

割を超える限界集落の比率が日本で最も高い地域です。

ります。夏場の草取りは 35 度の炎天下で、熱中症になり

美波町も高齢化率は 40％台で、過疎化を食い止めるためかけてふらふらでした。でも、泥の中に足を入れると大人に残された時間はそう多くありません。

気にさせられる。お米もお茶も机でも椅子でも誰かが作っになってついぞ味わったことのない気持ちよさがあり、え

この美波町の中で仕事や遊び、暮らしや務めをしていんえん草をむしっていると無心になれるんです。見よう見ると、お互い様の精神で地域の文化や暮らしが成り立っまねでやって、秋には人生で初めて自分たちの手で作ったていることがよくわかります。大工さんが隣の家のちょっ

米の収穫を迎えたときは、すごくうれしかったですね。味

とした修理をしたり、収穫した農作物や釣った魚などをおのことよりも、収穫できたことへの充足感だけで満足でしすそ分けし合ったりと、お互い様だから人が少ないけれどた。いつも口に入れている食べ物はこうやって作られていもなんとか回っているんです。みんながそれぞれ得意な

るんだ、そうした仕事に支えられながら、僕らのような暮ところを持ち寄って、子育てや地域の手助けをしたりしてらしや IT や金融や流通などのビジネスが成り立っているいる。当社の若い社員も地域の輪にだんだん加わっていんだなと、まさしく身体で実感しました。

ます。僕も家族もお世話になりっぱなしです。だから少し

セキュリティ絡みの仕事はあまり表に出てこない裏方のでも恩返しをしたい。美波町が全国に先駆けたモデルと世界で、中にはあまりよいイメージを持っていない方もいなって何か新しい仕組みのようなものを生み出せないか。

ます。この仕事をやる意義とはなんだろうと悩んだ時期もそれを模索しているところです。

ありましたが稲作をやって迷いは吹っ切れました。僕らは僕らのやれることをやろう、自分の信じる道を進もうと思えるようになりました。こうした実体験に基づいた気づきのチャンスの多さが地方の魅力だと思っています。
現金収入を得るための「稼ぎ」は大事ですが、属する社会の中で支えあう「務め」、家族や自分を支える「暮らし」、人間らしい「遊び」の 4 つのバランスが大事だと思うようになったんです。私は 30 代くらいまでは稼ぎを増

Profile＝次号後編へ

吉田 基晴

當仲寛哲

1971 年徳島県生まれ。株式会社ジャストシステムなどを経て、2003 年にサイファー・テック株式会社を設立。デジタルコンテンツの著作権管理（DRM）
や違法コピー防止のための暗号化技術、企業の情報漏洩対策の支援などを行う。
2013 年に本社を故郷の徳島県美波町に移転。同年株式会社あわえを設立し、地域活性を事業として手掛ける。趣味は釣り。

1966 年兵庫県生まれ。株式会社ダイエーでシステム改善を推進。2005
年に USP 研究所を設立。2008 年「ユニケージ開発手法および同開発コマン
ドセット」が IPA 主催「ソフトウェア・
プロダクト・オブ・ザ・イヤー 2008
システム・基盤分野」を受賞。趣味は、全国各地を巡る年一度の社員旅行の企画。
「移動時間が長すぎ」としばしば社員からブーイングを受けている。

9

No.4 スズラボ通信

山に登るのはそこに締切りがあるからだ ～ Redmine のすすめ～
Author : すずきひろのぶ
Email: suzuki.hironobu@gmail.com

締切りがなければ人間何もしません

徴は、やはりチケットによるプロジェクトのタスク管理です。

もちろん世の中には誰に言われなくても、きちんきち

Redmine では、タスクを明確化して、スタート日、終んと仕事をこなしていく、そんな方がいるのは分かって

了日、担当者などの属性情報を加えて登録し、マイルいます。ですが、少なくとも私の場合、締切りのない仕ストーンを管理することができます。Redmine では、事は出来たためしがありません。
「無限大∞」は値ではその 1 つ 1 つの登録のことをチケットと呼びます。チなく状態であるわけで、つまり、締切りがない＝無限大

ケットを扱うシステムとしては、有名な所ではバグ・トの締切り日なのです。そして私という仕事関数は無限大

ラッキング・システム（BTS: Bug Tracking System）の時に収束しません。

の Bugzilla や 課 題 ト ラ ッ キ ン グ・ シ ス テ ム（Issue

一方で締切り日があったとしても遅れるのが人の常。

Tracking System）の Trac などがあります。

では、どうやって締切りを守るのか、あるいはどうやっ

Bugsilla: http://www.bugzilla.org/てスケジュールを管理していくのか。そこが問題です。

Trac: http://trac.edgewall.org

タスクを明確化し、それに締切り日をつける。さらに

バグ・トラッキング・システムや課題トラッキング・

そのタスクを細分化し、複数のサブタスクに分割し、各々システムのチケットの使われ方と Redmine のチケットに締切り日をつけ、それを管理していくと割と便利です。

の違いは、前者は 1 つ 1 つのチケットが独立的なイベ

本来はタスクの管理はプロジェクト管理あるいはプロセントであるのに対し、後者は時系列的でプロジェクトのス管理の中で、どうタスクを管理していくかという一部

スケジュールを意識している部分です。もちろん運用方でしかないのですが、これをタスクを中心にもってきて法で前者も後者も違いがない使い方が出来ます。しかし考え～それはタスク・オリエンテッドあるいはタスク・

Redmine は最初から、いわゆる線表的なプロジェクト管

ドリブンと呼ぶのも良いかもしれませんが～管理してみ理をするように作っています。筆者はプロジェクト管理だます。主従が逆転しているじゃないか、とお叱りを受けけではなく、ミーティングや出張などのスケジュールを入るかも知れませんが、是非はともかく、バンバンとタスれてカレンダー代わりにしています。そうすることで、関クを切って作業、スタート日、終了日、作業量を見積っ係者の中で最小限抑えておくべきスケジュールを共有でて管理していくと割と楽です。今回はそんなわけでプロきるからです。他に使えるアイデアとしては、大学の研究

ジェクト管理支援 CMS の Redmine です。

室などで指導する学生の進捗管理や、ゼミ運営などにもRedmineRedmine はプロジェクトのメンバーや関係者とプロジェクトの情報を共有するための CMS です。実際に使うと文章管理ツールや掲示板ツールとして使われるシーンが多いのですが、Redmine を紹介する際の最大の特18 USP MAGAZINE 2014 April

使えるでしょう。チケットはチケットを発行することができるロール（権限）があればいいので、権限さえあれば他人の担当するチケットもばんばん切れます。

Redmine をインストール
そうはいってもまずはインストールして使い始めなけ

ればいけません。Redmine 2.4.2 を CentOS 6.4 にイン

次に CentOS 6.4 は デフォルトで iptables により不ストールする話をしたいと思います。Redmine を触る前必要なポートは閉じられているのでポート 80 を開けるにまずいくつかやることがあります。それは SELinux を作業をします。

どうするかです。あと iptables で 80 ポートを開けるのiptables / ファイアウォール

も忘れずに。

SELinux をどう設定するかまず最初に重大な決心をする必要があります。それは……SELinux をオフにするか否か。
筆者は SELinux を Enforcing( 有効にして制限をかける ) にしたままと、Permissive( 有効だがログしか取次の一文を ssh( ポート 22) を許可する記述の後ろあたりに加えます。
# vi /etc/sysconfig/iptables

設定後システムをリブートしてください。
-A INPUT -m state --state NEW -m tcp -p tcp --dport 80-j ACCEPTSELinux の仕組みを知らない人が SELinux の制限をかコンパイル環境や apache とmysql のインストール

けたまま Redmine をインストールするのは、不可能とコ ン パ イ ル 環 境 は Ruby の ラ イ ブ ラリ 群 で あ るはいいませんが、正しい設定をするには大変骨の折れる

Rubygems をインストールする時に必要になります。

ことであろうと思います。ただし、そのかわり万が一外

apache と mysql は redmine で使います。

らない ) の両方でインストールしたことがありますが、部から（たとえばバッファーオーバーフローなどで）シ

ImageMagick は画像処理、ImageMagick などで使う

ステムに侵入しようとした時、大変心強い仕組みを持っipa-pgothic-fonts はフォントですが、これは Redmineています。Enforcing にしていると、マルウェアがちょっのデフォルトでインストールする際に要求されるので入とやそっとじゃ動かないのと同じ理由で、上手にインスれておきます。

トールしないと動きません。
$ getenforce
Enforcing ← Enforce のモードになっている

Permissive は「有効だがログしか取らない」のでインストールが難しくなるようなことはありません。先ほ# yum groupinstall "Development Tools"# yum install httpd mysql-server# yum install zlib-devel curl-devel openssl-devel httpd-devel# yum install apr-devel apr-util-devel mysql-devel# yum install ImageMagick ImageMagick-devel ipa-pgothic-fonts

どの高いセキュリティを保つことはできませんが、一方

mysql にはインストール後、すぐに最低限のセキュ

でログはどんどん記録されていくので監査としては意

リティ対策をツールを使って行います。そのために味があります。が、しかし、これもまた正しく SELinuxmysql_secure_installation はデフォルトでインストーのための設定してはいないので、大量にログが吐き出ルされています。余計なアカウントを消したり、ここでされるという資源の浪費が問題になります。ですから、

mysql の root ( 管理者 ) のパスワードが変更されたりしSELinux の設定を適切にせずに運用するのは、あまり褒ます。

められたものではありません。
さて、多くのブログやインストール説明では次の一文が一番最初にきています。

# service mysqld start# mysql_secure_installation# chkconfig httpd on# chkconfig mysqld on

SELinux を disabled（完全オフ）にすることを推奨する。
残念ながら筆者の経験では、この一文を強く否定するこ

RubyとRubygemをインストールとは出来ません。それが現実だからです。SELinux を設CentOS 6.4 のシステムにインストールされているデ

定しつつ運用したい方は次の URL を参考に自分の環境

フォルトの Ruby を使わず自分でコンパイルした独自のに合わせてください。

Ruby を利用します。利点は Redmine のバージョンと

http://www.redmine.org/projects/redmine/

システムデフォルトの Ruby とのバージョン齟齬を起こ

wiki/RedmineAndSELinuxOnCentOS

していきなり動かなくなるようなケースを避けられるこ19

とです。安定した運用ができるかわりに、Ruby に脆弱ので、むかしと同じだと思っている人や、古いドキュメ性があった時など、自分で責任をもってアップデートさ

ントを読んでいる人はひっかかります。というか筆者がせなければいけません。どちらのリスクを取るかですが、ひっかかりました。先ほどの環境変数が有効であるといせっかくなので独自にインストールすることにします。

う前提で次のように Ruby のライブラリをインストール/opt/ruby の下にインストールします。Ruby のソー
スコードもそのディレクトリの下に一括管理します。ここで利用する Ruby のバージョンは ruby-2.1.0 です。
# mkdir /opt/ruby# cd /opt/ruby# mkdir src# cd /opt/ruby/src# wget http://cache.ruby-lang.org/pub/ruby/2.1/ruby-2.1.0.tar.gz# tar zxvf ruby-2.1.0.tar.gz# cd ruby-2.1.0# ./configure --prefix=/opt/ruby# make# make install

今度は Rubygem をインストールします。
# cd /opt/ruby/src# wget http://production.cf.rubygems.org/rubygems/rubyg
ems-2.1.11.tgz# tar zxvf rubygems-2.1.11.tgz# cd rubygems-2.1.11# /opt/ruby/bin/ruby setup.rb --prefix=/opt/ruby

自分でもよく間違えるのが、この setup.rb は、先にインストールした /opt/ruby/bin/ruby でなくてはなりします。
# gem install bundler# gem install mysql2# gem install passenger

この時、いろいろとコンパイルが始まりますので、
ちょっとビックリするかも知れません。最初に開発環境を入れたのはそのためです。

Redmine 本体のインストール
標準的であろう /var/www の下にインストールします。
# wget http://www.redmine.org/releases/redmine-2.4.2.ta
r.gz# cd /var/www# tar zxvf redmine-2.4.2.tar.gz# mv redmine-2.4.2 /var/www# chown -R apache.apache /var/www/redmine-2.4.2

bundle を使って必要な Rubygem ライブラリを自動インストールします。
# cd /var/www/redmine-2.4.2# bundle install

設定ファイルの設置ません。もしダウンロードしてきた Rubygems が古い

Redmine のコンフィグレーションを設定します。まずバージョンであれば、次のコマンドを実行すると自動的

データーベースの設定部分から。あくまでも例ですが、に Rubygem 自身でアップデートしてくれます。

次のように決めたとします。

# /opt/ruby/bin/gem update --system

このあとの作業の時、システムの Ruby と無用なコン
フリクトを起こさないように作業中は次の環境変数を有効にしておきましょう。筆者は作業が終わるまで .bashrcに入れています。
export PATH=/opt/ruby/bin:$PATH
export RUBYPATH=/opt/rubyexport RUBYLIB=/opt/ruby/lib
export GEM_HOME=/opt/ruby/lib/ruby/gems/2.1.0
export GEM_PATH=/opt/ruby/lib/ruby/2.1.0/rubygems

次に Rubygem で bundler と mysql2 と passenger
をインストールします。bundler はインストール時に必要なツール群です。mysql2 は Redmine で採用している mysql 接続のためのライブラリです。以前はRubygem の後ろに 2 のつかない mysql を使っていた

20 USP MAGAZINE 2014 April

データベース : db_redmine
ユーザ名 : user_redmine
パスワード : 38m65tcub0
それをデータベース設定ファイル内に設定します。
# cd /var/www/redmine-2.4.2/config/# sudo -u apache cp database.yml.example database.yml
ファイルを apache の持ち物にするため。
# vi database.yml

次に、mysql でデータベース、ユーザを作ります。
# mysql -uroot-p

以下は SQL 文です。
create database db_redmine default character set utf8;
grant all on db_redmine.* to user_redmine identified by '38m65tcub0'; flush privileges; exit;

次に一般の設定です。
# sudo -u apache cp configuration.yml.example configura
tion.yml # vi configuration.yml

production の設定セクションを有効にします。次に# passenger-install-apache2-modulermagick_font_path を設定します。
production:email_delivery:
delivery_method: :smtp
smtp_settings:
address: "localhost"port: 25....
rmagick_font_path: /usr/share/fonts/ipa-pgothic/ipagp.t
tf

ファイルの最 後に有 効になっている production:

コンパイルが始まりモジュールがインストールされます。最後に「この設定を記録して、設定ファイルに入れろ」というメッセージが出ますが、これはいつでもわかるので、とりあえずそのままにしておきます。
/etc/httpd/conf.d/ に下に passenger.conf を作成し必
要なパラメータを設定します。
# passenger-install-apache2-module --snip > /etc/httpd/
conf.d/passenger.conf

を 無 効 にしま す。これ が あ ると 最 初 に 有 効 にした

加えて passenger を apache のユーザ ID で動かすた

production: の設定が上書きされ無効になってしまいま

めに passenger.conf に次の記述を入れます。最後の行

す。これでハマりました。メールの配送に関しては、そは最新のバージョンの Redmine の設定ではシンボリッのサーバーに MTA がインストールされていれば配送さクリンクが無効なので、それを有効にしておくためです

れます。

Redmine の初期化
まず generate_secret_token を実行しトークンを作ります。次にデータベースのテーブル類を作り、そしてデータベースに初期値を設定します。すべてスクリプトがあります。
# cd /var/www/redmine-2.4.2# bundle exec rake generate_secret_token# RAILS_ENV=production bundle exec rake db:migrate# RAILS_ENV=production bundle exec rake redmine:load_default_data

Ruby on rails のアプリケーションとして Redmine が正しくインストールされているかを確認します。
$ rails server -e production

ローカル上で localhost:3000 へブラウザでアクセスします。このタイミングで Redmine の admin のデフォ
ルトパスワード (admin) を変更しておくと安心でしょう。

PassengerUserSwitching OFF
RailsDefaultUser apache
PassengerResolveSymlinksInDocumentRoot ON

httpd のバーチャルホスト設定
ここ で は /etc/httpd/conf.d デ ィレ クトリ 以 下 に
redmine.conf とい うファ イ ル 名 で 以 下 の 記 述 を 入
れ ま し た。redmine.example.net を ア ク セ ス す る とRedmine にアクセスできます。
<VirtualHost *:80>
ServerName redmine.example.net
DocumentRoot /var/www/redmine-2.4.2/public/<Directory "/var/www/redmine-2.4.2/public">
Options Indexes FollowSymLinks
Order allow,deny
Allow from all
AllowOverride all
Options -MultiViews</Directory></VirtualHost>

Redmine の使い方がわからないので後回しにしたとしてあとは httpd をリスタートさせてください。デフォル

も、この管理者 admin、パスワード admin は最悪なので、トでは admin/admin が有効なので速攻で安全な変更を早い時点で変更しておいてください。

してください。

Passenger と apache との同期
Passenger は Redmine(Ruby on rails ア プ リ ケ ーション ) を効率よく使うためのフレームワークです。

さいごに
これで誌面がつきてしまいました。次回に Redmineの使い方を説明したいと思います。

Redmine は cgi でも動かすことが可能ですが、通常はPassenger を使います。インストールには既に入っているインストール用のコマンドを使います。

21

いま私たちは何を学ぶべきか

人間とコンピュータの可能性
第 12 回
コミュニケーションと図形理解
written by 慶應義塾大学 名誉教授 大岩 元
これまでの連載で抽象化を軸に情報技術の学びについて解説してきた。しかし今回から少し視野を広げて、技術者として必要な技術以外の能力についても考えていこうと思う。最初はコミュニケーション能力を取り上げる。

ブランコ
右ページに掲載した 6 コマのマンガは 1973 年にロンけだった、というものである。

困難な開発には保険制度が必要

ドン大学の計算センターで発表されたものである。新た

このような悲劇が繰り返し起きることは、IT がムー

な情報システム開発を行なう場合の困難を説いたものとアの法則に従って発展を遂げてきた以上、必然的というして関係者に広く愛用されている。あるソフト開発企業

ほかはない。コンピュータの応用分野には、常に新たなの社長は、このマンガがたいそう気に入って社屋の入口

技術や製品・サービスが生まれ続けている。その結果とに貼り出したケースまであったと聞く。

して、だれも見たことがないシステムが常に開発されてプロジェクト依頼者の考えていたシステムは要求書にきた（いまも、そうである）。したがって複数の関係者がまとめられた途端に曲解される。その 3 枚の板が 3 本の描くシステム像は前述のマンガのように、いずれもどこロープに変わるように。これを分析して設計書にまとめる

かしら似たところを含みつつ、立場によって異なるものと、なぜかロープの本数は 2 本に戻るが、今度は板がローになってしまっても致し方ないことなのである。そして、

プにつながれるも地面の上に置かれることになる。この設その中から少なからずブランコの意味を成さないものが計書に基づいて作られたプログラムを見ると、板は幸いに作られてしまう。

して再びロープでつり下げられるが、木の幹に遮られて、スイングさせられない代物が出来上がっている。

こうした事態を防ぐ方法として、保険制度がある。実際に韓国でシステム開発をした人の話によると、開発費

こうした事態は実務上ではよく起こるらしい。だが何の 1 割程度の金額を失敗に備えた損害保険料の支払いに億円、何十億円もかけて作ったプログラムであればこの費やしたそうだ。保険をかけている場合、「これ以上のような状況下でも後戻りは許されず、何とか稼働させな開発を続けても、完成後に得られるメリットより損害のければならない。火消しと呼ばれる「有能」な技術者が方が大きい」と判断されたならば開発を中止することが投入されて、膨大な費用をかけて稼働させることになるできる。欧米の IT システム開発で中止される案件が多

が、
その結果、
利用者に導入されたプログラムは 5 番目の、いのは同様の保険制度があるからであると耳にしたこと

見るも無残なブランコと化してしまう。特に、官庁関係がある。ただし保険でカバーするためには、それまでののシステムにこうした類のものが多く、パスポート 1 枚

開発が正当なものであったということを第三者に証明すを発行するのに 1 千万円以上の費用がかかったりするのる必要がある。しかし、そもそも開発工程の正当性を過である。

去にさかのぼって証明しうるような案件自体が、日本にこの話にはオチがついている。ブランコを望んだユーはあまりないのではなかろうか。ゆえに保険制度が機能

ザーは、実は古タイヤを木にぶらさげて遊びたかっただする基盤がほぼ無いというのが、日本の実情である。
「い

28 USP MAGAZINE 2014 Aprilやいや、欧米に較べて日本の情報システムは開発におけかれたことばの意味の理解が人によってずれていたためる失敗が少ないのだ」という議論があるが、実のところであることが多い。この結果、配置の議論をきっかけに、失敗を隠してしまうために問題が表面化しないだけなのカードに用いられる単語の意味理解が深まっていくのであではないだろうか。

る。KJ 法が 1970 年代のビジネスパーソンに愛用された一つの要因はこの点にあるのではないかと思う。

コミュニケーション能力

KJ 図解を作っていく過程で、参加者の間の問題理解

ブランコをきちんと動かすには、突き詰めると関係者が進み、知識や状況が正確に共有されるようになり、結間での相互理解が完璧に行なわれるほかに手立てはな

果としてその後の集団活動が効率的に展開できたのではい。そのためには関係者が、自分がシステムをどのようないだろうか。

に理解しているのかを他人に分かりやすく伝えられなけ
ればならないし、伝えられた人はその内容を正確に受け二次元図形に関する人間の理解力
二次元図形に関して人間の直感力が優れている理由

とめなければならない。
こうした能力を育成するのに、前回解説した KJ 図解

は、動物の視覚がその生存のために数億年以上の長い時が威力を発揮する。KJ 図解においては、漠然とした意

間をかけて磨き抜かれた能力であるから、だろう。動物

味を、カードの幾何学的な配置に反映させる作業がキモは視覚から得られた情報を手がかりに危険を察知し、身である。人間は、ことばで説明したことが理解できなくを守る行動を起こすことができる。わずかな視覚情報かても幾何学的な配置に対しては直感的な、鋭い理解力をらでもその意味を汲み取れる能力が生存の決め手になっ持っている。同じ近さでカードが配置されていても、2てくる。こうして磨き抜かれた視覚情報の理解力には、枚のカードが上下に配置されているか、左右に配置されコンピュータでも簡単にはシミュレートできないものがているかの差を敏感に感じ取るのである。その結果、自ある。例えば、囲碁の名人の盤面理解には、このような分の直感に合わないと感じる配置に関して、関係者間で能力が縦横無尽に駆使されているものと思われる。
情報システムに関する人間の意味理解を、図形で表現

議論が始まるのである。
こうした議論が生み出される前提として、カードに書かれる日本語が正確に記述されていることが必要となる。

できれば、その理解は深いものになると同時に、それを他人にも伝えやすくなるのである。

配置に関して議論が生じた時には多くの場合、カードに書ソフトウェア開発の問題点

プロジェクト依頼者の考えていたこと

プロジェクト要求書に書かれていたこと

システム分析者が設計したものプログラマが作ったプログラム

利用者側に導入されたプログラム

利用者が要求していたもの

29

皆様こんにちは。三か月のご無沙汰、シェルスクリ
プト大喜利（略して sh 大喜利）のコーナーです。

など。でも最後のは段位強制返還の恐れありよ。:-)
三、ス ク リ プ ト 動 作 環 境 は Linux と し、 基 本 的 に

このあいだのソチオリンピックは盛り上がりました

Linux JM(http://linuxjm.sourceforge.jp/) に 記

ねぇ。なぜか四輪になり、あれって実はわざとなん載されているコマンド及び機能のみ使用可能としじゃないかと噂された開会式があったり、ロシアの女ます。これは多くの人が楽しめるようにするため子フィギュアスケートのあの選手の言動がとても正直なのです。
（JM にあるので、C シェル系での解答で人気を博し、なぜか日本で萌えイラスト化されたも OK ！

あと ksh、 zsh も OK にしました）り、ボブスレーではジャマイカが 12 年ぶりに参加し四、sh 大喜利はシェルスクリプトを披露する場なのてクール・ランニング。結果は最下位だったのに、なで、Perl や Ruby、 Python などは使っちゃダメ

ぜか金メダルを取ったチーム（どこでしたっけ？）よです。そもそも JM にも載っていません。逆にシェり大々的に報道されたり。

ルスクリプトにとって不可欠な awk や sed 等はそんなオリンピックが盛り上がっていた裏で、もう一つの競技会が密かに盛り上がっていたことはあまり知られていません。え、何の競技会かって？この大喜

OK です。JM にもありますし。でも、よっぽど面
白ければ、Perl とかなきにしもあらず ??
五、Open usp Tukubai(http://uec.usp-lab.com/) も利ですよ。ほら、前回出したお題をよく見直してみて

使用 OK ！

ください。有名な競技が含まれているじゃありません

れないと採用はキビシいですよ～。

か。ソチオリンピックを記念して、そういう問題を仕ルールもおさらいしたところで、さあ始めましょう !

但し、使う意義がそれなりに感じら込んでいたんですよ。

本番開始

長話はこれくらいにして、そろそろ始めましょう。
シェルスクリプト大喜利、まずは本コーナーのご説明

＜一問目＞

から。

1 ～ n （n は引数で指定） の自然数の中に存在する 『安シェルスクリプト大喜利とはシェルスクリプト大喜利特有のルール
一、 sh 大喜利はクイズやテストではありませぬ。なので決まった答えというものはないのです。あえて言うなら面白いスクリプトが正解！
二、 面白いスクリプトとは、例えばこんなもの。
イ、 人が考えつかない意外性がある
ロ、 美しい、芸術的、記述がシンプル、高速、など
ハ、 アイデア・こだわりが光る
ニ、 ネタになるバカバカしさ、くだらなさがある
60 USP MAGAZINE 2014 April

全素数』 を全て求めるシェルスクリプトを書いてください。

毎度お馴染み、整数問題。安全素数というのは、「素
数 p のうちで、(p -1)/2 もまた素数になっているもの」
です。
情報セキュリティー分野で有用なために、「安全」の名が付いているそうですよ。
でも素数を列挙してくれる primes コマンドがあるのでスッキリした解答が多かったですね。

◎K 師範の解答
1 #!/bin/sh
2 primes 1 $((($1-1)/2)) |3 while read i; do
4   a=$((2*$i+1))5   primes $a $(($a+1))
6 doneC U I 徹底仕事術！
シェルスクリプト大喜利
まずは師範になった K さんから。はい、元の定義

解答はよく来るけど、bc でやっちゃうところに感心をそのままシェルスクリプト語に翻訳したかのようにしたよ。まぁ、「n は引数で指定」という問題文に準素直です。大変に師範らしい明解な解答ですね。

じてシェルスクリプト化してないぞ、とかツッコミど大喜利的に見れば特にヒネリの無い解答だとも言えころはあるが、あまり細かいこと言うのも野暮ってもる。でも、シンプルなものはシンプルなまま美しく書んだ。よし、初段授与！

けるシェルスクリプトのよさが出ていい、と思ったの◇で採用。いいね！初段授与。

◎gori.sh 師範の解答
1 #!/bin/bash
2 primes 1 $1 | sort > list
3 cat list | awk '{print $1*2+1}' | cjoin0 key=1 li
st | sort -n◇◇

いつもの整数問題で体を温めたところで、次の問題にいきましょう。
＜二問目＞
図のように、 16 × 16 の領域の外周部分に、 60 個の英数字が並んだ

0123456789ABCDEF
x              Gw              Hv              Iu              Jt              Ks              Lr              Mq              Np              Oo              Pn              Qm              Rl              Sk              TjihgfedcbaZYXWVU

時計回りに、
1 文字分

こちらも、師範になった gori.sh さんから。素数 p

テキストデータがあります。 これを時計と 2p +1 の表を作り、Tukubai コマンドの cjoin0 で回りに 1 文字分回転 （移動） させる

INNER JOIN 相当をやって、2p +1 の数列の中から素シェルスクリプトを書いてください。

数のものだけを絞り込んでます。

というわけで、これがソチオリンピック開催記念「競回転（移動）

そうそう、こういう解法の投稿も期待してたよ。同技」です。ほら、回転ですよ、 回転。（意味が違う！）

様の処理を POSIX 標準の join コマンドで頑張ってくでも、この競技だって、スピードで競うもよし、
技（コー

れた投稿もあったんだけど、見た目のシンプルさでこド）で競うもよし、という具合にいろいろ見どころがちらを採用。でも、べ、べつに Open usp Tukubai

あって、熱い戦いが繰り広げられたのです。では、入を贔屓してるわけじゃないん、だからねっ！シンプル

賞者のコードを紹介！

イズビューリホー、初段授与。

◎gori.sh 師範の解答◎おととさんの解答

1 {c=b;b=a;a=$0;}
2 NR==2{print substr(a,1,1)                substr(
b,1,15)}
3 NR>2{ print substr(a,1,1)"              "substr(
c,16,1)}
4 END{  print substr(a,2,15)               substr(
b,16,1)}

1 #!/bin/sh
2 primes 1 $1|awk '{P[$1]=1}END{for(p in P){if((p-1)/2 in P){print p}}}'

師範達とはうってかわって、ややごちゃごちゃ系の回答ですね。AWK の連想配列を使って(p -1)/2 もまた素数になっている素数 p を絞り込んでいるようです。

ま ず は、 銅 メ ダ ル 解 答。 こ れ は、 お ぉ ～ AWK

師範のキレイな模範解答もいいけどこういうのもまの コ ー ド で す よ。 添 付 コ メ ン ト に よ れ ば「 こ のたいいね！添付のコメントによればコードの短さを意

テ キ ス ト を kaiten.awk な ど の 名 前 で 保 存 し て、識したというんだけど、確かに一問目への投稿の中で

awk -f kaiten.awk < inputdata などのように実行す最短だったよ！前回の初投稿ではあえなく段位を授与ればよい」とのことです。

できなかったけど、二度目の挑戦にして今度こそ初段

うーん、力業でこなしてるって言ってるんだけど、授与だ。

そのわりに最終的なコードはわりとスッキリしてる◎TSB_KZK さんの解答ねぇ～。また、なんでこれで回転ができるのか、よー（編注）予めシェル変数nに最大値を代入しておく）$$ echo "x=5; while(x<=$n){ f=1; y=(x-1)/2; if(x%2&&(y==2||y%2)){ i=3; while(i*i<=x&&f){ if(x%i==0||y%i==0){f=0}; i+=2 }; if(f==1){x}; }; x+=2 }" | bc

く読まないと理解できないのもトリッキーでいいね！

これもシンプルとは対極にある解答ですね。他の投うにしてくれたらさらにカッコよかったけどね。とにわがまま言うと、最初の行に #!/usr/bin/awk -f なー
んていうシバンを付けて単体でコマンドとして動くよ

稿では軒並み使われていた primes も factor も、そかく素晴らしい、一段授与！これで二段だ。

れに AWK までも使わず、素数の計算から安全素数の◎TSB_KZK さんの解答

絞り込みまで、bc コマンド 1 つでこなしてます。
いやぁ～頑張ったねぇ。AWK だけで何でもこなす

1 #!/bin/sh
2 cat curve |  tr "[0-9A-Za-z]" "[z0-9A-Za-y]"61

次は、銀メダル受賞作。出題したアタクシの意表を方はヨロシク !
◇突いたナイスな解答ですよ！先に補足しておきますが、2 行目の curve とは元データの入ったテキストファイルだそうです。

◇◇

二問目はたくさんの解答が来て感謝。中には正し
く動作せずに失格になったものもあったんですけど久しぶりに「うぁ～やられたー！」と思った解答だっ（grep -o を用いた投稿は面白かったんだけど残念）、たよ。マジメに回転するんじゃなくて、回転方向にみ載せきれなかった皆さんごめんなさい。さて三問目。

て各々一つ手前の文字に置換しているだけ。だからも＜三問目＞

ちろん、英数字がアルファベット順に並んでなきゃ通

前回の大喜利で ping コマンドで時間を稼ぐものがありまし用しないんだけど、アタシゃ確かにアルファベット順

たが、 他の何らかのやり方やコマンドで、 時間稼ぎをする方に並べたよ！

法を教えてください。 ただし、 次の条件があります。

苦し紛れに文句を付けるなら、この解答は元データ

・ 秒数をある程度予測できること （単純なループはダメよ）

を名前固定のファイルから受け取るようにしてるとこ・ なるべく珍しいもの （sleep とかはちょっとねぇ）

がオシいな。標準入力から受け取るようになっていて三問目は毎度お馴染み、ちょっと変り種の問題でくれれば、このシェルスクリプトを 60 個パイプで繋す。物事は何でもかんでも速ければいいってもんじゃ

いで 1 回転とかやって遊べるからね。でもよく考えありません。時には時間稼ぎも必要です。シェルスクてくれたわ。単純がゆえに全出場選手（投稿者）のな

リプトで時間を稼ぐなら sleep コマンドという便利

かでスピードも最速だったし。「恐れ入った！」の二なものがありますが、もしそれが使えなかったらどう段授与。これで三段だ！

する？ということでこの問題です。

◎札幌 awker さんの解答
1 #!/bin/sh
2 awk 'NR==1{print " "$1} NR>1' abcring.txt |3 awk 'NR==1{l=substr($0,length($0));print substr($
0,1,length($0)-1)} NR>1{print substr($0,1,length($0)-1) l;l=substr($0,length($0))} END{L=sprintf("%0" length($0)-1 "d",0);print L l}' |4 awk '{L3=L2;L2=L;L=$0;if(L3!=""){print L3}} END{print substr(L2,1,1) substr(L2,3,length(L2)-3) substr(L,length(L)) substr(L2,length(L2));print substr(L2,2,1)}' |5 awk '{L2=L;L=$0;if(L2!=""){print substr(L,1,1) su
bstr(L2,2)}}'

そして、栄光の金メダル作がこちら！これの何がス

これまた色々な解答が来ましたが、結構やり方あるもんですね。

◎tomi さん、 K 師範、 猿二号さん、 TSB_KZK
さんの解答 （代表して tomi さん）$$ timeout X yes > /dev/null      # Xに秒数を指定

4 名の方からいただきましたが同種の解答だったた
め、まとめさせてもらいました。これらの解答の肝はtimeout コマンドです。後ろに無限ループする何らかのコマンドを指定し、それを所定の時間が経過したら強制終了させるというわけですね。

ゴいかというと、テキストの一辺の文字数が一般化さアタクシ、timeout コマンドの存在をすっかり忘れ

れてるんですよ。だから 16×16 はもちろん、3×3 だてたよ。そういやあったなぁ、これ。そんな自分へのろうが、20×20 だろうがちゃんと回してくれるので反省を込め、各自に一段授与。tomi さん三段、K 師

す。

範二段、猿二号さん五段、TSB_KZK さん四段ね。

コードはゴチャゴチャ系なんだけど、とにかく一般化されてるのには恐れ入ったよ。それはそうと、どういう解法で回転させてるんだろうと思っだんだけど、awk を 1 つずつ動かしてみたらよくわかったよ。な◎さいたま帝国さんの解答
1 #!/bin/sh
2 watch -n $1 '(if [ -f done.tmp ]; then kill -TERM$PPID; rm done.tmp; else touch done.tmp; fi)' >/dev/null

るほどねぇ。
（読者の皆さんも、「百聞は一見にしかこれはちょっと面白いですよ。他の投稿で、top コず」だ！）第 11 回冬季オリンピック開催地、札幌のマンドや vmstat コマンドを利用していたものがあ

意地ってやつなのかねぇ。いろいろとすばらしい！金

りましたが、それらは一定時間待機した後に勝手にメダルってことで、一気に三段授与だ！

終了してくれます。でも watch コマンドはご存知のあ、そうそう。札幌の北海道大学生協さんでも本誌

とおり一定間隔ごとに指定コマンドの実行を繰り返を置いてもらえることになったので近くにお住まいのすので、終わりません。そこで、二度目の実行時に62 USP MAGAZINE 2014 April

C U I 徹底仕事術！
シェルスクリプト大喜利
watch プロセスを殺しにかかってるんですね。

◇

◇

◇

うーん、一捻り加えてくれてありがとう。この投稿といったろころで本日の大喜利はこれにてお開き！

が来なかったら top コマンドや vmstat コマンドに読者の皆さん、投稿してくれた皆さん、今回もありがよる解答を採用していたところだけど、これ見せられ

とうございました。

ちゃぁねぇ。こういう展開もまた、sh 大喜利の面白

投稿大募集

さと思うよ。よし、一段授与。只今四段。

◎C6H8O7 （クエン） さんの解答

次回のお題

1 #! /bin/sh
2 goal=$(echo $(date +"%s.%N")+$1 | bc)
3 while awk 'BEGIN{exit ('$(date +"%s.%N")'>'$goal')?1:0}';do continue; done

一、1 ～ n（n は引数で指定）の自然数の中に存在す
る「ルース = アーロン・ペア」を列挙するシェル
スクリプトを書いてください。

添付のコメントによれば、「精度にこだわって、ナ

二、標準入力から来る HTML テキストを読み込み、ノ秒まで対応してみた（笑）」とのことです。date コ

その中に含まれる URL 文字列を全て抽出するシェ

マンドで UNIX 時間をナノ秒単位まで求め、指定されルスクリプトを書いてください。タグの属性値とた時間が経つまでループするという戦法ですね。

して記載されているものもタグの間に挟まれていシェルスクリプトでホントにナノ秒精度の時間が計れるのかよ！とツッコミ入れるのはお約束かな？でもるものも全てです。
三、巷で「アセンブラ短歌」というものが流行ってる

アイデアは面白いね。一段授与！これで四段かな。

らしいですね。それに対抗して、
シェル俳句（川柳）◎イタローさんの解答を募集します。基本ルールは次のとおりです。

1 #!/bin/sh
2 mkdir wait
3 cd wait
4 touch -t `date +%Y%m%d%H%M%S | calclock 1 - | aw
k -v t=$1 '{print $2+t}' | calclock -r 1 - | sed's/.* \(.*\)\([0-9][0-9]\)/\1.\2/'` timeup
5 while :; do
6   touch now
7   ls -1t | head -1 | grep now > /dev/null && break
8   sleep 1
9 done10 rm -rf ../wait

イ、 5+7+5 で 17 個のコマンドをパイプで繋ぐ（5、
7、5 個ごとに改行していると望ましい）
ロ、 必要に応じてその句の意味の解説を付ける

投稿のしかたお題への解答は、お名前（ペンネーム）、解答した
いお題番号、解答スクリプト、簡単な補足の四点セッ
トで下記の宛先へ。一人何問でも何個でも解答可！
尚、次回締め切りは 5 月 12 日 （月） 午前 0 時とはい来ました、ヘンな解答が……。Tukubai コマ

します。雑誌は月刊化しましたけど、本コーナーは今

ンドの calclock を使って時間の計算をしていたり、までのペースでゆる～く続けていきます。約二か月後

ファイルのタイムスタンプの新旧を、しかも ls コマの締め切りまでじっくり考えてください。それまで何ンドで比較していたりするなど、せっかく見どころを度でも解答の投稿と修正を受け付けます。

作ってくれたはずなのに、8 行目にナゼか sleep。添付されていたコメントには「コンピューターに無駄な負荷を掛けちゃいかんと思って sleep を挿みました。
僕エライでしょ」と書いてありまして……。
「 う ん う ん、 そ の と ー り だ ね。 エ ラ イ ぞ っ！」……ってコラァー！！！ sleep 使うんだったらそもそも sleep 一回呼ぶだけでいいじゃないか。と、大いなるツッコミどころ持った投稿ありがとう。一段剥奪しお題もどしどし送ってくださーい
お 題 の 投 稿 も 大 募 集。 こ っ ち は 締 め 切 り な し でずーっと募集中。そして、考えてくれた方にも段位を授与します。自分で出題して解答するのも、OK ！

投稿先
どちらも投稿先は、ちゃうからね。これで二段に逆戻りだけど、懲りず今白ければ（ワリと）何でもあり！

後も投稿よろしくねっ！

待ってます !

です。面じゃんじゃん投稿

63

USP MAGAZINE

春を感じよう。案ずるより動き出そう。

日本で唯一のシェルスクリプト総合誌「シェル芸」に効く

AWK処方箋

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

ユニケージ開発手法教育講座「ユニケージ開発手法教育講座」は、ユニケージ開発手法におけるデータ管理の方法や、オリジナルコマンドの開発プロジェクトの進め方まで、ユニケージエンジニアとしてのトータルスキルを習得できます。

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

も充実中！
続々と新講座K1

コマンド学習編

K2

シェルスクリプト学習編（帳票・バッチ処理）

K3

シェルスクリプト学習編（ウェブアプリケーション処理）

K4

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

K5

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

K6

システム運用・管理編

K7

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

KSQL

SQL エンジニアのためのユニケージ活用編

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

技術の草原で百獣の王を目指す

TechLION エンジニアたちの新感覚トークライブ！
上記のサービス内容は 2014 年 3 月現在のものです。
最新の情報は弊社ホームページにてご確認ください。

http://techlion.jp/

ISBN 978-4-9048-0706-4
C3455 ￥500

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

新創刊記念対談

2014 April vol.12

使用方法などをハンズオン形式で具体的に学べる講座です。UNIX の基礎からユニケージ開発手法による「東京」的なものに染まり過ぎない
生き方とは教えて先輩♥

サーバー運用
お助けTipsHaskellでやってはいかんのか？

太田智美がスゴい人と盃をかわしつつ
インタビューする企画

今月のエクストリームエンジニア