閉じる

Osamu Takiya

Resume and Portfolio

最新情報について

本項目以下の情報は古い情報となっております。最新版のポートフォリオは こちら に掲載しておりますので、併せてご確認ください。

リンク先および本ページの内容に基づいた「履歴書」と「職務経歴書」を PDF で置いてあります。以下のリンクからダウンロードしてください。

私について

ソフトウェア開発者です。

「ユーザに新しい価値と体験と幸せを届けること」を大切にしています。

「3~5年後の目標」は「3~5年前の自分を恥じるようになること」です。すなわち、変化をキャッチアップし続けて自らを研ぎ澄ませることで、過去の自分を反省し続けるようになることです。

学歴

武蔵高等学校

1992年04月 ~ 1995年03月

普通科

東京工業大学

1996年04月 ~ 2001年03月

理学部 情報科学科(主にグラフ理論を専攻した)

東京工業大学大学院

2001年04月 ~ 2003年03月

社会理工学研究科 人間行動システム専攻 修士課程(携帯メールによるコミュニケーションについて研究した)

東京工業大学大学院

2003年04月 ~ 2006年03月

社会理工学研究科 人間行動システム専攻 博士課程(修士課程の研究をさらに深く突き詰めた)

職歴

大網株式会社

エンジニア

「ECサイトの構築」、「マーケティング」、「業務の自動化や効率化」を主に担当しております。


ECサイトの構築


会社が運営する通販サイトの制作を行っております。商品ページにおける「あなたがこれまでに見た商品からのおすすめ商品」(レコメンド)の部分の実装を担当しました。全体的なサービスは外部ベンダーによる開発であるため、社内では部分的な開発となります。また、Google AnalyticsやGoogle Search Consoleの設計および実装も担当しました。


楽天やYahoo!、AmazonやEbayといった「モール」に出品する際には商品情報のCSVファイルを先方に送信する必要があります。社内のデータベースから出品商品の情報を選択し、CSVファイルとして出力するWebアプリケーションをPHPで開発しました。


マーケティング


Google AdWordsやリターゲティング広告を用いたWebマーケティングに携わっています。広告の配信には技術的な背景も必要になるところ、出稿方針の立案や原稿、クリエイティブの作成依頼、配信調整、成果の検証など一貫して担当しております。


自社ブログの技術面を担当しております。プラグインの導入の選定や、「テーマ(CSS)」の共同開発、パフォーマンスの改善(Zabbix や Monit、Uptime Robotを用いた計測)、ローカルテスト環境の構築などを行いました。慢性的な503エラーに悩まされていた状況はWP Super Cacheというプラグインを用いて解決しました。


SNSでのマーケティングは広報チームと共同で取り組んでいます。ツイートによる効果測定(Fav数、RT数、CV数)をこれまでは手動で行っていたところを自動化しました。「Twitter アナリティクス」のCSVを自動で整形して出力するアプリを開発したり、Fav数、RT数、フォロワー数などをAPIで逐一集計しグラフで可視化したり、「バズワード」の中に会社が扱う商品と関連があるワードが含まれている場合はチャットで通知したりといった施策を行いました。


具体的な数値が目に見えるようになり、それが自動で集計されているため、広報チームは施策を練ったり予算の配分を考えたりといった本質的な仕事に集中できるようになり、広告の効果が高まっていきました。


広報チーム用のWebアプリの開発


広報チームが日々の仕事の煩雑さに苦労していたため、それを支援するアプリを開発しました。私が一人で全てを担当しております。


1. ツイート対象商品の事前検討機能


まず、広報チームがTwitterでPRする際、多種出品される商品から的を絞った商品のみのツイートを行う必要があります。そのためには出品される商品を予め知っている必要があります。


以前は出品される商品は実際に出品されてからでないと分かりませんでした。しかし、私は事前にマスターデータが格納されたデータベースにアクセス(定期的にクローリング)し、その情報をもとに出品される商品がリアルタイムで追加表示されていくページを作りました。


クローリングでの取得データにはテキストだけでなく画像データも含まれます。さらにその画像データ(静止画数枚)から自動でアニメGIFやmp4動画を作成し提供することで、ツイート内容に幅が出ました。


2. Twitterのツイートの管理機能


広報チームでは6つのTwitterアカウントを運用しており、管理が大変でした。以下の点について、各アカウントごとにデータを収集し、Superset で可視化しました。なお、現在は部分的に Metabase に移行しています。


•15分ごとに計測されるのフォローワー数、被リスト数
•15分ごとに計測されるの各ツイートのFav数、RT数
•各ツイートが起点となったコンバージョン数やリンクのクリック数(Google Analyticsのデータ取得には私が開発したSimple GA Reportingを用いました(後述))


以前は出品される商品は実際に出品されてからでないと分かりませんでした。しかし、私は事前にマスターデータが格納されたデータベースにアクセス(定期的にクローリング)し、その情報をもとに出品される商品がリアルタイムで追加表示されていくページを作りました。


クローリングでの取得データにはテキストだけでなく画像データも含まれます。さらにその画像データ(静止画数枚)から自動でアニメGIFやmp4動画を作成し提供することで、ツイート内容に幅が出ました。

結果


このアプリにより、広報チームのルーチンワークが減少し利便性が向上したため、新しい施策を行うための時間を確保することができました。他の仕事(ブログの記事を書くなど)にじっくりと時間をかけることもできるようになり、それぞれのサービスの品質が上がりました。


コンバージョンを測定することで効果的な広報の施策を検証、実施することができ、コストの有効な利用へとつながりました。またそのような数字で検証をする文化が根付き始めました。


業務の自動化や効率化


業務全般について、自動化や効率化を推し進めました。


社内の業務基盤となっているツールやデータベースがいくつかに分散しており、仕事の内容に応じて使い分ける手間があったため、これを統一しているところです。学習コストや必要としている機能、開発速度を考えあわせると、Webベースで開発することとが最適と結論づけました。


環境の構築


アプリの開発前にまず環境を整える必要がありました。オンプレで構築する必要があり、マシンリソースも限られていましたので、Dockerで複数のアプリを稼働させました。個々人のローカル開発環境はVirtualBox + Vagrant + Itamaeで構成しました。


GitLab、Jenkins、Ruboty、MySQL(ポート番号を変えて複数)、KnowledgeWekanSupersetGROWIFessZabbixMonitなどを稼働させました。この過程で普段触れる機会が少なかったPythonやElasticsearch、MongoDBに触ることができたのは収穫でした。


GitやJenkins(CI)については概念そのものから説明をして利用を促しました。自身の経験からも学習コストが高いことは分かっていましたので、便利な機能に絞り実際に手を動かしてもらって徐々に浸透させていくことで、今では以前とは考えられないほどに開発の精度や速度が向上しました。テストを書くことの大切さが共有できたり、デプロイを自動化できたり、Gitはデザイナーの方にも便利に使ってもらえたりして、大変に嬉しいです。


WekanやKnowledge、GROWIによって情報の共有が格段に進みました。属人性が排除され、他のチームが行っていることが目に見えるようになり、チーム間(部署間)での意見交換が活発になりました。


苦労した点としましては、それぞれの分野で同様のOSSが複数あるため、どれを選定するかは実際に触ってみて調べた点です。また、すぐに一つに決めるのではなく、実際に複数の人に複数のOSSを触ってもらい、フィードバックを受けながら適切なものを模索していきました。バージョンアップや設定変更などの運用面での容易さも重要でした。


それらを考慮した結果、いずれもDockerで運用することになり、このことを通じてDockerの細かな知識を習得できました。


また、実装の言語やミドルウェアは多岐に渡っており(Java、Node、Python、Meteor、PostgreSQL、Druid、Elasticsearch、MongoDB…)、読み解くのに苦労しました。しかしそれを通じて各種の知識が習得でき、有用な経験となりました。


また、IssueやPull Requestを通じてこれらのOSSに微力ながら貢献できたと思っております。


業務に直結する開発


業務に直結する開発としては、複数の場所に異なるフォーマットで蓄えられているデータを一括して取り扱えるように、Web APIの開発をRailsで行っています。3人のチームで取り組んでおり、私が主導して開発をしています。毎週の目標をIssueに立てて、それをもとにGitHub Flowに則って進めています(GitおよびCI環境を作った成果です)。私を含めてメンバーの得意不得意がありますので、コミュニケーションを密にして、しかしマイクロマネジメントに陥らないように留意しています。


Web APIを作ることでどのフロント側からもHTTP(S)を通じてデータのやり取りができ、複雑化しているデータベースの仕組みの理解から開放させることができました。それによってアプリなどの開発速度も向上しました。データベースの知識が原則として不要になるため、営業担当の方や仕入担当の方もこれまでより簡単にデータを用いることができるようになり、業務効率が向上しました。フロント部分をさらに作り込むことで一層の効果を見込んでいます。


細かな改善の一つとして「箱選択の自動化」が挙げられます。商品を梱包する際、大きさが異なる複数の箱の中からどれを選べば過不足無く梱包できるのかを瞬時に算出するアプリをPHPで書きました。これまで人が見た目により感覚で判断しており余剰な選択時間が生まれていましたが、この仕組みにより時間あたりの梱包完了数が増加しました。付随効果として箱ごとの使用数がデータとして蓄積され、いくつかの箱の種類は統合可能と判断でき、コスト削減につながりました。


この「箱選択の自動化」においては、コードを各部分よりもアルゴリズムの設計が作業の大半を占めました。情報としては複数の商品の3辺の大きさが与えられています。それらの情報と「箱」の情報をもとに、もっとも効率よく収納できる箱を選ぶことになります。


「効率よく」の部分は、必ずしも隙間なく詰め込めることを意味しません。梱包作業がしやすさを考慮して大きめの箱を選択したり、上下の向きが決まっている商品ではそれらの要素も考慮しました。このような種々の条件を決めていくために、最初はゆるい条件の状態でリリースし、使ってもらっていく中で出てきた意見について話し合って少しずつ取り込んでいきます。


箱選択部分のロジック部分は箱のデータとは別に作りました。箱のデータ(保有している箱のサイズ)は簡易なCSVファイルとして用意しました。これは、梱包の現場において試行錯誤して迅速に箱サイズを変更してもらうためです。CSVファイルとして独立していればどなたでもすぐに編集、適用できるからです。


たいくつかの梱包においては最適でないと思われる箱が選ばれており、これらの情報を集めながら継続的に改善を進めております。


その他


業務の傍ら、技術的な勉強会(Shibuya.rb など)に積極的に参加し、最新の状況をキャッチアップしています。また、個人的にアプリなどを開発し、GitHub等で公開しています。個人のブログ同人誌などで積極的にアウトプットを続けています。

ポールトゥウィン株式会社

品質管理エンジニア

JISS での業務の傍ら、いわゆる「テスター」の仕事も行っておりました。仕様書通りにソフトウェアが動作するかを確かめるという職務内容です。


仕様書を読み込み、どのようなバグが想定されるかを先方とも協議してまとめ上げ、それをテストするための手順書の作成を行いました。その上で実際にテストを行う数十名のテスターの方が行う仕事を割り振り、進捗の管理を行いました。


バグが発見された際には再現性を確認し、バグトラッキングシステムに報告を行いました。その過程で内部的にどのようなことが原因であるかを先方の方と手を動かしコードを読みながら確認する業務も行いました。

独立行政法人 日本スポーツ振興センター(JISS)

アスリートサポーター

国内のトップアスリートを対象とした科学的サポートを行いました。また、そのための簡単なシステムの構築を行いました。


例えば、選手の基礎測定データ(身体データ、スポーツテストデータ、心理テストデータなど)をはじめとした複数のデータから、その選手の現状を分析し、より良いパフォーマンスへつなげるためのフィードバックを記したシートを半自動生成するシステムの構築です。測定データを取り込む作業は手動で行われていたのですが、ドキュメントスキャナを用いてOCRにより自動で取り込む仕組みを作りました。スキャナに用紙を束ねてセットし、ボタンを押せば取り込みが完了します。紙媒体がPDFとして残りますので、大量のファイリングとその検索作業からも開放されて効率が上がりました。


また、そのフィードバックシステムは多くの人が用いるため、分かりやすいUIを作りました。データはExcelで集計されますので、VBAを用いてWindows的なボタンやボックスの画面を作り、簡単に操作できるようにしました。取り込まれたデータの取り扱いの属人性が排除され、必要なときにどなたでも情報にアクセスできるようになりました。


エンジニアリングの他に、フィードバック内容の学術的裏付けを取るための論文の精読、輪読、整理などを行いました。学会に訪れたり、大学の図書館に通ったりして、学生の延長のような部分もありました。

ポートフォリオ

Simple GA Reporting

Google Analytics(GA)のデータをRubyから簡単に扱うことができるようになるgemです。ドキュメントはブログにも書きました

GAのデータ取得がコードベースで行えるようになることが利点です。多くの集計パターンがあっても破綻せず、設定が可視化されますので、設定内容に変更を加えた場合との比較が明瞭になります。

さらに、「サンプリング」が起きてしまう状況を避けて集計することができます。

2018/04/18のShibuya.rbにて、本gemについて発表させていただきました

FileMaker Advent Calendar 2016 全日制覇

QiitaのAdvent Calendarを全日埋めましたFileMakerに関する情報は特に日本語ではなかなか見つからず、見つかったとしても数年前の古い情報になってしまいます。そこで近年のFileMaker周りの状況をまとめることで、FileMakerを使用している方たちのお役に立てれば、と思い一ヶ月走り抜けました。

FileMakerのWeb APIを利用してWebアプリケーションを開発する方法も紹介しており、現状を総覧できるよい記事が並べられたと思っています。

とうらぶキャプ

ブラウザゲーム「刀剣乱舞」のスクリーンショットを撮影するWindows用のアプリケーションです。Visual Basicで書きました。制作のきっかけは、Twitterの何気ないつぶやきでした。

撮影範囲を特定するためのアルゴリズムはかなり粗く、「ゲーム画面の外の部分は白い背景なので、白い背景部分が一定以上占めればそこの内側部分がゲーム画面となる」というアルゴリズムです。そのような仕組みであるので、ゲーム画面が真っ白になった瞬間の撮影は失敗します。

このアプリケーションは窓の杜に紹介していただきました。また「刀剣乱舞 オレたちの"刀装"」というムックにも掲載されました(p189)

「お知らせ」生成アプリ

Qiitaの「クソアプリ Advent Calendar 2016」の13日目に勢いだけで投稿したアプリです。

フォームに入力された値をもとにWebページを作成し、表示します。PHPで作りました。ご覧になるとお分かりになるように十数分で作れてしまう極めて簡単なアプリですが、着眼点としては新鮮だったようで予想以上の評価をいただきました。

幻水総選挙 2018

前年(次の項目を参照ください)と同じようにサービスはRailsで開発しました。同じ内容のアプリを毎年(ほぼ)新規に作るということは、これまでの自分の比較という点で大変有益でした。

数年前まではフレームワークを知らず、テストを知らず、デプロイも手動で行っていて、セキュリティへの理解も浅かったところ、それらの知識が段階的に身についてきたところで毎年の区切りとしてアプリを作る機会があり、自らの振り返りに一役買っています。

中身はとても褒められたものでない部分がまだまだ多数あります。特にフロントはMaterializeを簡単に当てたものになっており、今年は十分な時間を確保し、ぜひともモダンなフロント + Web API の構成で臨みたいです。

幻水総選挙2017 集計所

2017/06/16 ~ 2017/06/18 にTwitter上で「幻想水滸伝」という作品のキャラの人気投票企画を行いました。3人のチームで協力しながら運営し、私はツイートの収集とWebサイト制作を担当しました。

WebサイトはRailsで作成しました。ツイート収集は収集スクリプトをcronで回してMySQLに格納していくという方法です。Railsにまだ不慣れだったことと〆切厳守(開催期間に絶対に間に合わせなければいけない)だったことが理由で、中身は非常に汚くなってしまいました。

幻水総選挙 2016 開票結果 ほか

幻水総選挙2017 集計所」の2016年版です。PHPで制作しました。Bootstrapを使いモダンなデザインにしました。

その他、「幻想水滸伝」関係のポートフォリオには以下のものがあります。

幻水総選挙 2015 投票結果: PHP製。UAでPCと携帯のビューを振り分ける古の設計です。
幻水総選挙 2015 リアルタイム集計所: PHP製。制約がありオレオレフレームワークを用いました。PHPのバージョンアップに起因してMySQLのパスワードが表示されるという大失敗もありました。
幻想水滸伝108星検索システム: jQuery使用。レスポンシブデザインの実装です。
108星 除夜の鐘: Ruby製。108つの除夜の鐘に合わせて108人のキャラクターをツイートします。

Crop Pokemori Prof Image

どうぶつの森 ポケットキャンプ」というゲームのフレンドを増やすために、プレイヤーのプロフィール画像からフレンドIDを自動抽出するgemです。手動でのフレンド登録の手間を減らすために制作しました。

rmagickを用いてプロフィール画像だけに存在する特定の画像領域に着目して抽出を行いました。

2018/03/01の「アキバエンジニア懇親会」にて、本gemについて発表をさせていただきました

Collect Twitter Media

Twitterの自分のタイムラインに流れている添付画像ファイルを自動で収集するためのgemです。

タイムライン上のツイートそれぞれに対して添付画像の有無を調べ、添付画像が存在するものについては画像のアドレスを取得し、画像をwgetで取得します。整理がしやすいように画像のファイル名はスクリーン名(@foobar)を含みます。また、取得結果一覧をCSVファイルで書き出します。

前述の「Crop Pokemori Prof Image」においてプロフィール画像を収集するために制作しました。

Character Recognition by Vision API

character-recognition-by-vision-api Google Cloud の Vision APIを用いて画像からテキストを抽出する(OCR)ためのgemです。Vision APIには複数の機能が用意されていますが、その中でOCRの機能を利用することに絞ったgemです。

前述の「Crop Pokemori Prof Image」で抽出した画像ファイルからテキストを抽出するために制作しました。

Wunder Trello

Wunderlistがサービス終了することを受け、Trelloへデータを移行するツールを作りました。Ruby製です。

データ構造を完全に移行することはできていませんが、手動で補正できるレベルですので、その点は容認した上で完成させました。

amazomania

Amazon.co.jpの商品の価格情報をスクレイピングで取得するためのgemです。

Amazonの商品コードであるASINを指定するだけで、その商品の価格(送料およびAmazonポイントを加味)とショップ名を価格の昇順で取得することができます。Product Advertising APIではAmazonポイントを加味した価格が取得できないために作成しました。

ヘッドレスブラウザとしてPhantomJSを用いています。

GS2 MUSIC ENGINE Ticket Check

ゲームミュージックのオーケストラコンサートのチケットが再販されるのを監視するアプリケーションです。Ruby製です。

Headless Chromeを用いてチケット販売ページをスクレイピングし、「販売状況」の文字列をチェックします。チェックされたデータはRedisに蓄えられ、前回チェック時との比較を行い、変更があればTwitterで自分宛てにメンションを飛ばすようにしました。

2018/02/21のShibuya.rbにて、本gemについて発表させていただきました

Pick up YURI face

ユーリ!!! on ICE」の画像からユーリの顔を抽出するアプリケーションです。任意の画像から顔部分のサムネイルを作ることを目的に制作しました。OpenCV(ruby-opencv)を用いて抽出しました。

顔部分の抽出にはOpenCVを用いました。分類器がアニメ調画像には弱いためか、期待した通りの画像が抽出された率はあまり高くなく、分類器の選別や学習が必要であることを理解しました。

また、ruby-opencvはここ一年ほどメンテナンスされておらず、OpenCVをRubyで扱うことは厳しいとも感じました。

Ruboty on Twitter with Heroku

Ruby製のbotフレームワークであるRubotyでTwitterのタイムラインを監視し、条件に一致したツイートをトリガにアクションを起こすというアプリケーションです。

タイムライン上の「コンサートチケット販売開始」のツイートをキャッチして即座に自分へ通知を飛ばす目的で制作しました。

Herokuにデプロイすることを前提としており、Procfileを同梱しています(Herokuへのデプロイは必須ではありません)。

Discord Bot

ゲーマー用のチャットツールであるDiscordのbotアプリケーションです。

botに命令することでゲームの攻略情報などを返答させ、Discord内でプレイヤー同士のコミュニケーションが完結できることを目指して制作しています。

ハードコーディングが過剰であり、またクラスが存在せずに一直線でコードを書き下したりしていて、「動けばいい」状態になってしまっているため、リファクタリングを行いたいです。

Inspect FM

FileMaker Serverに存在する「データベース名」、「レイアウト名」、「フィールド名」をGUIで探索的に表示できるWebアプリケーションです。Sinatraで制作しました。

FileMakerでは「データベース名」「レイアウト名」「フィールド名」を効率的に探索・検索する方法がないため、GUIで簡単にそれを実現するために制作しました。filemaker-rubyという素晴らしいgemを用いています。

副産物として「ある『フィールド』がどの『レイアウト』に含まれているか」を調べるRubyのコードも書きました。

フロントエンド

実際に手を動かしてフロントエンド部分の実装を行いました。

「テキストの中からJANコードを抽出するアプリ(jQuery)」「QRコードを生成するアプリ(Vue.js)」「CSVファイルを読み込んでテーブルとして表示するアプリ(React)」を制作しました。

基礎的な部分の実装にとどまっているため、より深く広く技術を身につけていっております。

同人誌

個人で同人誌を制作しています。テーマは主に「ゲーム」です。

本の内容はテーマにとらわれずに「ゲームの歴史の考察」から「ゲーム周辺のOSSの紹介」まで多岐に渡ります。現在はゲームそのものを制作しています。主な頒布物は以下のとおりです。

1. 「幻想水滸伝VI」がPlayStation 3で発売する予定を経て発売不可能な状態へ至るまでの遷移
2. The World of Suikoden
3. OSSS (Open Source Suikoden Software)
4. れこつい! 〜 Ruby で始めるツイート収集 〜

Suikoden Revival Movement (SRM)

幻想水滸伝(Suikoden)」の世界的ファンコミュニティである「Suikoden Revival Movement (SRM)」の日本コミュニティのマネージャを務めています。

プロデューサーだった村山吉隆さんへのインタビューを行ったり(1回目 および 2回目)、Steamでの配信を願う「#SuikodenOnSteam」というキャンペーンを行ったりしました。このキャンペーンは数多くのメディアに取り上げられました

KONAMI Europeの公式サイトでもSRMの活動が継続的に取り上げられています

非公式!トロの誕生日会

どこでもいっしょ(どこいつ)」というゲームの「非公式」イベント(会場は開発会社であるビサイド)で発表をさせていただいています。

2017年は「全てのゲームは、どこいつに集まる」と題して、「現在のゲームはどこいつを起源としているのではないか」というテーマで発表を行いました。当日の様子はブログにまとめました

2016年は「わたしとトロのあゆみ」と題して、「トロ(どこいつ)がこれまでに私をどのように楽しませてくれたのか」というテーマで発表しました。当日の様子はブログにまとめました

主なスキル

キャッチアップ中(現時点ではスキルとして不十分)

コンタクト

遷移先のページで CAPTCHA 認証が必要です