はじめに
この記事では、クリエイター向けECサイトPixiv Boothからダウンロードした売上CSVをトリガーにして、会計freeeに自動で取引を登録するサーバーレスアプリケーションの構築手順を解説します。
確定申告の時期に発生しがちな、大量の売上データの手入力作業から解放されることを目的としています。
対象読者
- AWSの基本的なサービス(S3, Lambda, IAM, Secrets Manager)の概要を理解している方
- Node.jsとnpmの基本的な知識がある方
- freee APIの利用経験がある、またはこれから利用したい方
アーキテクチャ
この自動化は、以下のAWSサービスを連携させて実現します。
- ユーザー: Pixiv Boothから売上CSVをダウンロードし、S3バケットにアップロードします。
- Amazon S3: ファイルのアップロードを検知し、Lambda関数を起動します。
-
AWS Lambda:
- S3からCSVファイルを取得・解析します。
- Secrets Managerから認証情報を取得します。
- freee APIから最新のアクセストークンと各種ID(勘定科目など)を取得します。
- 解析したデータに基づき、freeeに取引を登録します。
事前準備
- AWSアカウント
- freeeアカウント(開発者向けアプリ登録が可能なプラン)
- GitHubアカウント
- Node.js実行環境(ローカルでのカスタマイズやテスト用)
ステップ1: ソースコードの準備
本プロジェクトのソースコードはGitHubで公開しています。
まずはご自身のアカウントにフォークし、ローカルにクローンしてください。
git clone https://github.com/qryuu/booth-freee-automator-repo.git
cd booth-freee-automator-repo
主要なファイルは以下の通りです。
-
index.js
: Lambda関数のメインロジック -
package.json
: 依存するNode.jsライブラリの定義 -
buildspec.yml
: AWS CodeBuildでのビルド手順を定義 -
.gitignore
: Gitの管理対象外ファイルを定義
ステップ2: freeeの認証情報と基本IDの取得(一回だけ)
Lambda関数をセットアップするために、以下の情報を一度だけ手動で取得します。
2.1. freeeでアプリを登録
- freeeアプリストアにログインし、「アプリ管理」画面へ。
- 「新しいアプリを作成」をクリック。
- アプリ名などを入力し、コールバックURLに
urn:ietf:wg:oauth:2.0:oob
と入力。 -
権限設定で、以下のスコープにすべてチェックを入れます。
- 取引:
write_deals
,read_deals
- 口座:
read_walletables
- 事業所:
read_companies
- 勘定科目:
read_account_items
- 税区分:
read_taxes
- 取引:
- アプリを保存し、表示されるClient IDとClient Secretを控えます。
2.2. 初回トークンと各種IDの取得 (CloudShell利用)
Windows環境などでのcurl
コマンドの差異をなくすため、AWS CloudShellの利用を推奨します。
- AWSマネジメントコンソールからCloudShellを起動します。
-
認可コードの取得:
- 以下のURLの
<YOUR_CLIENT_ID>
をご自身のClient IDに置き換え、ブラウザでアクセスします。
https://accounts.secure.freee.co.jp/public_api/authorize?client_id=<YOUR_CLIENT_ID>&redirect_uri=urn:ietf:wg:oauth:2.0:oob&response_type=code
- 画面の指示に従って連携を許可し、表示された認可コードをコピーします。
- 以下のURLの
-
トークンの取得:
- CloudShellで、以下の
curl
コマンドの各<...>
をご自身の情報に置き換えて実行し、**access_token
とrefresh_token
**を取得します。
- CloudShellで、以下の
curl -X POST -H "Content-Type: application/x-www-form-urlencoded" \
-d "grant_type=authorization_code" \
-d "client_id=<YOUR_CLIENT_ID>" \
-d "client_secret=<YOUR_CLIENT_SECRET>" \
-d "code=<YOUR_AUTHORIZATION_CODE>" \
-d "redirect_uri=urn:ietf:wg:oauth:2.0:oob" \
https://accounts.secure.freee.co.jp/public_api/token
-
事業者IDの取得:
- 取得した
access_token
を使い、CloudShellで以下のコマンドを実行して 事業者ID (company_id
) を取得します。
- 取得した
curl -H "Authorization: Bearer <YOUR_ACCESS_TOKEN>" https://api.freee.co.jp/api/1/companies
-
口座IDの取得:
- freeeのUIで、事前に「口座」>「口座の一覧・登録」から「決済サービス・電子マネー」としてPixiv Booth用の口座を作成しておきます。
- 取得した
access_token
とcompany_id
を使い、以下のコマンドを実行します。実行結果の中から、作成した Pixiv Booth用の口座 を探し、そのid
を控えます。
curl -H "Authorization: Bearer <YOUR_ACCESS_TOKEN>" "https://api.freee.co.jp/api/1/walletables?company_id=<YOUR_COMPANY_ID>"
ステップ3: AWSインフラの構築
3.1. Secrets Managerに機密情報を保管
- AWSコンソールで Secrets Manager を開きます。
- 「新しいシークレットを保存する」 をクリックし、「その他のシークレットのタイプ」を選択します。
-
「キー/値」タブで、以下のキーと、ステップ2で取得した値を設定します。
FREEE_CLIENT_ID
FREEE_CLIENT_SECRET
FREEE_REFRESH_TOKEN
FREEE_COMPANY_ID
FREEE_WALLETABLE_ID
-
シークレット名に
booth-freee-automator/credentials
と入力して保存し、作成されたシークレットのARNをコピーしておきます。
3.2. S3バケットを作成
CSVファイルをアップロードするためのS3バケットを、ユニークな名前で作成します。
3.3. CodeBuildプロジェクトを作成
- AWSコンソールでCodeBuildを開き、ビルドプロジェクトを作成します。
- ソースとして、ステップ1で準備したご自身のGitHubリポジトリと連携させます。
-
環境は
Amazon Linux 2023
のStandard
イメージを選択します。 -
アーティファクトで、タイプを
Amazon S3
に設定し、3.2で作成したS3バケットを指定します。 - 作成されたCodeBuildのサービスロールに、IAMコンソールから
AmazonS3FullAccess
(またはより制限されたポリシー)とAWSCodeBuildAdminAccess
ポリシーをアタッチします。
3.4. Lambda関数を作成・設定
- AWSコンソールでLambdaを開き、
Node.js 20.x
ランタイムで新しい関数を作成します。 -
IAMロールへの権限追加:
- Lambdaの実行ロールに、Secrets Managerの読み書き (
GetSecretValue
,UpdateSecret
)と、S3バケットの読み取り (GetObject
) を許可するインラインポリシーを追加します。
- Lambdaの実行ロールに、Secrets Managerの読み書き (
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [ "secretsmanager:GetSecretValue", "secretsmanager:UpdateSecret" ],
"Resource": "YOUR_SECRET_ARN"
},
{
"Effect": "Allow",
"Action": "s3:GetObject",
"Resource": "arn:aws:s3:::YOUR_BUCKET_NAME/*"
}
]
}
-
基本設定の調整:
- 「一般設定」でメモリを
1024MB
、タイムアウトを30秒
程度に設定します。
- 「一般設定」でメモリを
ステップ4: ビルドとデプロイ
- ローカルのソースコードをGitHubにプッシュします。
- AWS CodeBuildプロジェクトの画面で 「ビルドを開始」 します。
- ビルドが成功すると、アーティファクト用のS3バケットに
deployment.zip
が作成されます。 - Lambda関数の「コード」タブで、「アップロード元」>「Amazon S3 の場所」を選択します。
- 「S3のURL」入力欄に、CodeBuildがS3に出力した
deployment.zip
の オブジェクトURI(例:s3://your-bucket.s3.region.amazonaws.com/deployment.zip
)を貼り付けて保存します。
ステップ5: 実行と確認
- Pixiv Boothからダウンロードした売上CSVを、CSVアップロード用に作成したS3バケットにアップロードします。
- アップロードが完了すると、自動的にLambda関数が実行されます。
- freeeにログインし、取引が正しく登録されていることを確認してください。
以上で、すべてのセットアップは完了です。
追記: v1.1.0 - Node.js 22 ランタイムへのアップデート手順
AWS LambdaのNode.js 20.xランタイムは2026年4月にサポートが終了(EOL)する予定です。
このプロジェクトを長期的に安定してご利用いただくため、ランタイムを最新のLTSバージョンであるNode.js 22.xにアップデートする手順を記載します。
既存のv1.0.0環境を構築済みの方は、お手数ですが以下の手順でアップデートをお願いいたします。
アップデート手順の概要
-
ソースコードの更新:
buildspec.yml
とpackage.json
を修正し、Node.js 22に対応させます。また、index.js
を修正し、テストと本番環境の切り替えを容易にします。 -
変更のデプロイ: 更新したコードをGitHubにプッシュし、CodeBuildで新しい
deployment.zip
をビルドします。 - Lambda関数の設定更新: Lambdaコンソールの画面で、ランタイムのバージョンアップと、新しい設定(環境変数)の追加、そして最新のコードへの更新を行います。
1. ソースコードの更新
1.1. buildspec.ymlの修正
CodeBuildがビルド時に使用するNode.jsのバージョンを更新します。
version: 0.2
phases:
install:
runtime-versions:
# Node.jsのバージョンを22に更新
nodejs: 22
build:
# ... (以下変更なし)
1.2. 依存ライブラリの更新
Node.jsのメジャーバージョンアップに伴い、依存しているライブラリも最新版に更新します。ローカルのプロジェクトディレクトリで以下のコマンドを実行してください。
npm update
これにより、package.json
とpackage-lock.json
が更新されます。
1.3. index.jsの修正
v1.1.0から、参照するSecrets Managerのシークレット名を環境変数経由で指定するように変更しました。これにより、テスト環境と本番環境の切り替えが容易になります。
// index.js
// 変更前
// const SECRET_NAME = "booth-freee-automator/credentials";
// 変更後
const SECRET_NAME = process.env.SECRET_NAME;
2. 変更のデプロイ
- 更新した
buildspec.yml
,package.json
,package-lock.json
,index.js
をコミットし、GitHubリポジトリにプッシュします。
git add .
git commit -m "feat: Update runtime to Node.js 22 and dependencies"
git push
- 設定済みのCI/CDパイプラインが自動的に実行され、CodeBuildによって新しい
deployment.zip
がS3バケットにアップロードされます。
3. Lambda関数の設定更新
3.1. ランタイムの更新
-
AWS Lambdaコンソールにログインし、対象の関数(例:
booth-freee-automator
)を開きます。 - 「コード」タブ > **「ランタイム設定」**の「編集」をクリックします。
- 「ランタイム」の項目を、「Node.js 20.x」から「Node.js 22.x」に変更して「保存」します。
3.2. ★重要★ 環境変数の設定
- 「設定」タブ > **「環境変数」**に移動し、「編集」をクリックします。
- **「環境変数を追加」**し、以下のように設定して「保存」します。
-
キー:
SECRET_NAME
-
値:
booth-freee-automator/credentials
(本番用のシークレット名)
-
キー:
3.3. コードのデプロイ
- 「コード」タブに戻り、「アップロード元」>「Amazon S3 の場所」を選択します。
- CodeBuildがS3に出力した、最新の
deployment.zip
のオブジェクトURLを貼り付けて「保存」します。
以上でアップデートは完了です。
これにより、今後も長く安全にこの自動化システムをご利用いただけます。