
2次元コードを読み取るサンプルアプリを作ってみた
2026.01.29
概要
こんにちは、クラスメソッド製造ビジネステクノロジー部の田中聖也です。
QRコードって生活の様々な場面で見かけるようになりましたよね。
工場内の業務においてもQRコードは大活躍しています。
実はQRコードには仲間がいて、QRコードも2次元コードというカテゴリの1つなんです。
今回は様々な種類の2次元コードを読み込めるアプリを作成してみました。
バーコードと2次元コードについて
バーコードと2次元コードの違い
| 種類 | 一般名称 | データの持ち方 | 特徴 |
|---|---|---|---|
| 1次元 | バーコード | 横方向のみ | 縞模様(バーとスペース)の幅で情報を表現。情報量は少ない(数文字〜20文字程度) |
| 2次元 | 2次元コード | 縦と横の両方 | ドット(点)やセル(四角)の配列で情報を表現。情報量が圧倒的に多い(数千文字) |


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

作ってみた
こちらのリポジトリを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種類読み取れていることが確認できます



データマトリクスモード
データマトリクスをきちんと読み取れています

フルQRとマイクロQRは読み込めていないことが確認できます


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







