Node.js + Mongoose でテストデータを用意するなら Monky を使おう

こんにちは。Tokyo Otaku Mode エンジニアの bakorer こと重岡です。

「テスト書いてます?」

「いや、あんまり……」

「え? なんでテスト書かないの?」

「いや、だってスタートアップでリーンでアジャイルな開発サイクルを回していたら、モデルにガンガン変更入って……」

「そうだよなー。テストデータの準備って面倒だよな」

そんな You たちに朗報です。Mongoose でテストデータを用意する Monky ってライブラリがあるんです。しかも、無料。

というわけで今回は、Node.js + Mongoose という構成でテストデータの準備を楽にしてくれる Monky というライブラリを紹介します。

Read More


表参道ランチ:140店を食べ歩いた私が本当は教えたくない厳選9店

表参道は高級ブランドショップが立ち並ぶおしゃれな街です。食事ができるお店も値段が高く、なおかつ混雑しているいところも多いです。
Tokyo Otaku Mode(以下TOM)が表参道に引っ越してから7カ月ほど経過し、TOMメンバーが利用した表参道周辺の飲食店もかなりの数に上ってきました。
TOMではいいお店を見つけたら社内で共有し、積極的に情報をシェアするようにしています。

そんな社内共有情報から、ごく一部ですが表参道のおしゃれランチ情報をこっそりお教えします。「入りやすく」「雰囲気が良く」「高過ぎず」を基準に、お店をセレクトしてみました。

Read More


徹底討論!社内の技術情報共有ツール - GitHub Wiki, Qiita:Team, esa.io (特別編:トップエンジニアたちの夜 『シドニアの騎士』観賞会&座談会 ~Part4~)

こんにちは、ライターの岡田大です。
お待たせしました。特別編「トップエンジニアたちの夜」のPart4をお届けします。
※Part1~3未読の方&内容を忘れてしまった方は、Part1Part2Part3を一読してからお楽しみください!

リモートワークを成功させるために必要なモノとコトについては前回お伝えした通り。ルールとマナーなくして成り立たないことは言うまでもなく、そのことをメンバー(とくに新人)に徹底させるために、リモートワークを積極的に導入している伊藤氏は、ガイドラインをドキュメント化することにより意識の共有を図っているという。その際に活用しているのが、技術情報共有サービスQiita:Teamである。堀木氏の口から「Qiita:Team」という言葉が発せられるやいなや、参加メンバー一同がこれに食いつき、座談会はチーム内における情報共有に関する話題で持ち切りになっていった……。なお、取材のあいだじゅう、筆者が「“聞いたチーム”って、おかしなサービスの名前だなぁ」と思っていたことは内緒である。

Read More


アルコール片手に勉強会!『東京OtakuMode学園#1』潜入レポート

9月19日(金)の夜、Tokyo Otaku Mode(以下TOM)オフィスにて『東京OtakuMode学園#1』が開催された。これはTOM開発チームが手掛けた初のイベントで、TOMという組織のことをもっとよく知ってもらうために外部の方をお招きし、沿革や事業内容を紹介するとともに、エンジニアリングやデザインに関する情報や技術の共有を図ることを目的とした、エンジニア・デザイナー向けの勉強会である。エンジニアを対象にしたイベント告知サイトで参加者を募集。この日は10名を超える方が訪れることになっていた。今回は潜入レポートというかたちで、このイベントの模様をお伝えしていく。

Read More


これがシリコンバレー流グロースハック!Dropboxが一晩に7万人を集めた方法

この記事は、Quora(米国のQ&Aサイト)に投稿されたものを、私たちTokyo Otaku Modeが日本語に翻訳したものです。執筆者はMarkus KirjonenさんというUIデザイナーの方で、スタートアップについて多く書かれています。私たちはMarkusさんから許可をいただき、この投稿を日本語に翻訳して日本で発信する機会を得ることができました。今回から合計6回にわたり、有名スタートアップ企業がどんな方法で新規ユーザーを手に入れたのかについて、実例をもとに紹介していきます。ユーザー確保に悩んでいる方! これからユーザーを獲得していきたい方! 成功するスタートアップへのヒントを得たい方! 必読です!! 紹介する実例はどれも大成功したものばかりですので、必ずどこかに参考となる情報が潜んでいることでしょう。

Read More


リモートワークの是非 - 特別編:トップエンジニアたちの夜 『シドニアの騎士』観賞会&座談会 ~Part3~

こんにちは、ライターの岡田大です。
お待たせしました。特別編「トップエンジニアたちの夜」のPart3をお届けします。
※Part1~2未読の方&内容を忘れてしまった方は、Part1Part2を一読してからお楽しみください!

チームワークの重要性ならびに、仕事を円滑に進めるための“道具”について語り合った参加メンバーたち。話題は自ずと、スタートアップ企業のエンジニアたちの間に広く浸透しつつあるリモートワークへ……。

Read More


Node.jsエンジニアなら2014年内に知っておきたいPromise入門

Promiseは非同期処理をベースにした並列処理の実装方法の一種です。Promiseでは並列処理の各タスクが必ず1回実行されることが保証され、タスクとタスクからの結果を取得する処理を分離することできます。また、タスクの並列処理/直列処理をユーザーが自由に制御することができます。

ECMAScript Language Specification 6th EditionにPromiseが追加されたことから、しばらくの間JavaScriptの非同期処理に関する話題の中心はPromiseになると思われます。

Node.jsでも既にPromise対応したモジュールも多く、Promiseでのみ非同期処理を提供しているモジュールも存在します。Promiseを使用する機会は今後必然的に増えていくでしょう。

今回のエントリーでは、Node.jsでPromiseを使用する方法を説明します。コード例を中心に理論的な細部にはあまり立ち入らないよう構成していますので、はじめてPromiseに触れる方も簡単に理解できる内容になっています。加えて、ニーズの高いと思われるasync.jsとPromiseの変換方法も紹介しています。

ぜひこの機会にPromiseをプログラミングスキルに追加してください。

Read More


特別編:トップエンジニアたちの夜 『シドニアの騎士』観賞会&座談会 ~Part2~

こんにちは、ライターの岡田大です。
お待たせしました。先日公開した特別編「トップエンジニアたちの夜」の続編をお届けします。
※パート1未読の方&内容を忘れてしまった方は、コチラを一読してからお楽しみください!

『シドニアの騎士』第1期の総括で盛り上がったメンバーたちの話題は、徐々にシドニアを絡めた仕事論にシフトしていった。登場人物をエンジニアやマネージャーにたとえ、能力や適性について語り合う。とくに、優秀すぎるがゆえに扱いづらい、シドニアの長道タイプのキャラクターに話が及ぶと、場はおおいに盛り上がった。そして、TOMエンジニアの重岡氏が、複数の企業でCTOや顧問を務めてきた経験を持つ伊藤氏に対して……。

Read More


売上目標達成時にオフィスにファンファーレを盛大に轟かす方法を書くよ

image

IT系な企業だとオフィスがシーンと静まり返っていることもありますが、
あまりに静かだとメンバーの士気が上がっていきません。
Tokyo Otaku Modeのオフィスでは、Raspberry PiにNode.jsを入れてスピーカーを繋いだものがオフィスの片隅に置かれていて、デイリーの売上目標を達成時にファンファーレを流すようにシステム化しており、メンバーの士気を上げるのに一役かっています。
(誰もいない休みの日にも売上目標を達成するとファンファーレが鳴り響きます(๑´ڡ`๑))

さて今回は、そのシステムがどのように構築されているかを解説します。

Read More


Mongooseを使って複数のMongoDBを1つのDBのように扱う方法

Tokyo Otaku ModeではNode.jsからMongoDBにアクセスするのにODMとしてMongooseを採用しています。

Mongoose(ODM)を利用するメリットとしては、

  1. collectionのSchema設計がコードに残る
  2. virtualなどデータ周りの機能がModelに集約できる
  3. populationが利用できる

などが上げられます。

どれもサービスを効率的に作る上で助かる機能ばかりですが、とくにpopulationは別ドキュメントのreference(_id)を持っているだけで、自動的にドキュメントに展開してくれる強力な機能です。

一方で、DBロック回避の目的やある程度の規模になってDBを分割するようになると、別DBのcollectionをpopulateできないという問題がでてきます。
Mongooseの仕様上、特定DBへのconnectionとModel(collection)が密に結びついているため、参照元のModelと同じconnectionを持っていないと、参照先に辿りつけないからです。

これを回避するため、Tokyo Otaku ModeではMongooseのconnectionに少し手を入れてDB間のpopulationを実現しています。

Read More