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

PRODUCED BY RECRUIT

【イベントレポート】今注目のRPAの考え方を知り、実務に活かす

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

最近何かとよく聞くRPA。Robotic Process Automationの略で、ロボットによる処理の自動化を意味します。ロボットといっても、物理的な実体があるわけではなく、コンピュータの中にあるソフトウェアを使って事務作業などを自動化することを指す言葉です。

これまでも事務作業を効率化するために業務システムが開発され、プログラムによる自動化は多く行われていました。RPAも目的は同じですが、注目されている理由としてRPAツールの登場があります。

そこで、2019年3月27日のイベントでは「今注目のRPAの考え方を知り、実務に活かす!」を開催。RPAツールがこれまでの自動化とどのように違うのか、無料で使えるRPAツールでどのようなことができるのか、事例や注意点を含めて増井さんに解説いただきました。

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

RPAとこれまでの自動化との違い

これまでの業務システムなどの場合、開発するにはプログラミングが必要で、修正したいときには開発者に依頼する必要がありました。しかし、RPAツールはプログラミングに関する知識が不要で、事務担当者が自分で修正できます。

同じように担当者が自動化する仕組みとして、これまでもExcelのマクロがありました。操作を記録して再生する程度であれば誰でも使えましたが、あくまでもExcelの中だけで、他のプログラムを操作するにはプログラミングの知識が必要でした。

同様に、Web画面を操作するには、Seleniumを使ってChromeやMozillaの操作を記録、実行する方法はテストやスクレイピングで多く使われていました。これも簡単に使えますが、Webブラウザ内の操作しかできませんでした。

RPAツールはマウスやキー操作を自動的に記録することで、定型作業を自動化でき、複数のアプリケーションを操作できます。このようなツールはデスクトップ自動化と呼ばれ、これまでも存在しました。しかし、RPAツールであればサーバーで実行することでパソコンを使っていない時間帯でも処理できる、OCRなど最新の技術を簡単に使える、豊富なパッケージで機能を拡張できる、などの特徴があります。

f:id:itstaffing:20190516134221j:plain

無料で使える自動化ツールとその特徴

RPAツールは多くの企業が製品を提供しており、有料の製品から無料のものまで様々です。有料のツールはサポートや研修なども含めて安心して使用できますが、少し試してみたいという場合には高価です。

そこで、最初は無料で使える自動化ツールを試してみるのが良いでしょう。例えば、日本語で簡単に使えるツールとしてUiPathがあり、Community Editionであれば無料で使用できます。フローチャートのような分岐が自在に実現でき、マウスの操作などを直感的に記録、実行できます。

f:id:itstaffing:20190516134202j:plain

Windowsでよく使われているツールとして、他にWorkFusion RPA Expressがあります。メモリの使用量が多く、コンピュータのスペックが要求されますが、タスクリストのようなイメージで簡単に処理を追加できます。英語のツールですが、それほど難しい単語も出てこないので、それほど苦労せずに使えると思います。

f:id:itstaffing:20190516134207j:plain

macOSの場合は、標準でインストールされているAutomatorを使う方法もあります。図のように、実行したアクションを並べるだけで様々な処理が可能なため、初心者でも簡単に自動化できます。

f:id:itstaffing:20190516134210j:plain

パソコンに限らず、スマートフォンでも自動化すると面倒な操作が不要になります。例えば、iOSであれば「ショートカット」という無償のアプリを使うと、便利なライブラリが最初から用意されているだけでなく、ウィジェットに登録すると簡単に実行できます。

f:id:itstaffing:20190516134213j:plain

現場で使われている事例

シンプルな例として、私の場合、Amazonで書籍の売上ランキングを確認する場面を考えます。手作業でWebブラウザを操作して、各書籍のページを開き、ランキングが表示されている部分までスクロールすると取得できますが、チェックする書籍の数が増えてくると面倒です。

そこで、自動的にWebブラウザを開き、対象のテキスト部分を取得、テキストファイルに保存することを考えてみます。例えば、Automatorでは上述のAutomatorの図のようにやりたいことを並べるだけで簡単に実行できます。

事務作業を効率化する目的では、Excelで受領した発注書を自社のWebフォームに転記、入力するような作業もよく見かけます。このような定型的で単純な処理はRPAツールが得意とする作業です。

f:id:itstaffing:20190516134215j:plain

最近では、AI機能が身近になっており、これらを連携すると便利に使える例があります。例えば、スマートスピーカーと連携すると、Google Homeに話しかけたものをEvernoteに登録するような連携はIFTTT(https://ifttt.com/)などを使うと簡単に実現できます。また、Evernoteには、登録されたメモ(ノート)をメールで送信する機能もありますので、そのメールを使った処理をRPAで自動化することもできます。Google Homeから直接メールを送信することもできますので、このような連携は手軽に実現できます。

また、最近はOCRの精度も向上しているため、受信したFAXをPDFとして処理し、そこに書かれている文字を取り出してフォームに入力する、といったことも実用的になってきました。

f:id:itstaffing:20190516134218j:plain

RPAを導入するときの注意点

RPAはプログラミングなどが不要なため、情報システム部門が関係しなくても簡単に導入できてしまいます。これは、「シャドーIT」のリスクがあると言えます。ファイル共有サービスなどを従業員が勝手に利用して情報が漏洩することなどを指す言葉ですが、RPAツールでも様々な問題が発生する可能性があります。例えば、管理者が行っていた作業を自動化すると、IDの使い回しが発生したり、一般社員でも管理者権限で実行できてしまったりするかもしれません。

また、作成した処理を誰がメンテナンスするか、という問題もあります。例えば、使用しているシステムに以下のような変更が発生すると、RPAツールが処理の実行に失敗します。

● フォルダ内のデータを処理している場合、フォルダを移動した、フォルダ名を変更した、といった操作が行われた
● Webサイトから何らかのデータを取得している場合、サイトがリニューアルされた
● 社内システムで、情報システム部門がシステムを改修した

このような場合、RPAの処理を作った人が異動したり退職したりすると、中身がわからなくなってしまいます。さらに、これまでのシステム開発では丁寧に設計し、全体最適となるように検討していましたが、RPAだと担当者が思いつくままに実装してしまい、個別最適になってしまう可能性があります。

何よりも問題なのが、ロボットの数が増えてくると、その管理ができないことです。動いているつもりでもエラーが発生している、間違った処理をしていても気づかない、といった状況が発生します。そもそも誰がログを管理するのか、という問題もあります。

このように、RPAは手軽に導入できて便利に使える一方で、運用面も含めて検討しておかないと、後々トラブルが発生する可能性もあることに注意が必要です。メリットとデメリットを正しく理解し、導入するようにしましょう。

【イベントレポート】IoTセキュリティとソフトウェアの脆弱性を考える

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

2019年3月8日のイベントでは「マジメだけどおもしろいセキュリティ講義 ~IoTセキュリティとソフトウェアの脆弱性をめぐる議論~」と題し、書籍『マジメだけどおもしろいセキュリティ講義』の著者でもあるすずきひろのぶさんを講師にお迎えして、コンピュータセキュリティの最前線について教えていただきました。

■今回のイベントのポイント
・大規模DDoS攻撃を引き起こしたMIRAIのケーススタディ
・過去例からIoT機器の脆弱性について考える
・現状におけるIoT機器のセキュリティの問題を整理
・脆弱性情報流通の枠組みと運用について
・政府のあたらしい取り組みNOTICE

【講師プロフィール】
すずき ひろのぶ(鈴木裕信)さん
1985年、株式会社SRAに入社。UNIXやネットワーク関連のソフトウェア開発を経験後、同社ソフトウェア工学研究所にてネットワークやソフトウェア品質の研究を行う。1997年にソフトウェア・コンサルタントとして独立。JPCERT/CCの立ち上げ時から運営に参加し、現在も一般社団法人JPCERTコーディネーションセンター理事として情報セキュリティに携わるほか、実践女子大学、専修大学、中央大学で非常勤講師として勤めると同時にユニバーサル・シェル・プログラミング研究所に在籍しSELinuxの実践的利用の研究や実践的IoTセキュリティの研究を進める。

大規模DDoS攻撃を引き起こしたMIRAIのケーススタディ

セキュリティにおいて、注目すべきホットな話題が、IoT機器をボット化させてDDoS攻撃をしかけたマルウェア(悪意を持つソフトウェア)「MIRAI」の登場です。

MIRAIを知る前に、まずDDoS攻撃について説明されました。DDoS攻撃は、いわばDoS攻撃の進化版です。DoS(Denial of Services:サービス拒否)攻撃でもいちばん困るのは、正常に見えるアクセスを大量にサーバに送り付け、処理をマヒさせてしまうというもの。

しかし、単一のIPアドレスから送信されるパケットは制御可能な上、サーバ側の処理能力が攻撃側の処理能力を上回っていれば攻撃は成り立ちません。パソコンを一台、二台用意しただけでは企業や官庁などの規模のサイトを麻痺させることはむずかしいのだそうです。

そこで登場するのがDDoS(Distributed DoS:分散サービス拒否)攻撃です。一斉に異なるIPアドレスからパケットを送り付けてオーバーフローさせてしまうというもの。どれだけ多くの攻撃ノードを用意できるかが重要になってくるそうです。

f:id:itstaffing:20190424120150j:plain
▲DDoS攻撃のイメージ。マルウェアに感染した攻撃botが、ターゲットとなるサーバに一斉に攻撃を仕掛ける(出典: 講演スライドより)

2016年9月に登場した「MIRAI」は、約14万5千もの攻撃ノードから、1秒間に9300万パケット、転送量にして約799Gbpsの攻撃を仕掛けたそうです。すずきさんによれば「このパケット量に耐えられるシステムはそうそうありません」とのこと。

では、なぜMIRAIは、このような前代未聞の大量攻撃を仕掛けることができたのか。それは「IoT機器が攻撃ノードとして使われたから」だそうです。

今では、街中のいたるところに設置され、防犯や安全に貢献しているカメラですが、それらはIPネットワークで接続されており、撮影画像を送信するために通信機能を備えています。

MIRAIは、こうしたネットワークカメラ1台1台に内蔵されているコンピュータに侵入し、C&Cサーバと呼ばれる司令塔からの命令によって、一斉攻撃を仕掛ける仕組みになっています。また、MIRAIは非常に考えて作られており、感染したマルウェアが周辺のIPアドレスをサーチし、見つけた対象のアーキテクチャ(ARM、X86、SuperH、MIPS等)に最適なバイナリを送り込みます。そうして、わずか72時間で、約14万5千もの攻撃ノードを手に入れたのだそうです。恐ろしいですね。

MIRAIのC&Cサーバも設計が練られていて、200万台のノードをコントロールできるように設計されていたそうです。200万台のノードが一斉攻撃を仕掛けると考えただけでも、ぞっとします。

MIRAIの感染対象はインターネットカメラが搭載する「組込みLinux」というOSでしたが、これはインターネットカメラだけでなく、家庭で利用しているブロードバンドルータなどにも利用されています。そして、感染した機器には共通の条件がありました。telnetのポートをオープンにしていたこと、デフォルトアカウントからroot権限が使えたこと、管理用ログインアカウントとパスワードが出荷時のままであったこと、などです。

この話を聞くと、自宅のブロードバンドルータのパスワードを購入時のものから変えておいたかどうか、不安になる方もいるかもしれません。

ちなみに、MIRAIを作成した犯人はすでに逮捕されており、MIRAIおよびC&Cサーバのソフトウェアは公開されており、その手口は解明済みです。

現状におけるIoT機器のセキュリティの問題を整理

イベントでは、このほかにも、東芝のHDDレコーダーや、I・Oデータ機器のネットワークカメラなどが狙われた過去の事例や、海外事例としてHospira Lifecare PCA輸液ポンプのroot権限が乗っ取り可能という重大な脆弱性が存在していたケースなども紹介されました。輸液ポンプは医療現場で使われるだけに、人命に直結する脅威です。

こうしたIoT機器が、今後も狙われることは間違いなく、新たな対策が必要です。その対策の1つとして、すずきさんが紹介してくれたのが「SHODAN」というサービスです。

f:id:itstaffing:20190424120153j:plain
▲SHODANを使えば、自分が使っているIoT機器が外部からどう見えているかがわかる (出典 https://www.shodan.io

「SHODAN」は、合法的な手法で、オンラインになっているサービス機器を見つけるサービスです。インターネット側からアクセス可能なIoT機器はインターネットに接続した瞬間に、第三者に見つけられるのは時間の問題になります。それなら、「SHODAN」を使って、自分たちの設置したIoT機器が、外部からどう見えているのかを確認しておこうというポジティブな使い方をすずきさんは提案していました。本来はインターネット側からアクセスされる意図はなかったのにアクセスできてしまうような誤った設定などを見つけるのにたいへん有用で、これはIPA(独立行政法人 情報処理推進機構)も推奨しています。

また、別のアプローチとして、IoT機器のネットワーク空間をインターネットから切り離し、セキュアな仮想ネットワークを構築するという試みもあり、すでに株式会社ソラコムやニフティ株式会社が、そうしたサービスを提供し始めています。

f:id:itstaffing:20190424120155j:plain
▲IoT機器をインターネットから切り離されたセキュアな仮想ネットワークで接続する取り組みもある(出典:講演スライドより)

脆弱性情報流通の枠組みと運用について

また、重要な課題であるソフトウェアの脆弱性についても、これを周知させるため、中立的な第三者による、統一した脆弱性情報ハンドリングの必要性についても説明しました。

米国では、これを国家安全保障の範囲と捉え、米国土安全保障省(DHS)の資金提供によるMITREという団体が脆弱性情報のハンドリングを行っていて、NIST(米国立標準技術研究所)では、脆弱性情報のデータベース化も行っているそうです。

一方、日本国内では、JPCERT/CCやIPAが経済産業省の告示に従い、海外とも連携しながら脆弱性情報のハンドリングを行っています。

f:id:itstaffing:20190424120158j:plain
▲日本国内での脆弱性情報のハンドリングはJPCERT/CCやIPAが推進。国際連携もしっかり行っている

政府のあたらしい取り組みNOTICE

最新の話題として、2019年1月に、総務省とNICT(情報通信研究機構)と各インターネットサービスプロバイダが連携してIoT機器への無差別侵入調査・注意喚起を行う「NOTICE」という取り組みが発表されました。

f:id:itstaffing:20190424120203j:plain
▲NOTICEは、botが行うような試みをNICTが行い、安全予防に対する注意喚起を行う

この「無差別侵入」が不正アクセス禁止法に触れるのではないかという疑念もありましたが、一方で、ルータやネットワークカメラのデフォルトパスワードはマニュアルに記載されて公知なものとなっており、「みだりに第三者に知らせてはならないものとされている符号」に当たらないという見解も主流になりつつあります。しかし、昨今の状況からそのままでは警察や検察がどう解釈するかは予想できません。

そこで、NOTICEの実施にあたっては法改正を行い、通称「NICT法」の中に新たに「特定アクセス行為」という概念が取り入れられました。

f:id:itstaffing:20190424120206j:plain
▲NICT法では合法的に新たに「特定アクセス行為」という概念が盛り込まれた(出典:講演スライドより)

今後は、IoT機器の販売に対してデフォルトパスワードのままでは使えなくなるように指導が入る流れが予想されるものの、海外製品の国内OEM販売などでも徹底できるかどうかなど、不透明な部分も多々あります。

いずれにしても、IoT機器が私たちの身近にどんどん増えていくことは間違いありません。こうした動きに、もっと敏感になっておく必要がありそうです。

増井敏克の「情報のキャッチアップが足りない」ときに読むコラム 第4回 脆弱性ってなんだろう?

f:id:itstaffing:20190417105443j:plain

情報システムやネットワークに対する攻撃は多様化し、情報漏洩や不正アクセスのニュースは世界中で後を絶ちません。脆弱性への知識や脆弱性診断の需要は高まるばかりですが、皆さんは脆弱性について、どれくらい理解しているでしょうか。今回のコラムでは、エンジニアとして、脆弱性について知っているとよい内容をまとめました。

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

脆弱性とバグの違い

ソフトウェアなどにバグがあると、利用者は想定した操作ができず、通常の使い方であっても問題になります。つまり、設計された通りに実装されておらず、利用者はその問題に気づきます。

それに対し、脆弱性の場合は利用者が通常の使い方をしている場合は気づきません。その製品の開発者すら気づいていないことがほとんどです。しかし、攻撃者がその脆弱性を見つけると、その問題点を狙った攻撃が可能となり、情報漏洩やファイルの破壊などの攻撃が成立してしまいます。

脆弱性と似た言葉にセキュリティホールがありますが、一般的には脆弱性の方が広い意味で使われます。例えば、教育不足による「人の脆弱性」や、ハードウェアに存在する問題に使われることもあります。一方で、セキュリティホールは主にソフトウェアの脆弱性に使われます。

f:id:itstaffing:20190417105446j:plain

脆弱性やバグがソフトウェアに存在すると、多くの場合は開発会社から修正プログラムや更新プログラムが提供されます。このプログラムをダウンロードし、適用することで、脆弱性を修正できます。このようなプログラムの中でも、セキュリティに特化したものをセキュリティパッチと呼ぶこともあります。

ただし、サポートが終了した製品に対してはこのような修正プログラムが提供されない場合があるため、サポート期間には注意が必要です。もし修正プログラムが提供されない場合は、該当のソフトウェアを使用しない、代替のソフトウェアに切り替える、といった対応が必要かもしれません。

なお、「情報セキュリティ早期警戒パートナーシップガイドライン」が定められており、ソフトウェアやWebサイトに脆弱性を発見した場合にはIPA(情報処理推進機構)に報告することになっています。

f:id:itstaffing:20190417105450j:plain

脆弱性を防ぐために開発者が注意すること

開発者にとっては、開発の各ステップにおいてセキュリティを意識することが大切です。ソフトウェアの開発においては、要件定義から設計、実装、テスト、運用という大きな流れがあります。この各ステップにおいて、セキュリティレビューやソースコードレビュー、脆弱性診断やシステム監査・セキュリティ監査などを実施します。

特に脆弱性診断は重要で、開発したアプリケーションに脆弱性がないか調べるだけでなく、以下の図のようにネットワークの設定漏れやファームウェアの更新状況、サーバーの設定ミスやOS、アプリケーションの修正プログラム適用状況、不要なサービスの有無なども確認します。データベースには不要なユーザーが登録されていないか確認することも必要です。

f:id:itstaffing:20190417105453j:plain

また、脆弱性を作り込まないために最新の情報を仕入れることも大切です。例えば、Webアプリを開発する場合は、IPAによる「安全なウェブサイトの作り方」を読んでおくことは必須です。

さらに、最新の情報を収集します。IPAの情報セキュリティページ(https://www.ipa.go.jp/security/index.html)や、JVN(https://jvn.jp)を使う方法があります。JVNは情報セキュリティに関するポータルサイトで、各ベンダーのサイトを順に調べるよりも手軽に、統一されたフォーマットで一覧表示できます。

また、発見された脆弱性が対応を優先すべきかどうか調べるには、CVSS(Common Vulnerability Scoring System)を使う方法があります。JVNのサイトではCVSSの評価値が公開されていますし、以下の図のようなCVSS計算ソフトウェアを使って自分でCVSS値を計算することもできます。

f:id:itstaffing:20190417105458j:plain

脆弱性診断手法を知る

脆弱性診断は手作業で実施することもできますが、多くの場合は専用のツールを使用します。例えば、無料のツールとして、OWASP ZAPやBurp SuiteのCommunity版などがあります。また、脆弱性があるとどのような攻撃が可能なのかを学ぶには、IPAが公開している脆弱性体験ツールAppGoat(https://www.ipa.go.jp/security/vuln/appgoat/index.html)を使用するのも一つの方法です。

f:id:itstaffing:20190417105501j:plain

2019年2月にはIPAから「脆弱性対策の効果的な進め方(ツール活用編)」という資料も公開されています。この資料には脆弱性を取り巻く状況や脆弱性対策の考え方がまとめられています。 (参考:https://www.ipa.go.jp/security/technicalwatch/20190221.html

なお、脆弱性診断を行う場合には、自分が管理しているサーバー、アプリ以外には行わないようにしてください。勝手に攻撃すると、不正アクセス禁止法などに抵触する恐れがあります。脆弱性診断を行うとデータを破壊する場合があり、ページの内容やデータベースが書き換えられるため、事前にバックアップを取得しておくことは必須です。

このとき、誤検知の可能性についても理解しておきましょう。脆弱性診断ツールが検知しても、攻撃が成立するとは限りません。また、脆弱性診断ツールが検知できなくても、脆弱性が存在しないとは言えません。このため、手作業での脆弱性診断と組み合わせて実施することが一般的です。

脆弱性に関する理解は深まったでしょうか。たとえば、Webアプリを公開してから脆弱性が見つかった場合、サービスの停止などに追い込まれ、企業の存続に関わる場合もあります。脆弱性に関する最新の情報をキャッチアップすることは、大きなアクシデントを防ぐ一助となり得ます。日々のセキュリティに関するニュースを見る際は、原因に目を向けてみると、また違った見方ができそうです。

【イベントレポート】便利だけど、難しそう?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
▲パラグラフ単位で文章を組み立て、パラグラフ同士や、パラグラフ内の文と文とのつながりを考える習慣を身につけると良い

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