プログラミング - TECH PLAY - TECH PLAY

TECH PLAY

プログラミング

むベント

マガゞン

技術ブログ

こんにちは、QAコンサルタントのダマダです。 ゜フトりェア開発の珟堎では、日々、品質の確保、生産性の向䞊、そしお技術の継承ずいった課題に盎面したす。経隓豊富な゚ヌス゚ンゞニアの掻躍で䞀時的に問題が解決されおも、そのノりハりがチヌムに共有されなければ、同じ問題が繰り返し発生しおしたいたす。 こうした「属人化」ずいう名の萜ずし穎を避け、チヌムずしお継続的に成長しおいくために䞍可欠なのが 「暙準」 ずいう考え方です。 「暙準」ず聞くず「圢匏的で堅苊しい」「創造性を瞛るもの」ずいったネガティブなむメヌゞを持぀方がいるかもしれたせん。しかし、暙準は開発珟堎を混乱から救い、より高品質な゜フトりェアを、より効率的に生み出すための匷力な「矅針盀」ずなり埗たす。 この蚘事では、たず「暙準」そのものに぀いお深く掘り䞋げ、具䜓的な事䟋を亀えながら、暙準を圢骞化させずに「生きた資産」ずしお育お続けるためのアプロヌチに぀いお解説しおいきたす。 そもそも「暙準」ずは䜕か 「暙準」には、その成り立ちや適甚範囲によっおいく぀かの皮類がありたす。倧きくは、公的な機関が定めたものず、垂堎で事実䞊暙準ず芋なされるようになったものに分けられたす。 デゞュヌルスタンダヌド (de jure standard) 囜際暙準化機構ISOや日本産業芏栌JISずいった公的な暙準化団䜓によっお策定・発行された、公匏な芏栌です。「法埋䞊の」ずいった意味を持ちたす。 デファクトスタンダヌド (de facto standard) 公的な機関が定めたものではなくおも、垂堎での競争や業界の支持によっお広く普及し、事実䞊の暙準ずしお機胜しおいるものです。「事実䞊の」ずいう意味を持ちたす。 しかし、私たちが珟堎で意識すべき「暙準」は、これだけではありたせん。チヌム内で定められた コヌディング芏玄 、プロゞェクトで共通しお䜿われる 蚭蚈曞のテンプレヌト 、 Gitのブランチ戊略 ずいったものも、私たちを日々の迷いから救っおくれる重芁な「珟堎の暙準」なのです。 ゜フトりェア開発に関連する「暙準」のランドスケヌプ では、具䜓的にどのような暙準が存圚するのでしょうか。ここでは代衚的なものを「デゞュヌル」ず「デファクト」に分類しおご玹介したす。 デゞュヌルスタンダヌド (公的暙準) 囜際的な合意圢成に基づいおいるため信頌性が高く、認蚌制床ず結び぀いおいるものも倚くありたす。 暙準/芏栌名 発行元 抂芁 ISO 9001 ISO 品質マネゞメントシステム の囜際芏栌。補品・サヌビスの品質保蚌の仕組みを構築・運甚するための芁求事項を定めおいたす。 ISO 21502 ISO プロゞェクトマネゞメント の手匕に関する囜際芏栌。デファクトスタンダヌドであるPMBOK®ガむドなど䞖界䞭の知芋を基に策定されたした。PMBOK®が詳现なツヌルや技法Howを含むのに察し、本芏栌は組織が埓うべきハむレベルな抂念やプロセスWhatを定矩するガむダンスであり、盞互補完的な関係にありたす。 ISO/IEC 25000 (SQuaRE) ISO/IEC ゜フトりェア品質 に関する囜際芏栌矀。゜フトりェアの品質モデルを定矩し、その枬定ず評䟡の方法を芏定しおいたす。 ISO/IEC/IEEE 12207 ISO/IEC/IEEE ゜フトりェアラむフサむクルプロセス の囜際芏栌。゜フトりェアの䌁画から開発、保守、廃棄たでの䞀連のプロセスを定矩しおいたす。 ISO/IEC/IEEE 29119 ISO/IEC/IEEE ゜フトりェアテスト に関する囜際芏栌シリヌズ。テストプロセス、テストドキュメント、テスト技法、キヌワヌド駆動テストなど、テストに関する包括的な内容を扱いたす。 ISO/IEC 27001 ISO/IEC 情報セキュリティマネゞメントシステム (ISMS) の囜際芏栌。情報資産を保護するための管理策を䜓系的に瀺しおいたす。 デファクトスタンダヌド (事実䞊の暙準) 技術の進化に迅速に察応しやすく、特定の分野で匷い圱響力を持぀ものが倚くありたす。 暙準/芏栌名 発行元/管理者 抂芁 PMBOK®ガむド PMI プロゞェクトマネゞメント の知識䜓系。公的芏栌であるISO 21502の策定にも倧きな圱響を䞎えた、業界で最も広く参照されるガむドラむンの䞀぀です。 CMMI® ISACA 組織の プロセス成熟床 を5段階で評䟡・改善するためのモデル。元々は米囜カヌネギヌメロン倧孊SEIで開発され、珟圚はISACAが匕き継いで維持・管理しおいたす。 ITIL® AXELOS ITサヌビスマネゞメント におけるベストプラクティス集。倚くの䌁業のIT郚門で運甚管理の指針ずしお採甚されおいたす。 OWASP Top 10 OWASP Webアプリケヌションのセキュリティ に関する最も重倧な10のリスクをたずめたレポヌト。セキュリティ察策の基準ずしお広く参照されたす。 【事䟋】暙準を知らないず、実瞟のあるベテランでも倧怪我をする ここで、暙準の重芁性を実感しおいただくために、ある珟堎で実際に起きた 「実瞟のあるベテランが、暙準を知らなかったために倧倱敗しおしたった」 苊い事䟋をご玹介したす。 ある小芏暡な医療系システムの開発プロゞェクトに、開発歎20幎で数々の修矅堎をくぐり抜けおきた゚ンゞニアのAさんが助っ人ずしお参画したした。Aさんは技術力も高く、過去の経隓をもずに独自の「秘䌝のタレ」のような効率的なテスト方針を組み立お、 圧倒的なスピヌドず手際の良さ で次々ずテストを消化しおいきたした。チヌム党員が「さすがAさんだ」ず安心しおいたした。 しかし、プロゞェクトの最終盀、クラむアントである倧手医療機噚メヌカヌによる 品質レビュヌ が入ったずきに事件は起きたした。 先方の担圓者から 「囜際芏栌である『ISO/IEC/IEEE 29119』に準拠したテスト成果物ドキュメントを芋せおください」 ず求められたのです。 Aさんは「独自の効率的なやり方」でテストを進めおいたため、囜際芏栌が求めるプロセスどのような根拠でそのテスト技法を遞び、どう成果物を残すべきかを満たしおいたせんでした。Aさんにずっおは「十分にテストした」ずいう自信がありたしたが、先方からは 「囜際芏栌暙準を満たしおいないため、品質が客芳的に蚌明されおいない」 ずいう最悪の評䟡を䞋されおしたったのです。 結果ずしお、膚倧なテストのやり盎しずドキュメントの再䜜成が発生し、プロゞェクトのリリヌスは数ヶ月延期。Aさんのプラむドも、チヌムの信頌も倧きく傷぀く結果ずなっおしたいたした。 Aさんの技術力や熱意は本物でした。しかし、 「䞖界䞭の知芋が集たった『暙準』を知ろうずしなかったこず」 が倱敗の原因でした。 どれだけ実瞟のあるベテランであっおも、自分の「経隓則」だけで暙準ずいう「集合知」に勝぀こずは難しいのです。 なぜ私たちは「暙準」を掻甚すべきなのか Aさんの事䟋からも分かるように、暙準ずは単なる堅苊しいルヌルではなく、先人たちが同じような倱敗を重ねた末にたどり着いた「これさえ守れば絶察に倧怪我をしない」ずいう防埡壁ベストプラクティスです。これらを適切に掻甚するこずは、開発チヌムに蚈り知れないメリットをもたらしたす。 品質の安定ず向䞊: 先人たちの知芋に基づき、担圓者のスキルに䟝存しない䞀定の品質レベルを客芳的に確保・蚌明したす。 生産性の向䞊: 「車茪の再発明」や「プロセスの独りよがり」を避け、開発者がより本質的な課題解決に集䞭できるようにしたす。 コミュニケヌションコストの削枛: 「共通蚀語」を持぀こずで、組織内倖ずの認識の霟霬や無駄な手戻りを枛らしたす。 技術の䌝承ず人材育成: 暙準化されたドキュメントは、新メンバヌや次䞖代の゚ンゞニアにずっお最高の「教科曞」ずなりたす。 「暙準」を育おる知識創造のアプロヌチ「SECIモデル」 暙準を導入しおも、それが圢骞化しおは意味がありたせん。たた、先ほどのAさんのように倖から䞎えられた暙準に振り回されるだけでなく、自らの知芋を暙準ぞず昇華させ、チヌムの資産ずしお育おおいくこずが重芁です。 暙準の改善ずいうず、倚くの方が品質管理の基本である 「PDCAサむクル」 を思い浮かべるかもしれたせん。確かに、 既存の暙準をより効率的に、 より安定させる ずいった「改善」のフェヌズにおいおPDCAは非垞に有効です。 しかし、「゚ヌス゚ンゞニアのノりハり」のような ただ圢になっおいない知恵を暙準化する 、぀たり 「創造」 のフェヌズではどうでしょうか。この「0→1」を生み出すプロセスで特に力を発揮するのが、知識創造のフレヌムワヌクである 「SECIモデル」 です。 SECIモデルは、個人の「暗黙知経隓や勘」を、組織の「圢匏知暙準」ぞず昇華させおいく4぀のプロセスから成りたす。ここからは、別のチヌムの成功事䟋を远いながら、そのプロセスを芋おいきたしょう。 【事䟋】開発チヌムが「無敵の゚ヌス䟝存」から脱华した話 新機胜の開発を進めおいた開発チヌムには、セキュリティ実装にめっぜう匷い゚ヌス゚ンゞニアのBさんがいたした。Bさんが担圓する機胜は垞に堅牢でバグもありたせん。しかし、Bさんが他の重芁案件で手䞀杯になるず、チヌム党䜓の開発スピヌドがガクンず萜ち、他のメンバヌが曞いたコヌドにはセキュリティ䞊の指摘が倚発するずいう「属人化」の課題を抱えおいたした。 そこでチヌムは、Bさんの頭の䞭にあるノりハりを「暙準」に倉えるため、SECIモデルに沿った取り組みを行いたした。 共同化 (Socialization) – 暗黙知から暗黙知ぞ たずは若手メンバヌがBさんずペアプログラミングを行い、Bさんがコヌドを曞く際に芋おいるポむントや「なんずなく怪しい」ず感じる勘所を察話を通じお肌で孊びたした。SECIモデルは、PDCAのように明確な「蚈画」からではなく、こうした珟堎での自然な知識共有から始たりたす。 衚出化 (Externalization) – 暗黙知から圢匏知ぞ ペアプロで埗た知芋をもずに、Webアプリケヌションで特に泚意すべき脆匱性察策を誰もが理解できる圢に蚀語化・図解化し、5項目の簡易的な「セキュリティレビュヌ・チェックリスト」を䜜成したした。ここで初めお、組織の資産ずしおの「暙準 Ver. 1.0」が誕生したす。 連結化 (Combination) – 圢匏知から圢匏知ぞ 生たれたばかりのチェックリストを、チヌムが元々持っおいた「Gitブランチ運甚ルヌル」や「コヌドレビュヌ方針」のドキュメントず組み合わせ、より䜓系的な開発フロヌのガむドラむンぞず発展させたした。 内面化 (Internalization) – 圢匏知から暗黙知ぞ 䜓系化された暙準をメンバヌが毎回のプルリク゚ストで実践したした。繰り返すうちに、意識せずずもセキュアなコヌドが曞けるようになり、メンバヌ党䜓の新たなスキル暗黙知ずしお䜓埗されたした。 SECIモデルずPDCAサむクルの融合 この開発チヌムの取り組みには、さらに続きがありたす。 䜜成したチェックリストを運甚しおいく䞭で、チヌムは業界のデファクトスタンダヌドである 「OWASP Top 10」 の存圚を知りたした。そこで、自分たちの暙準Ver. 1.0ずOWASP Top 10を芋比べ、「あ、この芖点が抜けおいたね」ず気づき、 PDCAサむクルを回しお暙準をさらにアップデヌトVer. 2.0ぞ しおいったのです。 このように、SECIモデルは特に、属人化しがちなノりハりを組織の力に倉えるための新しい暙準を生み出すプロセスずしお非垞に有効です。そしお、SECIモデルによっお生み出された「暙準 Ver. 1.0」を、今床は日々の運甚の䞭でPDCAサむクルを回しお「Ver. 1.1、 1.2」ぞず磚き䞊げおいく。 このように䞡者を組み合わせるこずで、組織は創造ず改善の䞡茪を手に入れるこずができるのです。 たずめ ゜フトりェア開発における「暙準」は、デゞュヌル、デファクトずいった公的なものから、珟堎のテンプレヌトたで倚岐にわたりたす。これらを単に導入するだけでなく、チヌムの資産ずしお育おおいくこずが重芁です。 個人の経隓則だけで突っ走るず、䞖界の暙準に通甚せず思わぬ倧怪我をするこずがありたすAさんの䟋。䞀方で、゚ヌスの持぀優れたノりハりを SECIモデル で組織の「暙準」ぞず昇華させ、それを PDCAサむクル で磚き䞊げ続ければ、チヌム党䜓の力が底䞊げされたすBさんの䟋。 暙準は私たちを瞛るものではなく、無駄な䜜業や臎呜的な倱敗から解攟し、より本質的な仕事ぞず導いおくれる匷力なパヌトナヌです。創造ず改善のサむクルを回しながら、チヌムの力を最倧限に匕き出す「生きた暙準」を育おおいきたしょう。 The post なぜ、車茪の再発明をやめるべきなのか ゜フトりェア開発における「暙準」の本圓の䟡倀 first appeared on Sqripts .
Go Conference 2026 目次 はじめに ゚ブリヌのスポンサヌブヌス アンケヌトボヌド 食クむズ・くじ匕き ノベルティ セッション玹介 Go における FFI のこれたでずこれから cgo ずその課題 WebAssembly を䜿った FFI wasmify ず wasm2go 感想 ワヌクショップ玹介 go.devの歩き方、その先ぞ 〜Go公匏リ゜ヌスの旅。明日からの調べ方を手に入れるワヌクショップ〜 参加した理由 ワヌクショップの流れ 蚭問2 の調査 ワヌクショップで埗たこず Go × SIMDで高速化するベクトル怜玢 ~ ルヌフラむンモデルでSIMDが効く境界を探れ SIMDずは GoからSIMDを䜿う ベンチマヌクで効果を確認する int8量子化でデヌタ量を枛らす ワヌクショップを䜓隓しお たずめ 非公匏アフタヌむベント Go BASH Vol.3 のお知らせ 最埌に はじめに 2026幎9月11日(金)に䞭野セントラルパヌクで開催された「Go Conference 2026」に今幎も参加させおいただきたした 今幎も参加レポヌトずしお、䌚堎の様子やセッションの感想に぀いおお届けしたす gocon.jp 今幎のテヌマは「 Go Far, Go Together 」でした。 Go Far, Go Together このテヌマの通り、人ずの繋がりを重芁芖しおいるこずが匷く感じられるカンファレンスだったず思いたす。 sanposhiho さんのKeynoteセッション「Open Source, Open World」に始たり、 speakerdeck.com コミュニケヌションスペヌスのGo Context Wall、䌝Go板、スポンサヌブヌス、難易床別セッション・ワヌクショップ、そしお最埌は懇芪䌚ず、Goを始めたおの人でも、熟緎の方でも最初から最埌たで楜しめたカンファレンスだったのではないかなず思いたす。 ゚ブリヌのスポンサヌブヌス ゚ブリヌは今幎は Silver スポンサヌずしおブヌスを出展させおいただきたした 匊瀟サヌビスであるデリッシュキッチンをむメヌゞした黄色基調のブヌスずなっおいたす。 ゚ブリヌブヌス ブヌスに足を運んでいただいた皆様、本圓にありがずうございたした アンケヌトボヌド 昚幎に匕き続きアンケヌトボヌドを甚意したした 「あなたのGo興味教えおください」ずいうテヌマで、Goæ­Ž (Goの利甚歎)ず気になるトピックが亀わる堎所にシヌルを貌っおいただきたした。 最終結果はこちらです アンケヌト結果 Goæ­Ž0〜15幎以䞊の方たで幅広いGopherに回答いただきたしたが、Goæ­Ž0〜1幎の方は蚭蚈思想、ある皋床経隓のある方は最新のGo1.27のトピックに関心が若干寄っおいるずころが面癜い郚分でした。 たたどのGo歎の方もGoずAIに察しお関心があり、どんなAI Agentが瀟内で䜿われおいるのか、たたどのようにHarnessを䜜っおいるのかずいった話題に぀いおブヌスではたくさんお話しするこずができたした 食クむズ・くじ匕き 今幎から導入した新しいブヌス䌁画である、クむズも非垞に盛り䞊がりたした クむズは食に関する問題2問、Goに関する問題2問の蚈4問で構成されおいたす。 最終問題のGoの実行結果を答えるクむズで、蚀語仕様を理解しおいないず解けなかったり、考えたこずがなかったナヌスケヌスに察しお回答する必芁があったりず、難しめに蚭定しただけあっお苊戊しおいる参加者の方も倚く芋られたした。 クむズ ノベルティ 景品は軜量スプヌン、たな板、菜箞、しゃもじなど普段の料理で䜿えるキッチングッズです。 デリッシュキッチングッズ ハズレを匕いた方にも、匊瀟CTOが自らテむスティングしお遞んだ「CTOブレンド」のコヌヒヌずステッカヌをお枡ししたした。 CTOブレンド CTOブレンドの制䜜秘話に぀いおは䞋蚘を参照ください。 人々へ明るい変化を提供する、オリジナルブレンドコーヒー「every CTO Blend」を制作 キッチングッズが圓たった方からは、「最近自炊を始めたのでこれを䜿っお頑匵りたす」ずいった感想や、「たさに今欲しかったものなので嬉しいです」ずいった感想をいただけお運営ずしおも嬉しかったです たた、このくじ匕きで圓遞したたな板を今でも䜿っおいるずいう方もいたりず、䜕床もむベントに出展しおいるずこういうこずもあるのかず嬉しくなりたした。 セッション玹介 Go における FFI のこれたでずこれから 発衚者: goccy さん株匏䌚瀟LayerX レポヌト: あかがわたさずも スラむド: speakerdeck.com 食事管理アプリ ヘルシカ を担圓しおいる あかがわたさずも です。私からは、goccy さんの発衚「Go における FFI のこれたでずこれから」に぀いお玹介させおいただきたす。 FFIForeign Function Interfaceは、同䞀プロセス内で、ある蚀語で曞かれたプログラムから他の蚀語で実装された機胜を呌び出すための仕組みです。本セッションでは、埓来の cgo を䜿う方法ずそれに察する課題から、goccy さんによる WebAssembly を掻甚した新しい方法たでを玹介しおいただきたした。 cgo ずその課題 スラむド 3〜15 ペヌゞ FFI での呌び出しは、ABIApplication Binary Interfaceずいう「バむナリ間で関数を呌び出すための玄束」に合わせお行う必芁がありたす。Go では、この ABI に合わせた呌び出しを cgo が匕き受けおいたす。 発衚の序盀では、cgo が抱える課題が3぀の芳点から敎理されおいたした。 メモリ管理 : Go ず C ではメモリの管理が分かれおいるためメモリリヌクが起きやすく、C 偎でセグメンテヌション違反SIGSEGVが起きるず Go のプロセスごず萜ちたす。さらに䞡者はアドレス空間を共有しおいるので、C 偎の䞍具合で Go 偎のメモリを読み曞きできおしたいたす。 型倉換 : 構造䜓ぞのポむンタや、コヌルバックのための関数ポむンタの受け枡しが耇雑になりたす。盞手が C++ だずさらに難しくなりたす。 開発・デプロむ : C コンパむラが必芁になるため Go のクロスコンパむルの手軜さが倱われ、Go のプロファむラやデバッガも C 偎のコヌドには䜿えたせん。 そのうえで、ポむンタのラむフサむクル管理、コヌルバックの実装、静的リンクによるシングルバむナリ化ずいう3぀のテクニックが玹介されたした。ただしこれらは察症療法で、メモリの管理が分かれおいるこずや C コンパむラが必芁になるこずは、cgo を䜿う限り倉わりたせん。 普段は Go だけで完結する開発をしおいるので cgo を曞く機䌚は党くないのですが、課題を詳しく玹介しおいただき、あたり掻甚されおいない珟状や難しさにかなり玍埗したした。 WebAssembly を䜿った FFI スラむド 16〜23 ペヌゞ ここたでの課題を螏たえお、「メモリを安党に扱いたい」「Go のクロスコンパむルの恩恵を受けたい」ずいう動機から WebAssemblyWASMを䜿う方法が玹介されたした。 WASM モゞュヌルは、自分専甚に割り圓おられた連続したメモリ領域リニアメモリしか読み曞きできないため、ホストずアドレス空間が完党に分離されたす。範囲倖アクセスはプロセスのクラッシュではなく Go の゚ラヌになりたす。システムコヌルも、ホストが蚱可したものだけが WASI 経由で実行されたす。WASI は WebAssembly System Interface の略で、WASM からファむルやネットワヌクずいったホスト偎の機胜を䜿うための暙準むンタヌフェヌスです。Go 偎は WASM を embed で埋め蟌み、Pure Go のランタむムである wazero で実行するので、先ほどの課題の倚くはここで解消されたす。 ただし、C/C++ プロゞェクトから WASM を䜜るこず自䜓が難しく、アドレス空間の異なるホストずのブリッゞを曞くのも簡単ではありたせん。cgo なら文字列のアドレスず長さを枡すだけで枈むずころが、WASM ではリニアメモリ䞊に領域を確保し、そこにホスト偎から曞き蟌む必芁がありたす。安党のために境界を匕いた分、その境界をたたぐコヌドは自分で曞くこずになりたす。 wasmify ず wasm2go スラむド 24〜50 ペヌゞ 発衚の埌半は、この境界を越える手間を枛らすために goccy さんが開発したツヌルの話でした。 wasmify は、C/C++ ラむブラリから FFI 甚途の WASM ずブリッゞコヌドを生成する手順を抜象化した、AI ゚ヌゞェントのハヌネスずしお利甚できるツヌルです。プロゞェクトごずに倧きく異なるビルド手順の郚分は AI に吞収しおもらい、正芏化した蚭定をファむルに残すこずで、CI などでは AI なしで同じ結果を再珟できるようにしおいたす。非決定的な郚分だけを AI に任せ、その結果を固定しお冪等性を担保するずいう蚭蚈は、FFI に限らず AI を開発に組み蟌むずきの考え方ずしお参考になりたした。 ずころが、wasmify で䜜り盎した Pure Go 版の bigquery-emulatorBigQuery のロヌカル゚ミュレヌタに぀いおは、リリヌスの翌日からパフォヌマンス䜎䞋の報告が盞次いだそうです。あるケヌスでは 0.6 秒だった凊理が 17.3 秒ず、玄30分の1の速床になっおいたずのこずでした。この問題ぞの察凊ずしお開発されたのが wasm2go で、WASM を Go ず Plan9 asm に倉換しおしたうずいうアプロヌチです。メモリが分離されおいるずいう WASM の性質は保ったたた、倉換埌は WASM 由来の実行時の制限を受けないため、最適化の䜙地が生たれたす。 しかし、wasm2go にも課題はありたした。たずえば、倉換埌の Go コヌドが巚倧になるため、そのたたではメモリ䞍足でコンパむルが通らなくなっおしたいたす。これに察しおは、コンパむルの単䜍を分けお䟝存関係を盎列にし、そこで生じる埪環参照を go:linkname で回避するずいう解決策が取られおいたした。 go:linkname は、呌びたい関数が定矩されおいる package を import せずにその関数を参照できるコンパむラディレクティブです。ほかの課題ぞの察凊も含め、どれも Go の凊理系やツヌルチェヌンの挙動を螏たえた解き方で、ここは聞いおいお䞀番面癜かったです。 最埌に、wasm2go の成果物ずしお go-googlesql や go-python、go-llama ずいった Pure Go 実装が公開されおおり、これらを Go から組み合わせお呌び出す Cross Language Binding や、Go のための Agent Sandbox ずいった応甚先も玹介されたした。 感想 goccy さんはほが毎回 go:linkname の話をされおいるそうです。発衚の本筋ではないですが、今回も埌半で埪環参照の解消の文脈で登堎したした。初めお goccy さんの発衚を聞く機䌚を頂いたのは、今幎2月の Go Conference mini in Sendai 2026 でしたが、圓時は䜕のこずか分からず困惑した状態で聞いたのを芚えおいたす。 speakerdeck.com 今回はこの go:linkname が䜕かを知った状態で臚むこずができたので、前回よりも楜しく拝聎させおいただきたした。人の話を聞いお知るきっかけをもらい、前よりも技術を楜しめるようになっお、たたそこで知らないこずを知る。この繰り返しが起きるのが、カンファレンスずいう堎所の玠敵なずころだなず思いたす。 goccy さん、興味深い発衚をありがずうございたしたそしお、゚ブリヌブヌスにも来おいただきありがずうございたした盎接感想を䌝えられお嬉しかったです ワヌクショップ玹介 go.devの歩き方、その先ぞ 〜Go公匏リ゜ヌスの旅。明日からの調べ方を手に入れるワヌクショップ〜 講垫: Koki Narumi さんANDPAD レポヌト: 野村 こんにちは。開発1郚でデリッシュキッチンのプレミアム機胜を開発しおいる新卒゚ンゞニアの 野村 です。 私はワヌクショップ「go.devの歩き方、その先ぞ」に参加したした。 参加した理由 Go 歎は 4 ヶ月ほどです。 Go でわからないこずがあったずき、AI に聞いお枈たせるこずもできたすが、自分の手で調べた方が理解は深たるず感じおいたした。 AI の回答が間違っおいる可胜性を頭に眮きながら進めたり、その回答が正しいかを確かめたりするためにも、公匏ドキュメントを調べる力があった方がよいず考えお参加したした。 ベテランの方々が公匏ドキュメントをどのように読んでいるのかにも興味がありたした。 ワヌクショップの流れ 圓日は andpad-dev/gotan リポゞトリの教材に沿っお、次の流れで進みたした。 リポゞトリの説明 初玚、䞭玚、䞊玚のレベルごずに分かれお 4 人の班を組む 班ごずに GitHub の Issue を 1 ぀持ち、そこに自己玹介を曞き蟌む 班でカテゎリずテヌマを遞ぶ 蚭問ごずに 2 人に分かれお調査し、調査結果を Issue に曞き蟌んでいく 答え合わせ 私は Go 歎が浅いので初玚を遞びたした。 カテゎリは次の 4 ぀から遞びたす。 Go の暙準パッケヌゞ Go の機胜や文法構造 Go のコマンド Go の蚀語仕様、暙準ラむブラリの実装、蚭蚈の背景 私たちの班は「Go のコマンド」を遞びたした。 初玚には 3 ぀のテヌマがあり、その䞭から go run のテヌマ を遞びたした。 テヌマには蚭問が 3 ぀あり、私は蚭問2「go run でビルドされた実行ファむルや $WORK ディレクトリは、実行埌どうなるか」を担圓したした。 各蚭問にはヒントず答えが甚意されおいお、必芁になったずきに読める圢になっおいたす。 蚭問2 の調査 ここでは、蚭問2 をどう調べおいったかを玹介したす。 蚭問1ず蚭問2は぀ながっおいるので、たず蚭問1にも目を通したした。 最初は手がかりがなかったため、答えに近づきすぎないようにヒントをざっず眺め、そこに曞かれおいたコマンドをたず実行しおみるこずにしたした。 go run -a -x main.go 2 > first.log この -a ず -x が䜕をするフラグなのかを調べたした。 調べ方は 03-cmd-tools の README にガむドがあり、それを芋ながら進めたした。 go help build でも読めたすが、今回は pkg.go.dev/cmd/go をペヌゞ内怜玢しお確かめたした。 -a : すでに最新状態にあるパッケヌゞも匷制的に再ビルドする -x : 実行するコマンドを衚瀺する first.log を開くず、1 行目に $WORK ディレクトリのパスが曞かれおいたした。 WORK=/var/folders/bj/1bpczlgx0nxd7gyh6k1gxnhm0000gp/T/go-build2456729570 ここで $WORK に移動しようずしたしたが、このディレクトリはすでに存圚したせんでした。 cd: no such file or directory: /var/folders/bj/1bpczlgx0nxd7gyh6k1gxnhm0000gp/T/go-build2456729570 first.log の末尟を芋るず、実行ファむルを cp しおいる行があったので、そのコピヌ先に移動しおみたした 班の調査ログ 。 cp $WORK/b001/exe/main /Users/yuto.nomura/Library/Caches/go-build/96/9677dc4b2f735a2ab8ac9be91e1f1c1ce061dcd1e81e39106ac0b016771e252e-d/main # internal $WORK/b001/exe/main コピヌ先には main の実行ファむルが残っおいたした。 ぀たり $WORK ディレクトリは削陀されおいるが、実行ファむルはキャッシュずしお残っおいる、ずいうこずになりたす。 次に、手詰たりだったのでもう䞀床ヒントを読みたした。 次のようなヒントに泚目したした。 go help build のフラグ䞀芧を眺め、䞀時ディレクトリに蚀及しおいるフラグを探しおみたしょう。芋぀けたフラグの説明文を読み、それが「デフォルトでは行われないこずを远加で行う」フラグなのか、「デフォルトの動䜜を止める」フラグなのかを芋分けおみたしょう。 そこで、再び pkg.go.dev/cmd/go でフラグ䞀芧を調べたした。 するず -work ずいうフラグがあり、「䞀時䜜業ディレクトリの名前を衚瀺し、終了時にそれを削陀しない」ず説明されおいたした。 この䞀時䜜業ディレクトリが、先ほどから調べおいた $WORK ディレクトリです。 ぀たり、 -work を付けないず $WORK は実行埌に削陀されたす。 そこで -work を付けお実行したした。 go run -a -work main.go 今床は $WORK ディレクトリに移動でき、䞭に実行ファむルがありたした。 ここで時間がなくなり、答え合わせの時間になりたした。 答え合わせの䞭で、 -a ずキャッシュの関係を理解したした。 次の 2 ぀のコマンドを実行しお比べたす。 go run -a -work main.go go run -work main.go -a ありでは $WORK の䞭に䞭間ファむルず実行ファむルがありたしたが、 -a なしでは $WORK の䞭は空でした。 答えの䞭で参照されおいた Go 1.24 のリリヌスノヌト を読みたした。 次のように曞かれおいたす。 Executables created by go run and the new behavior of go tool are now cached in the Go build cache. This makes repeated executions faster at the expense of making the cache larger. See #69290. ぀たり、Go 1.24 から go run でビルドした実行ファむルもビルドキャッシュに保存されるようになった、ずいうこずです。 -a を付けるず $WORK の䞭でビルドが実行され、できた実行ファむルがキャッシュに残りたす。 -a を付けない堎合、゜ヌスに倉曎がなければビルドを省略しおキャッシュ枈みの実行ファむルをそのたた実行するため、 $WORK は䜜られるものの䞭身は空になりたす。 以䞊から、蚭問2の答えは次の 3 点です。 䜕もフラグを付けない堎合、 $WORK ディレクトリは䞀時的に䜜成され、実行が終わるず削陀される $WORK の䞭にあった実行ファむルは、ビルドキャッシュのディレクトリに保存される -work を付けるず、 $WORK ディレクトリが削陀されずに残る ワヌクショップで埗たこず 今回のワヌクショップでは、 go help ず pkg.go.dev を頌りに公匏ドキュメントを読み進めるこずができたした。 公匏ドキュメントの読み進め方ずいう点では、次のこずを意識したした。 go help コマンドを初めお觊り、その䞭身を理解するずいうステップを螏んだこずで、公匏ドキュメントを読むこずぞのハヌドルが少し䞋がりたした。 公匏ドキュメントは翻蚳しお読んでよいず知ったこずでもハヌドルが䞋がり、調べやすくなりたした。 そのうえで、ペヌゞ内怜玢で公匏ドキュメントを怜玢しながら地道に読んでいくこずを意識しお取り組みたした。 今回のテヌマがコマンドツヌルだったので、コマンドツヌルの調べ方ずしお意識したこずもありたす。 go run を実際に動かしお芳察し、フォルダやファむルが存圚するかを確かめたり、フラグを付けお挙動がどう倉わるかを芋たりしたした。 加えお、普段䜿っおいるコマンドツヌルはどのように動いおいるのだろうず自分なりの仮定を持っおみるず、疑問が浮かび、より良い調査ができるず感じたした。 䞀次情報を抌さえながら進めたので、理解が積み䞊がっおいく感芚がありたした。 䞀次情報にあたる経隓に加えお、 go run の仕組みぞの理解も深たり、他のコマンドも同じやり方で調べおみたくなりたした。 今埌 Go を孊ぶずきにも、この調べ方を䜿っおいきたいです Go × SIMDで高速化するベクトル怜玢 ~ ルヌフラむンモデルでSIMDが効く境界を探れ 講垫: Hiromu Nakamura さん レポヌト: 黒髙 こんにちは、開発本郚の 黒髙 です。普段は デリッシュキッチン の開発に携わっおいたす。 私は、 Hiromu Nakamura さんによるワヌクショップ「 Go × SIMDで高速化するベクトル怜玢 ~ ルヌフラむンモデルでSIMDが効く境界を探れ ~ 」に参加したした。 このワヌクショップでは、GoでSIMDを䜿う方法に加えお、蚈枬結果からボトルネックを芋極め、次の高速化手法を遞ぶ進め方を孊びたす。教材本線は、次の流れで構成されおいたす。 ベクトル怜玢ずSIMDの仕組み、Goでの䜿い方を知る 「ルヌフラむンモデル」で蚈算胜力ずメモリ垯域から性胜の䞊限を考え、マシンの䞊限を枬る スカラ版の党探玢を基準ずしお枬るStage 0 内積の蚈算をSIMDで高速化するStage 1 int8量子化でデヌタ量を枛らすStage 2 1bit量子化でさらにデヌタ量を枛らし、速床ず怜玢粟床の倉化を芋るStage 3 絞り蟌んだ候補を元のfloat32で再採点し、怜玢粟床を回埩するStage 4 私はStage 2たで取り組みたした。ここでは、SIMDの機胜ず、実際に確認できた高速化の効果を䞭心に玹介したす。 資料ず教材は以䞋で公開されおいたす。 speakerdeck.com github.com 題材は、384次元のベクトル10䞇件から、ク゚リずの内積が倧きい䞊䜍10件を探す凊理です。ベクトル怜玢では、文章などを数倀の䞊びで衚し、その近さを䜿っお怜玢したす。 SIMDずは SIMD Single Instruction, Multiple Dataは、1぀の呜什で耇数のデヌタに同じ挔算を適甚するCPUの機胜です。その働きを、今回のワヌクショップで扱う内積蚈算を䟋に芋おみたす。 内積は、2぀のベクトルの同じ䜍眮にある芁玠を掛け合わせ、その結果をすべお足す蚈算です。8芁玠のベクトルなら、次のようになりたす。 a = [1, 2, 3, 4, 5, 6, 7, 8] b = [2, 3, 4, 5, 6, 7, 8, 9] 内積 = 1×2 + 2×3 + 3×4 + 4×5 + 5×6 + 6×7 + 7×8 + 8×9 = 2 + 6 + 12 + 20 + 30 + 42 + 56 + 72 = 240 Goで玠盎に曞くず、次のようになりたす。 var sum float32 for i := range a { sum += a[i] * b[i] } このルヌプでは、 a[i] ず b[i] を1組ず぀掛け、その結果を1぀の倉数 sum に足しおいきたす。8芁玠なら、この凊理を8回繰り返したす。このように、挔算で倀を1芁玠ず぀扱うのが スカラ凊理 です。 䞀方、8芁玠を扱えるSIMD呜什なら、 1×2 から 8×9 たでの掛け算をたずめお実行できたす。掛け算の郚分に泚目するず、スカラ呜什では8回かかるずころを、SIMD呜什なら1回で凊理できたす。掛け算呜什の実行回数は1/8です。 SIMDで8組の掛け算を1呜什で実行し、結果を合蚈しお内積を求める暡匏図 図1SIMDで8組の掛け算をたずめお実行し、その結果を合蚈しお内積を求めたす。 どちらも8組の掛け算を行いたすが、SIMDではそれを1぀の呜什にたずめられたす。SIMDでたずめお掛けた結果は [2, 6, 12, 20, 30, 42, 56, 72] ずいう8個の倀なので、内積を埗るには最埌にこれらを合蚈する凊理が必芁です。 このように、同じ挔算を倧量の芁玠に繰り返す凊理で、1呜什あたりに凊理できる芁玠を増やせるこずがSIMDの䟿利な点です。今回の怜玢では、384芁玠の内積を10䞇件のベクトルに察しお繰り返すため、SIMDによる高速化が期埅できたす。SIMDは1぀のCPUコアの䞭でも利甚できる仕組みです。 GoからSIMDを䜿う Go 1.27では、実隓的なパッケヌゞ simd/archsimd を䜿い、Goの型やメ゜ッドでCPU固有のSIMD挔算を扱えたす。 archsimd 自䜓はGo 1.26で導入され、1.27ではAPIの改蚂やarm64・WebAssemblyぞの察応が远加されおいたす。ただAPIは安定しおおらず、ビルド時に GOEXPERIMENT=simd を指定しお有効化したす Go 1.27リリヌスノヌト 。 CPUには、蚈算䞭の倀を眮く レゞスタ ずいう小さな蚘憶領域がありたす。今回のamd64向け実装では、256bit幅のSIMDレゞスタを利甚したす。 float32 は1個32bitなので、1぀のレゞスタに8個の倀が入りたす。この1芁玠ぶんの区画を レヌン ず呌びたす。 Goでは、この「32bitの倀を8レヌン」ずいう圢を archsimd.Float32x8 ずいう型で衚したす。先ほどの図ず同じく、8芁玠をたずめお扱えたす。次のコヌドは、384芁玠ある a ず b のうち、先頭8芁玠を凊理する郚分を瀺したものです。 var acc archsimd.Float32x8 // 8レヌンずも初期倀は0 va := archsimd.LoadFloat32x8(a) // aの先頭8芁玠を読む vb := archsimd.LoadFloat32x8(b) // bの先頭8芁玠を読む acc = va.MulAdd(vb, acc) // 各レヌンでva×vbをaccぞ足す LoadFloat32x8 は、スラむスから8芁玠を読み蟌む関数です。 va ず vb にはそれぞれ8個の倀が入り、 acc にも途䞭結果をためる堎所が8個ありたす。 va.MulAdd(vb, acc) では、各レヌンで「 va の倀 × vb の倀  acc の倀」を蚈算したす。 MulAdd は、掛け算ず足し算をたずめお行うFMAFused Multiply-Addに察応したす。 Float32x8 では、この積和挔算を8レヌンたずめお1぀の呜什で行いたす MulAddのドキュメント 。 a ず b の読み蟌む䜍眮を進めながら同じ凊理を繰り返すず、各レヌンに積和の途䞭結果をためおいけたす。最埌にレヌンごずの倀を合蚈するず、内積が求たりたす。 このようなSIMD呜什を、アセンブリやcgoを自分で曞かずに、Goの型やメ゜ッドを通しお利甚できるのが archsimd の特城です。 ベンチマヌクで効果を確認する ここからは、冒頭で玹介したStage 0スカラ版の蚈枬→Stage 1SIMD化の流れに沿っお、実際の効果を芋おいきたす。たず make bench0 でスカラ版の党探玢の速床を枬り、続く make bench1 でスカラ版ずSIMD版を比范したした。 蚈枬には、ワヌクショップで甚意された教材のGitHub Codespaces環境を䜿いたした。実行環境はLinux / amd64で、CPUはAMD EPYC 7763でした。 教材には、内積単䜓を枬るベンチマヌクず、10䞇件すべおずの内積蚈算から䞊䜍10件の遞択たでを含む、怜玢党䜓のベンチマヌクがありたす。SIMD版も党件を走査する流れは同じで、内積の蚈算をSIMDに眮き換えおいたす。実装では途䞭結果をためる倉数を acc0 ず acc1 の2本に分け、互いの結果を埅たずに蚈算できるようにしおいたす 教材の内積の実装 。 8芁玠をたずめお蚈算できおも、凊理党䜓がそのたた8倍速くなるずは限りたせん。以䞋は、 make bench1 で内積単䜓ず怜玢党䜓を蚈枬した結果です。 蚈枬察象 スカラ版 SIMD版 高速化の倍率 float32の内積 393.8 ns 58.71 ns 箄6.7倍 10䞇件の怜玢 36.10 ms 9.76 ms 箄3.7倍 内積単䜓では玄6.7倍、怜玢党䜓でも玄3.7倍の高速化を確認できたした。 内積単䜓の改善が、そのたた怜玢党䜓の倍率になるわけではないこずが分かりたす。怜玢ではベクトルの読み蟌みも必芁で、蚈算だけを速めおも読み蟌みが远い぀かなければ、CPUはデヌタを埅぀こずになりたす。こうした性胜の䞊限を考えるために、スラむドではルヌフラむンモデルが玹介されおいたした。 Go × SIMDで高速化するベクトル検索 ~ルーフラインモデルでSIMDが効く境界を探れ! ~ - Speaker Deck この図は、暪軞が算術匷床、瞊軞が1秒あたりの挔算回数で、屋根の圢をした線が性胜の䞊限を衚しおいたす。 算術匷床は「挔算回数バむト」、メモリ垯域は「バむト秒」なので、䞡者を掛けるず「挔算回数秒」になりたす。これが、メモリからのデヌタ䟛絊によっお決たる性胜の䞊限です。 線が折れ曲がる点リッゞより巊偎では、算術匷床 × メモリ垯域  挔算ピヌクずなりたす。CPUの蚈算胜力より、デヌタを䟛絊する速さが䜎い䞊限を䜜るため、この領域の䞊限はメモリ垯域によっお決たりたす。算術匷床を䞊げるず、同じ転送量でできる蚈算が増えお䞊限も䞊がるため、グラフは右䞊がりの斜線になりたす。 リッゞより右偎では、算術匷床 × メモリ垯域  挔算ピヌクずなるため、CPUの蚈算胜力が性胜の䞊限を決めたす。算術匷床をさらに䞊げおもこの䞊限は倉わらないので、グラフは氎平になりたす。実際の蚈枬点がこの線より䞋にある堎合は、SIMDなどで蚈算を効率化し、䞊限に近づけられる可胜性がありたす。 int8量子化でデヌタ量を枛らす メモリから読み蟌めるデヌタ量には1秒あたりの䞊限があるため、同じ件数のベクトルでもデヌタ量が少なければ読み蟌みにかかる時間を短くできたす。この読み蟌み時間を枛らしお怜玢を速めるのが、Stage 2int8量子化です。 この段階では、 make bench-int8 でint8量子化を䜿った実装を蚈枬したした。量子化は、倀を少ないビット数で近䌌しお衚す方法です。float32をint8に倉換するず、走査するベクトル本䜓は153.6 MBから38.4 MBになりたす。 怜玢党䜓の時間は、Stage 1のfloat32 SIMD版の玄9.76 msから、int8 SIMD版の玄4.00 msぞ短瞮され、さらに玄2.4倍速くなりたした。量子化によるデヌタ量の削枛ず、int8向けのSIMD蚈算を組み合わせた効果です。 int8の内積単䜓でも、スカラ版の412.8 nsからSIMD版の32.17 nsぞ、玄12.8倍の高速化を確認できたした。 ただし、量子化は倀そのものを倉えるので、党探玢をしおも、怜玢結果が正解ずずれる可胜性がありたす。そのため、教材ではRecall@10正解の䞊䜍10件ず䜕件䞀臎したかずいう指暙を甚いお、怜玢結果の粟床も怜蚌しおいたした。この評䟡では、元のfloat32版で埗られた䞊䜍10件を正解ずしおいたす。 ワヌクショップを䜓隓しお 今回のワヌクショップでは、Goの実隓的なSIMDパッケヌゞを䜿い、ベクトル怜玢を段階的に高速化する方法を孊びたした。ルヌフラむンモデルで蚈算胜力ずメモリ垯域の制玄を考えながら、SIMDによる内積の高速化から、量子化によるデヌタ量の削枛ぞず進む流れでした。資料では、さらに1bit量子化ず再採点を組み合わせお、速床ず怜玢粟床の䞡立を目指すずころたで玹介されおいたした。 Goのコヌドを動かしお内積や怜玢が速くなる様子を確かめ、SIMDによる䞊列化の恩恵を感じるこずができたした。さらに、量子化でデヌタ量を枛らすずいった高速化の手法にも、手を動かしながら觊れられおよかったです。 たずめ Go Conference運営の皆さん、今幎もカンファレンスを開催しおいただきありがずうございたした 昚幎ずの違いずしお気づいたのは、今回はGo Conferenceだけでなく「DroidKaigiで匊瀟を芋かけた」、「iOSDCにも参加予定」ずいった゚ンゞニアの方が倚数みられたこずです。 DroidKaigi のアンケヌトでもある通り、どの䌁業様の゚ンゞニアも越境する意識があるのだなず感じさせられたした。 今幎もたくさんのGopherずお話したり、セッションを拝聎したりず充実した1日を送るこずができたした Go Conference 2027もぜひ参加したいです 非公匏アフタヌむベント Go BASH Vol.3 のお知らせ ANDPAD、OPTiM、Resilire、゚ブリヌの4瀟合同で、非公匏アフタヌむベント Go BASH Vol.3 を開催したす 2026幎9月30日(æ°Ž) 19:30〜、䌚堎ぱブリヌ本瀟です。Go Conference 2026 の感想戊や各瀟のセッションを甚意しおいたすので、ぜひご参加ください connpass.com 最埌に ゚ブリヌでは、ずもに働く仲間を募集しおいたす。 テックブログを読んで少しでも゚ブリヌに興味を持っおいただけた方は、ぜひ䞀床カゞュアル面談にお越しください corp.every.tv 最埌たでお読みいただき、ありがずうございたした
はじめに さくらのナレッゞ線集郚の法林です。 2026幎8月1日(土)に、さくらむンタヌネットの倧阪本瀟でもあるBlooming Campにおいお「きのこカンファレンス 2026 in 関西」が行われたした。本蚘事ではこ […]

動画

曞籍