Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
Go の Language Server はセキュアに動かせる
Search
Shoki Hata
October 31, 2026
1
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Go の Language Server はセキュアに動かせる
2026-11-01 kyoto.go リモートLT会
Shoki Hata
October 31, 2026
More Decks by Shoki Hata
See All by Shoki Hata
panicと向き合うGo開発 - nilawayで探る見逃されるnil参照とその対策
shohata
1
900
GoのLanguage Server Protocol実装、 「gopls」の自動補完の仕組みを学ぶ
shohata
8
2.7k
ユニットテスト並行化の導入と運用:Goでの事例紹介
shohata
1
960
無理なく始めるGoでのユニットテストの並行化戦略
shohata
2
2.4k
Contribute to Hasura
shohata
0
760
Hasura Conference 2022 Shoki_Hata
shohata
0
300
最近話題のGraphQLサーバー、Hasuraを半年使ってみて
shohata
1
550
Featured
See All Featured
The MySQL Ecosystem @ GitHub 2015
samlambert
251
13k
The Invisible Side of Design
smashingmag
301
52k
The SEO Collaboration Effect
kristinabergwall1
1
600
BBQ
matthewcrist
90
10k
Hiding What from Whom? A Critical Review of the History of Programming languages for Music
tomoyanonymous
3
1.4k
[SF Ruby Conf 2025] Rails X
palkan
3
1.5k
Automating Front-end Workflow
addyosmani
1370
210k
職位にかかわらず全員がリーダーシップを発揮するチーム作り / Building a team where everyone can demonstrate leadership regardless of position
madoxten
70
68k
Put a Button on it: Removing Barriers to Going Fast.
kastner
60
4.6k
The Limits of Empathy - UXLibs8
cassininazir
2
740
Why Mistakes Are the Best Teachers: Turning Failure into a Pathway for Growth
auna
0
330
The agentic SEO stack - context over prompts
schlessera
0
990
Transcript
Go の Language Server はセキュアに動 かせる @sho-hata 2026-11-01 kyoto.go リモートLT会
背景
人間のレビュープロセスが入るか否かという話 文化 技術レベル ユーザーのお金、 個人情報、生命に 関わる 依存ライブラリの パッチアップデート 多い 人間がボトルネックになる機会が
少ない 軽微(とチーム内で 合意し他ルールに 基づきラベリングさ れた)な差分
人間のレビュープロセスが入るか否かという話 理解のスピードを上げたい 理解負債を減らしたい 文化 技術レベル ユーザーのお金、 個人情報、生命に 関わる 依存ライブラリの パッチアップデート
多い 人間がボトルネックになる機会が 少ない 軽微(とチーム内で 合意し他ルールに 基づきラベリングさ れた)な差分
GitHubライクにローカルや PR の差分、アプリケーション画面に対して LLM とや り取りできるツール:Crit 個人的な推しポイント ClaudeデスクトップやエディタのLLM拡張と異なり、LLMからの応答もインラインコメントで返る https://github.com/tomasz-tomczyk/crit
Language Server が動くように改造
Language Server が動くように改造
Language Server が動くように改造
リモートの差分に対して Language Server を動かしている 詳しくは - リモートの pull request の差分で
Language Server を動かすときに考えること (https://sho-hata.com/articles/202610/a56x2nsjsgjn) https://github.com/sho-hata/crit のソースコード
課題:Language Server は解析時に 対象のプログラムを実行している
コードを実行しないとコード解析ができない理由 (ざっくり) - ビルド定義そのものがプログラムになっている - - コンパイル時にコードが走る言語機能がある - - Swift
の Package.swift:コンパイルして実行し、その出力からパッケージ構成を得る Rust の proc macro 、 build.rs メソッドやクラスを実行時に定義できる言語だと実行しないとわからない - Ruby:ruby-lsp は Rails アプリに対して rails runner を常駐させ、実際の状態を問い合わせている
解析対象に悪意のあるコードが含まれていると困る Crit で対象の PR をレビューしようとして Language Server を走らせるだけで侵害
Go はレビュー対象ツリーのコードを実行しない設計になって いる - ビルド定義 - - コンパイル時実行 - -
依存は import 文と go.mod という宣言的なデータだけで、ビルドスクリプトがない マクロがなく、コード生成( go generate)はビルドとは別の明示的なコマンドに分けている 動的性 - 静的型付きで、ソースから構造が決まる
Go のセキュリティに関する決定 https://go.dev/doc/security/decisions >Building an attacker-controlled program should be safe,
even when running it is not. 攻撃者が制御するプログラムの構築は、その実行が安全でなかったとしても、安全であるべきだ -> 攻撃者が書いたプログラムでも、実行は危険でもビルドは安全であるべきだとしている
決定の背景 go get は他人のリポジトリを取ってきてビルドする道具で、「ビルドしても何も起きない」ことを前提にしていた 2018 年、#cgo に -fplugin を書くと go
get だけで任意のコードが動く脆弱性( CVE-2018-6574)が報告さ れた go get は任意のコードを実行するためのものではなく、ビルドに関する安全性をセキュリティポリシーとし、悪 意あるモジュールが go build で任意のコードを実行できれば、それは脆弱性として非公開で修正される とし た
- go generate - 任意のコマンドを書ける仕組みをあえて go build から切り離し、開発者が明示的に叩いたとき だけ動くようにした -
Go toolchain - 実行されるバイナリを選べる範囲を golang.org/toolchain モジュールとして公開された公式 ツールチェーンだけに限り、 checksum database で中身を検証してから使う
Go の Language Server はセキュアに動かせる