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
430
未知のプログラミング言語に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
760
SaaSフロントエンド開発の現場で求められる技術 / Technologies for SaaS Frontend Development in the Field
yudppp
2
190
2019年 HRBrainの技術的挑戦 / hrbain technology challenge 2019
yudppp
3
1.3k
Web開発を支えるマイグレーションツールについて / sqldef introduction for psql users
yudppp
2
3.3k
ISUCON向けのツールを作った話 / isutools
yudppp
1
270
Row Level Securityはマルチテナントの銀の弾丸になりうるのか / Row Level Security is silver bullet for multitenancy?
yudppp
21
30k
Webサービス開発に必要な統計学入門 / study of statistics for web developers
yudppp
1
280
メジャーな Live Reloaderの違いをちゃんと調べて見た / Compare major live reloader of Go
yudppp
1
1.9k
今年お世話になったnpm module
yudppp
1
920
Other Decks in Technology
See All in Technology
2025 AWS Jr. Championが振り返るAWS Summit
kazukiadachi
0
110
Zero Data Loss Autonomous Recovery Service サービス概要
oracle4engineer
PRO
2
7.7k
Operating Operator
shhnjk
1
580
マーケットプレイス版Oracle WebCenter Content For OCI
oracle4engineer
PRO
3
960
CRE Camp #1 エンジニアリングを民主化するCREチームでありたい話
mntsq
1
120
【5分でわかる】セーフィー エンジニア向け会社紹介
safie_recruit
0
27k
マネジメントって難しい、けどおもしろい / Management is tough, but fun! #em_findy
ar_tama
7
1.1k
LangChain Interrupt & LangChain Ambassadors meetingレポート
os1ma
2
310
生成AI時代の開発組織・技術・プロセス 〜 ログラスの挑戦と考察 〜
itohiro73
1
460
いつの間にか入れ替わってる!?新しいAWS Security Hubとは?
cmusudakeisuke
0
120
Lufthansa ®️ USA Contact Numbers: Complete 2025 Support Guide
lufthanahelpsupport
0
190
KubeCon + CloudNativeCon Japan 2025 Recap Opening & Choose Your Own Adventureシリーズまとめ
mmmatsuda
0
270
Featured
See All Featured
How GitHub (no longer) Works
holman
314
140k
Keith and Marios Guide to Fast Websites
keithpitt
411
22k
Building a Scalable Design System with Sketch
lauravandoore
462
33k
Six Lessons from altMBA
skipperchong
28
3.9k
10 Git Anti Patterns You Should be Aware of
lemiorhan
PRO
656
60k
The Psychology of Web Performance [Beyond Tellerrand 2023]
tammyeverts
48
2.9k
Rebuilding a faster, lazier Slack
samanthasiow
82
9.1k
Evolution of real-time – Irina Nazarova, EuRuKo, 2024
irinanazarova
8
820
The Illustrated Children's Guide to Kubernetes
chrisshort
48
50k
BBQ
matthewcrist
89
9.7k
How to train your dragon (web standard)
notwaldorf
95
6.1k
Code Reviewing Like a Champion
maltzj
524
40k
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いらなかったのでは?