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
450
未知のプログラミング言語にChatGPTと共に挑む
DROBE Engineer Night #4 LLM in PracticeのLT資料です
yudppp
July 20, 2023
Tweet
Share
More Decks by yudppp
See All by yudppp
型安全なDrag and Dropの設計を考える
yudppp
5
840
SaaSフロントエンド開発の現場で求められる技術 / Technologies for SaaS Frontend Development in the Field
yudppp
2
210
2019年 HRBrainの技術的挑戦 / hrbain technology challenge 2019
yudppp
3
1.4k
Web開発を支えるマイグレーションツールについて / sqldef introduction for psql users
yudppp
2
3.4k
ISUCON向けのツールを作った話 / isutools
yudppp
1
280
Row Level Securityはマルチテナントの銀の弾丸になりうるのか / Row Level Security is silver bullet for multitenancy?
yudppp
23
31k
Webサービス開発に必要な統計学入門 / study of statistics for web developers
yudppp
1
300
メジャーな Live Reloaderの違いをちゃんと調べて見た / Compare major live reloader of Go
yudppp
1
1.9k
今年お世話になったnpm module
yudppp
1
930
Other Decks in Technology
See All in Technology
【新卒研修資料】LLM・生成AI研修 / Large Language Model・Generative AI
brainpadpr
23
17k
自作LLM Native GORM Pluginで実現する AI Agentバックテスト基盤構築
po3rin
2
250
pprof vs runtime/trace (FlightRecorder)
task4233
0
170
FastAPIの魔法をgRPC/Connect RPCへ
monotaro
PRO
1
740
実装で解き明かす並行処理の歴史
zozotech
PRO
1
320
SREとソフトウェア開発者の合同チームはどのようにS3のコストを削減したか?
muziyoshiz
1
100
多様な事業ドメインのクリエイターへ 価値を届けるための営みについて
massyuu
0
110
GopherCon Tour 概略
logica0419
2
190
フルカイテン株式会社 エンジニア向け採用資料
fullkaiten
0
9k
From Prompt to Product @ How to Web 2025, Bucharest, Romania
janwerner
0
120
[2025-09-30] Databricks Genie を利用した分析基盤とデータモデリングの IVRy の現在地
wxyzzz
0
470
データエンジニアがこの先生きのこるには...?
10xinc
0
440
Featured
See All Featured
Practical Tips for Bootstrapping Information Extraction Pipelines
honnibal
PRO
23
1.5k
RailsConf & Balkan Ruby 2019: The Past, Present, and Future of Rails at GitHub
eileencodes
140
34k
Rebuilding a faster, lazier Slack
samanthasiow
84
9.2k
Dealing with People You Can't Stand - Big Design 2015
cassininazir
367
27k
Let's Do A Bunch of Simple Stuff to Make Websites Faster
chriscoyier
507
140k
The Power of CSS Pseudo Elements
geoffreycrofte
79
6k
RailsConf 2023
tenderlove
30
1.2k
Intergalactic Javascript Robots from Outer Space
tanoku
273
27k
Java REST API Framework Comparison - PWX 2021
mraible
33
8.8k
It's Worth the Effort
3n
187
28k
Agile that works and the tools we love
rasmusluckow
331
21k
Typedesign – Prime Four
hannesfritz
42
2.8k
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いらなかったのでは?