Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
UBICの食材管理APIを作った話
Search
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
Yuto Takamune
January 30, 2022
Programming
260
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
380
RustのLINEBot SDKを自作した話
shinbunbun_
0
2.5k
セキュリティキャンプ2023 Y3分散合意ゼミ 最終発表
shinbunbun_
0
5k
NixOSでもご自宅k8sがしたい!
shinbunbun_
2
5.1k
カーネルレベルでTwitterを禁止しよう
shinbunbun_
0
310
CRDTで始めるコンフリクトしないデータ同期
shinbunbun_
0
700
Haskell初心者がHaskellの楽しさについて語る
shinbunbun_
0
240
Rustで楕円曲線暗号の署名アルゴリズムをフルスクラッチ実装してみた話
shinbunbun_
0
2.4k
IEEE802.1X認証を導入してみた
shinbunbun_
0
340
Other Decks in Programming
See All in Programming
属人化した知識を、 AIが辿れる地図にする
pkshadeck
PRO
1
170
これって Effect でできたのでは? / TSKaigi Mashup Kansai #2
susisu
0
150
Claude CodeとAgentCore Gatewayを繋ぐ際の認証認可 / Authentication and authorization when connecting Claude Code with AgentCore Gateway
har1101
2
270
Built Our Own Background Agent at LayerX
layerx
PRO
10
5.3k
OpenSpecのproposalにbrainstormingを持たせてみた
tigertora7571
1
220
全PRの83%がAIレビューだけでマージできるようになった開発組織はその後どうなったか
athug
1
1.6k
<title><a id="</title>君はこのHTMLをパースできるか"></a></title> #雑LT_study
pizzacat83
0
140
PHP初心者セッション2026 〜生成AIでは見えない裏側を知る:今だからLAMPを通して仕組みを学ぶ〜
kashioka
0
890
Laravel Boostに学ぶ、AIにPHPを書かせる技術 〜OSSの実装から蒸留するエージェント制御の王道〜
kentaroutakeda
3
680
「人を評価する AI」の設計と実装
ryoyanara
0
190
Go 1.27 における memory allocation の高速化
andpad
0
150
SlackアプリとLambdaの 連携を構築した話
pawn_4_s
1
110
Featured
See All Featured
DevOps and Value Stream Thinking: Enabling flow, efficiency and business value
helenjbeal
1
320
WCS-LA-2024
lcolladotor
0
790
実際に使うSQLの書き方 徹底解説 / pgcon21j-tutorial
soudai
PRO
201
75k
Building the Perfect Custom Keyboard
takai
2
840
Tell your own story through comics
letsgokoyo
1
1k
The Impact of AI in SEO - AI Overviews June 2024 Edition
aleyda
5
1.2k
How to Build an AI Search Optimization Roadmap - Criteria and Steps to Take #SEOIRL
aleyda
1
2.1k
Practical Tips for Bootstrapping Information Extraction Pipelines
honnibal
25
2k
How to make the Groovebox
asonas
2
2.3k
Helping Users Find Their Own Way: Creating Modern Search Experiences
danielanewman
31
3.3k
XXLCSS - How to scale CSS and keep your sanity
sugarenia
249
1.3M
YesSQL, Process and Tooling at Scale
rocio
174
15k
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実装フラグ...?
あーした