派遣で働くエンジニアのスキルアップを応援するサイト

PRODUCED BY RECRUIT

【イベントレポート】便利だけど、難しそう?Dockerのキホンをマンガで学ぶ

株式会社リクルートスタッフィングが運営するITSTAFFINGでは、弊社に派遣登録いただいている皆さまのスキル向上を支援するイベントを、定期的に開催しています。

2019年2月20日のイベントでは「『マンガでわかるDocker』から学ぶ、DockerのキホンからDocker Hubへ自作イメージ公開まで」と題し、技術書典4で大人気だった『わかばちゃんと学ぶ』シリーズ『マンガでわかるDocker』の作者である湊川あいさんが、マンガの内容に沿って実践しながら「Dockerとは何か?」から基礎的な使い方までを、やさしく解説してくださいました。

■今回のイベントのポイント
・そもそもDockerとは?
・冪等性とは?
・コンテナを立ち上げてみよう
・開発環境を作ろう
・Dockerfileの書き方
・Docker Hubに自作イメージを公開してみよう
 
【講師】湊川 あいさん
【講師】湊川 あいさん
フリーランスのWebデザイナー・漫画家・イラストレーター。マンガと図解で、技術をわかりやすく伝えることが好き。著書『わかばちゃんと学ぶ Webサイト制作の基本』『わかばちゃんと学ぶ Git使い方入門』『わかばちゃんと学ぶ Googleアナリティクス』が全国の書店にて発売中のほか、動画学習サービスSchooにてGit入門授業の講師も担当。「マンガでわかるGit」「マンガでわかるDocker」「マンガでわかるUnity」といった分野横断的なコンテンツを展開している。
Twitterアカウント: https://twitter.com/llminatoll

そもそもDockerとは?

今回のイベントでは、湊川さんが書かれた「マンガでわかるDocker」に沿って、初心者にもわかりやすく説明してくれました。

f:id:itstaffing:20190410115527j:plain
▲イベントは、自身で技術面の記述から作画までを手掛けたマンガ「マンガでわかるDocker」をベースに進められた。

まずは、Dockerとは何かという疑問から。Dockerは、サーバOSであるLinuxを仮想化する技術の一つで、例えるならば「Windowsパソコン上で、ゲームソフトが遊べるエミュレータ―のようなもの」と考えれば良いそうです。

Dockerでは、MacやWindowsといったパソコン用OSの上で、Ubuntu Linuxというサーバ用OSが動かせます。もともとLinux上で仮想的なLinuxサーバを運用するためのソフトだったので、もちろんLinuxの上でも動かせます。

では、パソコン上でLinuxを動かしたり、Linux上で同じLinuxを動かすのはどんなメリットがあるのでしょうか?

Linuxサーバ上で動かすアプリケーションは、開発時や実行時に、JavaやPHP、Rubyといったプログラミング言語や、Webサーバ、データベース管理ソフトなど、さまざまなソフトウェアを利用しています。こうした周辺ソフトウェアは、開発環境と実際に運用する本番環境で、できる限り同じものに揃えておかなければなりません。

Dockerが便利なのは、Docker上で作成した仮想的なLinux環境をコンテナという単位で入れ替えることができ、「冪等性(べきとうせい)」が担保されることだそうです。

冪等性とは?

湊川さんのマンガには、わかばちゃんという女の子が登場します。その女の子が私たちの代わりに、PHPさんという謎のお兄さんに教わりながら技術知識を身につけていくスタイル。難しい言葉が出てくると、必ずPHPさんが初心者にわかりやすく説明してくれます。

早速、「冪等性」についてですが、たとえば、ゲーム機のスイッチを入れたときに、毎回同じタイトル画面が立ち上がり、ゲーム機に差したカートリッジが同じならば、毎回同じ内容のゲームがスタートします。また、ゲーム内のショップで買い物をするときには、回復薬を1つ買えば100円が減り、もう1つ買えば同じように100円が減ります。このように、ある操作を1回行っても複数回行っても結果が同じであることを「冪等(べきとう)である」と言います。

「そんなの当たり前なのでは?」と思うかもしれません。しかし、Linuxサーバ上のプログラミング言語や連動するソフトの種類やバージョンはさまざまなものがあり、環境ごとに異なるケースも少なくありません。そうすると、自分の環境で作ったサイトデータやアプリケーションを相手に渡したときに、渡した先で動かないという状況が生じかねません。

こうした「こちらでは動くのに、あちらでは動かない」ということがないように、双方がDockerを使って冪等性を担保しておけば、余計なことに煩わされることが無くなります。

コンテナを立ち上げてみよう

Dockerの紹介が一通り終わると、実際のパソコンを使ったデモが始まりました。パソコンにDocker Desktop(for Mac/for Windows)をインストールするとパソコン上でDockerが使えるようになります。湊川さんがマンガの内容に沿って、実際にMacでDockerの操作を実演してくれました。

まずはDockerコンテナを立ち上げます。Macなら「ターミナル」、Windowsなら「コマンドプロンプト」を起動してコマンドラインから操作します。利用可能なコンテナの一覧を表示させるにはcontainer lsコマンドを実行します。

$ docker container ls

一覧に何も表示されません。これは今現在は利用可能なコンテナがローカルには存在していないということです。まだ何もしていないので当たり前ですね。では、早速はじめてのコンテナを立ち上げてみましょう。runコマンドでhello-worldというイメージをもとにコンテナを作成・起動します。

$ docker run hello-world

実行すると画面に「Hello from Docker!」というメッセージが表示されて終了しました。

f:id:itstaffing:20190410115532j:plain
▲Dockerでhello-worldを実行する。画面はWindows版

該当のイメージ(今回はhello-worldイメージ)がローカルに無い場合、「Docker Hub」というネット上から自動でダウンロードしてきてくれるのです。

コンテナのライフサイクル

続いて、Alpine LinuxのイメージをDocker Hubからダウンロードして使ってみます。Alpine Linuxは、Linuxのディストリビューション(利用目的等に合わせてLinuxと必要な周辺ソフトを集めた配布パッケージ)の一つです。

Docker Hubからダウンロードするのですが、このとき、初心者はオフィシャルのイメージを使ったほうが安全とのこと。なぜなら、イメージは誰でもアップロードできるためです。個人が作ったアンオフィシャルのイメージを使うときは、Dockerfileの中身をちゃんと確認し「そのイメージが何をインストールしているか」「どんなコマンドを実行するか」理解してからにしましょう。

f:id:itstaffing:20190410115536j:plain
▲Docker Hubのサイト画面。このサイトにさまざまなイメージがアップロードされており、手軽にダウンロードして使うことができる。

先ほどのhello-worldと同様に、run alpineとすれば良いのですが、ここではrunコマンドを分解して実行して見せてくれました。runコマンドは、pull、create、startをまとめたものなので、次のような手順になります。

まずpullコマンドでダウンロードします。

$ docker pull alpine

次にcreateコマンドでイメージをもとに、コンテナを作成します。

$ docker create -it alpine

そしてstartコマンドでコンテナを実行します。

$ docker start [コンテナ識別子]

このときコンテナ識別子には、createコマンド実行時に表示されたidを指定します。

コンテナを停止するには、stopコマンドを使います。

$ docker stop [コンテナ識別子]

では、Alpine Linuxを実際に使ってみましょう。Linuxを利用するにはシェルを起動する必要があります。そこでrunコマンド実行時に、シェル(bin/sh)の実行も指定しておきます。

$ docker run -it alpine bin/sh

これで、Alpine Linuxの起動と同時にシェルが実行され、Alpine Linux環境内でさまざまな操作が行えるようになります。

開発環境を作ろう

いよいよDockerで開発環境を作ります。なんと、コマンド1行で済みます。

$ docker run -d -p 80:80 --name myapp -v $(pwd)/var/www/html php:7.0-apache

コマンドラインの内容は、PHPのバージョン7,0とApacheを含むイメージ(php:7.0-apache)をrunコマンドでダウンロード・コンテナ起動しています。-dは、バックグラウンドでの実行を指示しています。

-p 80:80はポート番号指定で、パソコンのポート80に接続するとコンテナのポート80につながるようにしています。

--name myappは、作成したコンテナにmyappというコンテナ名を付けています。これにより、その後のコンテナの操作がこの名前を指定して行えます。

コンテナを停止すると、このコンテナの中で作ったファイル(index.phpなど)は失われてしまいます。そこで、これを防ぐために-vオプションでパソコンのローカルフォルダをコンテナ内($(pwd)/var/www/html)にマウントします。

これで環境が立ち上がりました。この環境を利用するために、次のコマンドでシェル(bash)を起動します。

# docker exec -it myapp bash

そして、この環境内でPHPを使ってWebページを出力する簡単なプログラムを作成してみます。

# echo '<?php phpinfo();' > index.php

この状態で、パソコンのブラウザから、下記のようなURLを指定すると、コンテナに接続され、ページが閲覧できます。



f:id:itstaffing:20190410115540j:plain
▲ブラウザでlocalhostにアクセスするとPHPのバージョン情報が表示される。画面はWindows版

このほか、Dockerfileの書き方やDocker Hubへのアップロードについても学びました。Dockerが便利だとは聞くけれど、なんだか難しそうと思われている方は、ぜひマンガをとっかかりにするのもよさそうです。

f:id:itstaffing:20190410115543j:plain

【イベントレポート】Javaの次のステップへ。今注目のJVMプログラミング言語「Scala」を学ぼう

株式会社リクルートスタッフィングが運営するITSTAFFINGでは、弊社に派遣登録いただいている皆さまのスキル向上を支援するイベントを、定期的に開催しています。

2019年2月13日のイベントでは「今注目のJVMプログラミング言語『Scala』を学ぶ!~Javaエンジニアに向けたScalaの概要~」と題して、書籍『実践Scala入門』の著者である水島宏太さんを講師にお迎えし、スケーラブルなシステムの開発で注目されるプログラミング言語Scalaの基礎を解説していただきました。

■今回のイベントのポイント
・ポストJavaとJVM言語
・どのJVM言語を学ぶべきか
・JavaからScalaへ

【講師プロフィール】
水島 宏太さん
筑波大学大学院システム情報工学研究科コンピュータ・サイエンス専攻修了[博士(工学)]。大学院在籍時からScalaを継続して追いかけ、アジア最大のScalaイベントであるScalaMatsuriの前身「Scala Conference in Japan 2013」の発起人でもある。現Japan Scala Association代表理事。株式会社ドワンゴ勤務。著書に『オープンソース徹底活用Scala実践プログラミング』(共著、秀和システム)、『実践Scala入門(共著)』(技術評論社)、『Scala スケーラブルプログラミング(監修)』(インプレス)などがある。

ポストJavaとJVM言語

Javaだけ知っていればいいという時代でないということは、何となくわかっているものの、Javaは依然として重要な言語であり、Javaに加えてそれ以外の言語も覚えなければと考える人が増えています。そうした人たちの間で現在、注目されているのが、JVM言語だそうです。

JVM言語とは、処理系がJVM(Java仮想マシン)上で動作する言語の総称で、主なものとしてScala、Kotlin、Clojureなどがあります。そして、なぜJVM言語が注目されるかと言えば、Javaエンジニアにとって学びやすいからなのだそうです。

どのJVM言語を学ぶべきか

JVM言語はどれも同じというわけではなく、それぞれ長短があり、水島さんがそれをわかりやすく紹介してくださいました。

f:id:itstaffing:20190328125331j:plain
▲Scalaの長所と短所

Javaの資産をほぼ完全に使えるというのは、Scalaの大きなメリットですね。また、Better Javaとして使えるというのは、Javaのような書き方もできる上に、Javaでは使いにくかった部分や難しかった部分が、簡潔に記述できるという意味だそうです。

f:id:itstaffing:20190328125335j:plain
▲Kotlinの長所と短所

KotlinもBetter Javaとして使えますが、現状ではAndroidアプリ開発以外の実績が少ないことがネックだといいます。

f:id:itstaffing:20190328125339j:plain
▲Clojureの長所と短所

Clojureは良くも悪くも、静的な型がないことが特徴だそうです。IDEのサポートが弱いというのも、少し手を出しにくい印象がします。

大まかにまとめると、Androidアプリを中心に開発を行うのであればKotlin、サーバーサイド中心の開発を行うのであればScala、型が不要ならばClojureを選ぶのがよい、という結論でした。

イベントでは、Javaの復習も踏まえて説明されたのですが、Javaが抱える課題として、以下のようなものが挙げられました。

f:id:itstaffing:20190328125342j:plain
▲Javaが抱えるさまざまな問題

ラムダ式とは、Functional Interface(FI)を持つオブジェクトのメソッドを実装するための記法でJava8から実装されているそうです。

f:id:itstaffing:20190328125346j:plain
▲ラムダ式「()->」を使ってメソッドを記述。

上記のように、インターフェイスにRunnableを使う場合、メソッドに引数を渡したり、メソッドからの戻り値を受け取ったりすることができません。そこでJava8からは、多数のFIがjava.util.functionパッケージ以下に追加されているそうです。

このように、言語を設計した当所はあまり考慮されていなかったり、後から登場した概念を実装するため「増築」を繰り返していったりしたことで、Javaにもさまざまな問題点が生じ始めているようです。

そこでScalaの登場です。JavaエンジニアがScalaを学ぶことで、次のようなメリットが生じます。

f:id:itstaffing:20190328125350j:plain
▲JavaエンジニアがScalaを学ぶことのメリット

高階関数というのは、関数を引数にする、あるいは関数を戻り値とする関数のことで、たとえばリスト構造の各要素に対して順々に与えられた関数を処理していくmap()などが、これに相当するそうです。

JavaからScalaへ

そして、いよいよJavaとScalaの違いに迫ります。セミナーでは、事前にScalaの基礎文法の丁寧な説明もありましたが、ここでは割愛します。まずはJavaの記述とScalaの記述の違いから。

f:id:itstaffing:20190328125353j:plain
▲配列を用意し、配列の値を操作して表示するプログラム。こちらはScalaをBetter Javaとして記述した場合の例

ScalaはBetter Javaとしても使えますが、Scala本来の方法で記述することもできます。

f:id:itstaffing:20190328125357j:plain
▲先ほどのプログラムをScala流に記述するとこうなる(あくまでも記述の一例)

しかし、この後のサンプルはいずれもBetter JavaとしてのScalaの記述です。まずは、ジェネリックなクラスの定義について見てみましょう。

f:id:itstaffing:20190328125400j:plain
▲型変数Tはインスタンス生成時の記述から推論されている

同様に、ジェネリックなメソッドの定義についても見てみましょう。

f:id:itstaffing:20190328125403j:plain
▲こちらはJavaでメソッドを定義した例

f:id:itstaffing:20190328125408j:plain
▲Scalaだと、このように記述できる。swapメソッドの型変数Uも引数から推論される

Java8から実装されているFIを利用したStream APIの記述も見てみましょう。これもJavaで記述する場合と、Scalaで記述する場合で下図のように異なります。

f:id:itstaffing:20190328125411j:plain
▲Java8から実装されたStream APIもScalaだと簡潔に記述できる

上図で、Javaは、コレクションnumbersからstream()で、ラムダ式を渡せるStream形式に変換し、高階関数であるmap()でStreamに対する操作を行い、collect()で終端操作をしています。

いっぽうScalaでは、StreamAPIと同様の操作も簡潔で、終端操作も記述する必要がなく、すっきりとしたコードで記述できていることがわかります。リストに対する処理は多用するため、冗長で煩雑な記述が簡略化されるメリットはとても大きいと思います。

Scalaというと並列分散処理が記述しやすいとか、関数型言語という特徴などが、真っ先に取り上げられがちですが、今回学んだように、まずはBetter Javaとして使うというのが、導入としてはよさそうです。Javaの延長線としてScalaを使い、段階的にScala流の記述を学んでいくことができるというのは大きな魅力です。エンジニアとしての幅を広げるために「次はScala」という選択肢を、考えてみませんか。

【イベントレポート】ビジネス数学を意思決定の根拠や予測に役立てよう

株式会社リクルートスタッフィングが運営するITSTAFFINGでは、弊社に派遣登録いただいている皆さまのスキル向上を支援するイベントを定期的に開催しています。

2019年1月25日のイベントでは「データのトリセツ~ビジネス数学の基本的な考え方~」を開催。

数学には苦手意識がある、今さら数学なんて、と思われる方もいるかもしれませんが、データ分析の現場ではもちろん、論理的に考える上で「ビジネス数学」は欠かせません。今回はビジネス数学が使われる場面や考え方を、増井さんに解説いただきました。

■今回のイベントのポイント
・ビジネス数学は意思決定の際の「根拠」に使える
・時系列データから未来を予測する
・データをもとに予測したら、行動を選択できる
 
【講師】増井 敏克さん
【講師】増井 敏克さん
増井技術士事務所代表。技術士(情報工学部門)。情報処理技術者試験にも多数合格。ビジネス数学検定1級。「ビジネス」×「数学」×「IT」を組み合わせ、コンピュータを「正しく」「効率よく」使うためのスキルアップ支援や、各種ソフトウェアの開発、データ分析などを行う。著書に『おうちで学べるセキュリティのきほん』『プログラマ脳を鍛える数学パズル』『エンジニアが生き残るためのテクノロジーの授業』『もっとプログラマ脳を鍛える数学パズル』『図解まるわかりセキュリティのしくみ』(以上、翔泳社)、『シゴトに役立つデータ分析・統計のトリセツ』『プログラミング言語図鑑』『プログラマのためのディープラーニングのしくみがわかる数学入門』(以上、ソシム)がある。

なぜデータを使うのか

ビッグデータやデータサイエンティストといった言葉が多く使われるようになりましたが、多くの人は「自分には関係ない」と感じているかもしれません。その背景には、以下のような状況があり、「データ分析」という言葉に抵抗感があることが挙げられます。

・分析しても何が得られるかわからない
・データ分析のために専任の担当者を雇う余裕がない
・そもそも大量のデータなんて持っていない

ただ、今回取り上げるのは、このような大量のデータを扱って人間が気づかないことを発見する「データマイニング」のような内容ではなく、ビジネスにおいて意思決定をするときに求められる「根拠」として使う程度です。このような分析を行うときには、高度な数学や統計、プログラミングに関する知識は不要で、厳密に答えを求めるのではなく、ざっくりとでも実務に使える分析をすることが大切です。

データを扱うとき、公益財団法人日本数学検定協会が実施しているビジネス数学検定
https://www.su-gaku.biz )では、以下のような5つのステップに分けています。このコラムでは、主に「予測」と「選択」の部分について紹介します。

f:id:itstaffing:20190313135635j:plain

時系列データから未来を予測する

データを使う目的として、過去の傾向を元に未来のことを予測したい場合があります。このとき、これまでの経験から「予想」ではなく、データを用いて「予測」することが大切です。

予測によく使われるのは時系列のデータでしょう。一定の期間に渡って、定期的に取得したデータとして、売上や気温の変化、光熱費の使用量の推移などがあります。このようなデータを元に予測する方法として、「移動平均」がよく使われます。

移動平均は株価や為替などをグラフで表現する場合によく使われる方法で、次の図のような「13週移動平均」や「26週移動平均」などを見たことがある人は多いでしょう。移動平均の期間を長く取ることで、そのグラフは滑らかになり、長期的な傾向を見ることができます。

f:id:itstaffing:20190313135638j:plain
図)Yahoo!ファイナンスより引用

株価や為替は予測できませんが、私たちの身近な仕事であれば、ある程度予測できることもあります。ITに関する部分であれば、Webサイトへのアクセス数、プログラムの処理時間などの推移を見ると、過去のデータからある程度正確に予測できます。

移動平均はExcelなどを使うと、次の図のような計算式で簡単に求められます。

f:id:itstaffing:20190313135642j:plain

ざっくりとした値を推定する

時系列データ以外では、「フェルミ推定」を使う方法もあります。知っている知識を元に値を推測する方法で、実際に調査が難しい値でも論理的に概算できます。例えば、会議の中で「電子黒板」の需要を考えるような場面を考えてみましょう。

電子黒板を日本にある小学校に導入すると考えると、その数を推定することが必要です。この程度であれば、インターネットで調べれば簡単に数を調べられますが、自分の知っているデータを組み合わせて推定することがポイントです。

方法はいくつか考えられますが、ざっくりとした値は以下のような感じで求められます。

・日本の人口は…だいたい1億2000万人
・日本人の平均寿命は…だいたい80歳
→ 1歳あたりの人口は1億2000万人÷80歳=150万人

・日本の小学校はだいたい30〜40人学級
・1学年のクラス数は2クラスくらい
→1つの小学校で1学年の人数は75人

つまり、150万人÷75人=2万校。

実際、文部科学省の調査
http://www.mext.go.jp/b_menu/toukei/chousa01/kihon/1267995.htm )でも2万校くらいとなっています。上記は本当にざっくりした値の推定方法ではありますが、大幅にずれないことが大切です。

これが1000校や10万校、というように桁が違ってしまうようだと問題ですが、こういった推定ができると、知っている知識を組み合わせるだけである程度精度の高い推定ができます。

予測結果から行動を選択する

データを元に予測するだけでなく、複数の選択肢の中から1つを選ばないといけない場面もあります。このような場合には「重み付け評価」がよく使われます。例えば、携帯電話の機種を選ぶ場合、デザインや性能、価格やブランドなどを考えて選びます。

選択の基準が1つであれば簡単なのですが、複数の指標があると、すべてを満たすものはなかなか見つかりません。そこで、複数の指標に優先順位をつけて、順に重みを設定します。設定した重みと評価値から計算して重み付け評価を行うことで、複数の指標から1つの値に変換できます。

例えば、以下のように評価項目を点数化し、重みをつけると評価の高い機種を選択できます。

f:id:itstaffing:20190313140247j:plain

   機種A:5×3 + 2×4 + 4×5 + 3×4 = 55
   機種B:2×3 + 4×4 + 3×5 + 5×4 = 57
   機種C:4×3 + 3×4 + 3×5 + 4×4 = 55
   機種D:3×3 + 4×4 + 5×5 + 4×4 = 66 → 機種Dの評価が一番高い

このように、複数の指標がある例として、仕事で複数社から見積を取って比べる場合、プライベートで住宅を探す場合、など身近な場面も多くあります。この重み付け評価を行うには「優先順位を決める」ことが重要になってきます。

優先順位を論理的に決める

仕事で優先順位を決める場合、重要度や緊急度に応じて判断することが多いと思います。緊急度は期日などがあるとわかりやすいものですが、顧客からの要望などの場合、その重要度はなかなか決められないものです。

そこで、IT系でもよく使われる方法に「狩野分析法」があります。これは「あったとき」と「なかったとき」の両方の視点で考える方法です。例えば、「その機能があればどう思うのか」「その機能がなければどう思うのか」という質問について、「うれしい」「普通」「困る」のような選択肢を考えます(実際には5段階が使われるが、ここでは3段階とします)。

すると、優先順位は、以下の表のような順番で設定できます。つまり、一番優先順位が高いのは「あるのが普通だがないと困る」ものです。

f:id:itstaffing:20190313135645j:plain

この表を使って、優先順位の設定を考えてみましょう。例えば、スマートフォンを選ぶときに、「カメラ」「電子マネー」「ワンセグ」「音楽再生」といった機能のどれを優先するかを考えてみます。

私の場合は、次のような回答になります。

・カメラ:あるのが普通だが、ないと困る
・電子マネー:あるとうれしいし、ないと困る
・ワンセグ:あると嬉しいが、なくても普通
・音楽再生:あるのが普通だが、なくても普通

つまり、私の場合では「カメラ > 電子マネー > ワンセグ > 音楽再生」の順になります。これは人によって順番が異なると思いますが、さまざまな場面で応用が利く方法だと思います。

実際のビジネスにおいては、学校で学ぶ数学のように正解は1つではありません。正解がないかもしれません。しかし、なんとなく選ぶのではなく、根拠を持って説明できるようにするために、「ビジネス数学」はいまから身に着けておきたいものです。

【イベントレポート】効率化・評価UPのロジカルライティングとテクニカルライティング

株式会社リクルートスタッフィングが運営するITSTAFFINGでは、弊社に派遣登録いただいている皆さまのスキル向上を支援するイベントを、定期的に開催しています。

2019年1月18日のイベントでは「仕事を効率化し、評価を高める ロジカルライティングとテクニカルライティング入門講座」を開催。

仕様書や議事録、連絡メールなど、エンジニアも文章と無縁ではいられません。相手にわかりやすく、自分の考えが伝わりやすい文章を、どう書けばよいのか。テクニカルライティングのプロフェッショナルである高橋慈子さんを講師にお迎えして、わかりやすい文章の考え方から実践的な書き方まで、教えていただきました。

■今回のイベントのポイント
・自分の文章の弱点をチェックしよう
・わかりにくい文章の問題点を探る
・ロジカルシンキングを活用して組み立てる

【講師プロフィール】
高橋 慈子さん
東京農工大大学卒。技術系出版社を経て、テクニカルライターとしてフリーランスで取扱説明書の作成に関わる。1988年テクニカルコミュニケーションの専門会社として、株式会社ハーティネス設立。同代表取締役。企業の取扱説明書やマニュアル制作のコンサルティングや人材育成に関わるほか、大妻女子大学、立教大学、慶應義塾大学 非常勤講師なども務める。情報処理学会ドキュメントコミュニケーション研究会幹事。 著書に『技術者のためのテクニカルライティング入門講座』(翔泳社)、『人より評価される文章術』(共著・宣伝会議)、『SEの文書技術』(日経BP)など。

自分の文章の弱点をチェックしよう

今回のテーマは文章表現。いつもと少し違って、席の近い参加者同士が互いの文章の良い点を評価し合うなど、実際に文章を通じてコミュニケーションを図る試みも行われました。

まずは、自分の文章力を再認識するための自己評価シートの記入からスタート。10項目に1から4の点数をつけ、カテゴリごとの平均点を算出し、これにより、自分の課題が見えてくるそうです。

f:id:itstaffing:20190305112442j:plain
▲自分の文章力の弱点をさぐる自己評価シート

ここで確認した弱点を克服する取り組みにより、自分の文章力を改善し、見直しをしていくとよいそうです。また、自分だけでなく、他の人の文章をレビューする際は「この人はこの項目の中のどこが苦手なのか」を見つけ出すとよいとのこと。アドバイスをすること自体が、自身の文章力向上にもつながるのだそうです。

f:id:itstaffing:20190305112445j:plain
▲自己評価シートの点数により、自分の弱点を把握しておくことが大切。まずは足りない部分を磨いていく

現在、現場で求められているライティングスキルは、以下の3つだそうでうす。

・スピード
書くスピードでなく、読む人が短時間で内容を把握できることが重要。相手の時間を奪わない。

・簡潔で、完結している情報
目的に合わせた情報を盛り込む。前のメールなど、遡ってみないと分からないのはNG。

・英文にしやすいシンプルな和文
ビジネスの海外展開、職場スタッフの多国籍化に対応。長く、係り受けが複雑、主語述語がハッキリしない文章はNG。

文書作成は仕事の中で時間を使うものであり、生産性を低下させている要因の一つです。ライティングのスキルを磨くことで業務そのものの品質向上に取り組むことができ、ひいては個人や組織の評価を高めることにつながるそうです。

わかりにくい文章の問題点を探る

演習として、わかりにくい文章を直していきます。例として示されたのは「用語の説明文」と「社内メール文」の2つです。

f:id:itstaffing:20190305112449j:plain
▲わかりにくい説明文の例。この文章のどこがわかりにくさの原因なのかを考え、他の人と意見を共有する

f:id:itstaffing:20190305112453j:plain
▲わかりにくい社内メール文の例。こちらも同じく、わかりにくさの原因を探る

この2つの文章について、どこがわかりにくさの原因となっているのかを、参加者同士がグループで話し合い、考えを共有しました。参加者から出てきた意見には次のようなものがありました。

説明文のほうで挙げられた原因は、次のような意見がありました。

一文が長い
冗長(係り受け等)
用語が難しい
用語が統一できていない
クラウドベース
「することが可能になる」
クラウドコンピューティングとは
否定で始まるのはよくない

メールのほうで挙げられた原因は、次のとおりです。

「打合せ」「グループミーティング」等の用語不統一
ビジネス表現ではない(口語)表記がある
何が問題なのかが文面から読み取りにくい
誰宛てなのかがわからない
ミーティングの日程調整が主題ではないのか?
件名が内容と合致していない
文章の丁寧さの統一
日程の候補を載せたほうがよい
返信がいつまでに必要かわからない
所属とフルネームが必要なのでは?

こうして、いろいろな経験、立場の人たちが複数で目を通すことにより、自分では気が付かなかった問題点にも気づくことができました。

ロジカルシンキングを活用して組み立てる

よく「ロジカルシンキング」という言葉を耳にしますが、ロジカルシンキングとは、誰にでも理解しやすく、納得できるように組み立てられた思考のことを指します。ただし、「誰にでも」という部分について高橋さんは「受け手から見た筋道であることが重要」だと強調します。なぜなら、書き手から見た筋道では、押し付けになりやすいからです。

ロジカルシンキングは、考えを「見える化」するもの。ロジカルシンキングを行うことで、意志疎通が迅速になり、さまざまな業務の効率化が図れます。

では、どのようにロジカルシンキングを磨けばよいのでしょうか? 高橋さんのお勧めは、ロジックツリーで構造を整理することだそうです。

f:id:itstaffing:20190305112456j:plain
▲上図のように全体のロジックから筋道をつけていく。付箋紙を使って、書き出して、貼っていくなど、ホワイトボードを使うのも手。

これを議事録の文章作成に応用すると次のようになります。

f:id:itstaffing:20190305112500j:plain
▲議事録の書き方はさまざまですが、たとえば上図のように、話し合ったテーマごとにトピックで分ける方法ではなく、決まったこと、未決のことに分けて記録するのもやり方の一つ

こうした実践手法をふまえ、先ほどのメール文のリライトをしてみることになりました。文章のタイトルや件名は、あいまいな表現でなく、具体的なキーワードを入れるのがポイント。そして本文もわかりやすく整理します。事例のメールの背景は次のようなものとします。

f:id:itstaffing:20190305112503j:plain
▲メール送信の背景。ここからグループミーティング参加者全員に同報通知(CC)しているのではないか、と推察し、宛名を「グループミーティング参加者各位」とする参加者もいた

この背景をもとに、参加者が各自で書いたメール文を、グループのメンバーと互いに評価し合いました。メールタイトルに要返信の旨を記載したり、次回グループミーティングの開催日時の件と、納期確認の件を明確に切り分けて小見出しを付けて書いたりと、皆それぞれに工夫していて、どれもわかりやすいと感じました。

そして最後に、わかりやすい文章作成の実践的な手法として、重要な情報を見極める、キーワードを盛り込みながら書く、多めに文章を書いてから削る、パラグラフ単位で組み立てる、リード文(要約)を書くなど、いろいろな練習方法を教わりました。

f:id:itstaffing:20190305112507j:plain
▲重要な情報を見極め、キーワードを盛り込みながら書くことが大切。多めに文章を書いて、後から削るというのもテクニックの一つ

f:id:itstaffing:20190305112510j:plain
▲パラグラフ単位で文章を組み立て、パラグラフ同士や、パラグラフ内の文と文とのつながりを考える習慣を身につけると良い

高橋さんの推奨するもので、最もすぐに実践できそうなのは、「筋トレと一緒でたくさんの文章を書く」というもの。なかでも日頃から受け手のことを意識して文章を書くことができれば、特別な訓練をする時間の無い方でも、文章力を向上させることができそうです。

【イベントレポート】時給を上げ、引く手数多のエンジニアになるために必要なことを知ろう

株式会社リクルートスタッフィングが運営するITSTAFFINGでは、弊社に派遣登録いただいている皆さまのスキル向上を支援するイベントを、定期的に開催しています。

2019年1月11日のイベントでは「『自分らしい働き方』を貫くための武器を手に入れる!〜単価を上げ、引く手数多のエンジニアになるために必要なこと〜」と題して、書籍『ITエンジニアのための【業務知識】がわかる本』の著者である三好康之さんを講師にお迎えし「業務に関する知識」という切り口から見たエンジニアの将来のキャリアについて解説していただきました。

■今回のイベントのポイント
・ITエンジニアにとっての壁
・SEからコンサルタントへ
・業務知識の学び方
・これからのキャリア形成について

【講師プロフィール】
三好 康之さん
株式会社エムズネット代表。大阪を主要拠点に活動するITコンサルタント。本業の傍ら、ITエンジニアに対して、資格取得講座や階層教育を担当している。保有資格は、情報処理技術者試験全区分制覇(累計30個,内高度系23個)をはじめ、ITコーディネータ、中小企業診断士、技術士(経営工学)、販売士1級など多数。著書も『勝ち残りSEの分岐点』、『ITエンジニアのための【業務知識】がわかる本』、『情報処理教科書プロジェクトマネージャ』(以上翔泳社)他多数。

ITエンジニアにとっての壁

企業では「売上アップがしたい」という一方で「労働時間は短縮させたい」という大きな矛盾を抱えています。

この問題を解決し、生産性を高める方法こそがITです。実際に、今では経理・財務はもとより、人事、生産、販売など、企業のあらゆる活動にITのシステムが入り込んでいます。しかし、現場の諸課題を解決するためには、ITの知識と業務の知識を兼ね備え、さまざまな改善提案が行えるITコンサルタントが必要になります。

多くの場合、企業が売上向上を図る際に、経営者はタスクフォースを結成して臨みます。

f:id:itstaffing:20190222105845j:plain
▲企業が売上向上を図る際に結成されるタスクフォースの例

エンジニアは、単なるシステム発注先ではなく、ITコンサルタントとして、こうしたタスクフォースに加わり、リードしていくべきなのです。

SEからコンサルタントへ

SEからITコンサルタントになれれば、単価が上がる可能性が高いのはもちろん、それ以外にも時間が自由になる、経営者から感謝されるなど、仕事の進め方もやりがいも大きく変わります。

f:id:itstaffing:20190222105848j:plain
▲SEからITコンサルタントになることで時間が自由になり、感謝されるなど、仕事の魅力も増える

そのための重要な要素について、三好さんは次の2つを挙げます。

・資格
・業務知識

たとえば情報処理技術者の資格には、プログラミングの力を問うものがあります。プログラミングの知識・経験は、コンサルタントにとって大きな強みになります。

「直接プログラムを作成するわけではなくとも、コンサルタント同士の間でのチカラ関係に影響します。プログラムの中身まで見据えられるとして一目置かれる立場になります」(三好さん)

「自分はプログラマではない」という方や「最新のプログラミング言語の知識はない」という方もいるかもしれませんが、三好さんによれば、それでも強みになるのだそうです。

「昔ながらのプログラミング言語を使っている人も、運用フェーズやサポートで関わっている人も、アレルギーがない分、チャンスが広がります」(三好さん)

最近ではパッケージソフトウェアを使ったり、主要サービスのAPIを組み合わせたりしてシステムを構築することも増えており、プログラミングをしないことも多いでしょう。だからこそ、重要になるのは業務知識なのだと三好さんは力説します。実際に、SAP社のERPパッケージソフトが日本に上陸し始めたとき、その導入の仕事を一番多く手掛けたのは、エンジニアではなく公認会計士だったそうです。それは、経理・会計等の業務に最も詳しい立場にいたからです。

業務知識の学び方

では、そもそも「業務知識」とは何なのでしょうか。そして、どのように知識を身につけていけば良いのでしょうか。

三好さんによれば、業務知識はその存在理由などから4つのレベルに分けられ、そのレベルに応じて学んでいくとよいそうです。

f:id:itstaffing:20190222105852j:plain
▲4段階に分けられる業務知識のレベル

まずはレベル1の法律で決められている業務。これは、企業としては腰が重い業務であり、したがって、業務の効率化が大きな課題解決になるのだそうです。法律に強いのはタスクフォースの中で言えば弁護士さんで、基本はともかく、法律の詳しい知識で弁護士を超す必要はありません。要するに、弁護士さんと普通に話ができればよいということです。

次に、レベル2のISOやJISで決まっている業務。これは、人によって、あるいは立場によって専門分野が違ってきます。やる、やらないは企業次第なので、提案だけできれば良い領域だそうです。このレベル1とレベル2は、顧客からすれば「知っていて当然」という部分。机上で事前学習しておけばOKです。

そしてレベル3の何かしらのメリットがあるから準拠する業務。たとえば、業界特有の取引ルールや業界規格などです。ここはOJTや経験で学んでいく部分であり、タスクフォースで言えば、経営コンサルタントさんの得意領域。「繊維業界20年」などという人が本領を発揮する領域なので、そうした人から情報を引き出して学んでいくのが良いそうです。

そしてレベル4の当該企業の創意工夫の部分。ここは経営者の領域です。そしてここがITエンジニアの活躍領域でもあります。自由度の高い業務であり、独自の工夫や取組みを行う部分で、顧客しか知らない情報もあるため、その都度確認しながら業務を組み立てていきます。技術をバックグラウンドにした、さまざまな提案も行えます。

すべてを押さえていればベストですが、レベル1とレベル4の両方を押さえている人も極めて少ないため、まずは、この両方を押さえておけば、大きな武器になるそうです。とは言え向き不向きもあるでしょう。

そこで三好さんが提案する業務知識の学び方のコツは、「興味のあるものは放っておき、興味のないものを積極的に勉強していく」というもの。興味のあるものは、自然に目が向き、放っておいても知識が身についていくけれど、興味のないものは、いつまでたっても身に付かないからだそうです。

これからのキャリア形成について

プログラミングができて、業務改善提案もできるという人は、中小企業の経営層から引く手あまたで、自ら強引に売り込んでいかなくても、挨拶を交わしただけで、後から探して見つけてもらえるプル型の人材として活躍できるようになるそうです。三好さんは、これをインバウンド戦略と呼んでいます。

f:id:itstaffing:20190222105856j:plain
▲探して見つけてもらえるITコンサルのインバウンド戦略

そして業務知識を学ぶタイミングですが、必要になる前に勉強していくことが大切だそうです。必要になる前ならば、時間も自由に使えるためストレス無く学べ、プレッシャーもかかりません。

f:id:itstaffing:20190222105901j:plain
▲必要ない段階で学んでおくとプレッシャーもかからない

また、いきなり実績を作るのは難しいという場合は、実績がなくてもキャッチアップできる方法として資格の取得があります。特に情報処理技術者試験は、業界でも知られていてかつコストがかからないという点で、三好さんもお勧めです。

先が見えない中で、将来のために何をしておけば良いか悩むことがあります。多くの場合、信頼のおける先輩、上司、親などに相談することでしょう。ただし、それらの人たちには、それぞれの立場に応じた利害関係があるので、その点は理解しておく必要があります。

もし、一つだけ確実だとすれば、それは国家資格です。情報処理技術者試験は、現場での評価は賛否あるかもしれませんが、間接的な影響は大きいので、取得しておいて損はないそうです。

いきなり業務知識を学ぶといっても、どこから手を付けて良いかわからない、ということも多いでしょうが、今回、三好さんからたくさんのヒントをもらいました。まず、必要になる前段階で、興味の向かないものから手をつけていくこと、そして資格取得はやはり大事だということで、早速行動してみましょう。

【イベントレポート】プログラミング初心者の最初の壁、環境構築について学ぼう

株式会社リクルートスタッフィングが運営するITSTAFFINGでは、弊社に派遣登録いただいている皆さまのスキル向上を支援するイベントを定期的に開催しています。

2018年12月14日のイベントでは「プログラミングを学び始めるときの環境構築〜エンジニアが生き残るためのテクノロジーの授業」を開催。

プログラミングを始めるとき、最初につまずくのは環境構築。今回は増井さんに、手軽に試せる開発環境から、主流な環境の準備、便利な開発ツールなどを、主にPHPとJavaScriptでのWeb開発を目指す方向けにお話いただきました。レポートでは、PHPの環境構築について詳しく解説します。

■今回のイベントのポイント
・プログラミングを始めるときの悩み
・オンライン実行環境を試す
・PHPの環境を構築する
 
【講師】増井 敏克さん
【講師】増井 敏克さん
増井技術士事務所代表。技術士(情報工学部門)。情報処理技術者試験にも多数合格。ビジネス数学検定1級。「ビジネス」×「数学」×「IT」を組み合わせ、コンピュータを「正しく」「効率よく」使うためのスキルアップ支援や、各種ソフトウェアの開発、データ分析などを行う。著書に『おうちで学べるセキュリティのきほん』『プログラマ脳を鍛える数学パズル』『エンジニアが生き残るためのテクノロジーの授業』『もっとプログラマ脳を鍛える数学パズル』『図解まるわかりセキュリティのしくみ』(以上、翔泳社)、『シゴトに役立つデータ分析・統計のトリセツ』『プログラミング言語図鑑』『プログラマのためのディープラーニングのしくみがわかる数学入門』(以上、ソシム)がある。

プログラミングを始めるときの悩み

プログラミングを学び始めるとき、どのプログラミング言語から学べばいいか迷うことがあります。世の中には非常に多くのプログラミング言語があり、作りたいシステムの規模や目的、実行する環境などによって最適な言語は変わってきます。

学生であれば、学校で指定された言語があるかもしれませんし、企業であればプロジェクトで使う言語が決められているかもしれません。このような場合は使う言語のコンパイラや実行環境を導入すればいいのですが、個人的に新しい言語を学ぶ場合には、どれを選んでいいのかわからないことは珍しくありません。

いろいろな言語を試してみるには、各言語の実行環境やコンパイラをインストールする必要があり、環境構築に時間がかかります。なかなか言語の勉強に入れず、結局どの言語も中途半端になりかねません。さらに、使ってみたけれど自分には合わなかった、という場合には不要なソフトウェアがコンピュータ内に残ってしまう、ディスクを大量に消費してしまう、などの状況もあるかもしれません。

開発環境を整えるために、どのようなツールを選べばいいのかわからない、という問題もあります。あるプログラミング言語を選んでも、エディタに何を使うのか、IDE(統合開発環境)は何が良いのか、などさまざまな疑問が出てきます。WindowsとMacでは動くソフトウェアが違う、他の人と環境を揃えられない、という問題もあります。

オンライン実行環境を試す

そこで、とりあえず言語の文法を試したい場合にはオンラインの実行環境を使う、というのも一つの方法です。最近はWebサイト上でソースコードを入力して実行できるサービスがいくつも登場しており、Webブラウザさえあれば簡単に試すことができます。

例えば、「Ideone」(https://ideone.com/)や「Wandbox」(https://wandbox.org/)といったサービスを使うと、多くのプログラミング言語を簡単に試すことができます。試したい言語をリストの中から選んで、ソースコードを入力し、実行ボタンを押すだけです。

f:id:itstaffing:20190212140439j:plain

また、HTMLとCSS、JavaScriptを試したい場合は「JSFiddle」(https://jsfiddle.net)のようなサービスを使うと、簡単にWebページのデザインや簡単なスクリプトを試せます。最近よく使われているJavaScriptのフレームワークであるAngular, React, Vue, Gatsby, Next.js, Node.js, Nuxtなどを試す場合には、「CodeSandbox」(https://codesandbox.io)なども便利です。

プログラミング言語だけでなく、データベースなども試したい場合は、「CodingGround」(https://www.tutorialspoint.com/codingground.htm)というサービスもあります。スマホアプリもあり、一部の言語ではオンラインでIDEを使うこともできます。

もしIDEをブラウザで試したい場合は、「Codeanywhere」(https://codeanywhere.com)や「Codenvy」(https://codenvy.com)、「AWS Cloud 9」(https://aws.amazon.com/jp/cloud9/)といったサービスを使うのもいいでしょう(ただし、会員登録やログインが必要になります)。

開発に使うツールを導入する

上記のような方法で開発に使うプログラミング言語を選んだ後は、本格的に開発を始めるために手元で開発環境を構築する必要があります。コンパイラや実行環境をダウンロードしてインストールするだけでなく、ソースコードを入力するために、テキストエディタやIDEが必要です。

テキストエディタとしては、古くからvi(Vim)やEmacsなどが使われてきました。最近では便利な機能を備えたVisual Studio Code(VSCode)、Atom、Sublime Textなどが人気を集めています。その背景には、プログラミングなどに便利な機能を多く備えていて、簡単に使えることが挙げられます。

例えば、「スニペット」と呼ばれる機能により、簡単に入力を補完できます。HTMLを入力するモードにして、「!」記号を入力したあと、Enterキーを押すだけで簡単にHTMLのテンプレートを使用できます。

f:id:itstaffing:20190212140443j:plain

このような機能を使うのに何の設定も必要なく、初期設定のままで用意されている、というのは初心者にとってメリットでしょう。

なお、一部のプログラミング言語では、IDEを使用する方法もあります。IDEを使えば、ソースコードの入力だけでなく、Javaなどで使われるEclipseやNetBeans、C#などで使われるVisual Studio、Objective-CやSwiftで使われるXcodeなどがよく使われています。スクリプト言語でも、PHPのような言語ではPHPStormやIntelliJ IDEAなど開発に便利な機能を備えたIDEが存在しますので、試してみるのもよいでしょう。

PHPの環境を構築する

今回はプログラミング言語として「PHP」を選んだ場合の環境構築を考えてみましょう。多くのレンタルサーバーで標準的に使える言語であり、Webアプリケーションの多くで使われています。また、入門書などの資料も多く、学びやすい言語だと思います。

PHPで開発するとき、手元のパソコンに環境を構築するにはいくつかの方法があります。Windowsの場合はXAMPPなどのツールもよく使われており、インストールするだけでPHPだけでなくWebサーバーやデータベース、FTPサーバーなども一括でインストールできます(https://www.apachefriends.org/jp/index.html)。

ただ、使わない機能も多く、必要な機能だけをインストールしたい場合には個別に導入することもできます。例えば、プログラミング言語のPHPそのものは公式サイト(https://windows.php.net/download/)からダウンロードして解凍するだけなので、インストールの作業は不要です。「C:\php」というフォルダに解凍して、図のように配置してみましょう。

f:id:itstaffing:20190212140447j:plain

コマンドプロンプトを開いて、「C:\php\php ––version」を実行すると、ダウンロードしたバージョンが表示され、正常に動作していることを確認できます。(より便利に使うには環境変数にパスを登録する方法もあります。)

PHPでWebアプリを手元で実行する

Webアプリを実行するには、Webサーバーが必要です。レンタルサーバーを使用する方法もありますが、手元で簡単に試すだけであれば、PHPの「ビルトインWebサーバー」を使う方法もあります。ビルトインWebサーバーはPHPに付属しており、ApacheやnginxといったWebサーバーソフトをインストールしなくても、開発環境として使うには十分なWebサーバーを起動できます。

「C:\php」にPHPをインストールしている場合は、プログラムを配置したフォルダに移動して、コマンドラインで以下のようにオプションとして「–S」を付けたコマンドを実行するだけです。

C:\php\php –S 127.0.0.1:80

これは、ローカルホスト(自分のコンピュータ)を表す「127.0.0.1」の、ポート番号80(HTTP)でビルトインWebサーバーを起動するコマンドで、ブラウザから「http://127.0.0.1/」または「http://localhost/」にアクセスすると、該当のフォルダにあるプログラムをWebアプリとして実行できます。

例えば、以下のようなファイルをindex.phpというファイル名で保存してみましょう。

< ?php

phpinfo();

このページをWebブラウザで開くと、以下のように表示できます。

f:id:itstaffing:20190212140451j:plain

Composerを使って様々な便利機能をインストールする

PHPのパッケージを導入する場合には、依存関係管理ツールであるComposerを使うと便利です。Composerは公式サイト(https://getcomposer.org)からダウンロードしてインストールします(公式サイトの「Getting Started」を選択し、「4. Installation–Windows」の「Composer–Setup.exe」を実行)。

Composerを使うと、さまざまな便利なフレームワークや機能を追加する場合も、コマンドを入力するだけです。例えば、最近人気のあるLaravelフレームワークは、以下のコマンドでダウンロードしてプロジェクトを作成できます。

composer create-project ––prefer–dist laravel/laravel [プロジェクト名]

また、PHPではコードの書式に「PSR–2」と呼ばれるルールがよく使われます。このルールに従っているか確認するために、php cs fixerなどのツールを導入することもあります。これを導入する場合も、以下のコマンドを入力するだけです。

composer global require friendsofphp/php–cs–fixer

php cs fixerはコマンドラインからソースコードをチェック・整形できるだけでなく、Visual Studio Codeなどのエディタにある拡張機能を使えば、エディタでの入力中に、ルールに従っているか確認できます。

このように、便利な機能の導入や管理が可能なツールが、最近のプログラミング言語では用意されていることが多く、簡単に設定できるようになっています。ぜひ業務内容や実現したいこと、好みなどに応じてプログラミング言語を選んで、実際に開発環境を作ってみてください。

【イベントレポート】『カイゼン・ジャーニー』から学ぶ、アジャイル開発とカイゼンの手法

株式会社リクルートスタッフィングが運営するITSTAFFINGでは、弊社に派遣登録いただいている皆さまのスキル向上を支援するイベントを、定期的に開催しています。

2018年12月19日のイベントでは「カイゼン・ジャーニー ボクが越境できたわけ ~たった一人からはじめて、「越境」するチームをつくるまで~」を開催。

書籍『カイゼン・ジャーニー』の著者である新井さんが、これまでに自身で実践してきた組織カイゼンの具体的な手法や、新井さんの勤務先、ヴァル研究所で部署を超えてカイゼンの取り組みを行きわたらせた実体験などを紹介してくださいました。

■今回のイベントのポイント
・アジャイル開発について
・カイゼンの手法
・わたしの実体験

【講師プロフィール】
新井 剛さん
株式会社ヴァル研究所 SoR Dept.部長、株式会社エナジャイル取締役COO、Codezine Academy Scrum Boot Camp Premiumチューター、CSP(認定スクラムプロフェッショナル)、CSM(認定スクラムマスター)、CSPO(認定プロダクトオーナー)。Javaコンポーネントのプロダクトマネージャー、緊急地震速報アプリケーション開発、駅すぱあとミドルエンジン開発、駅すぱあとエンジンの部門長などを経て、カイゼン・エバンジェリストとして全社組織をカイゼン中。同時に、アジャイルコーチ、カイゼンファシリテーター、ワークショップ等で組織開発にも従事。Java関連雑誌・ムックの執筆、勉強会コミュニティ運営、イベント講演も多数あり。

アジャイル開発について

「プロジェクトや組織でモヤモヤした問題あるよね?」と感じることは少なくありません。プロジェクトチームを組んでいても、メンバーが同じ時間に同じ場所にただ座っているだけの関係、いわゆるサイロ化された状態では、こうしたモヤモヤは解消されません。

新井さんは、まず、アジャイルという視点から、そうしたモヤモヤした問題をカイゼンサイクルを回しながら解決していく方法論について解説してくれました。

f:id:itstaffing:20190207102520j:plain
▲アジャイル開発とカイゼンサイクルのまとめ

大切なのは、早く軽く失敗して、次に生かすこと。これにより、精神的にも費用的にも時間的にも、無駄が発生せずに済みます。

そして「ふりかえりがとても大事」だと言います。いったん止まって考えることですが、これは失敗を悔いたり、内省や反省をしたりするのでなく、学びの機会、すなわち前進を意味しています。だからアジャイル界隈では「ふりかえり」を、ひらがなで書くことが多いそうです。

また、タイムボックス(期間の箱)で時間を管理することも忘れてはならないそうです。ポイントは、良い気づきの在庫を溜め込まないこと。「倉庫の中にあるものは何も価値を生んでいません。お客さんに届いて初めて価値を生むのです」という言葉にハッとさせられました。

「可視化」と「見える化」はニュアンスが違うというのもポイントです。「可視化」は単に見える状態にすることであり、「見える化」は気づきやフィードバックにつながり、行動につながるカタチにしたものだということ。何でも見えるようにすればよいわけではなく、雑音を取り除いて必要なもの(納期、コミュニケーション)を見えるようにする必要があるのだそうです。

書籍に出てくる手法

カイゼンと言っても、最初から組織単位で進めていくのはハードルが高いもの。そこで新井さんは自分一人で取り組む「ぼっち編」と、チームで実施する「チーム編」とに分けて紹介してくれました。

ぼっち編では、自身のタスクを管理していきます。朝会(といっても一人で行うのですが)で1日の計画を立てタスクボードに乗せ、タスクをマネジメントしていきます。そして定期的に「ふりかえり」を行うのも大切だそうです。

タスクボードは「TODO」「DOING」「DONE」という3つにプロセスを仕分けします。

f:id:itstaffing:20190207102439j:plain
▲タスクボードではプロセスを仕分けする

朝会では、1日の計画を立てます。決められた場所と時間に行うのがコツで、自分の1日のスケジュールなので10分程度でOK。ここで「昨日やったこと」「今日やること」そして「面倒だなと思うこと」を仕分けし1日の計画を立てます。

f:id:itstaffing:20190207102443j:plain
▲朝会のポイント

ふりかえりは1週間に1度、30分以内で行うのがコツだそうです。プロセスやプロダクトのカイゼン、問題の言語化・見える化を行います。

f:id:itstaffing:20190207102446j:plain
▲ふりかえりのポイント

タスクマネジメントで重要なのは、時間を味方につけること。タスクの分割や、誰かに渡したタスクの管理、ヌケモレの防止などを行います。

f:id:itstaffing:20190207102450j:plain
▲タスクマネジメントのポイント

チーム編では、期待マネジメントも重要になります。期待マネジメントとは、互いの期待のギャップを埋めていくこと。これは機を逃さず、ギャップがあると気づいたときに擦り合わせていくことが大切だそうです。

チームビルディングに当たって、新井さんがお勧めするのが、ドラッカー風エクササイズ。主語は自分で、何が得意で、どう貢献するかを自己表明し、仕事をする仲間の価値観を知ります。

f:id:itstaffing:20190207102453j:plain
▲ドラッカー風エクササイズで仕事をする仲間の価値観を知る

プロセスのカイゼンには「ECRS」という手法があります。これは排除・結合・交換・簡素化のそれぞれの頭文字をとったものです。

f:id:itstaffing:20190207102457j:plain
▲プロセスをカイゼンするECRSとは?

A⇒B⇒Cというプロセスがあるとき、ECRSでは次のようにカイゼン策を検討します。

f:id:itstaffing:20190207102501j:plain
▲プロセスカイゼンの考え方

わたしの実体験

ここまでは新井さんの書籍をベースにしたカイゼンの手法について学びましたが、今回は新井さん自身の実体験も聞かせてもらえました。

新井さんは、転職を2回、社会人になってからの海外留学を経験しており、ヴァル研究所は3社目になるとのことです。中途採用で後から職場にやってきた人が、職場の仕事スタイルをガラリと変えるのには相当な苦労があったのではないかと想像してしまいます。

転職や留学の経験から、同期がいない、知り合いゼロ、土地勘ゼロでのスタートを繰り返しており、みずから「ぼっち」を選んでいるのかと悩んだこともあったそうです。

f:id:itstaffing:20190207102505j:plain
▲新井さんのアジャイル~カイゼンへの取り組み

その第一歩は、ヴァル研究所に入社し、CI(継続的インテグレーション)ツールを自身のプロジェクトに導入し、個人的にアジャイル開発に興味を持ったことだそうです。

何人かの若手が同時多発的に、夕方に読書会や勉強会を自主開催するようになり、やがて全社で認められるようになりました。

たまたまヴァル研究所がそうした取組みに理解があったというわけではありません。ヴァル研究所は、まだインターネットが普及する前に、電車の乗り換え案内ソフト「駅すぱあと」をリリースし、古くからのパソコンユーザーには馴染みのある企業で、新井さんいわく「昭和なスタイルの会社」だそうです。社内には、最初の「駅すぱあと」を開発した60代のベテランエンジニアを筆頭に、50代のエンジニアも数多く在籍しており、当初、なかなか全社に行きわたらせることができませんでした。

しかし、社内の2~3チームでアジャイル開発が導入されていくと、周囲にもアジャイルに興味を持つ人が増えてきます。新しいもの好きは、どこにでも少なからず存在していて、そうした人たちを軸に、次第に広がりを見せていき、やがて多くの社員たちもカイゼンやアジャイルの取り組みに参加するようになりました。

現在は、社内のいたるところに無数の付箋紙が張られたホワイトボードが置かれるようになったとのこと。しかも、開発部門だけでなく、総務部や監査チームでのカイゼンや、販売促進チームでの残業管理などにも同じ手法で取り組んでいるそうです。

f:id:itstaffing:20190207102510j:plain
▲社内のいたるところに付箋紙の張られたホワイトボードがあるヴァル研究所の社内

ソフトウェア開発の新しい試みにモブプログラミングというものがあります。これは、複数名がキーボード1個で開発していく手法のこと。たとえば総務部門では、採用のスカウトメールの執筆に、複数名が1台の端末を囲んで1通のメールを仕上げていくモブプログラミングならぬモブワークを実践しているそうです。

f:id:itstaffing:20190207102515j:plain
▲開発部門だけでなく、総務部や販売促進チームでもモブワークを行っている

最後に新井さんからのアドバイスがありました。

職場でこうしたカイゼン手法を導入しようとすると、全員が賛同することはまずありません。知的好奇心旺盛なエンジニアや、何かを変えることに対して前向きで気が利くメンバーにフォーカスを当てて、巻き込んでいくのが成功への秘訣だそうです。そして、始めるのに遅すぎることはなく、行動するべきだと思ったときにスタートするべきだと締めくくってくれました。

今回のイベントでは、アジャイル開発やカイゼンの手法だけでなく、新井さんの所属するヴァル研究所の取り組みにも驚かされました。「ぼっち」から始めてここまで全社に行きわたらせたことに感動するとともに、まずはスモールスタートでもいいから行動することの大切さを教えていただきました。派遣スタッフから、就業先の雰囲気までいきなり変えるのは難しいかもしれませんが、朝会など、できることはたくさんあるでしょう。小さく、始めてみませんか?