<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>勉強会 on blog.kyu08.com</title>
    <link>https://blog.kyu08.com/pr-344/tags/%E5%8B%89%E5%BC%B7%E4%BC%9A/</link>
    <description>Recent content in 勉強会 on blog.kyu08.com</description>
    <generator>Hugo -- gohugo.io</generator>
    <language>ja</language>
    <copyright>blog.kyu08.com</copyright>
    <lastBuildDate>Sun, 01 Mar 2026 09:00:32 +0900</lastBuildDate><atom:link href="https://blog.kyu08.com/pr-344/tags/%E5%8B%89%E5%BC%B7%E4%BC%9A/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>Go Conference mini in Sendai 2026に参加した</title>
      <link>https://blog.kyu08.com/pr-344/posts/go-con-mini-in-sendai-2026/</link>
      <pubDate>Sun, 01 Mar 2026 09:00:32 +0900</pubDate>
      
      <guid>https://blog.kyu08.com/pr-344/posts/go-con-mini-in-sendai-2026/</guid>
      <description>2026/02/21(土)に仙台で行われたGo Conference mini in Sendai 2026に参加したのでその内容をまとめる。 Go Conference mini in Sendai 20262026年2月21日（土）</description>
      <content>&lt;p&gt;&lt;img src=&#34;closing-slide.webp&#34; alt=&#34;&#34; loading=&#34;lazy&#34; /&gt;&lt;/p&gt;
&lt;p&gt;2026/02/21(土)に仙台で行われたGo Conference mini in Sendai 2026に参加したのでその内容をまとめる。&lt;/p&gt;
&lt;p&gt;&lt;div class=&#34;blogcard&#34; data-url=&#34;https://sendaigo.jp/&#34; data-auto-fetch=&#34;false&#34;&gt;
  &lt;a href=&#34;https://sendaigo.jp/&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34; class=&#34;blogcard-link&#34;&gt;&lt;div class=&#34;blogcard-thumbnail&#34;&gt;
      &lt;img src=&#34;https://sendaigo.jp/ogp.png&#34; alt=&#34;Go Conference mini in Sendai 2026&#34; loading=&#34;lazy&#34;&gt;
    &lt;/div&gt;&lt;div class=&#34;blogcard-content&#34;&gt;
      &lt;div class=&#34;blogcard-title&#34;&gt;Go Conference mini in Sendai 2026&lt;/div&gt;&lt;div class=&#34;blogcard-description&#34;&gt;2026年2月21日（土）開催 - Go Forward Together - 東北から広がるGoコミュニティ&lt;/div&gt;&lt;div class=&#34;blogcard-url&#34;&gt;https://sendaigo.jp/&lt;/div&gt;
    &lt;/div&gt;
  &lt;/a&gt;
&lt;/div&gt;
&lt;/p&gt;
&lt;h2 id=&#34;keynote静的解析からみるgoの過去と未来&#34;&gt;【KeyNote】静的解析からみるGoの過去と未来&lt;/h2&gt;
&lt;p&gt;tenntennさんによるキーノート。&lt;/p&gt;
&lt;p&gt;&lt;div class=&#34;embed-container google-slides&#34;&gt;
      &lt;iframe src=&#34;https://docs.google.com/presentation/d/14e9PiaKbyqcZTu5mYCKBqa9MokJhxmT0WePHxwPzCmg/embed?start=false&amp;loop=false&amp;delayms=3000&#34; frameborder=&#34;0&#34; width=&#34;960&#34; height=&#34;569&#34; allowfullscreen=&#34;true&#34; mozallowfullscreen=&#34;true&#34; webkitallowfullscreen=&#34;true&#34;&gt;&lt;/iframe&gt;
    &lt;/div&gt;&lt;/p&gt;
&lt;p&gt;最後に紹介されていたGo1.27のアノテーションで静的解析をできるようにする機能は今まさに自分が欲している機能&lt;sup id=&#34;fnref:1&#34;&gt;&lt;a href=&#34;#fn:1&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;1&lt;/a&gt;&lt;/sup&gt;なので調べてみようと思った。&lt;/p&gt;
&lt;p&gt;以下メモ。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;//line a.go:1&lt;/code&gt;のような記法は知らなかった。
&lt;ul&gt;
&lt;li&gt;調べてみたところ&lt;code&gt;line directive&lt;/code&gt;という名前がついているようだった。&lt;sup id=&#34;fnref:2&#34;&gt;&lt;a href=&#34;#fn:2&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;2&lt;/a&gt;&lt;/sup&gt;&lt;/li&gt;
&lt;li&gt;こんな感じでコンパイラが出力するエラーメッセージなどが上書きされる。
&lt;ul&gt;
&lt;li&gt;&lt;img src=&#34;line-directive.webp&#34; alt=&#34;&#34; loading=&#34;lazy&#34; /&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://go.dev/play/p/Thvs9U8Twvj&#34; target=&#34;_blank&#34; &gt;https://go.dev/play/p/Thvs9U8Twvj&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;自動生成されたコードのエラーを元のコードの行番号で表示したいときなどに使われるらしい。(例えば自動生成されたGoファイルでのエラーに対してprotoファイルの行番号をエラーに表示したいケースなど)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;code&gt;go test -cover&lt;/code&gt;を実行すると裏側では&lt;code&gt;go tool cover&lt;/code&gt;が実行され、計測用のコードが挿入される&lt;/li&gt;
&lt;li&gt;Goがセルフホスティングされるようになったのは2015年（Go1.5）（それまではC）
&lt;ul&gt;
&lt;li&gt;(まだ10年しかたってないんだなー)&lt;/li&gt;
&lt;li&gt;ここからコンパイラのコードが既存標準パッケージと共通化されたりするようになった&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;2019
&lt;ul&gt;
&lt;li&gt;goplsが登場&lt;/li&gt;
&lt;li&gt;最初はgolspだったがしれっと名前が変わったらしいw&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Go 1.27
&lt;ul&gt;
&lt;li&gt;アノテーションによる静的解析
&lt;ul&gt;
&lt;li&gt;一点もののlinterを作らなくてよくなる。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;//go:fix inline&lt;/code&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://go.dev/doc/go1.26#go-command&#34; target=&#34;_blank&#34; &gt;https://go.dev/doc/go1.26#go-command&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;xxしたあとにyyする、みたいな制約をアノテーションで表現できるようになる（らしい。が一次情報は見つけられていない）&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;ai時代のgo開発2026-爆速開発のためのガードレール&#34;&gt;AI時代のGo開発2026 爆速開発のためのガードレール&lt;/h2&gt;
&lt;p&gt;UPSIDERのRyo MimuraさんによるAI時代の開発生産性を保つにあたっての課題と対策についてのセッション。&lt;/p&gt;
&lt;p&gt;&lt;div class=&#34;embed-container docswell&#34;&gt;
      &lt;div class=&#34;docswell-placeholder&#34; data-src=&#34;https://www.docswell.com/s/r4mimu/ZQXGNY-2026-02-21-102435?slide=1&#34; style=&#34;width:100%;height:569px;background:#f0f0f0;display:flex;align-items:center;justify-content:center;color:#666;&#34;&gt;Loading...&lt;/div&gt;
    &lt;/div&gt;&lt;/p&gt;
&lt;p&gt;最近PRレビューをする機会が増えてレビュワーとPR作成者双方の負担を減らす方法を考えていたのでとても参考になった。&lt;/p&gt;
&lt;p&gt;以下メモ。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;AIの予期せぬ変更はRules / Skillsでもある程度は防げるがあくまで挙動は非決定的なためすり抜けてしまう可能性がある。そのためハード制約（決定的な処理による制約）を設けることが重要。&lt;/li&gt;
&lt;li&gt;ハード制約の例
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;internal&lt;/code&gt; packageで予期せぬ外部参照から保護する&lt;/li&gt;
&lt;li&gt;&lt;code&gt;depguard&lt;/code&gt;による依存性ルールの強制&lt;/li&gt;
&lt;li&gt;Package by Featureで凝集性を向上させることでコンテキストをうまく制御する&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Fuzzing Test, Mutation Testingなどのテスト手法を活用してコード品質を保つ&lt;/li&gt;
&lt;li&gt;開発者体験 = エージェント体験
&lt;ul&gt;
&lt;li&gt;両者は同じもの。&lt;/li&gt;
&lt;li&gt;環境構築、テストとフィードバック、可観測性等開発者体験が悪ければAI Agentもうまく開発を進めることはできなくなる。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;go-での並列処理-最初の一歩から次の一歩へ&#34;&gt;Go での並列処理 「最初の一歩」から「次の一歩」へ&lt;/h2&gt;
&lt;p&gt;TakasagoさんによるGoでの並行処理についてのセッション。&lt;/p&gt;
&lt;p&gt;&lt;div class=&#34;embed-container google-slides&#34;&gt;
      &lt;iframe src=&#34;https://docs.google.com/presentation/d/1SpK9Pxsh2QOOXwIirNe3YiN6U5ujAxiottt4ZNPdBkg/embed?start=false&amp;loop=false&amp;delayms=3000&#34; frameborder=&#34;0&#34; width=&#34;960&#34; height=&#34;569&#34; allowfullscreen=&#34;true&#34; mozallowfullscreen=&#34;true&#34; webkitallowfullscreen=&#34;true&#34;&gt;&lt;/iframe&gt;
    &lt;/div&gt;&lt;/p&gt;
&lt;p&gt;並行処理の原理だけでなく、パターンを身につけておくといざ実装するとなったときに役に立ちそうだと思った。（なかなか毎月書くような機会がないのであまり定着してない&amp;hellip;）&lt;/p&gt;
&lt;p&gt;以下メモ。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Goは同期で書いておいて高速化したい箇所だけ並列化する、という書き方がやりやすいのが特徴。&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;go126のruntimemetricsが便利そうな件&#34;&gt;Go.1.26のruntime/metricsが便利そうな件（？）&lt;/h2&gt;
&lt;p&gt;o_ga09さんによる発表。&lt;/p&gt;
&lt;p&gt;&lt;div class=&#34;embed-container google-slides&#34;&gt;
      &lt;iframe src=&#34;https://docs.google.com/presentation/d/1mamepeOir5fiEh3ZcGuRM9kkEvQohCcKeZIsKwZ6_L4/embed?start=false&amp;loop=false&amp;delayms=3000&#34; frameborder=&#34;0&#34; width=&#34;960&#34; height=&#34;569&#34; allowfullscreen=&#34;true&#34; mozallowfullscreen=&#34;true&#34; webkitallowfullscreen=&#34;true&#34;&gt;&lt;/iframe&gt;
    &lt;/div&gt;&lt;/p&gt;
&lt;p&gt;goroutineリークをリアルタイムに検出できるの便利そう。&lt;/p&gt;
&lt;h2 id=&#34;モジュラモノリスにおける境界をgoのinternalパッケージで守る&#34;&gt;モジュラモノリスにおける境界をGoのinternalパッケージで守る&lt;/h2&gt;
&lt;p&gt;SODA inc.のmagavelさんによる発表。&lt;/p&gt;
&lt;p&gt;&lt;div class=&#34;embed-container speakerdeck&#34;&gt;
        &lt;iframe src=&#34;https://speakerdeck.com/player/52cdc21278874c8dafb7a21812d6bd81&#34; allowfullscreen=&#34;true&#34; mozallowfullscreen=&#34;true&#34; webkitallowfullscreen=&#34;true&#34;&gt;&lt;/iframe&gt;
      &lt;/div&gt;&lt;/p&gt;
&lt;p&gt;メモ:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;「結合はむしろ、忘れてはならない設計ツールだ。」&lt;/li&gt;
&lt;li&gt;&lt;code&gt;bounded_context&lt;/code&gt;ディレクトリを切っているのが印象的だった&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;お話したこと:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;ディレクトリ構成について
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;bounded_context&lt;/code&gt;ディレクトリの同階層には&lt;code&gt;monolish&lt;/code&gt;ディレクトリがある
&lt;ul&gt;
&lt;li&gt;これらは現状ワンバイナリになっている&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;code&gt;bounded_context&lt;/code&gt;ディレクトリの中には購入、xxx、yyyなどの境界づけられたコンテキストが並ぶ。&lt;/li&gt;
&lt;li&gt;たとえば購入コンテキストの中には購入モジュール、決済モジュールなどがある。&lt;/li&gt;
&lt;li&gt;購入モジュールからは決済モジュールの公開されたIFを呼び出すようになっている。&lt;/li&gt;
&lt;li&gt;公開したくないパッケージはすべてinternal配下に置くことで予期しない依存を防いでいる。&lt;/li&gt;
&lt;li&gt;他にも&lt;code&gt;depguard&lt;/code&gt;を使って依存関係を制御している。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;go設計思想の深掘り&#34;&gt;Go設計思想の深掘り&lt;/h2&gt;
&lt;p&gt;k_program510さんによる発表。&lt;/p&gt;
&lt;p&gt;&lt;div class=&#34;embed-container speakerdeck&#34;&gt;
        &lt;iframe src=&#34;https://speakerdeck.com/player/bf88016d5fe349edb4eee19de56f94c2&#34; allowfullscreen=&#34;true&#34; mozallowfullscreen=&#34;true&#34; webkitallowfullscreen=&#34;true&#34;&gt;&lt;/iframe&gt;
      &lt;/div&gt;&lt;/p&gt;
&lt;p&gt;メモ:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;発表者の方がオブジェクト指向言語に慣れていてGoにクラスがないことに驚いてGo誕生の背景を深ぼろうと思った、という自分の疑問に向き合う姿勢がとても素敵だと思った。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;設計思想は「どこで使うべきか」を教えてくれる&lt;/code&gt;いい言葉だ。&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;databasesqldriverを理解してカスタムデータベースドライバーを作る&#34;&gt;database/sql/driverを理解してカスタムデータベースドライバーを作る&lt;/h2&gt;
&lt;p&gt;replu5さんによる発表。&lt;/p&gt;
&lt;p&gt;&lt;div class=&#34;embed-container speakerdeck&#34;&gt;
        &lt;iframe src=&#34;https://speakerdeck.com/player/71c311a482f14af59e5808230f22dae3&#34; allowfullscreen=&#34;true&#34; mozallowfullscreen=&#34;true&#34; webkitallowfullscreen=&#34;true&#34;&gt;&lt;/iframe&gt;
      &lt;/div&gt;&lt;/p&gt;
&lt;p&gt;メモ:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;カスタムデータベースドライバーを作る理由
&lt;ul&gt;
&lt;li&gt;ログをだしたい&lt;/li&gt;
&lt;li&gt;リクエストをDBのwriteインスタンスとreadインスタンスに振り分けたい&lt;/li&gt;
&lt;li&gt;sqlcを使っているが、sqlcが生成したコードに手を加えていくのは避けたい&lt;/li&gt;
&lt;li&gt;本体をforkしてしまうと本体に追従するのが大変なので既存のドライバーをラップしたドライバーを作成することにした&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;お話したこと&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;sqlcだと引数に応じてwhere句を一部変更することができないと思うがどうやっているのか。
&lt;ul&gt;
&lt;li&gt;そういうケースでは複数パターンのクエリを（愚直に）repository層に書いている。&lt;/li&gt;
&lt;li&gt;そもそも巨大で複雑なクエリにはsqlcは適していないので使うべきではないかもしれない。
&lt;ul&gt;
&lt;li&gt;（技術の思想や特徴を理解し適切な場所で使うべき、という姿勢は↑のk_program510さんの『Go設計思想の深掘り』とも通じることがあると感じた。）&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;nilとは何か-言語仕様と設計者の葛藤から理解する&#34;&gt;nilとは何か 〜言語仕様と設計者の葛藤から理解する〜&lt;/h2&gt;
&lt;p&gt;株式会社サイバーエージェント kurodaさんによる発表。&lt;/p&gt;
&lt;p&gt;&lt;div class=&#34;embed-container speakerdeck&#34;&gt;
        &lt;iframe src=&#34;https://speakerdeck.com/player/a0086a4f622f413b83f12560bf8fb2a2&#34; allowfullscreen=&#34;true&#34; mozallowfullscreen=&#34;true&#34; webkitallowfullscreen=&#34;true&#34;&gt;&lt;/iframe&gt;
      &lt;/div&gt;&lt;/p&gt;
&lt;p&gt;以下メモ。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Goで定義されているキーワード数を即答している人が数人いてすごかったw（25個らしい）&lt;/li&gt;
&lt;li&gt;&lt;code&gt;nil&lt;/code&gt;はキーワードではない。&lt;code&gt;true&lt;/code&gt;, &lt;code&gt;false&lt;/code&gt;, &lt;code&gt;iota&lt;/code&gt;と同じpredeclared identifier(事前宣言された識別子)である。&lt;/li&gt;
&lt;li&gt;predeclared identifierのなかでデフォルト型を持たないのは&lt;code&gt;nil&lt;/code&gt;だけ。&lt;/li&gt;
&lt;li&gt;（ちょいちょいクイズが挟まっていて参加者を飽きさせない工夫があって発表の仕方が参考になった）&lt;/li&gt;
&lt;li&gt;interfaceが==nilになるのは型情報もデータも両方ゼロのときのみ。
&lt;ul&gt;
&lt;li&gt;なのでtyped nilは==nilにならない。
&lt;ul&gt;
&lt;li&gt;-&amp;gt; &lt;code&gt;var err *MyError = nil&lt;/code&gt;のように初期化した値は==nilにならないのでnilをreturnしたい場合は明示的にnilを返す必要がある。（全然知らなかった）&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;nilに関する問題をどう解決するかの議論がなかなか前に進んでいないことを説明してからの&lt;code&gt;errors.AsType&lt;/code&gt;をセマンティクスを変えずにうまく問題を解決した例として説明する流れがめっちゃ綺麗だった。&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;who-tests-the-tests-&#34;&gt;Who tests the &lt;code&gt;Tests&lt;/code&gt; ?&lt;/h2&gt;
&lt;p&gt;sivchariさんの発表。&lt;/p&gt;
&lt;p&gt;&lt;div class=&#34;embed-container google-slides&#34;&gt;
      &lt;iframe src=&#34;https://docs.google.com/presentation/d/1we1bAhUH-_hCEZTYFy2DOyFjWN0fp7VWBkWBha8nwk4/embed?start=false&amp;loop=false&amp;delayms=3000&#34; frameborder=&#34;0&#34; width=&#34;960&#34; height=&#34;569&#34; allowfullscreen=&#34;true&#34; mozallowfullscreen=&#34;true&#34; webkitallowfullscreen=&#34;true&#34;&gt;&lt;/iframe&gt;
    &lt;/div&gt;&lt;/p&gt;
&lt;p&gt;メモ:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;AI時代になってCIの重要性が増している。&lt;/li&gt;
&lt;li&gt;カバレッジだけを追っていくと本質的でないテストコードが増えてしまう。&lt;/li&gt;
&lt;li&gt;テストコードのテストとしてMutation Testingという手法を紹介する。&lt;/li&gt;
&lt;li&gt;Mutation Testing
&lt;ul&gt;
&lt;li&gt;プログラムの一部を意図的に書き換え、生成したミュータントに対してテストを実行し、失敗するかどうかを検証する手法。
&lt;ul&gt;
&lt;li&gt;演算子の変更、&lt;code&gt;else&lt;/code&gt;ブロックの削除など&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;失敗することを期待するテスト(&lt;code&gt;KILLED&lt;/code&gt;: テスト失敗 == 期待した挙動、&lt;code&gt;SURVIVED&lt;/code&gt;: テスト成功 == 期待した挙動ではない)&lt;/li&gt;
&lt;li&gt;どれくらい失敗したかを指標にする。&lt;/li&gt;
&lt;li&gt;ただこれは銀の弾丸ではない。実行時間とのトレードオフになる。
&lt;ul&gt;
&lt;li&gt;100% &lt;code&gt;KILLED&lt;/code&gt;を目指すべきではない。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Mutation Testingをどう実装するか
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/sivchari/gomu&#34; target=&#34;_blank&#34; &gt;sivchari/gomu&lt;/a&gt;というMutation Testingライブラリを作成した。&lt;/li&gt;
&lt;li&gt;overlayを使うと実際のファイルを仮想的に変更して実行できる
&lt;ul&gt;
&lt;li&gt;ソースコードを汚さずに好きなように変更できる&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;感想:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;overlayすごそう&lt;/li&gt;
&lt;li&gt;気になったこと
&lt;ul&gt;
&lt;li&gt;mutation testingの使い所について
&lt;ul&gt;
&lt;li&gt;実際のプロダクションに導入するならある程度テストが整備されたあとにやるのが優先順位としてよい？（Mutation Testingがちゃんと動作することの前提としてある程度のカバレッジが必要そう）&lt;/li&gt;
&lt;li&gt;あとは不慣れな巨大コードと向き合うときにmutation testを実行してみてテスト品質を把握する、というのもいいかもしれない。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;mutation testing以外のテスト品質保証手法について
&lt;ul&gt;
&lt;li&gt;あまりテストの品質を定量的、機械的に保証する方法をカバレッジ以外に考えたことがなかった。&lt;/li&gt;
&lt;li&gt;mutation testing以外ではどのようにテストコードの品質や正当性を保証するのがよさそう？&lt;/li&gt;
&lt;li&gt;たとえばk8sの内部実装などではどのように品質担保しているのか気になった（気になっただけで調べられてはいない）&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;goから学ぶgcの仕組みとgreen-tea-gcによる次世代最適化&#34;&gt;Goから学ぶGCの仕組みとGreen Tea GCによる次世代最適化&lt;/h2&gt;
&lt;p&gt;go_poron10さんによる発表。&lt;/p&gt;
&lt;p&gt;&lt;div class=&#34;embed-container speakerdeck&#34;&gt;
        &lt;iframe src=&#34;https://speakerdeck.com/player/17dc2bf5b4ed4a1d8c289ad77f26cd8c&#34; allowfullscreen=&#34;true&#34; mozallowfullscreen=&#34;true&#34; webkitallowfullscreen=&#34;true&#34;&gt;&lt;/iframe&gt;
      &lt;/div&gt;&lt;/p&gt;
&lt;p&gt;とても内容が高度で途中でついていけなくなってしまったのでいつかリベンジしたい。&lt;/p&gt;
&lt;h2 id=&#34;実装公開goで実現する堅牢なアーキテクチャdddgrpc-connectそしてai協調開発の実践&#34;&gt;【実装公開】Goで実現する堅牢なアーキテクチャ：DDD、gRPC-connect、そしてAI協調開発の実践&lt;/h2&gt;
&lt;p&gt;株式会社テレシーのDaisuke Sasakiさんによる発表。&lt;/p&gt;
&lt;p&gt;&lt;div class=&#34;embed-container speakerdeck&#34;&gt;
        &lt;iframe src=&#34;https://speakerdeck.com/player/0592dd9c358e4ea9b74adf758ddb546a&#34; allowfullscreen=&#34;true&#34; mozallowfullscreen=&#34;true&#34; webkitallowfullscreen=&#34;true&#34;&gt;&lt;/iframe&gt;
      &lt;/div&gt;&lt;/p&gt;
&lt;p&gt;お話したこと:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;application層のQuery Serviceからdomain packageへの依存はOKにしている？それとも独自のreturn typeをQuery serviceで定義している？
&lt;ul&gt;
&lt;li&gt;依存OKにしている。&lt;/li&gt;
&lt;li&gt;domain層に以下の2種類があり、それぞれ別パッケージに定義している。
&lt;ul&gt;
&lt;li&gt;commandとqueryの両方から参照される型(tier1)&lt;/li&gt;
&lt;li&gt;queryからのみ参照される型(tier2)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;スポンサーブースで話したこと一部抜粋&#34;&gt;スポンサーブースで話したこと（一部抜粋）&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;ANDPAD
&lt;ul&gt;
&lt;li&gt;意外にもGo関連の勉強会でスポンサーブースを出すのは初とのこと。
&lt;ul&gt;
&lt;li&gt;スポンサーブースが抽選なので出展の機会を得るのは簡単ではないらしい。&lt;/li&gt;
&lt;li&gt;個人的にはGoに力を入れている会社のイメージを2年くらい前から持っていたので意外だった。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;SODA
&lt;ul&gt;
&lt;li&gt;CodeRabbitでレビュー負荷を下げている&lt;/li&gt;
&lt;li&gt;PRレビューはチーム全員で分担して特定の誰かに負担が偏らないようにしている&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;感想&#34;&gt;感想&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;ソロ参加だったがセッションの合間や懇親会でたくさんの人と交流できてとても楽しかった。
&lt;ul&gt;
&lt;li&gt;社外のエンジニアと話せるとかなり刺激&amp;amp;学びになるので今後も機会を見つけていろんな勉強会に参加してみようと思った。&lt;/li&gt;
&lt;li&gt;勉強会に参加している人は自分の時間を使って勉強会に参加するくらいなのでモチベが高い（あるいは技術が好きな）人が多いというのはあるかもしれない。（考えてみれば当たり前だが実際に行ってみてそのことを実感できた）&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;今年はCSの勉強&lt;sup id=&#34;fnref:3&#34;&gt;&lt;a href=&#34;#fn:3&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;3&lt;/a&gt;&lt;/sup&gt;と並行してGoのインプット &amp;amp; アウトプットを頑張っていこうと思っているのでモチベがいい感じに上がった。
&lt;ul&gt;
&lt;li&gt;たくさんの強者を見たことで自分が目指す技術力の基準を上げられた感覚がある。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;運営、登壇者、スポンサー、参加者の皆様ありがとうございました！&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;振り返り&#34;&gt;振り返り&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;セッションの合間は発表者の方に質問するためにウロウロしている時間が長かったのもあり、全スポンサーブースを回れなかった。もうちょっといい感じに時間を使えるとよさそう。（スポンサーブースで各社の方とお話するのは楽しいので全部回りたい気持ち）&lt;/li&gt;
&lt;li&gt;懇親会の途中から他の人に自分から話しかけたりできたけど次回は最初からできるともっとよさそう。&lt;sup id=&#34;fnref:4&#34;&gt;&lt;a href=&#34;#fn:4&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;4&lt;/a&gt;&lt;/sup&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;おまけ&#34;&gt;おまけ&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;土日に仙台でKing Gnuのライブがあった影響か、土曜は仙台駅付近のホテルがめっちゃ高かったので福島まで移動して宿泊してgot aことなきした。（ありがとうアパホテル）&lt;/li&gt;
&lt;li&gt;福島で食べたお寿司が美味しかった。観光までする（体力的）余裕がなかったのが残念。
&lt;ul&gt;
&lt;li&gt;&lt;img src=&#34;sushi.webp&#34; alt=&#34;&#34; loading=&#34;lazy&#34; /&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;なんか新幹線が長かった。
&lt;ul&gt;
&lt;li&gt;&lt;img src=&#34;long-shinkansen.webp&#34; alt=&#34;&#34; loading=&#34;lazy&#34; /&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;div class=&#34;footnotes&#34; role=&#34;doc-endnotes&#34;&gt;
&lt;hr&gt;
&lt;ol&gt;
&lt;li id=&#34;fn:1&#34;&gt;
&lt;p&gt;大AI時代になりPRレビュー負担が肥大化しているのでCIで機械的にコード品質を担保するためにLinterを増やそうと思っているため。&amp;#160;&lt;a href=&#34;#fnref:1&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id=&#34;fn:2&#34;&gt;
&lt;p&gt;&lt;a href=&#34;https://pkg.go.dev/cmd/compile#hdr-Line_Directives&#34; target=&#34;_blank&#34; &gt;https://pkg.go.dev/cmd/compile#hdr-Line_Directives&lt;/a&gt;&amp;#160;&lt;a href=&#34;#fnref:2&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id=&#34;fn:3&#34;&gt;
&lt;p&gt;今は（今更ながら）『ネットワークはなぜつながるのか』を読んでいる。&amp;#160;&lt;a href=&#34;#fnref:3&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id=&#34;fn:4&#34;&gt;
&lt;p&gt;話しかけるときは普通に「お疲れ様です〜」とかでいいんだなという学びを得た。&amp;#160;&lt;a href=&#34;#fnref:4&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;
</content>
    </item>
    
    <item>
      <title>VimConf 2025 Smallに参加した</title>
      <link>https://blog.kyu08.com/pr-344/posts/vim-conf-2025/</link>
      <pubDate>Sun, 02 Nov 2025 01:07:08 +0000</pubDate>
      
      <guid>https://blog.kyu08.com/pr-344/posts/vim-conf-2025/</guid>
      <description>2025年11月2日（日）にアキバプラザ・アキバホールで開催されたVimConf 2025 Smallに参加した。 こちらはノベルティ。食器とかお箸はた</description>
      <content>&lt;p&gt;2025年11月2日（日）にアキバプラザ・アキバホールで開催された&lt;a href=&#34;https://vimconf.org/2025/ja/&#34; target=&#34;_blank&#34; &gt;VimConf 2025 Small&lt;/a&gt;に参加した。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;vim-conf-2025.webp&#34; alt=&#34;vim-conf-2025.webp&#34; loading=&#34;lazy&#34; /&gt;&lt;/p&gt;
&lt;p&gt;こちらはノベルティ。食器とかお箸はたくさんあっても困らないのでありがたい。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;お茶碗&lt;/li&gt;
&lt;li&gt;お箸&lt;/li&gt;
&lt;li&gt;コースター&lt;/li&gt;
&lt;li&gt;巾着&lt;/li&gt;
&lt;li&gt;お茶&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img src=&#34;vim-conf-novelty.webp&#34; alt=&#34;vim-conf-novelty.webp&#34; loading=&#34;lazy&#34; /&gt;&lt;/p&gt;
&lt;h2 id=&#34;nvim-cmp-retrospective-exploring-completion-and-facing-foss-challenges&#34;&gt;nvim-cmp retrospective: Exploring Completion and Facing FOSS Challenges&lt;/h2&gt;
&lt;p&gt;hrsh7thさんによる発表。&lt;/p&gt;
&lt;h3 id=&#34;explore-completion&#34;&gt;Explore Completion&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;nvim-cmpのcmpって「シーエムピー」って読むんだ（「コンプ」って読んでた）&lt;/li&gt;
&lt;li&gt;補完プラグインってめちゃめちゃいろんなケースを考慮して作られているんだな&amp;hellip;（全然詳しくないので薄い感想しか出てこない）&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;foss-challenges&#34;&gt;FOSS Challenges&lt;/h3&gt;
&lt;p&gt;大きなOSSプロジェクトをメンテすることになったことでの学びの共有。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;もともとはユーザーが求めるものと自分のやりたいことが合致していた。自分がやりたいことをやることで感謝してもらえていた。
&lt;ul&gt;
&lt;li&gt;あるときから自分のやりたいこととユーザーの要望が乖離してきた
&lt;ul&gt;
&lt;li&gt;やりたいこと
&lt;ul&gt;
&lt;li&gt;コード品質を上げたい&lt;/li&gt;
&lt;li&gt;実験的な新機能を追加したい&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;ユーザーが求めること
&lt;ul&gt;
&lt;li&gt;安定した動作&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;結果モチベが下がった&lt;/li&gt;
&lt;li&gt;予期せずプロジェクトが大きくなって責任が芽生えた&lt;/li&gt;
&lt;li&gt;モチベが低いならコミュニティ主導にすればいいのでは？という意見も見るが&amp;hellip;
&lt;ul&gt;
&lt;li&gt;直接話したこともない人をrepositoryに招待するのは危険だと感じた（ユーザー数も多いのでサプライチェーンアタックが怖い）
&lt;ul&gt;
&lt;li&gt;実際にhrsh7thさんが作ったプラグインのコピープラグインがリリース1週間後にできて、そこにマルウェアが含まれていたことがあるらしい（怖すぎる）&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;新メンテナのオンボーディングをサポートするのも大変&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;とはいえOSS開発は楽しい
&lt;ul&gt;
&lt;li&gt;nvim-cmpを公開して「これめっちゃ便利だね！」といってもらえたのはとても印象に残っている&lt;/li&gt;
&lt;li&gt;意図せず人気になってしまうと責任も生じる&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;感想&#34;&gt;感想&lt;/h3&gt;
&lt;p&gt;たくさんのユーザーを抱えるOSSのメンテ目線のリアルな心境を聞けてよかった。&lt;/p&gt;
&lt;p&gt;大規模OSSのメンテナに憧れる気持ちもあるが、楽しいこともあればその分大変なこともあるんだろうな〜などと思った。（それはそう）&lt;/p&gt;
&lt;p&gt;とはいえたくさんの開発者、プロジェクトに寄与するような大規模OSSメンテナへの憧れはあるのでコミットしたいOSSが見つかったら挑戦してみようと思う。&lt;/p&gt;
&lt;h2 id=&#34;and-yet-vim-survived-thinking-and-seeing-in-the-age-of-code-you-dont-write&#34;&gt;And Yet, Vim Survived: Thinking and Seeing in the Age of Code You Don&amp;rsquo;t Write&lt;/h2&gt;
&lt;p&gt;Λlisueさんによるコードリーディングに関する発表。&lt;/p&gt;
&lt;p&gt;以下の3stepに分けてコードを読む。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Where - Seeing the flow&lt;/li&gt;
&lt;li&gt;What - Seeing the structure&lt;/li&gt;
&lt;li&gt;Why - Seeing the Reasoning&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;where---seeing-the-flow&#34;&gt;Where - Seeing the Flow&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;File Jumps
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;gf&lt;/code&gt; / &lt;code&gt;gF&lt;/code&gt; - open file under cursor&lt;/li&gt;
&lt;li&gt;これ知らなかった。&lt;code&gt;go test&lt;/code&gt;の結果を見て失敗しているファイルに飛ぶときとかに便利そう。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Search Jumps
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;/&lt;/code&gt;や&lt;code&gt;?&lt;/code&gt;で検索し&lt;code&gt;n&lt;/code&gt;でジャンプ&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;fall.nvim(fuzzy finder)
&lt;ul&gt;
&lt;li&gt;検索して&lt;code&gt;n&lt;/code&gt;で飛ぶのに比べて&lt;code&gt;&amp;lt;c-o&amp;gt;&lt;/code&gt;で直前の位置に戻れるので便利&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Quickfix
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;]q&lt;/code&gt; / &lt;code&gt;[q&lt;/code&gt;でジャンプできる&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;what---seeing-the-structure&#34;&gt;What - Seeing the structure&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Window management
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;&amp;lt;c-w&amp;gt;&lt;/code&gt; + &lt;code&gt;s&lt;/code&gt;/&lt;code&gt;v&lt;/code&gt;/&lt;code&gt;h&lt;/code&gt;/&lt;code&gt;j&lt;/code&gt;/&lt;code&gt;k&lt;/code&gt;/&lt;code&gt;l&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;&amp;lt;c-w&amp;gt;&lt;/code&gt; + &lt;code&gt;o&lt;/code&gt;: （複数ウィンドウを開いているときに実行すると）現在のウィンドウのみを表示する
&lt;ul&gt;
&lt;li&gt;nativeだと元の状態に戻れない&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;goyo.vim&lt;sup id=&#34;fnref:1&#34;&gt;&lt;a href=&#34;#fn:1&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;1&lt;/a&gt;&lt;/sup&gt;を使うと&lt;code&gt;&amp;lt;c-w&amp;gt;&lt;/code&gt; + &lt;code&gt;o&lt;/code&gt;をもう一度実行するともとのウィンドウの状態に戻れる。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;file treeは知らないファイルを探すために使う&lt;/li&gt;
&lt;li&gt;fuzzy finderは知っているファイルを開くために使う&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;why---seeing-the-reasoning&#34;&gt;Why - Seeing the Reasoning&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;git blameを活用してコードの背景を理解しながらコードを読む&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;感想-1&#34;&gt;感想&lt;/h3&gt;
&lt;p&gt;ありすえさんが発表がうますぎてその点でも勉強になった。特にこのあたりのポイントが勉強になった。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;論理構造が自然で理解しやすかった&lt;/li&gt;
&lt;li&gt;話す速度、スライドの情報量が多すぎなかったのでついていきやすかった&lt;/li&gt;
&lt;li&gt;ユーモアを交えていて楽しく聞けた&lt;/li&gt;
&lt;li&gt;シンプルに滑舌が良かった（わかんないけどマイクの使い方とかも違うんだろうか。なんかとにかく声が明瞭で聞き取りやすかった）&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;beyond-syntax-highlighting-unlocking-the-power-of-tree-sitter-in-neovim&#34;&gt;Beyond Syntax Highlighting: Unlocking the Power of Tree-sitter in Neovim&lt;/h2&gt;
&lt;p&gt;atusyさんによるtree-sitterに関する発表。&lt;/p&gt;
&lt;p&gt;&lt;div class=&#34;blogcard&#34; data-url=&#34;https://github.com/atusy/treemonkey.nvim&#34; data-auto-fetch=&#34;false&#34;&gt;
  &lt;a href=&#34;https://github.com/atusy/treemonkey.nvim&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34; class=&#34;blogcard-link&#34;&gt;&lt;div class=&#34;blogcard-thumbnail&#34;&gt;
      &lt;img src=&#34;https://opengraph.githubassets.com/804219f33da8a500a826d1d11eba82298c6ccc5bb6beaa63485762164a54cbbf/atusy/treemonkey.nvim&#34; alt=&#34;GitHub - atusy/treemonkey.nvim&#34; loading=&#34;lazy&#34;&gt;
    &lt;/div&gt;&lt;div class=&#34;blogcard-content&#34;&gt;
      &lt;div class=&#34;blogcard-title&#34;&gt;GitHub - atusy/treemonkey.nvim&lt;/div&gt;&lt;div class=&#34;blogcard-description&#34;&gt;Contribute to atusy/treemonkey.nvim development by creating an account on GitHub.&lt;/div&gt;&lt;div class=&#34;blogcard-url&#34;&gt;https://github.com/atusy/treemonkey.nvim&lt;/div&gt;
    &lt;/div&gt;
  &lt;/a&gt;
&lt;/div&gt;
 便利そう&lt;/p&gt;
&lt;p&gt;tree-sitterをもっと深く理解したくなった（&lt;a href=&#34;https://github.com/kyu08/fzf-make&#34; target=&#34;_blank&#34; &gt;趣味のプロジェクト&lt;/a&gt;で&lt;a href=&#34;https://github.com/IndianBoy42/tree-sitter-just&#34; target=&#34;_blank&#34; &gt;IndianBoy42/tree-sitter-just&lt;/a&gt;に依存しているので自分もメンテに参加できるようになりたい）&lt;/p&gt;
&lt;h2 id=&#34;designing-repeatable-edits-the-architecture-of--in-vim&#34;&gt;Designing Repeatable Edits: The Architecture of . in Vim&lt;/h2&gt;
&lt;p&gt;Satoru Kitaguchiさんによるドットリピートの解説。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;.&lt;/code&gt;でリピートできる操作
&lt;ul&gt;
&lt;li&gt;ノーマルモードから始まってバッファを編集し、ノーマルモードに戻ってくる&lt;/li&gt;
&lt;li&gt;undoツリー上のlast-change nodeを再実行している = 直前の編集チャンクを再適用する&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;code&gt;daw&lt;/code&gt;, &lt;code&gt;ci&amp;quot;&lt;/code&gt;などはリピートできる&lt;/li&gt;
&lt;li&gt;Visual modeを含んだ操作などはリピートできない
&lt;ul&gt;
&lt;li&gt;Visual modeでは内部的には選択された文字数や行数しか保持されないため&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;さらっとVimの内部動作を解説していてかっこよすぎた。Vimのコードを読んだのか、Vimの内部構造を解説しているsomethingがどこかに存在するのかちょっと気になった。かなり周到に調査されてスライドを作られてそうな印象を受けた。&lt;/p&gt;
&lt;p&gt;便利なプラグインの情報を集めるのも楽しいが、たまにはちゃんとVim自体の機能を学んだ方がかえって効率よく日々の操作を効率化できそうだな〜と思った。&lt;/p&gt;
&lt;p&gt;実践Vimを読みたい気持ちが芽生えた。（n回目）&lt;/p&gt;
&lt;h2 id=&#34;lt&#34;&gt;LT&lt;/h2&gt;
&lt;p&gt;ryoppippiさんの &lt;a href=&#34;https://github.com/ryoppippi/nvim-in-the-loop&#34; target=&#34;_blank&#34; &gt;https://github.com/ryoppippi/nvim-in-the-loop&lt;/a&gt; がかなり便利そう。&lt;/p&gt;
&lt;p&gt;自分のVimの操作履歴を記録し、AIにどのようなキーマップを登録すると無駄な操作を減らせるかを分析させるというものらしい。すごい。&lt;/p&gt;
&lt;h2 id=&#34;まとめ&#34;&gt;まとめ&lt;/h2&gt;
&lt;p&gt;学びや刺激を得られたので行って良かった。&lt;/p&gt;
&lt;p&gt;発表内容もさることながらプレゼンが上手な方がいたり、（おそらく日本の方だけど）英語が超上手な方がいたりして、その意味でも刺激を得られた。&lt;/p&gt;
&lt;p&gt;今回初参加なので他の回との比較はできないが全然Smallな感じがせず、満足感が高かった。（もしやSmallじゃない回は2トラックとかあったりする&amp;hellip;?）&lt;/p&gt;
&lt;p&gt;運営の皆さん、登壇者の皆さんありがとうございました！&lt;/p&gt;
&lt;div class=&#34;footnotes&#34; role=&#34;doc-endnotes&#34;&gt;
&lt;hr&gt;
&lt;ol&gt;
&lt;li id=&#34;fn:1&#34;&gt;
&lt;p&gt;おそらくこれ &lt;a href=&#34;https://github.com/junegunn/goyo.vim&#34; target=&#34;_blank&#34; &gt;https://github.com/junegunn/goyo.vim&lt;/a&gt;&amp;#160;&lt;a href=&#34;#fnref:1&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;
</content>
    </item>
    
    <item>
      <title>関数型まつり2025に参加した</title>
      <link>https://blog.kyu08.com/pr-344/posts/fp-matsuri-2025/</link>
      <pubDate>Sun, 15 Jun 2025 05:00:00 +0000</pubDate>
      
      <guid>https://blog.kyu08.com/pr-344/posts/fp-matsuri-2025/</guid>
      <description>2025/06/14(土)、2025/06/15(日)に中野セントラルパークで行われた関数型まつり2025に参加した。 筆者はElmやRust</description>
      <content>&lt;p&gt;2025/06/14(土)、2025/06/15(日)に中野セントラルパークで行われた関数型まつり2025に参加した。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;nakano-central-park.webp&#34; alt=&#34;nakano-central-park&#34; loading=&#34;lazy&#34; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;pop.webp&#34; alt=&#34;pop&#34; loading=&#34;lazy&#34; /&gt;&lt;/p&gt;
&lt;p&gt;筆者はElmやRustの開発体験を気に入っており、Webアプリケーションのサーバーサイドを関数型言語で書くことに興味があったので参加してみた。&lt;/p&gt;
&lt;h2 id=&#34;関数型言語テイスティング-haskell-scala-clojure-elixirを比べて味わう関数型プログラミングの旨さ---lagénorhynqueカマイルカさん&#34;&gt;関数型言語テイスティング: Haskell, Scala, Clojure, Elixirを比べて味わう関数型プログラミングの旨さ - lagénorhynque/カマイルカさん&lt;/h2&gt;
&lt;p&gt;lagénorhynque/カマイルカさんによるHaskell, Scala, Clojure, Elixirの紹介と比較を行う発表。&lt;/p&gt;
&lt;p&gt;&lt;div class=&#34;embed-container docswell&#34;&gt;
      &lt;div class=&#34;docswell-placeholder&#34; data-src=&#34;https://www.docswell.com/s/lagenorhynque/Z6VX6E-functional-language-tasting-haskell-scala-clojure-elixir?slide=1&#34; style=&#34;width:100%;height:569px;background:#f0f0f0;display:flex;align-items:center;justify-content:center;color:#666;&#34;&gt;Loading...&lt;/div&gt;
    &lt;/div&gt;&lt;/p&gt;
&lt;p&gt;部分適用や関数合成やパイプ演算子などElmで便利だった言語機能を思い出しながら聞いていた。&lt;/p&gt;
&lt;p&gt;文法を見ていると、Elmの文法はかなりHaskellに近いようだった。(ML系と呼ばれるらしい)&lt;/p&gt;
&lt;p&gt;あとは関数型かつ動的型付け言語の実際のアプリケーション開発での書き味が全然想像がつかないのでちょっとElixirやClojureを書いてみたくなった。質疑応答でも触れられていたが、実際にML系の言語とlispなどの動的型付け言語の関数型言語ではメンタルモデルが違うらしい。&lt;/p&gt;
&lt;p&gt;発表の最後に関数型プログラマのメンタルモデルとして以下のようなことを紹介されていて、自分が関数型言語から得た学びと重なる部分が多かった。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;適切な制約が解放をもたらす
&lt;ul&gt;
&lt;li&gt;純粋関数を基本にしてコードを組み立てていく&lt;/li&gt;
&lt;li&gt;いつでもどこでも破壊的に更新できるデータ構造は怖いため不変/永続データを基本に&lt;/li&gt;
&lt;li&gt;適切な型を定義することで不正値を表現不能にしてより型安全に&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;単純で安定したブロックを基礎に全体を構成したい
&lt;ul&gt;
&lt;li&gt;式思考、宣言的、合成可能&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;関数型言語を採用し維持し継続する---松澤-有さん&#34;&gt;関数型言語を採用し、維持し、継続する - 松澤 有さん&lt;/h2&gt;
&lt;p&gt;Siiibo証券株式会社のCTOである松澤さんによる自社プロダクトのフロントエンド、バックエンドの開発言語として関数型言語(Elm, Elixir)をなぜ採用したのか、そしていかにして維持し、継続しているかについての発表。実は主にこの発表を聞くために関数型まつりに参加したので良い発表を聞けてよかった。&lt;/p&gt;
&lt;p&gt;&lt;div class=&#34;blogcard&#34; data-url=&#34;https://zenn.dev/siiibo_tech/articles/adopting-fp-languages&#34; data-auto-fetch=&#34;false&#34;&gt;
  &lt;a href=&#34;https://zenn.dev/siiibo_tech/articles/adopting-fp-languages&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34; class=&#34;blogcard-link&#34;&gt;&lt;div class=&#34;blogcard-thumbnail&#34;&gt;
      &lt;img src=&#34;https://res.cloudinary.com/zenn/image/upload/s--264zsvWh--/c_fit%2Cg_north_west%2Cl_text:notosansjp-medium.otf_55:%25E9%2596%25A2%25E6%2595%25B0%25E5%259E%258B%25E8%25A8%2580%25E8%25AA%259E%25E3%2582%2592%25E6%258E%25A1%25E7%2594%25A8%25E3%2581%2597%25E3%2580%2581%25E7%25B6%25AD%25E6%258C%2581%25E3%2581%2597%25E3%2580%2581%25E7%25B6%2599%25E7%25B6%259A%25E3%2581%2599%25E3%2582%258B%2Cw_1010%2Cx_90%2Cy_100/g_south_west%2Cl_text:notosansjp-medium.otf_34:Yu%2520Matsuzawa%2Cx_220%2Cy_108/bo_3px_solid_rgb:d6e3ed%2Cg_south_west%2Ch_90%2Cl_fetch:aHR0cHM6Ly9zdG9yYWdlLmdvb2dsZWFwaXMuY29tL3plbm4tdXNlci11cGxvYWQvYXZhdGFyLzBmMzgxMmZkZWEuanBlZw==%2Cr_20%2Cw_90%2Cx_92%2Cy_102/co_rgb:6e7b85%2Cg_south_west%2Cl_text:notosansjp-medium.otf_30:Siiibo%25E3%2583%2586%25E3%2583%2583%25E3%2582%25AF%25E3%2583%2596%25E3%2583%25AD%25E3%2582%25B0%2Cx_220%2Cy_160/bo_4px_solid_white%2Cg_south_west%2Ch_50%2Cl_fetch:aHR0cHM6Ly9saDMuZ29vZ2xldXNlcmNvbnRlbnQuY29tL2EtL0FPaDE0R2dwd3pXbm9hSUl4bEVZcUtBSnRicVVheWljRmlJVExYVGZNN0EyPXMyNTAtYw==%2Cr_max%2Cw_50%2Cx_139%2Cy_84/v1627283836/default/og-base-w1200-v2.png?_a=BACAGSGT&#34; alt=&#34;関数型言語を採用し、維持し、継続する&#34; loading=&#34;lazy&#34;&gt;
    &lt;/div&gt;&lt;div class=&#34;blogcard-content&#34;&gt;
      &lt;div class=&#34;blogcard-title&#34;&gt;関数型言語を採用し、維持し、継続する&lt;/div&gt;&lt;div class=&#34;blogcard-url&#34;&gt;https://zenn.dev/siiibo_tech/articles/adopting-fp-languages&lt;/div&gt;
    &lt;/div&gt;
  &lt;/a&gt;
&lt;/div&gt;
&lt;/p&gt;
&lt;p&gt;結局はラストマンシップを持って自分がなんとかするという気概が重要だという話が一番印象的だった。これは関数型言語を業務で書いているわけではない自分にも大いに参考になる話だと思っていて、結局どんな技術を採用したかやCTOかメンバーかなどにかかわらず、このラストマンシップを持っているエンジニアが多ければ多いほど開発組織は強固になるんだろうなと思った。&lt;/p&gt;
&lt;p&gt;また「アウトリーチを怠らなければ意外と世の中にちゃんと仲間はいる」ということをおっしゃっていて、使用言語がメインストリームであろうとなかろうと外部発信を通してコミュニティに貢献したり認知を獲得することの重要性を改めて感じた。やっていき。&lt;/p&gt;
&lt;p&gt;総じて松澤さんのエンジニアとしてのマインドセット的な部分がとても参考になった。&lt;/p&gt;
&lt;p&gt;技術的な内容に関しては、コードレビューの話とUpkeepの話が参考になった。&lt;/p&gt;
&lt;p&gt;コードレビューに関しては以下のようなことをおっしゃっていて、とても参考になった。特に2番目に関しては、前提としてコード品質を重要視するマインドがチームに装備されている必要があると思っていて、それをどう実現しているのか気になった。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;自分がいいと思う技術であっても、それを伝道できなければあとが続かない&lt;/li&gt;
&lt;li&gt;チームにとって良いコードとはどのようなものか、ということを感覚、信念として共有できる状態に持っていくことを目指している&lt;/li&gt;
&lt;li&gt;人は忘れるし、一度言っただけで身につくことは誰であれないので繰り返し伝えていくことが重要&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Upkeepとは維持費の意味で、ここでは依存ライブラリや言語自体のバージョンアップなどのことを指す。こまめにバージョンアップ作業をやっておくことでいざというときに言語やライブラリの新機能をすぐ取り込めたり、巨大なバージョンアップのせいでデグレするリスクを低減できたりと良いこと尽くめだと改めて感じた。（もちろん簡単ではないが）&lt;/p&gt;
&lt;p&gt;あとはバージョンを最新に保つという行為に名前をつけたことがなかったのでUpkeepという語で表現するのはいいなーと思った。&lt;/p&gt;
&lt;p&gt;以下発表を聞きながら取ったメモ。(発表を聞きつつスライドを見ながら書いたメモなので誤りが含まれる場合があります🙇)&lt;/p&gt;
&lt;h3 id=&#34;技術選定の方針&#34;&gt;技術選定の方針&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;CTO, Founding Engineerが技術構成を選ぶにあたっての観点
&lt;ul&gt;
&lt;li&gt;まともなモノを継続的に提供するに足る機能があるか&lt;/li&gt;
&lt;li&gt;それを実際につくるヒトを継続的に集められるか&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;（スタートアップなら）
&lt;ul&gt;
&lt;li&gt;（上記2点を説得材料として）カネを集められるか&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;非メインストリーム言語でどうやっていくか&#34;&gt;非メインストリーム言語でどうやっていくか&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;ElixirやElmはメインストリームと目されているとは言えず、モノ・ヒト・カネの要素を自信を持って揃えるには弱い&lt;/li&gt;
&lt;li&gt;とはいえ、良いと感じた技術があって、良いものを作れると検証できたのであればあとは自分がやるかどうかでしかない
&lt;ul&gt;
&lt;li&gt;勝手に機会は降ってこない&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;勇気と周りを巻き込んで走り続ける力が重要&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;コードレビューの技術&#34;&gt;コードレビューの技術&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;自分がいいと思う技術であっても、それを伝道できなければあとが続かない&lt;/li&gt;
&lt;li&gt;健全で有意義なコードレビューのやり取りがどのようなものか？という経験とその内面化が重要&lt;/li&gt;
&lt;li&gt;どういうコードがチームにとって良いコードかを伝道する
&lt;ul&gt;
&lt;li&gt;感覚、信念として共有できる状態に持っていきたい&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;以下の理由でコードレビューで繰り返し伝えていくことが重要
&lt;ul&gt;
&lt;li&gt;人は忘れる&lt;/li&gt;
&lt;li&gt;新しい人は入る&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;一度言っただけで身につくことは誰であれ、ない&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;upkeep&#34;&gt;Upkeep&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Upkeepとは維持費の意味で、ここでは依存ライブラリや言語自体のバージョンアップなどのことを指す。&lt;/li&gt;
&lt;li&gt;Upkeep恐怖症にならずにこまめにやれる環境をつくる。&lt;/li&gt;
&lt;li&gt;(バージョンアップ作業がやりやすいのは言語の大きな加点項目)&lt;/li&gt;
&lt;li&gt;Elixirで静的型検査の導入が2022年に発表された
&lt;ul&gt;
&lt;li&gt;Upkeepしておくと、こういった新機能もすぐに取り込める&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;情報収集&#34;&gt;情報収集&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;言語公式フォーラム, ML, Slack, Discordのウォッチ
&lt;ul&gt;
&lt;li&gt;そもそもコミュニティがデカすぎないので最新動向をすべて追うのがそこまで大変ではない&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;コンパイラ、主要ライブラリのissue trackerも購読する
&lt;ul&gt;
&lt;li&gt;チーム内で抱えてる課題と似たような話題も出たりする&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Twitter&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;コミュニティ還元&#34;&gt;コミュニティ還元&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;フォーラムでの質問を見るだけでなく回答もする
&lt;ul&gt;
&lt;li&gt;小さいコミュニティなので自分が第一人者、Front Runnerである可能性もある&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;国内外の勉強会参加、主催協力も積極的に行う&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;採用&#34;&gt;採用&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;やれることをやり、アウトリーチもすることが採用に直結する&lt;/li&gt;
&lt;li&gt;非メインストリーム言語だとその言語を業務で書くにはそもそも会社の選択肢が少なかったりするので、意外とマッチングしやすかったりもする&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;続けていく気概&#34;&gt;続けていく気概&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;結局大事なのは言いだしっぺがケツを持つ気概があるかどうか&lt;/li&gt;
&lt;li&gt;アウトリーチを怠らなければ意外と世の中にちゃんと仲間はいる&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;産業機械をelixirで制御する---菊池-豊さん&#34;&gt;産業機械をElixirで制御する - 菊池 豊さん&lt;/h2&gt;
&lt;p&gt;菊池 豊さんによる複数の水力発電の制御ソフトウェアをElixirで書いた経験を紹介する発表。&lt;/p&gt;
&lt;p&gt;Elixirは書きやすく、コミュニティも盛り上がっているという話を聞いてちょっと書いてみたくなった。&lt;/p&gt;
&lt;p&gt;以下メモ。&lt;/p&gt;
&lt;h3 id=&#34;課題&#34;&gt;課題&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Python
&lt;ul&gt;
&lt;li&gt;並行プログラミングができなかった&lt;/li&gt;
&lt;li&gt;コンパイラでの支援が期待できなかった&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;リプレイス先の候補はGo, Rust, Haskell, Erlang, Elm
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://qiita.com/kikuyuta/items/96c3f91a850e9274b0e9&#34; target=&#34;_blank&#34; &gt;Elixir を使うようになった経緯 〜電力システム制御の現場から〜&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;why-elixir&#34;&gt;Why Elixir&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;世俗型関数型言語
&lt;ul&gt;
&lt;li&gt;関数型であることにこだわりすぎず使いやすさがある&lt;/li&gt;
&lt;li&gt;コミュニティも楽しかった&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;並行性
&lt;ul&gt;
&lt;li&gt;アクターモデル&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;パイプ演算子&lt;/li&gt;
&lt;li&gt;パターンマッチ&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;elixirにないもの&#34;&gt;Elixirにないもの&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;型
&lt;ul&gt;
&lt;li&gt;静的型解析がほしい&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;lean言語は新世代の純粋関数型言語になれるか---井上亜星さん&#34;&gt;Lean言語は新世代の純粋関数型言語になれるか？ - 井上亜星さん&lt;/h2&gt;
&lt;p&gt;井上亜星さんによるLean言語の紹介の発表。&lt;/p&gt;
&lt;p&gt;この発表でLean言語という言語の存在を知った。純粋関数型言語でありながらforループやwhileループを書けるのはユニークだなーと思った。&lt;/p&gt;
&lt;h2 id=&#34;what-i-have-learned-from-15-years-of-functional-programming---scott-wlaschinさん&#34;&gt;What I have learned from 15 years of functional programming - Scott Wlaschinさん&lt;/h2&gt;
&lt;p&gt;Scott Wlaschinさんによる関数型プログラミングでの学びを共有する発表。&lt;/p&gt;
&lt;p&gt;「直和型とレコード型を駆使しドメインモデリングを正確に表現することで保守性が向上するだけでなく動作可能なドキュメントとしても機能する」という話が印象に残った。&lt;/p&gt;
&lt;p&gt;前者のメリットは以前から感じていたが、後者の観点はなかったので面白かった。（言われてみればそれはそうという感じだが）&lt;/p&gt;
&lt;p&gt;以下メモ。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;パイプライン指向で書くことで保守性の高いコードを書くことができる
&lt;ul&gt;
&lt;li&gt;以前はSOLID原則を満たすことを意識しすぎてしまいうまくいかなかったが、パイプライン的な志向でコードを書くことで自然と綺麗なコードを書くことができ、SOLID原則も自然と満たすことができるようになったとのこと&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;ドメインモデリング
&lt;ul&gt;
&lt;li&gt;直和型をうまく使ってドメインモデルを正確に表現する
&lt;ul&gt;
&lt;li&gt;保守性が高くなり、バグが減る&lt;/li&gt;
&lt;li&gt;実行可能なドキュメントとしても機能する&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Railway Oriented Programmingを使うことでエラー処理を伴う処理を保守性高く書くことができる&lt;sup id=&#34;fnref:1&#34;&gt;&lt;a href=&#34;#fn:1&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;1&lt;/a&gt;&lt;/sup&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;fの設計と妥協点---net上で実現する関数型パラダイム---猪股-健太郎さん&#34;&gt;F#の設計と妥協点 - .NET上で実現する関数型パラダイム - 猪股 健太郎さん&lt;/h2&gt;
&lt;p&gt;猪股 健太郎さんによるF#の言語設計の特徴、設計意図を紹介する発表。&lt;/p&gt;
&lt;p&gt;純粋関数型言語なのかと思っていたが、命令形っぽい書き方もできることは知らなかった。他の.NET言語との相互運用性があるのも便利そう。&lt;/p&gt;
&lt;p&gt;以下メモ。&lt;/p&gt;
&lt;h3 id=&#34;概要&#34;&gt;概要&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;OCamlに大きな影響を受けている&lt;/li&gt;
&lt;li&gt;金融工学、データサイエンス、科学計算、Webアプリなどで活用されている&lt;/li&gt;
&lt;li&gt;F#をJavaScriptにトランスパイルするコンパイラもあり、フロントエンドも書ける&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;fの特徴&#34;&gt;F#の特徴&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;静的型付けの非純粋関数型言語である。
&lt;ul&gt;
&lt;li&gt;デフォルトはイミュータブルだがmutableにもできる&lt;/li&gt;
&lt;li&gt;.NETランタイムは仮想マシン型
&lt;ul&gt;
&lt;li&gt;C#, F#など複数言語を.NETランタイム上で動かす前提で設計されており共通中間言語、共通型システム、共通言語仕様を備える&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;ホスト環境との相互運用性
&lt;ul&gt;
&lt;li&gt;F#で書かれたコードは他の.NET言語から自然かつ安全に利用可能&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;マルチパラダイム言語
&lt;ul&gt;
&lt;li&gt;関数型プログラミングのパラダイムを核に、オブジェクト指向プログラミングの要素も備える&lt;/li&gt;
&lt;li&gt;クラスや構造体も書ける&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;言語設計の意図&#34;&gt;言語設計の意図&lt;/h3&gt;
&lt;p&gt;プログラマーが命令的なコーディングから関数型のコーディングへ移行する際のハードルを下げることを意識した設計になっているらしい。&lt;/p&gt;
&lt;h2 id=&#34;マイクロサービス内で動くapiをfで書いている---ayato-pさん&#34;&gt;マイクロサービス内で動くAPIをF#で書いている - ayato-pさん&lt;/h2&gt;
&lt;p&gt;ayato-pさんによるマイクロサービスの1サービスをF#で書く際の設計や悩みどころを紹介する発表。&lt;/p&gt;
&lt;p&gt;&lt;div class=&#34;embed-container speakerdeck&#34;&gt;
        &lt;iframe src=&#34;https://speakerdeck.com/player/9efe648f23514385a48f5c5608d5f1c3&#34; allowfullscreen=&#34;true&#34; mozallowfullscreen=&#34;true&#34; webkitallowfullscreen=&#34;true&#34;&gt;&lt;/iframe&gt;
      &lt;/div&gt;&lt;/p&gt;
&lt;p&gt;ドメイン設計の際に容易にOptionを使わずにenumの別のvariantとして表現する、という考え方はRustなどでも活かせそうだと思った。別の概念であれば別の型として表現するのが大事そう。&lt;/p&gt;
&lt;p&gt;以下メモ。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;どんなチームで採用したのか
&lt;ul&gt;
&lt;li&gt;ペアプログラミングを中心に100人超の組織で開発している&lt;/li&gt;
&lt;li&gt;モノリス -&amp;gt; マイクロサービスの移行をやっている&lt;/li&gt;
&lt;li&gt;マイクロサービスの各APIは多種多様な言語で書かれている&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;F#導入以前のプロダクトチーム
&lt;ul&gt;
&lt;li&gt;JVM系、Elixir, Go, Rust, OCaml, Haskellなども採用&lt;/li&gt;
&lt;li&gt;.NET系の言語は採用されていなかった&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;どう導入したのか
&lt;ul&gt;
&lt;li&gt;システムのコアにいきなり採用するのはリスキーだったのでなにかあってもまずは影響が少ないサブシステムで採用&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;なぜF#か
&lt;ul&gt;
&lt;li&gt;静的型付け&lt;/li&gt;
&lt;li&gt;シンタックスが簡素&lt;/li&gt;
&lt;li&gt;.NETの資産を活用できる&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;F#らしさを活かした設計
&lt;ul&gt;
&lt;li&gt;Optionなどを入れずに判別共用体を使って設計する&lt;/li&gt;
&lt;li&gt;e.g. 上場企業と非上場企業を表現するときに&lt;code&gt;isListed: bool&lt;/code&gt;, &lt;code&gt;listedAt: Option&amp;lt;DateTime&amp;gt;&lt;/code&gt;のように表現するのではなく&amp;hellip;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-fsharp&#34; data-lang=&#34;fsharp&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;type&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;Company&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#f92672&#34;&gt;{&lt;/span&gt; id&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; CompanyId
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    name&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;string&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    isListed&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;bool&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    listedAt&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; Option&lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;&lt;/span&gt;DateTime&lt;span style=&#34;color:#f92672&#34;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;そもそも別のvariantとして表現する
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-fsharp&#34; data-lang=&#34;fsharp&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;type&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;Listed&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; Listed &lt;span style=&#34;color:#66d9ef&#34;&gt;of&lt;/span&gt; listedAt&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; DateTime
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;type&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;CompanyProfile&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#f92672&#34;&gt;{&lt;/span&gt; id&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; CompanyId
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    name&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;string&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;[&amp;lt;&lt;/span&gt;RequireQualifiedAccess&lt;span style=&#34;color:#f92672&#34;&gt;&amp;gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;type&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;Company&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#f92672&#34;&gt;|&lt;/span&gt; Listed &lt;span style=&#34;color:#66d9ef&#34;&gt;of&lt;/span&gt; CompanyProfile &lt;span style=&#34;color:#f92672&#34;&gt;*&lt;/span&gt; Listed
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#f92672&#34;&gt;|&lt;/span&gt; UnListed &lt;span style=&#34;color:#66d9ef&#34;&gt;of&lt;/span&gt; CompanyProfile
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;スポンサーブース&#34;&gt;スポンサーブース&lt;/h2&gt;
&lt;p&gt;Jane Streetのエンジニアの方にお聞きしたがJane StreetではフロントエンドとサーバーサイドをOCamlで書いているらしい（！）ブースでお話した方も関数型言語が書きたくて入社したそうで、関数型言語への愛を感じた。&lt;/p&gt;
&lt;p&gt;ブースでいただいたノベルティのTシャツもめっちゃOCamlだった。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;jane-street.webp&#34; alt=&#34;jane-street&#34; loading=&#34;lazy&#34; /&gt;&lt;/p&gt;
&lt;h2 id=&#34;ノベルティ&#34;&gt;ノベルティ&lt;/h2&gt;
&lt;p&gt;入場時にロゴ入りのトートバッグがもらえた。
&lt;img src=&#34;bag.webp&#34; alt=&#34;bag&#34; loading=&#34;lazy&#34; /&gt;&lt;/p&gt;
&lt;p&gt;Nulabさんのノベルティのマイクロファイバークロス。実用的でありがたい。
&lt;img src=&#34;nulab.webp&#34; alt=&#34;nulab&#34; loading=&#34;lazy&#34; /&gt;&lt;/p&gt;
&lt;h2 id=&#34;まとめ&#34;&gt;まとめ&lt;/h2&gt;
&lt;p&gt;今は業務で関数型言語を使うことはないが、関数型言語の考え方を取り入れることで非関数型言語でもより良いコードを書けるようになると改めて感じた。&lt;/p&gt;
&lt;p&gt;個人で初めてオフラインの勉強会/カンファレンスに参加したが普通に楽しかったのでまた行ってみようと思う。&lt;/p&gt;
&lt;h2 id=&#34;つけ麺情報&#34;&gt;つけ麺情報&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://tabelog.com/tokyo/A1319/A131902/13115487&#34; target=&#34;_blank&#34; &gt;二代目えん寺&lt;/a&gt;がとても美味しかった。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;tsukemen.webp&#34; alt=&#34;tsukemen&#34; loading=&#34;lazy&#34; /&gt;&lt;/p&gt;
&lt;div class=&#34;footnotes&#34; role=&#34;doc-endnotes&#34;&gt;
&lt;hr&gt;
&lt;ol&gt;
&lt;li id=&#34;fn:1&#34;&gt;
&lt;p&gt;&lt;a href=&#34;https://sporto.github.io/elm-patterns/advanced/railway.html&#34; target=&#34;_blank&#34; &gt;Elm Patternsでも紹介されていた&lt;/a&gt;のを思い出した。改めて読み直してみよう。&amp;#160;&lt;a href=&#34;#fnref:1&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;
</content>
    </item>
    
  </channel>
</rss>
