2次元バーコードとフリーソフトウェア

 符号化されたメッセージをカメラ付き携帯電話などの携帯機器を使って光学的に読み取ることができる、ラベルなどの実世界の物に印刷された、碁盤の目状の白黒のマトリックスをおそらく目にしたことがあるはずだ。そのような、いわゆる「二次元バーコード」はますます普及してきてはいるものの、Linuxやフリーソフトウェアではまだすんなりとは取り扱うことはできない。とは言え嬉しいことに二次元コードの読み取りや生成を行うことができるオープンソースソフトウェアもいくつか存在する。

 あいにく世の中では数十種類の二次元コードの形式が利用されている。それらの形式は、技術的な観点からスタックコードとマトリックスコードの2種類に大きく分けることができる。スタックコードは従来の1次元バーコード(小売り商品のパッケージに付いているUPC式など)に似ているが、情報が縦に数段重ねられている。白黒の線が細長く伸びているので見掛け的には1次元バーコードに似ている。一方マトリックスコードは、細長い線ではなく四角形や丸形の点を使って情報を符号化しているものが多い。もっともよくあるマトリックスの形式は白黒の四角形が格子状に並んだ四角形だが、六角形や折れ線状のものやカラーのパターンを使ったものなど様々なバリエーションもある。

 マトリックスコード形式のほとんどには、コードを読み取るソフトウェアが上下の向きの判定に使用することができるマーカーがマトリックスの中に含まれているので、向きを気にする必要がないという特徴がある。しかし難点としては、マトリックスコードを読み取るためにマトリックス全体を一度で読み取ることのできるカメラが通常は必要になるということがある。対照的にスタックコードの多くでは一度に一行分ずつ読み取ることができれば十分なので、より安価なレーザースキャナを利用することができる。

 Wikipediaのバーコードについての記事では、2次元バーコードの現在使用されている形式と過去に使用されていた形式のリストを見ることができるが、あまり詳細な情報はない。より詳しく知りたい場合には、各形式の特許をめぐる状況やオープンさなど重要な情報も紹介されているRuss Adams氏による詳細な説明を参考にすると良いだろう。ほとんどの形式はプロプライエタリで、一企業による特許の管理下にある。そのような企業は多くの場合、在庫管理/透かし/データのアーカイブを行う自社形式に基づいたオールインワンのソリューションを販売している。例えばXeroxのDataglyphは、ダイレクトメールや「匿名」アンケートなどで追跡のためのコードを隠すことができるように、印刷された文書の背景に調和して溶け込むように作られている。

 スタックコードのCode 16KやCode 49やUPSのマトリックスコードであるMaxiCode(中央に同心円があるのが特徴)など特許期間が過ぎている古いコードもいくつかあるが、Aztec Code(中央に何重かになっている正方形があるのが特徴)やSupercodeやUltracodeなどのより新しい形式は、特許が取得されているものの仕様が公開されていてAIM(Association for Automatic Identification and Mobility)をはじめとする複数の標準化組織から仕様を購入することができる。

 標準の承認プロセスには長い時間がかかる場合が多いことと、知的所有権が要求する内容が組織ごとに異なることから、特許が取得されている各標準を特許ライセンスを購入せずに実装しても良いのかどうかは個々の場合によって異なる。

 とは言え嬉しいことにもっとも良く使用されている3つの形式の利用条件は複雑ではなく、フリーソフトウェアでのサポートもより優れている。PDF417は数々の形式の中でも最古参の形式だ。スタックコード形式で、米郵政公社やFedExなど多くの宛名ラベルに見ることができる。なお名前が似ているが、PDF417はAdobeのPortable Document Formatとは関係はない。PDF417に関連する標準規格であるMicroPDF417はPDF417を単純化した形式で、PDF417よりも少ない文字セットを使用していて、狭い場所に向いたより小さなコードを生成することができる。なおPDF417をパブリックドメインとすることを示したプレスリリースがPDF417を作成したSymbol Technologiesから2004年に発行されている。

重要な形式

qrcode1.jpg
DM(Data Matrix)

 PDF417は業務利用として非常に普及しているが、今日もっともトレンディな形式は間違いなくDM(Data Matrix)QR(Quick Response)コードだ。携帯電話のカメラで撮影するように呼び掛けている2次元コードを広告などで見掛けたなら、それはDMかQRコードのどちらかである可能性が高い。

qrcode2.jpg
QRコード

 DMもQRコードも白黒の格子状のマトリックスコードで、縦横に並べた四角形を使用して情報を符号化している。DMとQRコードとは、向きを表わすためのパターンで見分けることができる。DMのコードには、L字型を形成する黒一色の隣り合う2辺と、白黒が交互になっている隣り合う2辺とがある。QRコードには枠はないが、3つの角に一つずつ、目立つ二重の四角形があるのが特徴だ。

 DMはエンジニアリング企業の大手Siemensの子会社によって作成されたもので、集積回路などの小さな電子部品に印をつけるためによく使われている。DM形式で使用されている技術の特許保護期間はすでに切れている。一方QRコードは日本のデンソーウェーブが作成して特許を所有しているが、同社は特許権の行使はするつもりがないということを公に発表している。QRコードは元々は製造現場で利用されていたもので、主に日本で普及しているが世界中に進出している最中だ。

 DMもQRコードもマトリックス形式なので、最近非常に普及しつつあるカメラ付き携帯電話で簡単に読み取ることができる。またサイズがコンパクトのため、URLや電子メールアドレスを符号化して自動的にモバイルブラウザやメールクライアントに渡すのに便利だ。

 DMとQRコードのデータ量は、たいていの形式の場合と同じように符号化する文字集合に左右されるが、どちらも非常に情報がぎっしりと詰まっている。PDF417で符号化できる英数字が約1,800文字であるのに対して、DMでは2,335文字、QRコードでは最大4,296文字まで符号化することができる。またDMでもQRコードでも柔軟なエラー訂正を利用することができるので、印刷されたコードにページのひっかき傷やしみや汚れに対する強い抵抗力を持たせることができる。

コードを作成する

 2次元バーコードにはさまざまな活用方法があるが、自分のウェブサイトのURLを表わすコードを生成して看板にして家の屋根に掲げたり、Tシャツに刺繍したりしたいといった場合なら、もっとも簡単な方法は数多くある無料のオンラインユーティリティを利用することだ。そのようなユーティリティの多くはKaywaやNokiaなど携帯電話で読み取り可能なコードの普及を目指す企業によって提供されているものだが、中にはinvx.comBarcode Writer in Pure Postscriptなど非営利のものもある。

qrcode3_thumb.jpg
JaxoのJavaアプリケーション

 ウェブ上のユーティリティのほとんどはDMかQRコードのみを取り扱っているが、それ以外のコードを取り扱うユーティリティもいくつかある。例えばBarcode Writer in Pure PostscriptとTec-itは比較的珍しいことにMaxiCodeを生成することができる。複数のコード生成ユーティリティを試してみればすぐに分かることだが、同じ文字列で同じ形式を使っても異なる結果になることがある。これは多様なエラー訂正オプションが存在するためだ。

 一方、日常的に多くの新しいコードを生成する人には嬉しいことに、デスクトップLinux用のGUIアプリケーションでもバーコード生成機能が実装され始めている。Barcode4JはオープンソースのJavaアプリケーションで、1次元バーコードとPDF417やDMなどの2次元バーコードとを生成することができる。またJaxoは無料だがクローズドソースのJavaアプリケーションで、DM、QRコード、PDF417、Aztec Codeのコードを生成することができ、各形式のオプション機能の多くを利用することもできる。一方Snapmaze.comが提供するFirefox用プラグインを使用すれば、閲覧中のページのURLのQRコードを即座に生成することができる。さらにScribusとKBarcodeにはBarcode Writer in Pure Postscript用のラッパーが含まれるようになったので、印刷用のDMとQRコードを出力することができるようになった。

 以上の他にもコマンドラインで利用可能なプログラムもあるが、この分野の活発なオープンソースプロジェクトのほとんどはライブラリだ。中には単純なCLIツールを持つものもあるが、上述したGUIプログラムで提供されている以外のコード生成を行うものはない。それでもアプリケーションにバーコード生成機能を統合したい開発者なら、DM用のlibdmtx、PDF417用のpdf417_encode、QR Code用のqrencode、それら3つのすべてとそれ以外のコードも扱うライブラリのZintを試してみると良いだろう。

コードを読み取る

 バーコード生成用のプログラムはあり余るほどあるものの、バーコードの認識を行うフリーソフトウェアについてはそれほど盛況ではない。まず第一に、バーコードはオフラインで配布される情報を符号化するためのものなので、既存のDMとQRコードの読み取りアプリケーションはたいてい携帯電話向けに構築されているということがある。

 SymbianのデバイスやJ2ME(Java Micro Edition)を利用することができる携帯電話を持っている場合には、無料(ただしクローズドソース)のバーコード読み取りソフトウェアはそれほど探さなくても入手することができる。QRコードやDMの生成を行うことができるウェブページを提供している企業は、携帯電話用のQRコードやDMの独自の読み取りアプリケーションも無料でリリースしていることが多い。ほぼすべてのJ2ME携帯電話が、Kaywa、Nokia、UpCodei-nigma、NeoReaderの無料の読み取りソフトウェアのどれかでサポートされているはずだ。ただし読み取りソフトウェアがDMやQRコードをサポートしていることと、復号化した内容についての利用に制限がないことを確認しておく必要がある。

 ここ何年間かでJ2MEのオープンソースの読み取りプロジェクトはいくつか――例えばdmsymbianやpda-barcodeなど――が登場したが、利用可能なパッケージをリリースするところまでは到達しなかった。QRcode(qrencodeとは名前が似ているが別物)は現在も活発だが、扱っているのはQRコードのみだ。QRcodeでは「reader」というアプリケーションが提供されているが、サンプルアプリケーションとしての提供となっている。また、日本語ができなければサポートを得るのが難しいかもしれない。

 現時点でもっとも将来的な見込みがあると思われる開発プロジェクトは、オープンソースのJavaベースのコード読み取りソフトウェアで、動作可能な版のリリースにまで漕ぎ着けたZXingだ。ZXingのダウンロードのページには、ダウンロード可能な読み取りパッケージへのリンク――読み取りソフトウェアを携帯電話に直接ダウンロードすることができるモバイル用のウェブのリンクもある――と、最新リリースがサポートしている携帯電話のモデルのリストがある。ほとんどはSony EricssonとNokiaのモデルだが、署名なしのアプリケーションを実行できる携帯電話である必要があるようだ。

 ZXingのJavaの読み取りソフトウェアはデスクトップLinux上でも利用することができるようになるだろうが、今のところはまだ見栄えのするユーザフレンドリなアプリケーションではない。DMやQRコードの生成の場合と同様に、大量のバーコードを読み取る必要があるのでなければ、数多くある無料のウェブアプリケーションのどれかを利用するのがもっとも簡単な方法だろう。

 より問題なのは、現時点では携帯機器用のLinuxプラットフォーム――OpenMoko、Maemo、GPE、その他様々なLinuxベースの商用携帯電話――用のフリーなバーコード読み取りアプリケーションがないことだ。しかしこれらのプラットフォームで堅固なJava環境が利用可能になればその瞬間から、正式にサポートされていなかったとしても、プロプライエタリな携帯電話用プラットフォームで利用可能なJ2MEベースのバーコード読み取りソフトウェアがすべて利用可能になるだろう。ZXingプロジェクトによると同プロジェクトでは現在、Googleが提案している携帯電話用プラットフォームでJavaも統合される予定のAndroid用のビルドに取り組んでいるとのことだが、当然ながら、Androidベースの携帯機器が市場に出回るようになるのがいつになるのかについてや、他のモバイルLinuxソフトウェア環境に対してAndroidがどれほど成功するのかについてはまだ不明だ。

今後

 QRコードは広告内に含めることが簡単にできるために日本では爆発的に普及していると報告されている。したがって今後数ヵ月から数年の間に、2次元バーコードの同様の普及を世界中でも見ることになる可能性はある。ただし日本のモバイルデバイス文化が世界の他の多くの地域よりも進んでいて(例えば自動販売機での少額決済など)、他の地域の市場ではまだそのような技術が広く普及してはいないということもある。

 DMとQRコードの形式が公開されていて、ZXingやBarcode4Jのようなオープンソースのプロジェクトにも利用することができるのは良い状況だ。現時点では2次元バーコードの利用はLinuxやフリーソフトウェアユーザにとってはすんなりとは取り扱うことができないかもしれないが、今後2次元バーコードが真に広く普及した技術として成長していくのであれば、それらを利用するためのツールやノウハウはすべてすでに存在している。

様々なバーコード(読み取ってみよう)
qrcode4.jpg qrcode5.jpg qrcode6.jpg
Mystery symbol number one Mystery symbol number two Mystery symbol number three

Linux.com 原文