エンジニアのはしくれ

システム開発、ものづくり、etc…

新サービス「騰落レシオ通知」開始のお知らせ

PWA(Progressive Web Apps)で新サービス「騰落レシオ通知」をつくりました!

updownratio.web.app

約10年前に同様のAndroidアプリをつくったのですが、OSや開発環境等の進歩がすさまじく、バージョンアップに対応するのが困難になりました;

せっかくリニューアルするということで、どうせならAndroidにもiPhoneにも対応したいと思い、最近流行りのPWAでつくってみました😉

ぜひご利用ください〜

書籍「JS+Node.jsによるWebクローラー/ネットエージェント開発テクニック」のご紹介

はじめに

クジラ飛行机さんの著書「JS+Node.jsによるWebクローラー/ネットエージェント開発テクニック」を読んだのでご紹介します。

読んだきっかけは、スクレイピングするサービスを作りたいと思っていたときに、「なぜ、あなたの仕事は終わらないのか」で有名な中島聡さんがメルマガで「Firebaseいいよ」的なことをおっしゃっていて、「Node.jsはよく分からないけど、そのFirebaseでもサポートされていたし、なんか人気もありそうだし、これでいこう」となったからです。

firebase.google.com

本書について

本書の章立てと構成割合は以下の通りとなっています。

  ページ数 構成割合
第1章 開発環境の準備 32 8%
第2章 Web データの収集 42 11%
第3章 ログインの必要なWebサイトをクロールする 46 12%
第4章 データの整形と保存 80 20%
第5章 形態素解析で日本語を扱う 28 7%
第6章 クローラーのためのデータソース 62 16%
第7章 データの分類と予測と機械学習 64 16%
第8章 データの視覚化と応用 46 12%
合計 400 100%

Amazonの「試し読み」で詳細な目次が見られるので、ご自身が知りたい内容が載っているかはそちらを確認してみてください。

2015/9に出版されて少し時間も経っており、中古本だと1,000円以下で買えそうですので、気になれば買った方が早いかもしれません。

読んだ感想

私の感想としては、関連する内容や技術/方法を網羅的に俯瞰できてよかったです。こういう類の本は、以下のような悩みを解決してくれると思っています。

  • やればできそうだけど、リアルに実現できるんだろうか
  • 実現はできそうだけど、果たしてそれが効率的な方法なのか
  • 他のみんなはどうやっているんだろう

サンプルのコード等はやや古い内容があるかもしれませんが、そこはWebで適宜調べながら試してみて、上手くできたらきっと嬉しいですよね😊

直近で役に立った箇所

  • 第2章 Web データの収集-HTMLの解析(リンクと画像の抽出)(P53~)
    →スクレイピング、「cheerio-httpcli」モジュール
    →やりたいことが10行程度のコードでできました。スゴい!
  • 第2章 Web データの収集-定期的にダウンロードする(P78~)

今後役に立ちそうな箇所

  • 第3章 ログインの必要なWebサイトをクロールする(P90~)
    →ログインが必要なWebサイトってスクレイピングできるの?と思うことはないでしょうか。
  • 第6章 クローラーのためのデータソース(P244~)
    →TwitterやAmazon等のAPIの使い方など
  • 第8章 データの視覚化と応用(P370~)
    →Google Chartsでグラフ作成など。ここら辺は今だともっと人気の方法がありそうですが

トータルでは本書の半分程度しか活用できなそうです(笑)

SQLのUNIONをORにして保守性やパフォーマンスを向上させる

はじめに

今回の記事では、SQLのUNIONをORにしてみます。保守性(改修時に手を入れる箇所が少なくて済む)や可読性が向上して、パフォーマンスもよくなる可能性が高いので、条件が合えば試してみてください。

具体例

以下のSQLを例に挙げます。
シチュエーションとしては、同一顧客がすでに本登録されているかチェックするイメージです。個人の場合は「カナ+生年月日」で、法人の場合は「カナ」だけで名寄せします。

UNION(ALL)の場合

UNION(ALL)の上側が個人のブロックで、下側が法人のブロックです。
(重複行をまとめる必要がない場合は「UNION」ではなく「UNION ALL」にしましょう。無駄にsortとuniqueがされないように。)

SELECT
  顧客.ID,
  顧客.氏名漢字
FROM
  顧客
WHERE
      顧客.登録状況 = '本登録'
  AND 顧客.個人法人区分 = '個人'
  AND 顧客.個人法人区分 = 引数.個人法人区分
  AND 顧客.氏名カナ = 引数.氏名カナ
  AND 顧客.生年月日 = 引数.生年月日
UNION ALL
SELECT
  顧客.ID,
  顧客.氏名漢字
FROM
  顧客
WHERE
      顧客.登録状況 = '本登録'
  AND 顧客.個人法人区分 = '法人'
  AND 顧客.個人法人区分 = 引数.個人法人区分
  AND 顧客.氏名カナ = 引数.氏名カナ
;

ORの場合

上記をORで書き直したものが以下のSQLです。
SELECT句の項目やWHERE句の共通的な条件が1箇所にまとまって保守性がUPし、差異がある個人と法人の部分も浮き出てきて可読性もUPしているように思います。
(氏名カナのAND条件は共通化(個人法人区分の直後に外出し)してもいいかもです。)

SELECT
  顧客.ID,
  顧客.氏名漢字
FROM
  顧客
WHERE
  顧客.登録状況 = '本登録'
  AND 顧客.個人法人区分 = 引数.個人法人区分
  AND (
    (
          顧客.個人法人区分 = '個人'
      AND 顧客.氏名カナ = 引数.氏名カナ
      AND 顧客.生年月日 = 引数.生年月日
    )
    OR
    (
          顧客.個人法人区分 = '法人'
      AND 顧客.氏名カナ = 引数.氏名カナ 
    )
  )
;

ただ、ORにするにはいくつか条件もありそうです。

  • UNIONの上下のクエリのFROM句が、同じテーブルであること(上記の例だとどちらも「顧客」テーブル)
  • UNIONの上下のクエリで、各々何らかの結果(レコード)をとりたい場合は使えない

また実際のパフォーマンスは、テーブル構造やインデックス、統計情報等により変わってくると思いますので、実行計画を確認しながらやってみてください。

SQL勉強会のポイント

はじめに

少し前の記事ですが、Software Design 2017年11月号に「SQL 50本ノック」なるものがあることを知りました。

今回は、その中のコラム「SQL勉強会を開いて、チームのSQL力を高める5つのポイント」の備忘メモです。SQL以外の他のテーマでも応用できると思います。

ソフトウェアデザイン 2017年 11 月号 [雑誌]

ソフトウェアデザイン 2017年 11 月号 [雑誌]

  • 発売日: 2017/10/18
  • メディア: 雑誌
 

(いまから買うのであれば以下の総集編の方がお得です。自宅でほこりをかぶっていたのが最近やっと日の目をみました;)

Software Design総集編【2013~2017】

Software Design総集編【2013~2017】

 

5つのポイント 

  1. 市販の参考書を使うのではなく、実務に即した資料を用意する
  2. 講師のコミュニティを作る
  3. 長期型ではなく、短期集中型で実施する
  4. 講師のサポートは手厚く
  5. 毎回、宿題を出す

1はまさにその通りだと思います。私も目的のない勉強はあまりしたくありませんし、興味も持ちにくいので覚えづらいです。実務の中でも常に試せて学んでいける題材がいいですね。

あと3も同感です。記事にあるように、例えば週1回を数カ月より毎日を2週間の方が、集中力が続いてやり切れます。長いと面倒くさくなりますね。

今後の勉強会の際は意識しようと思いました😊

SQLのWITH句の使いどころやメリット

はじめに

今回の記事は、SQLのWITH句についてです。そもそも「WITH句って何?」という方は以下のサイトを見てみてください。

www.shift-the-oracle.com

itsakura.com

WITH句の使いどころやメリット

同じようなサブクエリを書くとき

WITH句の使いどころとして、一つのSQL内で、同じようなサブクエリを何回か書きたくなったとき、そのサブクエリはWITH句にした方がいいです。個人的には、メインのクエリでUNIONするときにそういう状況になることが多いです。

SQLの保守性が向上する

WITH句のメリットとして、SQLが読みやすくなる(可読性UP)という意見も多いようですが、私はSQLに手を入れる箇所が少なくて済む(保守性UP)というメリットの方が大きいと思っています。いわゆる「DRY原則」(Don’t Repeat Yourself)です。

qiita.com

さらに、そのWITH句のクエリが(一つのSQL内ではなくて)複数のSQLにわたって使われる場合は、恐らくVIEWで定義してしまった方がいいです(CREATE VIEW文)。

(参考)サブクエリ等の複雑なSQLを見やすくする工夫

SQLには適切なインデントを入れて見やすくするのはもちろんですが、設計書等のドキュメントがある場合は、以下のように関連するブロックを枠で囲うのがオススメです。

f:id:akairopapa:20200505012616p:plain

上記はシンプルな例ですが、複雑なSQLになればなるほど効果を発揮します。サブクエリだけでなく、CASE式やUNIONの上下のクエリ等にも応用できます。枠の中に枠が入ったりするときもありますが、SQLをつくった人の考え方が分かって読みやすいです。

ぜひ試してみてください!

SQL実行環境の作成~Oracle XE + SQL Developer~

はじめに

SQLをいろいろ試したかったので実行環境を作成しました。データベースは仕事で使っているOracleです。

この記事は、参考にしたサイトの紹介と備忘メモです。

実行環境の構成

OSやソフトウェアの構成は以下の通りです。

  • Windows 10 Home Edition
  • Oracle Database XE(Express Edition)18c
  • SQL Developer(Ver.19.4)

Oracleのインストール

まずはOracleのインストールです。Oracleを無料で使うにあたり、以下のサイトを参考にさせていただきました。

cosol.jp

話はややそれますが、過去に以下のOracle本でもお世話になった著者の方が書かれているサイトでした。脱初級者向けの、Oracleの中身を理解できるとても分かりやすい本です。 

ブラウザ上ですぐSQLを実行できる「Live SQL」も試してみたのですが、 私としては実行計画が見られないのがネックでした。SQLを実行するだけであれば手軽にできていいと思います。

最終的には「Oracle XE(Express Edition)」を選びました。バージョンは現時点で「18c」が最新です。以下のサイト内の「クイック・スタート」を参考にソフトウェアをダウンロードします。

Oracle Database Express Edition | Oracle 日本

インストールから接続までは以下のガイドが参考になりました。詳細に記載してあるので、基本的に手順にしたがえば大丈夫だと思います。

Oracle Database XEのインストール

1点つまづいたのが「データベース・パスワードの指定」の箇所です。パスワードに「@」を使ったところ後続の手順がうまくいかなかったので、避けることをお勧めします。

(参考)プラガブル・データベースについて

これまで11g以前を使用していた方は、「プラガブル・データベースって何?」となると思います。以下のサイトが参考になりました。

www.projectgroup.info

サンプル・スキーマのインストール

Oracleのインストール後、「ひとまずユーザーをつくって適当なテーブルやデータがほしい。」というときに役立つのが、Oracleが提供する「サンプル・スキーマ」です。

今回は以下のサイトを参考にして、HRスキーマ(Human Resources、人事管理部門をイメージしたサンプルデータ)を「手動インストール」で作成しました。

サンプル・スキーマのインストール

作成の際、SQL*Plusではプラガブル・データベース(XEPDB1)の方に接続しましょう。マルチテナント・データベースの方に接続してしまうと、ユーザーが作成できずエラー(ORA-65096)になってしまいます。

SQL Developerのインストールと利用

CUIのSQL*Plusは普段使いにはさすがに向いていないと思いますので、GUIで操作しましょう。オススメはOracleがバージョンアップを重ねている「SQL Developer」です。以下のサイトにしたがってインストールしましょう。

Oracle SQL Developerリリース19.1 - スタート・ガイド

以前はOracleソフトウェアにバンドルされていたと思いますが、最近は違うようです。SQL Developerでは実行計画も簡単に確認できます。

インストールしたら、以下のように接続を設定します。

f:id:akairopapa:20200504145552p:plain

サンプルのHRスキーマのテーブルが表示され、実行計画も確認できるようになりました。

f:id:akairopapa:20200504145647p:plain

外出自粛中の連休に「Alexaスキル開発」で子どもと遊んでみた

はじめに

先日、以下のブログで「Amazon Echo Show 5」の物足りないことを書いたのですが、自分で何とかできないかなと思って、「Alexa(アレクサ)スキル開発」を試してみました。

akairopapa.hatenablog.com

結果的にやりたいことはできなさそうだったのですが、特に開発環境がとても進んでいて刺激的でした😊

1日あれば色々と遊べると思いますので、この外出自粛中の連休に、お子様と一緒に自宅で楽しんでみるのはいかがでしょうか❓

Alexaスキル開発について

Alexaスキルとスキル開発とは

Alexa(アレクサ)は、AmazonのAIのような音声サービスで、それを利用してEchoやEcho Show等に追加できる機能のことを「スキル」といいます(スマホでいうところの「アプリ」と似たようなものです)。

そしてそのスキルは、Amazonが提供する環境を利用して、各個人が開発できるようになっています。

スキルの開発方法の詳細は以下のAmazonのサイトに記載があります。分かりやすいチュートリアルが1回10分程度の動画であるので、それから入ってみるのがいいと思います。

developer.amazon.com

スゴいところ

私が実際にスキル開発を試してみて、すごいと思ったことは以下の通りです。

  • 音声サービスの仕組み自体が面白い
  • ブラウザ上ですべて(スキルの開発から公開まで)完結している
  • 自分自身のAlexaデバイス(EchoやEcho Show)でも同時に動かせる

まず、Alexaを利用して音声を認識して、自分のスキルに入力させて~といった仕組み自体が新鮮で面白いです。

そして、コーディングやビルド/デプロイ、テスト等もブラウザ上で簡単にできます。ブラウザ上でソースや各種設定をつくった後、ビルド/デプロイするとモジュールがAWS上(無料の上限あり)の実行環境に配置され、ブラウザ上のAlexaの音声シミュレータでテストできます。その際同時に、自宅のEchoやEcho Showでもそのスキルが動くようになります。

まさにスゴいの一言です❗❗

また、ブラウザなのでスマホからでも開発できます。画面が小さいので本格的には厳しいですが、後から思ったことや気になった箇所をサッと直すには向いています。

(恐らく)できないこと

私が調べた範囲ですが、現状、Amazonのサービス(Amazon MusicやPhoto等)と連携して何かやるということはできないと思います。かゆい所に手が届くスキルがつくれなくて残念;

(ご参考)私がつくったスキル

今回私は、自分の実家の家族の名前を教えてくれるスキルをつくりました。というのも家族の名前が似ていて、子ども達から「じいじの名前は何だっけ?」「パパの弟の名前は何だっけ?」と聞かれることが時々あったので。

その際、例えば自分の呼び方をとっても、名前そのもの、子どもからみた「パパ」とか「お父さん」等があるので、そこら辺はどの呼び方でも認識できるようにしました。

まとめ

ブームの第一波は過ぎた感がややあるAIスピーカーですが(日本だけ?)、音声サービスやブラウザ上での開発といった新しい仕組みに触れられ、子どもとも遊びながら楽しめました。また、プログラミング教育の題材にもいいと思いました。

この機会にぜひ試してみてください❗

「Amazon Echo Show 5」を在宅勤務で使って感じたささいな要望~Amazonさん、ぜひお願いします~

はじめに

前から欲しかったAmazonの5.5インチ画面つきスマートスピーカー「Amazon Echo Show 5」(以下「Echo Show」)ですが、在宅勤務のお供に役立ちそうだったので買ってみました。

約1カ月使ってみて気になった点を挙げようと思います。

私の基本的な使い方(シチュエーション)

使うシチュエーションによって、良い/悪いは変わってくると思うので、まずは私の基本的な使い方を書いておきます。

  • 在宅勤務中に使用する
  • デスクのPCディスプレイの横に置く
  • 普段、Echo Showの画面には時計や日付を表示しておく(時計代わり)
  • 仕事しながら音楽(Amazon Music)を聴く
  • 打合せ等のアラームを設定する

仕事しながらの使用なので、画面がチラチラ変わると気が散って困ります。また音楽はあくまでBGMなので小さい音量で十分です。

音楽は、再生/一時停止等を声で操作できるのはとても楽です。画面をタッチしたり、スマホで操作したりするのは地味に面倒かと。

ささいな要望

かゆい所に手が届いてほしい、ささいな要望なのですが、以下が気になりました。

Amazon Musicの画面の情報量が少なすぎる

Amazon Musicの画面には「最近再生した楽曲」が横スクロールで表示されます。縦にはスクロールできません。

正直、ぜんぜん画面を活用できていないと思います。おすすめのアルバムやプレイリスト等を表示して、もっと楽しく、いろいろな曲を選べるようにしてほしいです。スマホアプリの方はそれができているので、その画面を表示できるだけでもいいのですが。

音楽を再開した際に、すぐホーム画面(時計表示)に戻らない

「アレクサ、続けて」と言えば、一時停止していた音楽を再開できます。その際Amazon Musicの画面になるのですが、私の使い方は基本時計代わりなので、すぐに時計表示のホーム画面に戻ってほしいです。

もちろん、画面で曲の歌詞が見れる等の機能はとてもいいと思うので、シチュエーションに合わせて、すぐにホーム画面に戻るか否かを設定できると嬉しいです。

ホーム画面の時計から日付が消えてしまうときがある

ホーム画面には、時計(アナログ)と日付が表示されるようにしているのですが、時々日付の方だけが表示されなくなってしまいます。私の設定が悪いのかな?

まとめ

トータルで考えるとAmazon Echoが便利なのは間違いないですが、私のような使い方だと、画面なしのEchoでもいいかなと思います。

Amazonさんがぜひ改善してくれることを期待しています!

「Amazon Photos」で思い出話に花が咲く~既にAmazonプライム会員の人はすぐ試せますよ~

はじめに

いろいろと便利なAmazonプライム会員ですが、今回「Amazon Photos」を使ってみました。撮りためた写真から思い出話に花が咲くこと間違いありませんので、特に既にプライム会員の人はその楽しさを試してみませんか😊

www.amazon.co.jp

すごいこと、使い方 

写真のバックアップが容量無制限。しかも解像度や品質の劣化なし 

Amazon Photosは写真のクラウドへのバックアップが容量無制限です。しかも解像度や品質の劣化もありません。

私の約60GBもの写真が、追加料金なしでバックアップできるなんてスゴいです。

また、我が家ではNAS(ネットワークHDD)を使用して自宅内でファイルを共有していますが、万が一そのNASが故障してしまった場合に一番困るのは、これまでの家族写真が無くなってしまうこと。そのため、これまで写真だけは私のノートパソコンにもバックアップしていました。

これを今回Amazon Photoに移したので、ノートパソコンが身軽になりました。もはやノートパソコンから大事なファイルは無くなったので、壊れてもさほど困りませんし、性能が悪くなってきたら気軽に買い替えることもできるようになりました。

写真を家族でいつでもどこでも楽しめる

バックアップした写真をファミリーフォルダに追加して招待すれば(最大5人まで)、家族で楽しめます。

私の場合、奥さんを招待してAmazon Photosのスマホアプリを入れてもらいましたので、スマホでいつでもどこでも写真が見られるようになりました。子ども達の小さい頃の写真を手軽に見られてとても喜んでいます。

フォトフレームとして活用できる

Amazon PhotosはAmazonのスクリーン付きスマートスピーカー「Amazon Echo Show」を使えば、簡単にフォトフレームとして活用できます。

やり方は以下の方が紹介されています(「Amazon Photosによるデジタルフォトフレーム」の箇所です)。私はまだ持っていないんだけどね;

chasuke.com

撮りためた家族の写真が映れば、思い出話に花が咲くこと間違いありません😊

過去の写真ってけっこう眠っているだけで見る機会って少ないと思うので、バックアップ+フォトフレームで一石二鳥ですね。

なお、Amazonのタブレット「Fire HD」を画面付きスマートスピーカーとして使うためのモードである「Showモード」を使えば、同じようなこともできそうです。

www.itmedia.co.jp

ただ、私の持っている「Fire HD 8」はやや古く、第7世代(2017)だったので残念ながら対応していませんでした;最近購入された方は大丈夫だと思うのでぜひ試してみてください。

まとめ

以上、Amazon Photosのスゴいところを紹介してみました。私も今度、AmazonでEcho Showがセールになったときを狙って買ってみます❗

「<不良>のための文章術~書いてお金を稼ぐには~」を読んだ感想

はじめに

永江朗さんの著書「<不良>のための文章術~書いてお金を稼ぐには~」を読みました。これは勉強になったことの備忘メモです。

<不良>のための文章術 (NHKブックス)

<不良>のための文章術 (NHKブックス)

 

本書は読者がおカネを出して買う気になる文章を書く「不良(プロ)」になるための本です。(ちなみに永江さん風に言うと、そもそもこのようなメモは自分だけの日記に書いてときどき一人で読み返せばよろしい。となりますが;)

読んだきっかけは、人気ブロガーであるかん吉さんの以下の著書「人気ブログの作り方」で紹介されていたことです。

また、かん吉さんはブログでも以下の通り感想を書かれています。
www.wakatta-blog.com

最も気をつけた方がいいこと

本書を読んで、私が最も気をつけた方がいいと思ったことは以下です。

アマチュアの文章が「書き手」から発想するなら、「読み手」から発想するのがプロの文章です。「読み手」にとって役に立つ情報は何か、「読み手」は何をいちばん知りたいか、から考えはじめます。(P33)

(本の紹介文を書く場合において)私たちは文章を書くとき、つい自分について表現したくなります。「(私が)読んだこの本」ではなく「(この本を)読んだ私」について書きたくなります。(P152)

本書の対象読者である、おカネをもらうプロのライターはもちろんですが、「おカネ=時間」と考えれば、読者を増やしたいブロガーにも役に立つ言葉だと思います。わざわざ時間をかけて読んだのに何も得られなかったと残念に思われないよう、常に心に留めておきたいです。

その他、覚えておきたいこと

その他、以下の内容も覚えておきたいと思いました。

「たった一人」に向けて書く(P42)

→読者数がいくら多くても、その文章が読まれる瞬間、書き手と読者の関係はいつも一対一。だから文章を書くときは「たった一人」に向けて書けばいい。そしてその「たった一人」は具体的に。三歳年下の妹(のような読者)に向けて書く。みたいな

「なぜ」「なに」に着目した「意味の論理性」に重きを置く(P63)

→論理的な文章は、「いつ、どこで、だれが、なにをしたか」(事実の論理性)よりも「どうしてそんなことになったのか」(意味の論理性)のほうがもっと重要。「なぜ感動したのか」を論理的に伝える。など

お笑い芸人と同じく「ツカミ」が大事(P75)

→書き出しが魅力的でなければ、それ以上さきは読まれない。客の心をつかむ、その場の空気をつかむ、自分たちのペースをつかむ。冒頭がよくてもその後がだめな作品はある。しかし、冒頭がだめだけど真ん中がいいということはありえない。

補助線を導入する(P124)

→(本の紹介文を書く場合において)難しい本は、単独で取り上げるよりも補助線となるような別の本も取り上げて、その対比で紹介するとわかりやすくなります。

まとめ

書かないよりも書く方がはるかにいいですが、どうせ書くなら試行錯誤しながら上達したいものです。「不良(プロ)」の文章を目指すことと継続して書くことをいい塩梅でやっていきます。

要件定義ってどうやるの?~顧客に一目置かれるためのコツをまとめました~

はじめに

システムエンジニア(SE)のシステム開発の仕事の一つに、顧客の要望をヒアリングしてシステムに求める要件を決める「要件定義」という工程があります。
今回、その要件定義の経験者として私が普段から意識していることや後輩(要件定義の初心者)にレクチャーしているコツなどをまとめました。

目次は以下の通りです。ご参考になれば幸いです。

要件定義で意識していること

裏にある真の要望を探り出す

顧客の発言が常に正しいとは限りません。その理由として以下が考えられます。

  • 顧客のアイデアはまだ漠然としたものであり、考えがまとまっていない
  • 制約(予算、納期など)を無意識に考慮している
  • システムに関する知識、経験が少ない(顧客がSEでなければ当たり前)

上記を踏まえ、自分が納得できるまで質問して発言の裏にある真の顧客要望を聞き出すようにしましょう。

例えば「システムを○○○して欲しい」という要望には注意が必要です。なぜならその要望の裏にある背景が分からないためです。具体例として「システムで電話番号を2つ表示できるようにして欲しい」を挙げるとすれば、なぜ2つ表示させたいのか、どんな時に2つ表示させるのか、2つで足りるのか、電話番号以外で同様に対応するものはないかなど、色々と疑問が湧いてきます。

また細かい話しですが「それがいい」と「それでもいい」というのはニュアンスが微妙に異なります。顧客の思いを正確に汲み取るよう心掛けましょう。

ちなみに私は要件定義時に以下の内容を聞くように努めています。

  • 要望の背景(困っていること、理由)
  • 目的
  • コンセプト(あれば)
  • メリット(デメリット)
  • 費用対効果(最低限効果は聞く。費用はこの段階では分からないかも)
  • 今回のゴール
  • 今後の展開

特に背景と目的は重要だと思います。これらを聞くことにより、全く異なる視点のアイデアが浮かぶこともありますし、そのアイデアの有り無しの判断基準となり得るためです。これらはタイミングを逃すと今更感が出て聞きづらくなったりするので、システム開発の上流工程である要件定義でこそしっかり聞くようにしましょう。

顧客の考え方に沿うこと

システムは顧客の考え方に沿って作るべきです。

例として新商品販売に伴うシステム開発を挙げた場合、はじめに新旧商品で異なる部分を洗い出します。その際、新商品で何らかの機能を追加するとしたら、それは「新商品だから機能がある」と考えることもできますし、反対に「旧商品だから機能が無い」と考えることもできます。どちらと捉えるかによって作り方が変わってきますので、どちらがしっくりくるか、今後の展開(新商品2を売る場合など)も踏まえて明確に顧客に聞き、その考え方に沿うように作りましょう。

それにより、顧客にシステムの動きを予想してもらいやすくなりますし、想定外のケースが発生した場合に安全な方に倒れやすくなると思います。

その他、顧客と双方で考え方を合わせるため用語を統一するなど、基本的なことはやりましょう。

いつ、誰が、どういう考えで、何を言ったか

要件は結論だけでなく、結論に至るまでにいつ、誰が、どういう考えで、何を言ったかの経緯もしっかり記録しましょう。それにより、何か問題や懸念点が出てきた時、答えを持っている人は誰かが分かるようになります。

なお、言質をとって後から変えさせないというややネガティブな役目もありますが、時間が経てば考えが変わることもあるので、そこらへんは許容範囲内であれば取り入れましょう。

シンプルな提案、解決策であること

私はシステム開発側の立場で最も意識すべきは「保守性」だと考えています。その保守性を保つために、提案や解決策は極力シンプルにしましょう。

「シンプル」という言葉は人により解釈が異なると思いますが、私が考えるイメージは以下の通りです。

  • ムダに作らない
  • 分岐を作らない
  • 抽象的な考えでつくる

また、保守性のよさは開発量とトレードオフの関係にあります。

そもそもの課題解決の方向性として、システム化がベストとは限りません。運用で対処してもらったり、Excelなど別のツールをオススメすることもあります。顧客の真の要望を踏まえ、時には顧客にも協力(妥協)してもらいながら、不必要に保守性を下げないようにしましょう。

一度に複数聞かない

会話していると、ときどき論点が複数混じっていると感じる時があります。顧客側はどちらを回答すればいいか迷ってしまったり、罠をかけられている感じになったりしますので、論点は一度に一つずつにしましょう。

例などを交えながら一つずつ議論して、個々に解決策を検討していきます。もし煮詰まった場合は、一旦保留として誰がタマを持つかをしっかり決めた後、次の論点に移りましょう。その際は「○○は一旦終わりとして、次に△△に移りますが」みたく、次に移る旨をきちんと言ったほうが皆の頭を切り替えられるのでいいと思います。

また論点を分け、その後必要に応じてグルーピングしたりすれば、全体が整理されていくように感じています。

進め方は広く浅く、時間があるなら深く

要件定義は顧客要望を膨らませる工程であり、後続の設計工程以降は徐々に絞っていく工程だと考えています。

そして要件定義のゴールは「後続工程の見積が大きくブレなくなるまで」だと考えています。そのための進め方はまずは広く浅く、時間があるなら深くというのが効果的です。

概要を伝えたいときは絵を、比較したいときは表を活用し、順番も意識して進めましょう。絵を描くのが上手い人は全体を理解できている人だと思います。絵をうまく描けるようになりましょう。

【参考】要件定義書のフォーマット例

簡単ですが、Excelで要件定義書のフォーマット例を作ってみました。

f:id:akairopapa:20190114120556p:plain

ダウンロードはGitHubからどうぞ。

https://github.com/akairopapa/formats/raw/master/要件定義書フォーマット.xlsx

まとめ

いかがだったでしょうか?

少し前に顧客から「○○(私)さんは夢を売っている」というありがたい言葉をいただきました。ちょうど私が目指していたことなので、とても嬉しかったのを覚えています。

単に顧客の表面上の要望通りに作るのではなく、裏にある真の要望を捉えて作ればきっと満足いただけます。また例え顧客と異なる意見だったとしても、協力してよりいいものができれば一体感が生まれます。それを積み重ねて、少しずつ信頼を勝ち得ていきましょう。

2019年の目標

今週のお題「2019年の抱負」ということで、今年2019年の目標を宣言したいと思います!得意にしたい各々の分野ごとに。

まず全体を通して

ブログを週1回以上更新します。

どの方も継続が大事と言われています。毎日はハードルが高すぎる気がするので週1回以上を目標にします。この頻度でもやれたら自分を褒めてあげられるので。

記事は幹(一番書きたいこと)から書くようにして、枝葉は後から。そういう悪い癖があり、時間がかかる上に面倒でやる気が下がってくるので。

細かいことは気にせず続けることを重視します!

経営知識、会計知識系

中小企業診断士試験に合格します。

昨年ストレート合格を目指しましたが一次止まりでした。今年までは二次から受けられるので二次の勉強時間が確保できてチャンスです。ただもうだいぶ忘れてしまっていて身についていないのが悲しいので、一次の復習から再開して5月頃から二次の勉強を開始しようと思います。

プログラミング系

以下のどちらかを達成します。

  • Webサービスを公開する
  • オープンソースにコミットする

デザイン系

以下のどちらかを達成します。

  • 写真を上手く撮れるようになる(構図とか)
    評価は1年後に奥さんに「上手くなった」と言ってもらえることにします。
  • はてなブログのテーマをつくる

おわりに

目標は多少変わっても、最後には1年間有意義に過ごせたと満足できるよう頑張ります。今年もよろしくお願い致します!

Excelアドイン「ExcelPCCS」をつくりました~色彩検定で学んだことを忘れるともったいない~

「ExcelPCCS」は「PCCS(Practical Color Co-ordinate System:日本色研配色体系)」をExcelで使うためのアドインです。

色彩検定で学習したことを忘れるともったいないと思い、普段よく使用しているExcelで使うために作成しました。

よかったら使ってみてください!

f:id:akairopapa:20181124160550p:plain

ExcelPCCSの利用イメージ

利用方法

ダウンロード

「ExcelPCCS」はGitHubで公開しています。

https://github.com/akairopapa/ExcelPCCS/raw/master/ExcelPCCS.xlam

上記URLから「ExcelPCCS.xlam」をダウンロードして、以下のExcelアドインフォルダ等に格納してください。

C:\Users\[ユーザー名]\AppData\Roaming\Microsoft\AddIns

設定方法

Excelを起動して「ファイル」タブ→「オプション」→「アドイン」を選択し、下記「Excelアドイン」が選択されている状態で「設定」ボタンを押してください。

f:id:akairopapa:20181124163023p:plain

表示されるアドイン画面で「Excelpccs」をチェックして「OK」をボタンを押してください。(「Excelpccs」が表示されない場合は、「参照」を押してダウンロードした「ExcelPCCS.xlam」を指定してください。)

f:id:akairopapa:20181124160733p:plain

以下の通り「ホーム」タブに「ExcelPCCS」が表示されます。以上でインストールは完了です。

f:id:akairopapa:20181124160800p:plain

※新しいExcel(Office 365、Excel 2016等?)では、上記手順でインストールしたにもかかわらず、次回Excel起動時に表示されないことがあるようです。その場合、上記「ExcelPCCS.xlam」を右クリックして「プロパティ」→「全般」タブ→「セキュリティ」欄にある「ブロックの解除」を行ってください。

利用方法

利用方法は、マウスをアイコン上にのせると表示されるポップアップに記載しています。右側の繰り返しアイコンで直前の色を指定することもできます。

What's New

  • 2018/11/24 新規作成

参考ページ