77
東京スカイツリー ~Grailsとボクと、時々、ネイティブ・ライブラリ~ 2010/07/24

Tokyo Sky Tree

Embed Size (px)

Citation preview

Page 1: Tokyo Sky Tree

東京スカイツリー~Grailsとボクと、時々、ネイティブ・ライブラリ~

2010/07/24

Page 2: Tokyo Sky Tree

余談ですが

タイトルは、リリー・フランキーの小説『東京タワー ~オカンとボクと、時々、オトン~』のパクリで

す。

Page 3: Tokyo Sky Tree

自己紹介

Page 4: Tokyo Sky Tree

名前: 杉浦孝博twitter: @touchez_du_bois

Page 5: Tokyo Sky Tree

ここから本題

Page 6: Tokyo Sky Tree

Javaにない機能を使いたい時。

Page 7: Tokyo Sky Tree

レガシーシステムと連携したい時。

Page 8: Tokyo Sky Tree

ネイティブ・ライブラリがすでにある時。

Page 9: Tokyo Sky Tree

どうしますか?

Page 10: Tokyo Sky Tree

まず思い付くのは、

Page 11: Tokyo Sky Tree

JNI(Java Native Inteface)

Page 12: Tokyo Sky Tree

だと思います。

Page 13: Tokyo Sky Tree

ですが、JNIを使う場合、

Page 14: Tokyo Sky Tree

●javahでC/C++のヘッダファイルを作成●C/C++でネイティブコードを記述●ネイティブコードをコンパイルして共有ライブラリを作成

Page 15: Tokyo Sky Tree

とかする必要があります。

Page 16: Tokyo Sky Tree

う~ん・・・面倒(´・ω・`)

Page 17: Tokyo Sky Tree

そんなあなたにオススメなのが、こちら。

Page 18: Tokyo Sky Tree

JNA(Java Native Access)

Page 19: Tokyo Sky Tree

JNAとは、

Page 20: Tokyo Sky Tree

直接JNIを使用せずに、Javaからネイティ

ブ・ライブラリに(割と)楽にアクセス出来るライブ

ラリ

Page 21: Tokyo Sky Tree

と言えます。

Page 22: Tokyo Sky Tree

ネイティブ・ライブラリにアクセスするのに作成

するのは、基本的に

Page 23: Tokyo Sky Tree

JavaのInterface

Page 24: Tokyo Sky Tree

だけとなります。

Page 25: Tokyo Sky Tree

サポートするプラットフォームも幅広く、

Page 26: Tokyo Sky Tree

●Windows (x86、x86_64)●Linux (x86、x86_64)●FreeBSD / OpenBSD (x86、x86_64)●Solaris (x86、x86_64、SPARC、SPARC V9)●Mac OS X (PPC、x86、x86_64)

Page 27: Tokyo Sky Tree

と、マルチプラットフォーム向けのアプリ

ケーション開発にも向いています。

Page 28: Tokyo Sky Tree

では、例を見てみましょう。

Page 29: Tokyo Sky Tree

数時間前に紹介されてしまいましたが、

Page 30: Tokyo Sky Tree

身近なところでJNAが使われていますので、その

ソースを参考に。

Page 31: Tokyo Sky Tree

それは、数時間前に上原さんと中野さんが紹介さ

れた、

Page 32: Tokyo Sky Tree

GroovyServ

Page 33: Tokyo Sky Tree

です。

Page 34: Tokyo Sky Tree

中野さんが少し説明されましたが、

Page 35: Tokyo Sky Tree

気にしない、気にしない。

Page 36: Tokyo Sky Tree

まずは、ネイティブ・ライブラリのインタフェースとなるJavaのInteface

です。

Page 37: Tokyo Sky Tree

import com.sun.jna.Libraryimport com.sun.jna.Nativeimport com.sun.jna.Platform

interface CLibrary extends Library { String libname = (Platform.isWindows() ? "msvcrt" : "c") CLibrary INSTANCE = Native.loadLibrary(libname, CLibrary.class) int chdir(String dir) int _chdir(String dir)}

Page 38: Tokyo Sky Tree

ネイティブ・ライブラリをロードします。プラットフォームに応じてロードするライブラリ名を変えています。

String libname = (Platform.isWindows() ? "msvcrt" : "c")CLibrary INSTANCE = Native.loadLibrary(libname, CLibrary.class)

Page 39: Tokyo Sky Tree

システムコールなどをマッピングします。プラットフォームごとに名前が異

なるので、別々に定義します。

int chdir(String dir) // UNIX系int _chdir(String dir) // Windows

Page 40: Tokyo Sky Tree

マッピングでは、名前と型をJavaにあわせます。

// UNIX系・システムコールint chdir(const char *path);   ↓int chdir(String path);

Page 41: Tokyo Sky Tree

次は、呼び出す側のソースです。

Page 42: Tokyo Sky Tree

class PlatformMethods { static chdir(String dir) { if (Platform.isWindows()) { CLibrary.INSTANCE._chdir(dir) } else { CLibrary.INSTANCE.chdir(dir) } }}

Page 43: Tokyo Sky Tree

プラットフォームに応じて呼び出すメソッドを変えています。

if (Platform.isWindows()) { CLibrary.INSTANCE._chdir(dir) } else { CLibrary.INSTANCE.chdir(dir) }

Page 44: Tokyo Sky Tree

説明だけではアレですので、

Page 45: Tokyo Sky Tree

JNAを使ったデモします。

Page 46: Tokyo Sky Tree

このデモでは、以前Twitter上で

Page 47: Tokyo Sky Tree
Page 48: Tokyo Sky Tree

と募集したところ、

Page 49: Tokyo Sky Tree

やさぐれ番長さんから

Page 50: Tokyo Sky Tree

...噛みました...

Page 51: Tokyo Sky Tree

やさぐれ番長@bikisukeさんから

Page 52: Tokyo Sky Tree
Page 53: Tokyo Sky Tree

と、ムチャぶりが、

Page 54: Tokyo Sky Tree

...噛みました...

Page 55: Tokyo Sky Tree

と、ムチャぶりリクエストがありましたが、

Page 56: Tokyo Sky Tree

少しだけリクエストに答えたいと思います。

Page 57: Tokyo Sky Tree

(デモ中)

Page 58: Tokyo Sky Tree

照れるので、代わりに語ってもらいました。

Page 59: Tokyo Sky Tree

大事なことなので二回語ってもらいました。

Page 60: Tokyo Sky Tree

デモの説明をします。

Page 61: Tokyo Sky Tree

Webブラウザからサーバに、文字列を送信しま

す。

Page 62: Tokyo Sky Tree

サーバで次のことをします。

●送られてきた文字列を形態素解析し、音声記号列を生成●音声記号列から音声合成(WAV)●WAVデータをクライアントに返す

Page 63: Tokyo Sky Tree

WebブラウザでWAVデータを再生

Page 64: Tokyo Sky Tree

デモの構成

Page 65: Tokyo Sky Tree

WebアプリGrails 1.3.3(Tomcat)

Page 66: Tokyo Sky Tree

形態素解析Sen + IPA辞書

Page 67: Tokyo Sky Tree

音声合成AquesTalk2

●非営利の個人利用は無償●複数のプラットフォームに対応(Windows, Linux, Mac, iPhone, Android)

Page 68: Tokyo Sky Tree

WAVデータ再生Firefox + HTML5のAudioクラス

FlashとかAppletとかは使ってません。

Page 69: Tokyo Sky Tree

AquesTalk2(ネイティブ・ライブラリ)の呼び出し

JNA

Page 70: Tokyo Sky Tree

ちなみに「形態素解析 + 音声合成」は、Grailsプラグイン化しています。

Page 71: Tokyo Sky Tree

今後は、

Page 72: Tokyo Sky Tree

↓この人にも対応したいです。

Page 73: Tokyo Sky Tree

と、いうわけで、まとめ的な。

Page 74: Tokyo Sky Tree

Javaからネイティブ・ライブラリを使うようなこ

とがあれば、

Page 75: Tokyo Sky Tree

ポインタ、ポインタのポインタ、参照渡し、構造体、共用体、関数ポインタ、などなど、いろいろ

とありますが、

Page 76: Tokyo Sky Tree

JNAを検討してみてください。

Page 77: Tokyo Sky Tree

以上、ご清聴ありがとうございました。