ダミーデータの作り方 スケジュールデータ編 2015年12月4日

ネットスクエアの永田です。

今回はスケジュールのダミーデータを一括作成する方法についての紹介です。

ここでの「スケジュール」とは、「 開始日時と終了日時を持ち、特定のユーザに属する情報 」という定義にします。
グループウェアのスケジュール情報や、予約管理システムにおける予約情報などを思い浮かべてもらえたらと思います。

[前提条件]

使用するデータベース/テーブル、作成するスケジュールの内容については下記の通りとします。

  • データベースはPostgreSQL 9.4
  • ユーザ(users)とスケジュール(schedules)の各テーブルのレイアウトは以下の通り
    create table users (
        user_id serial not null         -- ユーザーID
      , name character varying(30)      -- 名
      , constraint users_pk primary key (user_id)
    );
    create table schedules (
        schedule_id serial not null     -- スケジュールID
      , user_id integer not null        -- ユーザーID
      , start_date timestamp not null   -- 開始日時
      , end_date timestamp not null     -- 終了日時
      , constraint schedules_pk primary key (schedule_id)
    );
  • ユーザのデータは以下の3件を用意
    INSERT INTO users(name) VALUES('前田');
    INSERT INTO users(name) VALUES('大瀬良');
    INSERT INTO users(name) VALUES('ジョンソン');
  • スケジュールの作成対象期間は2015/12/1~2015/12/31で、各日9時から18時までの範囲で30分間隔に敷き詰めるように作成
  • スケジュールは全ユーザに対して作成

[作成方法]

データの作成にはPL/pgSQLを利用し、コードの実行についてはWindows環境のpgAdmin IIIを使用します。

データ作成を行うコードは下記になります。

DO $$
DECLARE
  d   DATE;       -- 日付
  t   TIMESTAMP;  -- 時刻
  u   RECORD;     -- ユーザのレコード
BEGIN
 -- ① 12/1から12/31まで1日ごとのループ
 FOR d IN SELECT generate_series('2015-12-01'::DATE, '2015-12-31'::DATE, '1 day') AS d LOOP 
   -- ② 9時から17時半まで30分ごとのループ
   FOR t IN SELECT generate_series(d + interval '9 hour', d + interval '17 hour 30 minute', '30 minute') AS t LOOP
     -- ③ ユーザ1人ごとのループ
     FOR u IN SELECT * FROM users ORDER BY user_id LOOP
       -- ④ INSERT文の実行
       EXECUTE 'INSERT INTO schedules (user_id, start_date, end_date) VALUES (' || u.user_id || ',''' || t || ''', ''' || t + interval '30 minute' || ''')';
     END LOOP;
   END LOOP;
 END LOOP;
END$$ language plpgsql;


上記のコードを簡単に解説すると、
①でgenerate_series関数で12/1から12/31までのレコードを作成してループ、
②でgenerate_series関数とintervalを使用して各日の9時から17時半までのレコードを作成してループ、
③で全ユーザを取得してループ、
④で開始時刻は②の時刻にして終了時刻は②の時刻の30分後にしたスケジュールデータをINSERT
ということをやっています。

 このコードの実行で1674件(31日 × 9時間 × 2分割 × 3人)のスケジュールデータが作成できます。

上記のコードでは隙間なく敷き詰めるようにデータを作成しましたが、IF文を追加することで
①のループで土日はスキップさせたり、②のループで昼休みの時間についてはスキップさせたり、
random関数を使って閾値未満の場合はスキップして作成間隔をまばらにさせたり、
といったコントロールができるかと思います。

以上、今回はスケジュールデータを題材にしましたが、
PL/pgSQLを使うと手続き処理ができるので、他のデータの作成にも応用できると思います。
ぜひ色々と試してみてください。

ダミーデータの作り方 個人情報編(その2) 2015年11月10日

ネットスクエアの永田です。

前回の続きとして、
なんちゃって個人情報」で生成したCSVをデータベースに取り込む方法の紹介です。
前提として、データベースはPostgreSQL 9.4を使用することとします。

生成したCSVの項目がテーブルの列と一致していれば、
COPYコマンドを使ってそのまま取り込むことが出来ます。

ただ、値に何らかの加工が必要となるケースが多いので、
今回はExcelを使って値を加工してINSERT文を生成する方法を紹介します。

「なんちゃって個人情報」で生成される「名前」は、
姓と名を空白区切りで結合した1つの項目となっているのですが、
姓と名が別々の列となっているテーブルに取り込みたい、というケースを例に今回は説明します。

CSVとテーブルについては以下のものを使用します。

  • CSVは「なんちゃって個人情報」で「名前」と「性別」のみを選択して生成
  • テーブルのレイアウトは以下の通り
    create table users (
        user_id integer not null            -- ユーザーID
      , last_name character varying(30)     -- 姓
      , first_name character varying(30)    -- 名
      , gender character varying(1)         -- 性別
      , constraint users_pk primary key (user_id)
    );

まず、CSVをExcelで開きます。

先頭に1列追加し、ユーザーID用の連番を振ります。

姓と名のためのC列・D列の2列を追加し、空白区切りで名前を分割するようにそれぞれ
「=LEFT(B2,FIND(” “,B2)-1)」
「=MID(B2,FIND(” “,B2)+1,LEN(B2))」
といった式を埋めます。

あとはINSERT文を組み立てるため、
「=”INSERT INTO users VALUES (“&A2&”, ‘” & C2 & “‘, ‘” & D2 &”‘, ‘”&E2&”‘);”」
といった式をF列に埋めます。

これで出来上がったINSERT文をコピーして実行すれば、データベースへの取り込みが完了です。

色々とやり方はあると思いますが、
Excelの各種関数を使うとちょっと複雑な加工が必要となったときでも対応しやすいかなと個人的には思っています。

今回で個人情報編は終わりとし、次回は別のデータの作り方を紹介したいと思います。

2015年11月3日

ネットスクエアの志藤です。

遅ればせながら、
自分の作業PCをWindows10にアップグレードしました。

よく使うソフト、メーラーだったりオフィスだったりユーティリティソフトだったり、
普通に動いてくれています。マイクもスピーカーも問題なさそう。

まずは一安心。

ダミーデータの作り方 個人情報編(その1) 2015年10月16日

ネットスクエアの永田です。

今回から何度かに分けてダミーデータの作り方について、
ちょっと便利な方法を紹介していきたいと思います。

まずは個人情報編と銘打っていますが、
システム開発をしていると必ずと言っていいほどテスト用の個人情報が必要となります。
社内システムであれば社員であったり、ECサイトであれば購入者などですね。

名前を一律「ああああ」や「ほげほげ」などとして大量にデータを作ってもよいのですが、
ある程度は本物らしい名前であったり、データごとのばらつきが欲しいものです。

そんな時に使えるのが、ダミーの個人情報を生成してくれるサービスです。
似たようなサービスはいくつかあるのですが、
私がよく使っているのは「なんちゃって個人情報」というサービスです。

こちらのサービスは
名前/性別/誕生日/メールアドレス/電話番号などから出力したい項目が選択可能で、
最大5000件のダミーの個人情報を生成することができます。

出力フォーマットも
HTMLテーブル/XML/CSV/TSV(タブ区切り)から選択可能ですが、
私はだいたいCSVファイルで出力しています。

今回はここまでで、次回はこのサービスから出力したCSVファイルを
データベースに取り込む方法を紹介したいと思います。

金魚本読書会 (JPA編)に参加 2015年10月15日

ネットスクエアの志藤です。

先日(10/10)、金魚本読書会 (JPA編)に参加してきました。
DoorKeeperはこちら
Facebookはこちら

JPA(Java Persistence API)の話が中心でした。
最近はソースコードを書いていないので、
久しぶりにソースをじっくり見ました。

SlideShareに要点をまとめてあったので、内容は理解しやすかったです。
SlideShareはこちら

若かりしころはSQLをガリガリ書いていた自分としては、
「アノテーションやらをここまで書くぐらいなら素直にSQL書けばいいのに」
と思いましたが、時代の流れはこうなんでしょうねぇ。

オープンソースカンファレンス2015 Hiroshima 2015年9月30日

ネットスクエアの志藤です。超久々の投稿です。

先日(9/19)、オープンソースカンファレンス2015 Hiroshimaに参加してきました。
オープンソースカンファレンス2015 Hiroshima のサイトはこちら

今回話を聞いたのは、以下の3コマ。
・最近のGoogle技術のリリースとFirebaseの紹介
・オープンソース&クロスプラットホームとなったASP.NET 5のご紹介
・baserCMSを使って考える「広告物」としての中小企業ホームページ
その中で一番興味をひかれたのは、最後のbaserCMSの話。
baserCMSのホームページ

WordPressとはじめ、CMSもたくさん種類があるけど、今頃なぜ?という疑問もあったんですが、 話を聞くと実にツボを押さえているソフトだなぁと思いました。
中小コーポレートサイトにちょうどいいというフレーズがぴったり。
ブログやメールフォームなど、コーポレートサイトに必要な機能が標準装備されているので、
テンプレートさえ決めればすぐに立ち上げれます。

広島で勉強会があったら参加したいなぁ。

Microsoft Internet Explorer の未修正の脆弱性に関する注意喚起 2014年5月1日

ネットスクエアの志藤です。

2014/04/28 に、
Microsoft Internet Explorer の未修正の脆弱性に関する注意喚起がありました。
JPCERTサイトはこちら

今回の対象となるバージョンは、
IE6~11までなので、かなり広範囲ですね。

IPAのサイトに回避策や代替案が載ってましたので紹介しておきます。
IPAサイトはこちら

IEを使わない、他のブラウザで代替する等の策が提示されていますので、
参考にされてはいかがでしょうか?

また、お困りの場合は、いつでもご相談ください。

GooglePlayデベロッパープログラムポリシーの更新ついて 2014年4月15日

ネットスクエアの淡路です。

2014年3月28日にGoogle Playデベロッパープログラムポリシーが更新されました。

以下の点で変更点がありました。

  • コンテンツポリシー
  • アプリのプロモーション
  • 有料アプリと無料アプリ
  • 広告のポリシー

変更点を読むと、悪質なアプリを取り締まるために記述を増やしたような感じでした。

特に気になったのが、アプリのプロモーションで使用されている「直接間接を問わず」という記述です。

これまでは違反の広告を配信していた場合は広告を配信する事業者の責任とされていましたが、

これからは違反の広告を配信しているアプリの提供者も責任を負うことになりそうです。

アプリを開発している人はGoogle Playデベロッパープログラムポリシーを一読してみてはどうでしょうか。

OpenSSLの脆弱性に関する注意喚起 2014年4月9日

ネットスクエアの志藤です。

2014/04/08 に、OpenSSLの脆弱性が発見されました。

今回の対象となるバージョンは、
・OpenSSL 1.0.1 から 1.0.1f
・OpenSSL 1.0.2-beta から 1.0.2-beta1

この脆弱性を悪用された場合、
本来秘匿すべき情報(暗号通信の内容や、暗号に使う秘密鍵など)が漏洩する可能性がある、
とのこと。

該当バージョンを使用して運用されている場合は、速やかに対応することをご検討ください。

お困りの場合は、いつでもご相談ください。

Windows8.1 パブリックプレビュー版 リリース 2013年6月28日

ネットスクエアの志藤です。

Windows8.1 パブリックプレビュー版 がリリースされました。

スタートボタンの復活が話題になっていますが、
確かに、Windows8でデスクトップを最初に使ったとき、
スタートボタンは?と探しましたからねぇ。
これまでのレイアウトに慣れていたからなくなるとすごく不便に感じたのを覚えてます。
でも慣れるとあまり気にならなくなっていたんですけどね。
あまりに多くの意見が寄せられたんでしょうね。

Windows8や8.1の評判はともかく、
ユーザの声を聞いてバージョンアップに活かす、これはシステム開発でも基本ですね。
改めて感じました。

ここのところ、MSの話が続いたので、次は違う話題を見つけてきます。