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
未知のプログラミング言語にChatGPTと共に挑む
Search
yudppp
July 20, 2023
Technology
0
310
未知のプログラミング言語にChatGPTと共に挑む
DROBE Engineer Night #4 LLM in PracticeのLT資料です
yudppp
July 20, 2023
Tweet
Share
More Decks by yudppp
See All by yudppp
SaaSフロントエンド開発の現場で求められる技術 / Technologies for SaaS Frontend Development in the Field
yudppp
2
98
2019年 HRBrainの技術的挑戦 / hrbain technology challenge 2019
yudppp
3
1.2k
Web開発を支えるマイグレーションツールについて / sqldef introduction for psql users
yudppp
2
3.1k
ISUCON向けのツールを作った話 / isutools
yudppp
1
230
Row Level Securityはマルチテナントの銀の弾丸になりうるのか / Row Level Security is silver bullet for multitenancy?
yudppp
20
24k
Webサービス開発に必要な統計学入門 / study of statistics for web developers
yudppp
1
240
メジャーな Live Reloaderの違いをちゃんと調べて見た / Compare major live reloader of Go
yudppp
1
1.8k
今年お世話になったnpm module
yudppp
1
860
Goで社内向け管理画面を楽に作る方法
yudppp
5
10k
Other Decks in Technology
See All in Technology
Terraform CI/CD パイプラインにおける AWS CodeCommit の代替手段
hiyanger
1
240
iOS/Androidで同じUI体験をネ イティブで作成する際に気をつ けたい落とし穴
fumiyasac0921
1
110
AWS Lambdaと歩んだ“サーバーレス”と今後 #lambda_10years
yoshidashingo
1
170
スクラムチームを立ち上げる〜チーム開発で得られたもの・得られなかったもの〜
ohnoeight
2
350
VideoMamba: State Space Model for Efficient Video Understanding
chou500
0
190
CysharpのOSS群から見るModern C#の現在地
neuecc
2
3.2k
リンクアンドモチベーション ソフトウェアエンジニア向け紹介資料 / Introduction to Link and Motivation for Software Engineers
lmi
4
300k
Lexical Analysis
shigashiyama
1
150
透過型SMTPプロキシによる送信メールの可観測性向上: Update Edition / Improved observability of outgoing emails with transparent smtp proxy: Update edition
linyows
2
210
いざ、BSC討伐の旅
nikinusu
2
780
OCI Network Firewall 概要
oracle4engineer
PRO
0
4.1k
強いチームと開発生産性
onk
PRO
34
11k
Featured
See All Featured
Fantastic passwords and where to find them - at NoRuKo
philnash
50
2.9k
Building Adaptive Systems
keathley
38
2.3k
Designing for humans not robots
tammielis
250
25k
Evolution of real-time – Irina Nazarova, EuRuKo, 2024
irinanazarova
4
370
XXLCSS - How to scale CSS and keep your sanity
sugarenia
246
1.3M
Code Reviewing Like a Champion
maltzj
520
39k
The Myth of the Modular Monolith - Day 2 Keynote - Rails World 2024
eileencodes
16
2.1k
Code Review Best Practice
trishagee
64
17k
Build your cross-platform service in a week with App Engine
jlugia
229
18k
The Cost Of JavaScript in 2023
addyosmani
45
6.7k
Typedesign – Prime Four
hannesfritz
40
2.4k
Testing 201, or: Great Expectations
jmmastey
38
7.1k
Transcript
未知のプログラミング⾔語に ChatGPTと共に挑む DROBE Engineer Night #4 LLM in Practice
⼤学では経営⼯学を学んでいました。 コードは今も昔もたくさん書いています。 HRBrainではプロダクトチームのテック リードとプラットフォームチームを兼務を しながら、いろんなことをやっています。 好きな⾔葉は冪等性。 嫌いなモノは浮動⼩数点の誤差。 yudppp
Abstract 未知の⾔語(Lua)をスポットで使いたかったので、 体系的な学習をせずにChatGPTを利⽤し、開発を⾏なった話をします。
Contents • HRBrainについて • 私がやりたかったこと • 私とLuaの関係 • 私とChatGPTとの共闘 •
まとめ
HRBrainについて
HRBrainについて HRBrainは、タレントマネジメント、組織診断サーベイ、⼈事評価、360度評価、 労務管理、社内向けチャットボットの6サービスからなる、⼈事業務の効率化か ら⼈材データの⼀元管理‧活⽤までワンストップで実現するクラウドサービス HRBrainを開発運営しています。
HRBrainのドメイン設計
私がやりたかったこと
ブランチデプロイ環境について PRごとに検証できる環境のこと。会社によってはPull Request環境と呼ばれたり しているもの
ブランチデプロイ環境について HRBrainの PlatformチームではPRごとに専⽤の環境を簡単に⽴ち上げる仕組みを プロダクトチーム向けに提供しています。 ⼀つのサービスだけではなく、複数のサービスを同時に動かす必要があり、複雑 な仕組みで実現しています。 元々Kubernetes(GKE)上で動いていた仕組みからCloudRunに移⾏しています。 https://times.hrbrain.co.jp/entry/kubernetes-branch-deploy
CloudRunのリビジョンタグについて リビジョンタグを使⽤すると、リビジョン(Versionに近いもの)に名前を付けるこ とができ、その名前を使って特定のリビジョンにアクセスが可能になります。 URL: https://service-a.run.app TAG: https://tag---service-a.run.app PRごとにリビジョンを作成することがで、PRごとに固有のURLでアクセスするこ とが可能になります。 https://cloud.google.com/run/docs/rollouts-rollbacks-traffic-migration?hl=ja#tags
下記のURLでアクセスできるようにしたい
下記ができるProxyを作る
簡単なProxyといったらNginx server { listen 8080; server_name ~^((?<pr>[a-z_0-9-]+)---(?<tenant>[a-z_0-9-]+))\.service-a\.hrbrain\.jp; location / {
set $url https://$pr---service-a.run.app; resolver 8.8.8.8 valid=10s; proxy_pass $url; proxy_set_header X-Forwarded-Host $host; } } server { listen 8080; server_name ~^(?<tenant>[a-z_0-9-]+))\.service-a\.hrbrain\.jp; location / { resolver 8.8.8.8 valid=10s; proxy_pass https://service-a.run.app; proxy_redirect off; proxy_set_header X-Forwarded-Host $host; } }
簡単なProxyといったらNginx server { listen 8080; server_name ~^((?<pr>[a-z_0-9-]+)---(?<tenant>[a-z_0-9-]+))\.service-a\.hrbrain\.jp; location / {
set $url https://$pr---service-a.run.app; resolver 8.8.8.8 valid=10s; proxy_pass $url; proxy_set_header X-Forwarded-Host $host; } } server { listen 8080; server_name ~^(?<tenant>[a-z_0-9-]+))\.service-a\.hrbrain\.jp; location / { resolver 8.8.8.8 valid=10s; proxy_pass https://service-a.run.app; proxy_redirect off; proxy_set_header X-Forwarded-Host $host; } } これがサービスの数分必要
nginx.conf 20⾏×20サービス(現在時点)→400⾏ サービスの追加⾃体はプラットフォームチームではなく、プロダクトチームに やってもらいたいと思っている。 400⾏ほぼコピペのコードがあるのはしんどい。 またプラットフォームチーム的には共通で設定変えたいとかありそう。その時40 箇所に1⾏ずつ⾜したPR出すのか for⽂を使いたい。
nginx.conf server { listen 8080; server_name ~^((?<pr>[a-z_0-9-]+)---(?<tenant>[a-z_0-9-]+))\.service-a\.hrbrain\.jp; location / {
set $url https://$pr---service-a.run.app; resolver 8.8.8.8 valid=10s; proxy_pass $url; proxy_set_header X-Forwarded-Host $host; } } server { listen 8080; server_name ~^(?<tenant>[a-z_0-9-]+))\.service-a\.hrbrain\.jp; location / { resolver 8.8.8.8 valid=10s; proxy_pass https://service-a.run.app; proxy_redirect off; proxy_set_header X-Forwarded-Host $host; } }
ChatGPTとのやりとり
OpenRestyとLuaついて OpenRestyは、NGINXベースのウェブプラットフォームで、Lua⾔語を使⽤して ⾼性能なウェブアプリケーションを作成するためのツールです。OpenRestyは、 サーバーサイドのWeb開発で柔軟性とスケーラビリティを提供します。Luaは、 優れたスピード、最⼩のメモリフットプリント、そしてCとの簡単なインター フェースを提供することで知られています。これにより、LuaはOpenRestyの内部 でのスクリプト作成に適しています。 これら⼆つの組み合わせにより、データリッチなウェブアプリケーションを効率 的に開発することができます。
私とLuaの関係
関係性① 前職でも今回のようなAPI Gateway⽤途でLuaを利⽤していた。 ただメインで上司が書いていたので、⼀部のコードを改変した程度(もしかしたら ないかもしれない)で⽂法は忘れてしまっている。
関係性② 4年に1回の頻度でRedisでAtomicな処理をするために利⽤する。 ただ書いても数⾏なので⽂法を気にしたことはない
私とChatGPTとの共闘
None
None
None
None
None
None
None
None
None
最後にちゃんと動くか確認 エラーが出て動かなかった
None
今度こそ動くか確認 無事動いた
最終結果 400⾏が54⾏になり13.5%に圧縮できました。 54⾏のうち20⾏はMapの定義でロジックらしいロジックは10⾏程度
まとめ
まとめ Luaについて詳しく知らないまま、動くものを作ることが可能になった。 OpenRestyではNginxでは⼿の届きにくいところをカバーできるのでちょっと使 う分には良かった。 どうChatGPTにニュアンスを伝えるかが重要だった。 またデバッグ⾃体は現状だと⾃分⾃⾝で⾏う必要があった。
追伸
追伸 結局map directiveやif directiveを駆使すれば、別にLuaいらなかったのでは?