mof-brown

ずっとモフモフしてたい

はじめての Node.js (3)

今回は MySQL との接続周りを確認。 詳細は https://github.com/felixge/node-mysql の README 見たほうが早い。 MongoDB は今回は割愛。

 

Node.js からデータベースにアクセスする

 

 

 

  • 利用したい DB に対応するモジュールを使う

 

 

 

 

 

サンプルソース

 

#!js

var mysql = require('mysql');

 

// create connection.

var conn = mysql.createConnection({

user: 'nodejs_study',

password: 'nodejs_study',

database: 'nodejs_study'

});

 

// connect

conn.connect();

 

// create table.

conn.query('CREATE TABLE IF NOT EXISTS users (' +

'id INT(11) NOT NULL AUTO_INCREMENT,' +

'name VARCHAR(255),' +

'PRIMARY KEY (id)' +

')');

 

// execute query.

conn.query('INSERT INTO users(name) VALUES(?)', ['foo'], function(err, result) {

console.log(result.insertId);

});

 

// streaming query rows.

var query = conn.query('SELECT * FROM users;');

query.on('result', function(row) {

console.log(row);

});

 

// end

conn.end();

 

はじめての Node.js (2)

続き。今回はデバッグまで。

シンプルなWebアプリケーションを作る

  • http モジュールを利用してWebアプリケーションを書いてみる
  • url モジュールで URL の解析が可能
  • querystring でクエリ文字列の解析が可能
  • multipart については標準モジュールが無いらしい

サンプルソース

#!js

var http = require('http'),

url = require('url'),

querystring = require('querystring');

var server = http.createServer();

server.on('request', function(request, response) {

response.setHeader('Content-Type', 'text/html');

response.writeHead(200);

response.write('<form method="post" action="/"><input type="text" name="value"/><input type="submit"/></form>');

if (request.method === 'POST') {

var data = '';

request.on('data', function(chunk) {

data += chunk;

});

request.on('end', function() {

console.log(querystring.parse(data));

});

}

response.end();

});

server.listen(8080, '127.0.0.1');

バイナリデータの操作とファイルの入出力

個人的にこの辺りは散々使っているので割愛。

Node.js アプリケーションのデバッグ方法

  • console.log, error, trace で出力する

    • printf みたいな指定も可能
  • パフォーマンス計測には console.time, timeEnd が便利
  • Node.js 組み込みデバッガを利用する

  • node-inspector というデバッガツールがある

    • npm install -g node-inspector

はじめての Node.js (1)

今年は Node.js を勉強しようと思い書籍を探してみたところ、「はじめてのNode.js サーバーサイドJavaScriptでWebアプリを開発する-」という書籍が評判よさ気だったので購入。今週から読み始めてみる。

Node.js の特徴を理解する

  • シングルスレッドで全てのリクエストを処理していく

    • スレッド数増大の問題は無い
    • マルチスレッドプログラミングの問題を考慮しなくて良いのでシンプルなソースが書ける
  • 課題もある

    • CPUリソースを多く消費するような処理があると全体に影響する
    • コールバックを多用するのでソースの可読性が落ちる

Node.js の環境を構築する

インストールするだけなので割愛。

node.js

node コマンドと Node.js のイベントシステム

npm でモジュールを管理する

  • require 関数で呼び出されたモジュールは exports オブジェクトを持ち、require の戻り値して返される
  • exports オブジェクトを通してモジュール外から利用可能な関数等を定義することができる

[javascript] var hello = require('./hello'); hello.greeting(); [/javascript]

[javascript] exports.greeting = function() { console.log('hello!'); }; [/javascript]

  • 関数自体を返却したい場合は、module.exports を上書きする

[javascript] var hello = require('./hello'); hello(); [/javascript]

[javascript] module.exports = function() { console.log('hello!'); }; [/javascript]

  • require 関数で JSON ファイルを読み込む事もできる
  • require 関数にディレクトリパスを渡した場合、指定ディレクトリ配下の package.json を読み、main に指定されている JS ファイルを読み込む
  • モジュールの情報、依存関係等を package.json というファイルに記述し、モジュールリポジトリの直下に配置する

[javascript] { "name": "sample", "description": "sample", "author": { "name": "your name" }, "version": "0.0.1", "keywords": ["foo", "bar"], "homepage": "http://xxx", "main": "main.js", "engines": { "node": ">= 0.8.0" }, "repository": { "type": "git" "url": "http://github.com/xxx/xxx.git" }, "bugs": { "url": "http://github.com/xxx/issues" }, "licenses": [ { "type": "MIT", "url": "" } ], "scripts": { "test": "nodeunit xxx.js" }, "dependencies": [ "xxx": "0.0.1" ], "devDependencies": [ "xxx": "0.0.1" ] } [/javascript]

HTML5タグを改めて見なおしてみる

HTML5が注目されて久しいですが、自分自身はというと余り使いこなせていません。

 

HTML5には audio のような新機能としてのタグと、セマンティック・ウェブのためのタグがありますが、前者は使いシーンがあれど後者はクローズドなWebサービスだとあまり必要性が無く、つい div タグを乱用してしまっています。

 

これはマズイなと思い、HTML5にどんなタグがあるのか改めて見なおしてみました。

 

続きを読む

2013年を振り返る

大晦日ということで、2013年を振り返ってみます。

担当したサービスのリリース・クローズを経験

配属先のプロジェクトで開発していたサービス (ソシャゲ) が2月に無事リリースされました。

僕自身は2012年10月から参画したのですが、基盤部分の設計とかコアなところを任せてもらっていたので、スケジュールはかなりタイトだったけど開発自体はかなり楽しかった。任せてくれたフロントリーダーに感謝してます。

その後はイベント開発やら新機能開発に追われ、売上自体は順調に推移してはいたのですが、諸々大人の事情によりサービスのクローズとなりました。

クローズ自体は残念でしたが、個人としてはこのプロジェクトを通じてソシャゲに関する知識を学ぶことができたり(ソシャゲ未経験だった)、この仕事を通じて沢山の人に出会えたりと、とても貴重な経験をすることができました。

次のプロジェクトへ

ということで、次のプロジェクトへ配属されました。

途中参加なのでまだあまり深く関われていないのですが、来年から頑張っていきます。

色々な人と出会えた

↑にも書きましたが、今年は沢山の人と知り合うことが出来ました。

いや、経歴含めてホントいろんな人がいるんだなーと再確認。皆と一緒に何か作りたいな。

長男が生まれた

我が家に家族が増えました。絶賛子育て中です。

「最近の趣味は子育て」と言ってた友達がいたのですが、まさにそんな感じです。

最近あーうー言いながら笑うようになったので益々可愛い。ウンコする天使。

今年得たスキル・ソフトウェア等

  • Sass/Scss/Compass
  • imageOptim/imageAlpha
  • Grunt (Node.js)
  • zepto
  • lodash
  • jsrender
  • CreateJS
  • HTML5 Audio
  • Jasmine
  • Mocha
  • Appium
  • FreeMarker
  • Play Framework 2.1.x

こんなところでしょうか。それでは良いお年を。

git log を使って日報を書く

日報書くのってめんどくさいですね。

今の配属先では Git を利用しているので、git log を使って日報を作成すれば楽ということに今更気づきました。

出力結果を貼り付ければさくっと作成できます。フォーマットはお好みで。

require.js 利用時に不要な依存関係をチェックする

require.js 等の AMD を利用している場合に、リファクタの過程で本来依存関係にない js の記述が残ってしまうことがあります。

[javascript]

define(['hoge'], function(hoge) {

// 以下のソースで hoge を利用していない

});

[/javascript]

続きを読む