技術ブログ - 毎日が成長!

‘PHP’ タグのついている投稿

symfony+MongoDBでNoSQLはじめの一歩 〜MongoDBインストール〜

2010年7月15日 木曜日

はじめに

はじめまして。開発部エンジニアのあさくらです。
主にPHPsymfonyを使ったシステム開発を担当させていただいています。
好きな開発環境は、MacGNU Emacs
好きな仮面ライダーは龍騎カブトWです。

技術的なTipsやチュートリアル、開発手法についての情報を中心に投稿させていただこうと思っています。 どうぞ、よろしくお願いいたします。

私は普段、symfony+RDBMSで開発を行っているのですが、RDBMSで吸収することが難しい問題に直面することが多々あります。(私の理解不足という点も否めませんが)
そういった問題を解決するのにNoSQLが有効か否かを調べたいと思い、本エントリを投稿するに至りました。
バリバリNoSQLを使いこなす域には達していないので、少し物足りない内容になってしまうかもしれませんが、皆さんと一緒に勉強させていただければと思っています。

はじめの一歩

それでは、NoSQLの世界へ一歩踏み出してみましょう。
NoSQLのはじめの一歩として、symfony1.0からMongoDBを操作し、パフォーマンスがどの程度得られるか、全5回程度で学んでいきたいと思います。
今回は、「MongoDBをインストールし、データベースの起動ができるようになる」ことを目標に、お話を進めていきたいと思います。

今回のエントリの対象読者

今回のエントリは、下記のような方を対象としています。

  • NoSQLのことを何となく知っている
  • MongoDBの名前を聞いたことがあるが、触ったことはない
  • アプリケーションを自由にインストールできるLinux環境がある

今回のエントリのゴール

今回のエントリを読み終えて、次のことが出来ることをゴールとしています。

  • Linux環境へ、MongoDBがインストールできる
  • mongodコマンドで、MongoDBデータベースが起動できる

MongoDBとは

MongoDBロゴ

Wikipediaでは以下のように紹介されています。

MongoDBはC++言語で記述された オープンソースのドキュメント指向データベースである。
MongoDBは従来の関係データベース管理システムでは簡単に解決できない多量のトランザクション処理が要求されない問題に対し設計されている。一例として、データベースが複数サーバにまたがる必要がある場合が挙げられる。
CouchDBのようなドキュメント指向データベースシステムと同じく、MongoDBは関係データベース管理システムではない。データベースはBSONと呼ばれる、バイナリで格納されたJSONのようなドキュメントの集合を管理している。
  • 「MongoDB」『フリー百科事典 ウィキペディア日本語版』。最終更新 2010年7月1日 (木) 11:58 UTC、URL: http://ja.wikipedia.org/wiki/MongoDB

また、書籍や勉強会での情報では、
「KVS、ドキュメント指向データベース、RDBMSのいいとこ取りなデータベース」
と評されることが多いようです。
なんだかすごそうで、わくわくしてきますね。

作業環境

今回の作業環境は以下の通りです。

  • MacOSX 10.6.3 SnowLeopard

MongoDBのインストール

まずは、MongoDBをダウンロードしましょう。 Downloads – MongoDBから、自分の環境にあったパッケージをダウンロードしてください。

MongoDBDownload画面

今回は、MacOSX SnowLeopard環境で作業をするので、「OS X 64-bit」から、この記事を作成している2010年7月15日時点での最新バージョン1.4.4をダウンロードします。

$ curl http://downloads.mongodb.org/osx/mongodb-osx-x86_64-1.4.4.tgz > mongodb.tgz
$ tar zxvf mongodb.tgz

データの格納先ディレクトリの作成

データの格納先を作成します。
今回は、mongodコマンド実行時にデフォルト格納先として指定されるディレクトリを準備しましょう。
※mongodコマンドの引数に「–dbpath=/hoge/mongodb_data」を追加することで、任意のデータ格納先を指定することも可能です。

$ mkdir -p /data/db

mongodコマンドで、MongoDBを起動

展開したmongodコマンドを実行し、データベースを起動してみましょう。

$ mongodb-osx-x86_64-1.4.4/bin/mongod

mongodコマンド実行後、メッセージに「waiting for connections on port 27017」とメッセージがでれば起動成功です。

また次回

今回のエントリでMongoDBの起動まで出来るようになりました。
次回は、MongoDBを操作するためのmongoコマンドを使い、実際にMongoDBを操作していきたいと思います。
それでは

参考にさせていただいたページ

本エントリを作成する際に、こちらのページを参考にさせていただきました。
ありがとうございました。

LinuxでlibHaruを使ったPDF生成を行う

2009年4月1日 水曜日

前回のlibHaruを使ったPDFの生成はMac OS X上での作業でしたので、今回はサーバサイド、CentOS 5.2上でlibHaruを使ったPDF生成をしてみます。

インストール

まず、gccとPHPがインストールされていない場合はあらかじめインストールしておきます。PHPはmbstringモジュール、開発用パッケージ、PEARも必要となるので、php-develとphp-pearもインストールします。

# yum -y install gcc php php-mbstring php-devel php-pear

次に、libHaruのビルドに必要なzlibとlibpngの2つのライブラリをインストールします。

# yum -y install zlib zlib-devel libpng libpng-devel

準備が整ったら、libHaruのソースコードを取得してビルドおよびインストールを行います。

# wget http://libharu.org/files/libharu-2.1.0.tar.gz
# tar xvf libharu-2.1.0.tar.gz
# cd libharu-2.1.0
# ./configure
# make
# make install
# make clean

libHaruのインストールが完了したら、前回と同様にPECLのharuモジュールをインストールします。

# pecl install haru
downloading haru-1.0.0.tgz ...
Starting to download haru-1.0.0.tgz (23,336 bytes)
........done: 23,336 bytes
4 source files, building
running: phpize
Configuring for:
PHP Api Version:         20041225
Zend Module Api No:      20050922
Zend Extension Api No:   220051025
Please provide the prefix of libharu installation [autodetect] : /usr/local

libHaruのインストール先を尋ねられるので、上記のように/usr/localと入力します。

Build process completed successfully
Installing '/var/tmp/pear-build-root/install-haru-1.0.0//usr/lib/php/modules/haru.so'
install ok: channel://pecl.php.net/haru-1.0.0
You should add "extension=haru.so" to php.ini

設定

ビルドが完了すると/usr/lib/php/modules/haru.soが生成されるので、/etc/php.iniに以下の内容を追加します。

extension=haru.so

使用例

前回と同様のコードを作成して、実行してみます。

<?php
// ドキュメントインスタンスを生成する
$doc = new HaruDoc;

// 日本語エンコーディングを利用する
$doc->useJPEncodings();

// 日本語フォントを利用する
$doc->useJPFonts();

// ドキュメントに新しいページを追加する
$page = $doc->addPage();

// ページのサイズと向きを設定する
$page->setSize(HaruPage::SIZE_A4, HaruPage::LANDSCAPE);

// 明朝体をCP932エンコーディングで利用する
$font = $doc->getFont('MS-Mincyo', '90ms-RKSJ-H');

// フォントのサイズを設定する
$page->setFontAndSize($font, 60);

// 塗の色を設定する
$page->setRGBFill(0, 0, 0);

// 文字を出力する
$page->beginText();
$page->textOut(210, 270, mb_convert_encoding('テストです。', 'SJIS-win', 'UTF-8'));
$page->endText();

// 結果をPDFファイルに保存する
$doc->save('./test.pdf');

今回は明朝体を使ってみました(フォント名の指定はMincyoとします)。

libharu

というわけで、Linuxの場合も実に簡単に日本語PDFを生成することができました。

libHaruを使ったPDFの生成

2009年3月30日 月曜日

PHPでPDFファイルを生成する場合、PDFlibFPDFを利用するというケースが多いと思います。

どちらもフォントの設定を行うことで日本語が扱えますし、情報も豊富なのですが、つい先日、日本人の方が開発されたlibHaruというPDF生成ライブラリを発見しました。日本国内での知名度はあまり高くないようですが、なかなか高機能でしたので、これをPHPから使ったらどんな感じになるのかMac OS X上で試してみました。

libHaruとは?

libHaruは、2005年度下期未踏ソフトウェア創造事業で採択されたフリーでクロスプラットフォームなPDF生成ライブラリです。ANSI Cで書かれているため多くの環境で利用でき、C言語の他に

  • Ruby
  • Delphi/Free Pascal
  • C#
  • PHP
  • Perl
  • FreeBasic

といった言語向けのバインディングも用意されています。

機能

libHaruのサイトで挙げられている機能は以下の通りです。

  • 線、文字、画像を含むPDFファイルの生成
  • アウトライン、テキスト注釈、リンク注釈
  • ドキュメントの圧縮
  • PNGおよびJPEG画像の埋め込み
  • Type1フォントおよびTrueTypeフォントの埋め込み
  • 暗号化PDFファイルの生成
  • 多くの文字集合の利用 (ISO8859-1〜16, MSCP1250〜8, KOI8-R)
  • CJKフォントおよびエンコーディングのサポート

特に最後の点は日本人には嬉しいところ。フォントさえ存在していれば、MS明朝やMSゴシックといったフォントを特に設定をすることなく利用できます。

インストール

Mac OS Xの場合は、MacPortsにlibHaruが登録されているので以下のようにしてインストールすることができます。

$ sudo port install libharu

さらに、PHPからlibHaruを利用するためには、PECLに用意されているharuパッケージをインストールします。

$ sudo pecl install haru
(中略)
 1. Please provide the prefix of libharu installation : autodetect

1-1, 'all', 'abort', or Enter to continue:

インストール中に上記のように表示されlibHaruのインストール先を訊かれるので、allと入力しEnterキーを押した後、パスを入力します。MacPortsでインストールしている場合は/opt/localとします。入力後、再度Enterキーだけを押すとharuモジュールのビルドが始まります。

1-1, 'all', 'abort', or Enter to continue: all
Please provide the prefix of libharu installation [autodetect] : /opt/local
 1. Please provide the prefix of libharu installation : /opt/local

1-1, 'all', 'abort', or Enter to continue:
(中略)
Build process completed successfully
Installing '/opt/local/lib/php/extensions/no-debug-non-zts-20060613/haru.so'
install ok: channel://pecl.php.net/haru-1.0.0
configuration option "php_ini" is not set to php.ini location
You should add "extension=haru.so" to php.ini

ビルドが完了すると上記のようにモジュールがインストールされたパスが表示されるので、php.iniに以下のように設定を追加してharu.soが読み込まれるようにしておきます。

extension_dir="/opt/local/lib/php/extensions/no-debug-non-zts-20060613/"
extension=haru.so

使用例

では、早速PHPからlibHaruを利用して日本語を含んだPDFファイルを生成してみましょう。

<?php
// ドキュメントインスタンスを生成する
$doc = new HaruDoc;

// 日本語エンコーディングを利用する
$doc->useJPEncodings();

// 日本語フォントを利用する
$doc->useJPFonts();

// ドキュメントに新しいページを追加する
$page = $doc->addPage();

// ページのサイズと向きを設定する
$page->setSize(HaruPage::SIZE_A4, HaruPage::LANDSCAPE);

// MSゴシックをCP932エンコーディングで利用する
$font = $doc->getFont('MS-Gothic', '90ms-RKSJ-H');

// フォントのサイズを設定する
$page->setFontAndSize($font, 60);

// 塗の色を設定する
$page->setRGBFill(0, 0, 0);

// 文字を出力する
$page->beginText();
$page->textOut(210, 270, mb_convert_encoding('テストです。', 'SJIS-win', 'UTF-8'));
$page->endText();

// 結果をPDFファイルに保存する
$doc->save('./test.pdf');

上記のコードをUTF-8で保存して実行すると、以下の画像のようなPDFファイルが生成されます。

libHaruの使用例

libHaruの使用例

次回は、Linux上でlibHaruを使用する場合のインストール手順を紹介します。