2次元コードを読み取るサンプルアプリを作ってみた

2次元コードを読み取るサンプルアプリを作ってみた

2026.01.29

概要

こんにちは、クラスメソッド製造ビジネステクノロジー部の田中聖也です。
QRコードって生活の様々な場面で見かけるようになりましたよね。
工場内の業務においてもQRコードは大活躍しています。
実はQRコードには仲間がいて、QRコードも2次元コードというカテゴリの1つなんです。
今回は様々な種類の2次元コードを読み込めるアプリを作成してみました。

バーコードと2次元コードについて

バーコードと2次元コードの違い

種類 一般名称 データの持ち方 特徴
1次元 バーコード 横方向のみ 縞模様(バーとスペース)の幅で情報を表現。情報量は少ない(数文字〜20文字程度)
2次元 2次元コード 縦と横の両方 ドット(点)やセル(四角)の配列で情報を表現。情報量が圧倒的に多い(数千文字)

Barcode_sample
QRcode_sample

2次元コードの種類

特徴 フルQRコード マイクロQRコード データマトリクス
データ容量 中~大
製造業での用途 現品票、かんばん、棚札、梱包段ボールへのラベル貼り 極小の電子部品、プリント基板、小型工具 金属部品への直接刻印(DPM)、半導体ウェハー、医療機器

2d_code_pic

作ってみた

こちらのリポジトリをcloneしてcdk deployすれば完成します。

CDK

stack.ts
import * as cdk from 'aws-cdk-lib'
import * as s3 from 'aws-cdk-lib/aws-s3'
import * as cloudfront from 'aws-cdk-lib/aws-cloudfront'
import * as origins from 'aws-cdk-lib/aws-cloudfront-origins'
import * as s3deploy from 'aws-cdk-lib/aws-s3-deployment'
import { Construct } from 'constructs'
import * as path from 'path'

export class InfraStack extends cdk.Stack {
  constructor(scope: Construct, id: string, props?: cdk.StackProps) {
    super(scope, id, props)

    // S3バケット(静的ウェブサイトホスティング用)
    const websiteBucket = new s3.Bucket(this, 'WebsiteBucket', {
      removalPolicy: cdk.RemovalPolicy.DESTROY,
      autoDeleteObjects: true,
      blockPublicAccess: s3.BlockPublicAccess.BLOCK_ALL,
    })

    // CloudFrontディストリビューション(OACでS3にアクセス)
    const distribution = new cloudfront.Distribution(this, 'Distribution', {
      defaultBehavior: {
        origin: origins.S3BucketOrigin.withOriginAccessControl(websiteBucket),
        viewerProtocolPolicy: cloudfront.ViewerProtocolPolicy.REDIRECT_TO_HTTPS,
        cachePolicy: cloudfront.CachePolicy.CACHING_OPTIMIZED,
      },
      defaultRootObject: 'index.html',
      // SPAのためのエラーページ設定
      errorResponses: [
        {
          httpStatus: 403,
          responseHttpStatus: 200,
          responsePagePath: '/index.html',
          ttl: cdk.Duration.minutes(5),
        },
        {
          httpStatus: 404,
          responseHttpStatus: 200,
          responsePagePath: '/index.html',
          ttl: cdk.Duration.minutes(5),
        },
      ],
    })

    // フロントエンドのビルド成果物をS3にデプロイ
    new s3deploy.BucketDeployment(this, 'DeployWebsite', {
      sources: [s3deploy.Source.asset(path.join(__dirname, '../../frontend/dist'))],
      destinationBucket: websiteBucket,
      distribution,
      distributionPaths: ['/*'],
    })

    // 出力
    new cdk.CfnOutput(this, 'DistributionDomainName', {
      value: distribution.distributionDomainName,
      description: 'CloudFront Distribution Domain Name',
    })

    new cdk.CfnOutput(this, 'DistributionId', {
      value: distribution.distributionId,
      description: 'CloudFront Distribution ID',
    })

    new cdk.CfnOutput(this, 'WebsiteURL', {
      value: `https://${distribution.distributionDomainName}`,
      description: 'Website URL',
    })
  }
}

動作確認

このアプリには以下、4つのモードがあります。

  • 自動: データマトリクス、フルQR、マイクロQRを識別して読み取り
  • データマトリクス:データマトリクスだけを読み取り
  • フルQR:フルQRだけを読み取り
  • マイクロQR:マイクロQRだけを読み取り

自動

しっかりと3種類読み取れていることが確認できます
auto_datamatrix
auto_fullQR
auto_microQR

データマトリクスモード

データマトリクスをきちんと読み取れています
datamatrix_datamatrix
フルQRとマイクロQRは読み込めていないことが確認できます
datamatrix_fullQR
datamatrix_microQR

このアプリの用途

2次元コードの読み取り速度は端末側のカメラ性能が大きく関係するので、端末による読み取り速度を評価したい時に使用してみてください!!

この記事をシェアする

FacebookHatena blogX

関連記事