astamuse Lab

astamuse Labとは、アスタミューゼのエンジニアとデザイナーのブログです。アスタミューゼの事業・サービスを支えている知識と舞台裏の今を発信しています。

どこまでも迷走を続ける採用サイト【前編】

f:id:astamuse:20160927182927g:plain

「採用サイト…リニューアルしなきゃなー…」つって、日々過ごしています。
こんにちわ。

しかしリニューアルって、けっこう大変。
夏になる前からずっとそう思いながら過ごしていたら、どうやら9月が終わりそうな気がする。

今まさにそんな気がしている(9月28日現在)。

ということはつまり、8月なんてとっくに終わっているということですね。
「いやぁ、8月中にはサイトがリニューアルされるんじゃないかなぁ、どうかなぁ」と前回言ったような、そんな気がしないでもない。

前回までのお話↓

lab.astamuse.co.jp


言ってますね。
ごめんなさい。
間違えました。
まだできてないDEATH!!!щ(゚Д゚щ)

じゃあこの間、一体何してたの?
寝てたの?
死ぬの?

そのような事柄を言われてしまうのかも、いや、もうすでに自分の知らない所で言われているのかもわからない、と毎日ビクビクしながら生きているわけで。
なので事の顛末をここに記しておきたいと思います。

では引き続き、出演は夏場に具合が悪くなるデザイナkrt(筆者)と、最近お腹の調子が(たぶん)良くなったフロントエンジニアSと、いつも赤いTシャツを着ている開発者Tさんの3人でお送りします。

もくじ

ちょっとその前に

【ある5月の採用サイトMTG】

S )制作に着手する前に、解決すべき問題がひとつあります。
それが何かお分かりですか、みなさん(キリッ)

krt )全くもってわかりません(キリリッ)

S )アッ、ハイ。それは現状の採用サイトの情報がめっちゃ古い、ということですよ!
せっかく導線となる技術ブログもオープンしたのにこれじゃあ新サイトリリースまでの間、
来てくれた人がスムーズに応募できないんです!!!

krt )ほーん

Tさん)なるほどー

S )コレは直しましょう…(ゴゴゴゴゴゴゴ)←ちょっと怒ってる

krt )はう…

Tさん)そうですねー

S )ついでにFJHR(総務兼採用窓口兼astamuseの母)さんの要望も聴いておきましょう。あの人がいちばん大変でしょうし

krt )あ、そうだね。FJHRさんが楽になるようにしたいね

S )でしょ


今回は「サイトを作成する」というタスクではありますが、サイトを作るだけでオッケーかと言うと、そうでもありません。
一番の目的は作った採用サイトから実際応募して貰う、また応募の後押しになる必要があります。
そのためにも、弊社で働いていただきたい方と弊社に興味を持ってくれた方がうまくマッチングできるような作りであることはもちろん、応募者とのスムーズなやり取りも大前提です。
また、採用サイトに先立って技術ブログ(当astamuse Labのこと)が開設されたため、その受け皿となる現状の採用サイトがどうなっているのかも確認しました。

一時採用をストップしていたこともあり、着手当時のサイトは情報が古く混乱を招く可能性がありますので情報と現状に合わせること、また、現採用サイトの問題点・改善点などを精査しました。
その際に採用の窓口となる担当者の話も聴いておくことは重要なポイントとなります。
実際に採用を担当している方に話を聴いてみると、開発段階で少し手を加えることによって担当者の負担が軽減する箇所も幾つか見受けられました。

このように、改善点を新サイトに応用しつつ、応募者と担当者がスムーズにやり取りできるフローを考えておくとストレスフリーなサイトになるかと思います。

設計書作成と読み合わせ

【現採用サイト改修が終わった6月のある日】

krt )今日はSに作ってもらった仕様書の読み合わせをしたいんだよね。なんかね、変かも。

S )どこがぁぁぁぁ?

krt )いや、あの、この、ココ、ここに行くまでの導線がないんだけど

S )アッ、ハイ。それは直そう。

krt )お、おね、おねがいします。あと、ココが、

S )まだあるんスかぁぁぁぁ?

krt )タイ、タイトルとか内容がなんかあってないような気がするんだけど、えっ、Tさん、どう思います?

Tさん)そっすねー

S )うん、検討しましょう

krt )あと、まだ、あの、えーと、
(以下略)



主に企画をハンドリングする人がそれまでのMTG内容や前提条件、サイトマップなどを考慮し、大まかな仕様書を作成します。その仕様書をもとにメンバー間でMTGを重ねていき、過不足を確認していくような形で詰めていきました。
やはりパッと見で大丈夫そうだな、と思ってもその仕様書をもとにデザイン作業などを進めていくと、導線が足りなかったり、コンテンツ内容とコンテンツ名が合致していなかったり、階層構造がちぐはぐだったり、大小様々な齟齬が出てきます。

個人的な所感ですが、少人数のチーム編成の際ではこういった設計書・仕様書等を作る際は全員がいる場で詰めていくことで共通認識ができますし、スピーディかつ楽に作っていけます。
また認識のズレがある場合も早く気づくことができたかなと感じました。

f:id:astamuse:20160927174635g:plain f:id:astamuse:20160927174658g:plain


と、まぁ…今回もココマデデスァ(∩ ゚д゚)ア゛ア゛ア゛ア゛ーーーーーー
色々書くべき事はあるのですが、何せまだオープンしていない。
ので、書くことができない!のDEATH!!

という訳で、こちらのエントリーまだ続きます(すみません)!
いちおう記事はストックしてあるのでタイミングを見計らい、良き頃合いに投稿させていただきます。

もし何だったらこちらからエントリーして入社して手伝ってくださっても構いません!!

Embulk について

山縣です。

 前回はSpark について書きましたが今回は最近良く使うようになっているEmbulk について書きたいと思います。

Embulkとは? 

 Embulk はオープンソースのバルクローダーです。あるデータストアから別のデータストアにデータを転送するためのツールです。たとえば CSV形式のデータをPostgreSQLやMySQLのようなRDBMS や Google のBigQueryなどにロードしたい、あるいはRDBMS上のデータを CSV 形式で gzipで圧縮して取得したいなどというような使い方ができます。

 Embulk では様々なデータストアへの対応をプラグインという形でサポートします。Embulk のサイトから持ってきた下図のように、入力プラグインから取り込まれたデータはEmbulk のデータ型に変換され、出力プラグインに渡されます。このように入力と出力が独立したプラグインとして実装可能なため、利用者側は様々な入力出力を組み合わせて利用することが可能です。

 f:id:astamuse:20160915150408p:plain

  例えば今まで CSVのテキストファイルを PostgreSQL に取り込むという処理を Embulk で行っていたとして、分析のために BigQuery にも入れたいとします。この場合、入力側で行っていた細かい設定はそのままで出力側の設定だけ BigQuery にするだけで対応することが可能になります。

 Embulk では入力、出力プラグインだけでなく、フィルタープラグインなど様々な種類のプラグインが実装可能となっており、すでに多くのプラグインが公開されています。Embulk のプラグイン一覧はこちらから確認することができます。

 私が Embulk に興味を持ったのはこの拡張性の高いアーキテクチャと、すでに多くのプラグインが提供されており、今後 Embulk がデファクトスタンダードとなっていくのではと感じたからでした。

 

Embulkの導入 

 私が感じているEmbulk の魅力のもう一つはその導入の容易さです。Java が動いている環境であれば、jarファイルを取得してくるだけで済みます。

 サイトでは Unix環境(Mac含む),Windows環境でのインストール手順が書かれていますが、その手順はとても簡単です。

curl --create-dirs -o ~/.embulk/bin/embulk -L "http://dl.embulk.org/embulk-latest.jar"
chmod +x ~/.embulk/bin/embulk
echo 'export PATH="$HOME/.embulk/bin:$PATH"' >> ~/.bashrc
source ~/.bashrc 

 上記はUnix環境での手順になりますが、見れば分かるように embulk 本体の jar ファイルを取得して path を通しているだけです。この手順をコピペして実行するだけで簡単に embulk が使えるようになります。

$ embulk --help

Embulk v0.8.13
Usage: embulk [-vm-options] <command> [--options]
Commands:

...

ちなみにインストール手順では embulk の jar ファイルに実行権限を設定して直接実行していますが、これはヘッダ部分がスクリプトとなっており、そのスクリプトの中で java -jar コマンドで自分自身を実行するという方法で実現されています。

$ cat .embulk/bin/embulk |less


: <<BAT
@echo off

...

BAT

java_args=""

...

if test ...; then
   java_args="-XX:+AggressiveOpts -XX:+UseConcMarkSweepGC $java_args"

Windows のBATと Unix系の shell script の両方が書かれており、どちらでもシングルバイナリで動くようにしているのが興味深いです。

 

Embulk を試す

 少し話がずれてしまいましたが、Embulk はインストールが簡単なだけでなく、初めての利用者が手軽に試すことができるようにサンプルデータも含んでおり、 "embulk example" というコマンドを実行することでサンプルのデータと設定ファイルを生成できます。またチュートリアルとしてこのサンプルの使い方が出力されます。

$ embulk example ./try1

2016-09-12 15:53:13.122 +0900: Embulk v0.8.13
Creating ./try1 directory...
Creating ./try1/
Creating ./try1/csv/
Creating ./try1/csv/sample_01.csv.gz
Creating ./try1/seed.yml

Run following subcommands to try embulk:

1. embulk guess ./try1/seed.yml -o config.yml
2. embulk preview config.yml
3. embulk run config.yml

 上記のコマンドで try1 というディレクトリ配下にテスト用のデータ csv/sample_01.csv.gz と設定ファイル seed.yml が作られています。

$ cat seed.yml

in:
  type: file 
  path_prefix: "/home/xxxx/try1/csv/sample_"
out:
  type: stdout

 seed.yml は YAML の形式となっており、設定内容は大きく分けて入力プラグインの設定(in:)と出力プラグインの設定(out:) に分かれています。type フィールドでは入力、出力それぞれで使用するプラグインを指定しています。この場合、入力側の 'file' は Local file input plugin 、出力の 'stdout' はStdout out plugin を指定していることになります。いずれも本体にビルトインされているプラグインで、プラグインのインストールの必要がありません。ビルトインプラグインの設定はこちらに記載されています。Local file input plugin の情報では path_prefix で指定したプレフィック以下のファイルを読み込むようになっています。

 Embulk を実行するには "embulk run" コマンドを使います。しかしこのseed.yml を使って実行してもエラーになります。

$ embulk run ./seed.yml
2016-09-13 17:53:30.887 +0900: Embulk v0.8.13
org.embulk.exec.PartialExecutionException: org.embulk.config.ConfigException: com.fasterxml.jackson.databind.JsonMappingException: Field 'parser' is required but not set

...

 これは Local file input plugin の設定で、必須パラメータ parser が指定されていないからです。今回の入力データは CSV形式なので parser には "csv" を指定しその設定を、またgzipで圧縮されているので decoders の指定が必要となります。幸いこれらの設定は "embulk guess" コマンドを使うことで自動生成することが可能です。

$ embulk guess seed.yml -o config.yml

...

in:
  type: file
  path_prefix: /home/youy/try1/csv/sample_
  decoders:
    - {type: gzip}
  parser:
    charset: UTF-8
    newline: CRLF
    type: csv
    delimiter: ','

    ....

    columns:
    - {name: id, type: long}
    - {name: account, type: long}
    - {name: time, type: timestamp, format: '%Y-%m-%d %H:%M:%S'}
    - {name: purchase, type: timestamp, format: '%Y%m%d'}
    - {name: comment, type: string}

out: {type: stdout}

  上記のように必要な設定を入力データに基づき生成してくれます。各カラムのデータ型も指定されています。あくまでも推測なので、常に期待したフォーマットになるわけではないと思いますが、このファイルをベースに修正をかければ一から書くよりは手間が省けるのではないかと思います。

 最後に生成した config.yml を実行すると以下のようになります。

$ embulk run ./config.yml

...

1,32864,2015-01-27 19:23:49,20150127,embulk
2,14824,2015-01-27 19:01:23,20150127,embulk jruby
3,27559,2015-01-28 02:20:02,20150128,Embulk "csv" parser plugin
4,11270,2015-01-29 11:54:36,20150129,

...

 この設定では標準出力にデータを出力するので上記のようになります。なお "embulk preview" コマンドを使うと出力する前にデータの中身を確認することができます。

$ embulk preview ./config.yml
+---------+--------------+-------------------------+-------------------------+----------------------------+
| id:long | account:long | time:timestamp | purchase:timestamp | comment:string |
+---------+--------------+-------------------------+-------------------------+----------------------------+
| 1 | 32,864 | 2015-01-27 19:23:49 UTC | 2015-01-27 00:00:00 UTC | embulk |
| 2 | 14,824 | 2015-01-27 19:01:23 UTC | 2015-01-27 00:00:00 UTC | embulk jruby |
| 3 | 27,559 | 2015-01-28 02:20:02 UTC | 2015-01-28 00:00:00 UTC | Embulk "csv" parser plugin |
| 4 | 11,270 | 2015-01-29 11:54:36 UTC | 2015-01-29 00:00:00 UTC | |
+---------+--------------+-------------------------+-------------------------+----------------------------+

 

プラグイン・更新

 以上Embulkのドキュメントに従って Embulk のコマンドの使い方を簡単に見てみましたが、実際に使う上では自分が使うデータストアのプラグインをインストールして利用することになります。プラグインのインストールは簡単で、"embulk gem install <plugin name>" でインストールできます。

$ embulk gem install embulk-output-sqlite3
2016-09-14 11:40:54.196 +0900: Embulk v0.8.13
Fetching: jdbc-sqlite3-3.8.11.2.gem (100%)
Successfully installed jdbc-sqlite3-3.8.11.2
Fetching: embulk-output-sqlite3-0.0.1.gem (100%)
Successfully installed embulk-output-sqlite3-0.0.1
2 gems installed

 上記は sqlite3 へ出力するembulk-output-sqlite3 プラグインのインストール例になります。インストール時に指定する名称は embulk-<プラグインの種別>-<プラグインの名前> という形をしています。プラグインの一覧から利用したいプラグインを調べて、上記の名前を指定してインストールすると良いと思います。

 sqlite3 へロードするように config.yml を変更します。

out:
  type: sqlite3
  database: '/tmp/try1.db'
  table: 'example1'

 変更箇所は out: の部分だけです。それ以外のところを変更する必要はありません。/tmp/try1.db というデータベースの example1 というテーブルにロードします。

$ embulk run config.yml
2016-09-14 11:44:52.807 +0900: Embulk v0.8.13
2016-09-14 11:44:57.071 +0900 [INFO] (0001:transaction): Loaded plugin embulk-output-sqlite3 (0.0.1)

...
2016-09-14 11:44:59.913 +0900 [INFO] (main): Committed.

...

 データを確認してみます。

$ sqlite3 /tmp/try1.db
SQLite version 3.6.20

sqlite> select * from example1;
id|account|time|purchase|comment
1|32864|2015-01-27 19:23:49 UTC|2015-01-27 00:00:00 UTC|embulk
2|14824|2015-01-27 19:01:23 UTC|2015-01-27 00:00:00 UTC|embulk jruby
3|27559|2015-01-28 02:20:02 UTC|2015-01-28 00:00:00 UTC|Embulk "csv" parser plugin
4|11270|2015-01-29 11:54:36 UTC|2015-01-29 00:00:00 UTC|

 確かにデータがロードされていることがわかります。

 

 embulk はバージョンアップもコマンドで簡単にできます。

$ embulk selfupdate
2016-09-14 11:57:07.549 +0900: Embulk v0.8.13
Checking the latest version...
Already up-to-date. 0.8.13 is the latest version.

 特定のバージョンの Embulk をインストールすることも可能です。

$ embulk selfupdate 0.8.12
2016-09-14 12:14:31.023 +0900: Embulk v0.8.13
Checking version 0.8.12...
Found version 0.8.12.
Downloading https://dl.bintray.com/embulk/maven/embulk-0.8.12.jar ...
Updated to 0.8.12.

 きちんと自分で検証したバージョンを使いたい場合に便利です。

 以上、Embulk 本体の example を元に使い方を見てきましたが、非常に手軽に試せることが分かるかと思います。

 

アスタミューゼでの活用 

 Embulk は弊社においていくつかのデータ処理に活用されています。(現状使用しているの私だけかもしれませんが...)

 私が Embulk を使いはじめたのは Spark を使ったデータ処理においてPostgreSQL上のデータを HDFS上にCSVなどにダンプしたいと思ったのがきっかけでした。Spark は様々なデータソースにアクセス出来るので、はじめは直接PostgreSQLへアクセスして利用していました。しかしDB自体の性能やネットワークの負荷などを考えるとHadoopクラスタ内にデータを置いておいたほうがレスポンスもよく、開発がしやすいと判断しました。この処理のため embulk-input-jdbc, embulk-output-hdfs などのプラグインを利用させてもらっています。

 また別のところでは業務担当者から受け取った CSVファイル を加工してHDFS に上げるため、embulk-filter-column なども利用しています。それ以外では GCP(Google Cloud Platform)の課金データを BigQuery に入れて集計するのに使ってもいます。

 データのローディングは個別にプログラムを書いていくこともできますが、そういったバッチプログラムは往々にしてメンテが滞りレガシーとなってしまうことがよくあります。そのため複雑なロジックを必要としないデータロードについては今後は embulk を活用し、変換処理を embulk の設定ファイルに落としこむようにしていきたいと思っています。

 embulk を利用していて感じたことは、embulk はプラグインがすでに豊富に揃っており多くのデータストアに対応できている一方、実際に利用しようとすると機能面で欲しいと思うものがいろいろ出てくるということです。

 そういうこともあり機能追加のためにいくつかのプラグインにパッチをコントリビュートさせてもらったりしています。

 データのロードに関する要求は企業やプロジェクトによって様々で、そういったニーズを拾い上げていくには、より利用者と開発者が増えていくことが重要なのかと思っています。自分としても利用者、開発者として貢献していければと思っています。

 

特許とその制度について 特許・実用新案

お久しぶりです。主に特許関連のデータ処理を担当しているBTと申します。 前回、知的財産権の概要についてご説明させて頂きましたが、今回は特許と実用新案の概要についてご説明いたします。 宜しくお願いいたします。

特許とは

特許とは発明をした人(或いはその発明を譲り受けた人や会社など)に対して、その発明の内容を公開する代わりに一定期間「特許権」という独占的な権利を与え、その発明を保護することをいいます。

発明をした人(或いはその発明を譲り受けた人や会社など)は、その発明がとても便利で有益なものであり商品として売り出したりサービスとして提供すると大きな利益が見込めると考えたとします。 このような場合、発明の内容を広く公開しようとすることなく他人に知られないように必死で隠すようになるでしょう。 全ての発明についてその内容が全く公開されないとなると、世の中の技術水準の向上が全く見込めなくなるか非常にゆっくりとしたものになり、他で実現されているものや技術も一から作らなければならないなど、産業の発展に大きな支障を来すことになります。

そこで国は特許制度により、発明をした人(或いはその発明を譲り受けた人や会社など)にその発明の内容を公開させることで、産業の発展が促進されるようにしているわけです。発明発明をした人(或いはその発明を譲り受けた人や会社など)は、発明を公開する代償として一定期間その発明を独占して実施する権利をうけることができます。つまり、発明に要したコストを回収する期間と発明の内容を積極的に公開する動機を与え、さらに発明に対するインセンティブとなるような仕組みになっています。

仮に、特許制度が無い社会だとどのようになるでしょうか? たとえば、一生懸命発明したものが他人に真似されても文句が言えなくなるかもしれません。 また、発明そのものが禁止されたりするかもしれません(現に特許制度の無い江戸時代は、新製品の製作や発売は幕府により禁じられていました)。 このため、誰もが発明をしようとは思わなくなり、世の中があまり進歩しなくなることが考えられます。

我が国の特許制度(特許に限らず意匠も商標もですが)は主に以下の4つの原則に基づいています。

  • 権利主義
    発明をした人は特許を受ける権利を取得し、国に対して特許権を与えるように請求することが出来ることをいいます。すなわち、特許権は発明をした人(或いはその発明を譲り受けた人や会社など)から出願が無いのに、国から与えられることはありません。
  • 先願主義
    同一の発明について異なる2つ以上の出願があった場合は、最も早く出願した者に特許権が与えられます。

  • 審査主義
    国が特許権を付与するための要件をあらかじめ定め、国の審査によりその要件を満たした発明に対して特許権が付与されます。

  • 登録主義
    特許権は、国により特許として登録された時に発生します。すなわち、登録がされていれば実際にその発明が使用されていなくても特許権が存続します。

発明および特許になる発明とは

上記で「発明」と述べましたが、発明とはどのようなものをいうのでしょうか。 特許法では発明は「自然法則を利用した技術的思想のうち高度のもの」と定義されています。 つまり、自然法則に反するもの(永久機関など、実際に永久機関を謳った特許出願はちょくちょくあるそうです)や、自然法則そのもの(発見に分類されるものが該当)、勝手に取り決めた規則や法則などは、特許法上「発明」とはいいません。このような内容で特許出願をしても、特許として認められることはありません。

とはいえ、発明であれば何でも特許として認められるわけでは無く、主に以下の要件を満たしている必要があります。

  • 新規性があること
    既に存在する発明や知られている発明、或いは何らかの文献等に記載されている発明と同じ発明については新規性があるとは認められません。そのような新規性の無い発明について特許権を付与すると、既に存在する発明や知られている発明を第三者が自由に利用すること出来なくなってしまい、妥当ではないためです。

  • 進歩性があること
    既に存在する発明や知られている発明、或いは何らかの文献等に記載されている発明のどれにも該当しない場合であっても、このような発明に簡単に思いつくような工夫やアイディアや改良を追加しただけの発明については進歩性があるとは認められません。簡単に思いつくような工夫やアイディアや改良の差異でそれぞれに特許権を認めてしまうと、日常的に行われている改良などに支障をきたすためです。

  • 他の者がした先願の公開公報の「特許請求の範囲」や「明細書」に含まれないこと
    他の者が行った先に行った特許出願の公開公報の「特許請求の範囲」や「明細書」に自身の発明と同じ内容(自身の発明を含む発明)が記載されている場合は、新しくした発明とは言えないために特許として認められません。

  • 先願であること
    同一の発明がたまたま複数の者から特許出願される場合があり、このような場合は先の出願でなければ原則として特許として認められません。

  • 出願をした者が特許権は発明をした人或いはその発明を正当に譲り受けた人や会社などであること
    当然のことですが、発明をした本人か発明をした本人からその発明を正当に譲り受けた人や会社が出願したものでなければ特許として認められません(実際は、出願人が発明をした本人か発明をした本人からその発明を正当に譲り受けた人や会社であることを確認するのは難しいため、特許として登録された後に問題となる場合が多いです)。

以上の各要件を満たしているか否かをチェックするのが特許庁における審査や審判になります。これらについては次回以降に説明します。

実用新案とは

我が国では、特許制度とは別に似たような制度として実用新案制度が存在します。 実用新案制度とは、一言で言うなら特許制度より「早く安価に権利(実用新案権)を取得できる」制度のことです。 特許制度との違いは、

  • 審査が無いこと

  • 権利取得費用が安価なこと

  • 権利の存続期間が短いこと

などがあげられます。 実用新案制度が存在する理由は、特許制度より敷居の低い制度を設けることで、特許出願される内容の質を一定上に保つこととされていますが、諸外国では区別しないことが多く特許と実用新案に区別している国は少数派です。

過去には実用新案制度にも審査が存在した時代がありその頃は実用新案の出願数もかなり多かったのですが、無審査になってから権利を取得しても権利の行使に難点があることから特許出願を選択することが多くなりました。今では年に7千件前後しか出願されていないようです。

まとめ

以上、特許と実用新案の概要について説明をしてきました。 弊社が運営するのAstamuse.comでは、上記の特許権に関わる特許情報を扱っています。 そこで、次回以降は特許を取得するための具体的な手続などについて見ていきたいと思います。

最後になりましたが、 アスタミューゼでは現在、エンジニア・デザイナーを募集中です。 興味のある方はぜひ 採用サイト からご応募ください。

参考にした資料など

Copyright © astamuse company, ltd. all rights reserved.