Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
UBICの食材管理APIを作った話
Search
Yuto Takamune
January 30, 2022
Programming
280
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
UBICの食材管理APIを作った話
https://youtu.be/0Et7c5GdodI
Yuto Takamune
January 30, 2022
More Decks by Yuto Takamune
See All by Yuto Takamune
GPT-3.5 Turbo をファインチューニングして自分のクローンを作った話
shinbunbun_
1
400
RustのLINEBot SDKを自作した話
shinbunbun_
0
2.6k
セキュリティキャンプ2023 Y3分散合意ゼミ 最終発表
shinbunbun_
0
5.1k
NixOSでもご自宅k8sがしたい!
shinbunbun_
2
5.2k
カーネルレベルでTwitterを禁止しよう
shinbunbun_
0
330
CRDTで始めるコンフリクトしないデータ同期
shinbunbun_
0
750
Haskell初心者がHaskellの楽しさについて語る
shinbunbun_
0
250
Rustで楕円曲線暗号の署名アルゴリズムをフルスクラッチ実装してみた話
shinbunbun_
0
2.5k
IEEE802.1X認証を導入してみた
shinbunbun_
0
350
Other Decks in Programming
See All in Programming
オーケストレーション記述言語 Katari
yukikurage
0
210
Optunaを作ったときにやりたかったこと、その後 (2026/10/16, Optuna Meetup #3)
iwiwi
4
1.4k
선언형 햅틱 라이브러리 진동을 소개합니다
l2hyunwoo
1
140
Kotlinの15年とServer-Side Kotlin
n_takehata
1
170
気持ちぃ〜角丸 Squircle
ryu1013
0
370
AI-Powered Domain-Driven Design
ziobrando
0
360
SODA - FACT BOOK(JP)
sodainc
1
40k
[2026-10-09]一枚の布で作らなくてもいい。 信頼性は「パッチワーク」で紡がれる~既存の運用と新しい可能性をつなぎ合わせてきたCREの話~
tosite
0
120
プロジェクトコードをキレイキレイしよう!暗黙的な参照を読み解く静的解析
ostk0069
0
190
contenteditable と日本語入力に向き合う
colorful12
0
230
우리의 Nitro Modules는 당신의 Turbo Modules보다 아름답다
l2hyunwoo
0
240
Spec-Driven Development - Why Vaadin Is the Perfect Fit
simas
PRO
0
190
Featured
See All Featured
Have SEOs Ruined the Internet? - User Awareness of SEO in 2025
akashhashmi
0
540
Exploring the Power of Turbo Streams & Action Cable | RailsConf2023
kevinliebholz
37
6.6k
Practical Tips for Bootstrapping Information Extraction Pipelines
honnibal
25
2.1k
Visualization
eitanlees
153
17k
SEOcharity - Dark patterns in SEO and UX: How to avoid them and build a more ethical web
sarafernandez
0
310
How to Ace a Technical Interview
jacobian
280
24k
Money Talks: Using Revenue to Get Sh*t Done
nikkihalliwell
0
540
Automating Front-end Workflow
addyosmani
1370
210k
Why You Should Never Use an ORM
jnunemaker
PRO
61
10k
Why Our Code Smells
bkeepers
PRO
340
58k
Effective software design: The role of men in debugging patriarchy in IT @ Voxxed Days AMS
baasie
1
590
Highjacked: Video Game Concept Design
rkendrick25
PRO
1
500
Transcript
UBICの食料管理APIを 作った話 会津大学一年 しんぶんぶん
自己紹介 • 人間 • 会津大学学部一年 • LINE API Expert ←
New! • 認証/アイデンティティ管理まわりが好き • 最近はGoでバックエンドを書いてる @shinbunbun_ ¥3993 マイナビ出版 ポートフォリオ(shinbunbun.info)
宣伝 • ZliTechBook V2 • ぎじゅつしょてんで販売中 • 自分はC 言語で実装する LINEBot
入門を書きました • 1冊500円
今回作ったもの • 大学にあるUBICという施設に備蓄してある食料を管理するAPIを 開発した • https://github.com/shinbunbun/ubic-food-management-api-v2
技術スタック • 言語: Go • クラウド: • AWS SAM(Lambda, API
Gateway) • DynamoDB • S3 • 認証: LINEログイン • その他使ったもの • Swagger, GitHub Actions, Mergify, Docker etc…
機能紹介 • Swagger見せます(一番早い) • https://github.com/shinbunbun/ubic-food-management-api-v2/blob/ main/swagger.yml • Postmanでデモします(時間あれば)
使用した技術の紹介
Swagger • OpenAPI Specに則ってRESTfulAPIを設計するためのフレーム ワーク • ymlを書くだけでAPIの仕様書を作ってくれる • Stoplight Studio使えばぽちぽちで作れる(後から知った)
• とても便利
None
AWS SAM • AWSでサーバレスアプリケーションを構築するためのフレーム ワーク • 今回SAMでやったこと • Lambdaの構築 •
Open APIからAPI Gatewayエンドポイント作成 • API Gatewayにドメイン割り当て • Lambda, API Gatewayにアタッチするロールの生成 • Lambda Authorizerの構築(後述) • ローカルでAPIを立ち上げる(後述) • GitHub Actionsからデプロイ
mergify • これは小ネタ • CIが通ると自動でmergeしてくれる便利なやつ
こだわった実装
ローカルでのテスト • Lambda, DynamoDB, S3を全てローカルで動かすことで、いちい ちデプロイしなくてもテストができるようにした • DynamoDBとS3はdocker-composeを書いた • 使用したimage
• DynamoDB: amazon/dynamodb-local • DynamoDB Admin: aaronshaf/dynamodb-admin • S3: localstack/localstack
DynamoDB dynamodb-local: container_name: dynamodb-local image: amazon/dynamodb-local:latest user: root command: -jar
DynamoDBLocal.jar -sharedDb -dbPath /data volumes: - dynamodb-local-data:/data ports: - 8000:8000 networks: - dynamodb-local-network dynamodb-admin: container_name: dynamodb-admin image: aaronshaf/dynamodb-admin:latest environment: - DYNAMO_ENDPOINT=dynamodb-local:8000 ports: - 8001:8001 depends_on: - dynamodb-local networks: - dynamodb-local-network
S3 localstack: container_name: localstack image: localstack/localstack environment: - SERVICES=s3 -
DEFAULT_REGION=ap-northeast-1 - DATA_DIR=/tmp/localstack/data ports: - 4566:4566 networks: - dynamodb-local-network
Lambda sam build sam local start-api --env-vars ./env.json --docker-network docker.internal
• 普通にbuildしてからlocalで実行 • 環境変数はjsonから読み込み • DynamoDB, S3と同じnetworkで立ち上げる
Integration test • (ほぼ)全てのAPIに対してテストを書いた • DynamoDBの操作もテストしたかったので、テスト用のダミーデー タをPutするシェルスクリプトを書いた • 同様の理由からテスト用のdocker-composeを書いた •
これに丸1日くらいかかった
CI/CD • 例の如くGitHub ActionsでCI/CDをまわす • 今回書いたのは以下の通り • pushしたとき • golangci-lint
• go test • sam build • mainにpushしたとき • sam deploy
go testとか結構大変 go-test: runs-on: ubuntu-latest steps: - uses: actions/checkout@v2 -
name: Up dynamodb & localstack run: docker-compose up -d dynamodb-local localstack working-directory: local_resource - name: Copy aws config run: cp -r ./.aws ~/ working-directory: local_resource - name: Create table run: sh create_table.sh working-directory: local_resource - name: Create bucket run: sh create_bucket.sh working-directory: local_resource - name: Add dummy data run: sh add_dummy_data.sh working-directory: local_resource - name: Run test run: docker-compose run go-test working-directory: local_resource 1. DynamoDBとS3のDockerを立ち上げる 2. ダミーのaws configを配置 3. DynamoDBのテーブルを作成 4. S3のバケットを作成 5. DynamoDBにテスト用のデータをPut 6. ようやくテストがまわせる
LINEログイン • 例の如くJWTの検証とかを楽しく実装 • この辺語り出すと無限に時間がとけるので、また今度ひたすらロ グインについて語るLTをします
Lambda Authorizer • JWTの検証処理をLambda Authorizerに書いた • 認証するかしないかもOpen APIで定義できるのでとても便利
今後の展望 • LINEログイン用のエンドポイントに対してもテストを書きたい • 正常終了以外のAPIテストを書きたい • Unit testちゃんと書きたい • DIしたい
• Lambda関数を適切に切り分けたい • 誰でも使えるOSSの在庫管理ツールにしたい • LINEログインのRPをちゃんとフルスクラッチで実装したい • base64とかsha256とかライブラリ使ってるのが気に食わない • これはC言語でLINEログインRP実装フラグ...?
あーした