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
99
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 Stacks入門 #HashiTalks
msato
0
360
【令和最新版】AWS Direct Connectと愉快なGWたちのおさらい
minorun365
PRO
5
760
プロダクト活用度で見えた真実 ホリゾンタルSaaSでの顧客解像度の高め方
tadaken3
0
170
エンジニア人生の拡張性を高める 「探索型キャリア設計」の提案
tenshoku_draft
1
130
マルチモーダル / AI Agent / LLMOps 3つの技術トレンドで理解するLLMの今後の展望
hirosatogamo
37
12k
強いチームと開発生産性
onk
PRO
35
11k
【Startup CTO of the Year 2024 / Audience Award】アセンド取締役CTO 丹羽健
niwatakeru
0
1.3k
OCI Network Firewall 概要
oracle4engineer
PRO
0
4.2k
CysharpのOSS群から見るModern C#の現在地
neuecc
2
3.5k
Application Development WG Intro at AppDeveloperCon
salaboy
0
190
マルチプロダクトな開発組織で 「開発生産性」に向き合うために試みたこと / Improving Multi-Product Dev Productivity
sugamasao
1
310
Lexical Analysis
shigashiyama
1
150
Featured
See All Featured
The Illustrated Children's Guide to Kubernetes
chrisshort
48
48k
Testing 201, or: Great Expectations
jmmastey
38
7.1k
RailsConf 2023
tenderlove
29
900
Done Done
chrislema
181
16k
The Art of Delivering Value - GDevCon NA Keynote
reverentgeek
8
900
RailsConf & Balkan Ruby 2019: The Past, Present, and Future of Rails at GitHub
eileencodes
131
33k
A Philosophy of Restraint
colly
203
16k
Keith and Marios Guide to Fast Websites
keithpitt
409
22k
CoffeeScript is Beautiful & I Never Want to Write Plain JavaScript Again
sstephenson
159
15k
Building a Modern Day E-commerce SEO Strategy
aleyda
38
6.9k
Teambox: Starting and Learning
jrom
133
8.8k
Facilitating Awesome Meetings
lara
50
6.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いらなかったのでは?