kumamotone’s blog

iOS/Android アプリエンジニアです https://twitter.com/kumamo_tone

第10回 #FlutterGakkai に参加しました

fluttergakkai.connpass.com

第10回 FlutterGakkai に参加しました!会場はヤフーLODGE。

自分用の内容の簡易まとめを共有いたします〜

個人開発で育てる「大規模設計の苗床」:AI時代の1人開発から始める業務への知識接続 / @fumiyasac さん

speakerdeck.com

  • 大規模開発では担当範囲が限定され、状態管理・UI・認証・エラーハンドリングなど、レイヤーをまたぐ変更の波及を把握しにくい。
  • そこで、全体を1人で把握できる小規模アプリを「苗床」として、業務に近い設計を一気通貫で試す。CRUD、複数データの関連、通信、状態管理、DI、テストなどを含む程度の複雑さが適している。
  • API・バックエンドからWidgetまで自分で作ることで、フィールド追加や設計変更がどの層に影響するかを体感できる。その経験が、大規模な業務コードを読み解く際の補助線にもなる。
  • 個人開発は、GraphQLや新しいRiverpodなど、業務へ直接導入するにはリスクのある技術や設計パターンを安全に検証する場としても使える。
  • AIに実装を任せる際は、丸投げすると既存設計を壊しやすいため、静的解析・アーキテクチャ制約・ルールファイルの3層でガードレールを設ける。
  • ルールファイルには依存方向、RepositoryやViewModelの責務、DI、命名規則、生成ファイルの扱いなどを記載し、禁止事項だけでなく「なぜ必要か」も説明する。これは人間の新メンバーへのオンボーディングに近い。
  • さらに、機能追加やテスト生成、スキーマ変更などの定型作業をカスタムスキル化し、AIの作業手順そのものを標準化する。
  • ガードレールやドキュメントを改善するほどAIの手直しが減る。個人開発で試す → ルール化する → 業務へ持ち込むという循環が、AI時代の設計力と開発生産性を高める。

「苗床」にしたアプリ:

github.com

「難しそう」の壁を壊す!Flutter × Passkeyをサクッと"味方につける方法 / TeamLab株式会社 辻野さん

  • Passkeyは、端末の秘密鍵・サーバーの公開鍵・生体認証を組み合わせた、パスワード不要の認証方式。フィッシング耐性が高く、複数端末で同期できる。
  • 内部ではChallenge、RP ID、署名など複雑な処理があるが、Flutterで導入するだけなら最初から詳細を理解する必要はない。
  • Supabaseを使えば、登録はregisterPasskey、ログインはsignInWithPasskeyを呼ぶだけで、OSの生体認証を含む一連の処理を任せられる。
  • Supabase FlutterとPasskeysは共通インターフェースに依存しているため、認証基盤を変更してもPasskey周辺の実装を大きく変えずに済む。
  • 導入時の主な難所はFlutterコードではなく、アプリと認証先ドメインが同じ所有者であることを証明する設定にある。
  • サービス側にapple-app-site-associationやassetlinks.jsonを配置し、iOSではAssociated Domains、AndroidではApp Links相当の設定を行う。
  • つまり導入は、認証APIを呼ぶ実装とアプリ・ドメイン間の紐付けの2点に整理できる。内部仕様を深掘りするより、まず動かして理解するのがよい。

Dart で試す Type-safe IaC / Nozomi Koborinai さん

  • IaCは、Google Cloud・AWS・Firebaseなどのクラウドインフラをコードで管理する手法。DartはUI・バックエンド・AIへ広がっている一方、インフラ定義だけはHCLやTypeScriptに分断されていた。
  • CDK for Terraformは開発終了し、PulumiにもDart対応がないため、Terraform互換のIaCフレームワークとしてTerraDartを開発した。
  • TerraDartでは、VPC、Cloud Run、Cloud SQL、認証プロキシなどのリソースをDartのクラスとして型安全に定義できる。
  • HCLではなくDartで記述するため、if、ループ、enum、sealed class、変数参照など、普段のDartの表現力をそのまま使える。
  • 定義した内容はTerraform互換のtf.jsonへ変換され、その後は通常どおりplan、apply、State管理を行う。
  • export機能により、URLやサービスアカウント名などのインフラ値をDart定数として自動生成し、Flutterやバックエンドから直接参照できる。
  • これにより、Flutter・Dartバックエンド・Genkit・インフラを型でつなぎ、設定値の手動転記や不整合を減らしたフルスタックDart開発を目指している。

「ドキュメントドリブン」でFlutter開発を加速する / 株式会社メドレー さん

www.docswell.com

  • ADR(Architecture Decision Record)に、設計判断の背景・要求・選択理由を残すことで、将来の変更時に「なぜこの構成なのか」を判断できるようにする。
  • ADRは軽量なMarkdownとしてGit管理し、たとえば「オフラインでも快適に使える」という要求からアーキテクチャを決めるなど、要求と設計判断を結び付けて記録する。
  • コーディング規約は書き方だけでなく、アクセシビリティやセキュリティなどの思想・背景・制約まで文書化する。ルールの意図が残るため、将来の変更にも対応しやすい。
  • 仕様書ではプロダクトマネージャーやQAを含めて要件を合意し、デザインドックでは実装前に設計をレビューする。職種横断の合意形成によって、手戻りを減らし設計品質を高める。
  • コードコメントは増やしすぎず、シグネチャだけでは分からない引数・返り値・制約など、保守に必要な情報へ絞って記載する。
  • こうしたドキュメントを開発プロセスの中で人間がレビューすることで、AIにも正確な文脈を与えつつ、生成物の品質を継続的に高められる。
  • AIで実装やリリースが高速化しても、ユーザー価値まで自動的に増えるわけではない。だからこそ、人間はドキュメントを基盤に、品質・設計判断・本当に必要な価値のレビューへ集中すべき。

AI 時代のパッケージ開発 / ちゅーやん @chooyan_i18n さん

  • AIの進化により、Flutter標準APIだけでもゲームや複雑なアニメーションなどを実装しやすくなり、「コードを書かずに済む」だけではパッケージの価値を説明しにくくなっている。
  • 一方でパッケージには、サプライチェーン攻撃、悪意ある更新、メンテナンス停止、SDK・OS更新への追従遅れといった依存リスクがある。
  • また、パッケージの仕様にアプリ側を合わせたり、メジャーバージョンアップ時に大きな移行コストが発生したりする可能性もある。
  • それでもパッケージを使う価値は、自前実装では気づきにくい課題を先回りして整理し、解決の道筋を提供してくれることにある。
  • 特に状態破棄、メモリ保持、セキュリティ、複雑な状態遷移などは、自作すると後から多くの考慮点が見つかりやすく、成熟したパッケージにはその知見が蓄積されている。
  • OS権限やカメラ、GPSのような外部環境に依存する機能では、パッケージ作者が将来の変更を検知・吸収し、利用者は更新通知を通じて追従できる。
  • AI時代にはパッケージが不要になるのではなく、設計知見・継続保守・変更追従を提供するパッケージの価値が残り、パッケージ開発自体もAIによって高度化する。

potatotips #95 iOS/Android開発Tips共有会に参加しました #potatotips

potatotips.connpass.com

potatotips #95 iOS/Android開発Tips共有会に参加しました!会場はLINEヤフー株式会社@新オフィス 赤坂トラストタワー。LODGEじゃない!

おしゃれすぎる!!!すごい

↓前回のブログはこちら!

kumamotone.hatenadiary.jp

今回はkumamo_toneは発表者としてもエントリーさせていただいたので合わせてまとめて行きたいと思います。

github.com

当日にハッシュタグつきで投稿された発表資料はこの記事でも見つかる限り添付しましたが、公式に以上のWikiにまとめてくださっているのでご参考まで!

Swift Sequence の便利 API 再発見 / treastrain / Tanaka Ryoga(@treastrain さん)

speakerdeck.com

  • SwiftのSequence系APIを使うと、配列処理をより宣言的・簡潔に書ける
  • filter → map → prefixのようなチェーンは、通常だと中間配列を作るが、.lazyを挟むと必要分だけ評価できる
  • 連番生成はstride(from:to/through:by:)、前の値から生成するならsequence(first:next:)、フィボナッチを表現するならsequence(state:next:)が便利
  • 同じ値の繰り返しはrepeatElementで表現できる
  • Swift Algorithmsというのを使うとさらに拡張できる 条件によって2つに分けるpartitioned(by:)、指定した数ごとのまとまりにするchunks(ofCount:)、隣り合うペアを取得するadjacentPairs()、最初にnilではない要素を取得するfirstNonNil(_:)など
  • EmptyCollectionという通常の開発では使わない要素がまったくないコレクションとかもある

UaaL×Androidアプリのメモリ計測 — Memory Profilerの先へ / RIO(@rioX432 さん)

speakerdeck.com

  • Another BallはエンタメAI系スタートアップで、Avvyというモバイル配信アプリを開発している。
  • AvvyはUnity製のアバター・背景描画の上に、ネイティブUIをオーバーレイする構成。
  • フェイストラッキングはiOSがARKit、AndroidがMediaPipeで実現している。
  • Android/iOS/KMP/Unityなど複数リポジトリを管理しており、依存更新PRが日々大量に発生する。
  • Unity Libraryをネイティブアプリに組み込み、3D/AR描画のみUnity、UIはSwiftUI/Composeなどネイティブで担当。
  • フルUnity構成では操作性・パフォーマンス面が厳しく、現在のハイブリッド構成にしている。
  • アバター描画だけで約800MBのメモリを消費するなど、リソース負荷が大きい。
  • Avvyはグローバル展開しており、特にAndroidでは低メモリ・古い端末でも安定配信が必要。
  • アバターコラボ配信ではアバターが2体になり、メモリ負荷がさらに増えるためAndroidが厳しい状況。
  • Memory Profilerでは全体の内訳は見えるが、Other やGPUテクスチャ系の詳細が分かりにくい。
  • ホーム画面とアバター画面の比較から、Unity/アバター描画だけで約826MB増えている。
  • Java heapは小さく、主な問題はネイティブ側というよりUnity/レンダリング/GPUメモリ側。
  • dumpsys meminfo やUnity Debuggerなどを使うと、より詳細なメモリ状況を確認できる。
  • 最適化にはUnity側との連携が必要で、複数アバター配信では音声のみなどの仕様判断も必要になる。

AlarmKitで明後日起きれるアラームアプリを作る / trickart(@trickart4121 さん)

speakerdeck.com

  • iOS標準アラームは基本「24時間先」までなので、「明後日の朝に起きたい」用途(???)で不便。
  • そこで 明後日のアラームをすぐ設定できるアプリ「DayAfterTomorrow」を作った。
  • iOS 26+ の AlarmKit を使うと、サードパーティアプリでも標準アラーム相当の通知ができる。
  • AlarmKit は サイレント・集中モード貫通、Apple Watch鳴動、Live Activity / Dynamic Island 対応が可能。 明後日のような特定日時指定には Alarm.Schedule.fixed(Date) を使う。
  • ただし .fixed(Date) は UTCの絶対時刻 として保存されるため、渡航などでタイムゾーンが変わると現地時刻がズレる。
  • 対策として、アプリ起動時・BGAppRefresh・タイムゾーン変更通知の3層で再スケジュールする。

Androidで録音機能を実装するときに考えること / CardsEditor(@cardseditor さん)

buildersbox.corp-sansan.com

  • Sansan Androidアプリの商談録音機能について、長時間録音を安定して実現するための実装上の工夫を紹介。
  • 2時間程度の録音を想定すると、AudioRecord で生PCMを扱うよりも、M4A/AACで直接保存できる。MediaRecorder の方が、ファイルサイズや実装コストの面で現実的。
  • 録音設定は文字起こし用途に合わせて、16kHz・48kbps程度に抑えており、2時間録音しても約43MBに収まるようにしている。
  • 録音中の波形表示では、getMaxAmplitude() の値をそのまま使わず、dBFSに変換して人間の聴覚に近い形で正規化している(Weber-Fechnerの法則)。
  • 波形データは100msごとに取得しつつ、Compose側ではフレームごとに補間して描画することで、滑らかなアニメーションを実現している。
  • バックグラウンド録音にはForeground Serviceを使い、マイク利用を明示した通知を出す必要がある。
  • 通話や他アプリによるマイク利用で録音が中断されるケースにも対応し、AudioRecordingCallback で割り込みを検知して、自動停止・自動再開できるようにしている。
  • 録音時間の管理では、UI更新用のtickerと実際の経過時間計算を分離し、SystemClock.elapsedRealtime() を使って一時停止やスリープをまたいでも正確な時間を扱っている。

SpeechTranscriber + AIによる文字起こし機能 / Kazuki Shirai(@Kazuki_Swift さん)

  • 音声入力・文字起こし・AI補正・AI要約の機能紹介。 キーボード上の波形ボタンから録音セルを挿入し、録音を開始できる。
  • 録音中はシート上に文字起こしがリアルタイム表示される。文字起こし結果にはAI補正がかかり、誤認識された単語も自然な表記に直される。録音後はセルをタップして文字起こし内容を確認できる。要約タブでは、議事録など複数フォーマットの要約をAIで生成できる。
  • 録音中のファイル形式は、追記やクラッシュ復元に強いCAFを使用。保存時はM4Aに変換してファイルサイズを小さくしている。
  • 文字起こしには、WWDCで発表された新APIのSpeech Transcriberを使用。
  • Speech Transcriberは暫定結果を表示し、音声が続くと文脈に応じて確定結果へ更新できる。
  • 確定した文字起こし結果をAIに送り、並列で補正している。
  • Speech Transcriber はオンデバイス動作のため、事前に音声認識モデルのダウンロードが必要。保持できる音声認識モデル数には上限があり、端末によって異なる。
  • 上限に達している場合は、優先度の低いモデルを解放してから新しいモデルをダウンロードする。
  • 補正には GPT-5.7 を使用。要約には性能面を考慮して GPT-5 mini 系のモデルを使用。
  • 要約フォーマットは6種類あり、用途に応じて選択できる。生成品質は LLM-as-a-Judge による評価も行っている。

Flutter の Add-to-app でナビゲーションスタックが Flutter → Native → Flutter となってしまう場合のリリース後課題と対応事例 / Haruhiko Takada(@tfandkusu さん)

  • Flutter Add-to-Appで、既存のiOS/AndroidネイティブアプリにFlutter画面を部分的に導入した事例。
  • 対象アプリは「Omiai」。長年運用されており、古いコードや複雑な仕様があるため、段階的にFlutterへリプレイスしている。
  • Add-to-Appでは、ネイティブ画面の一部だけをFlutterで実装できる。 例として、
  • Flutter画面 → ネイティブ画面 → Flutter画面 のようなナビゲーションスタックが発生する。
  • iOSでは FlutterViewController、Androidでは FlutterActivity を使ってFlutter画面を表示する。
  • Flutterを表示するには FlutterEngine が必要。 制約として、1つの FlutterEngine は同時に1つの FlutterViewController / FlutterActivity にしかアタッチできない。
  • そのため、Flutter → Native → Flutter のような構成では、FlutterEngineが複数必要になる。 一部のAndroid環境で、アプリが応答しなくなるANRが発生した。 。社内QAでは未確認だったが、Android VitalsやFirebase Crashlyticsで発生を確認した。
  • ANRは、Flutter画面への遷移・操作まわりで発生していた。
  • 一旦ロールバックしたが、Flutter実装の機能がビジネス上必要だったため、修正して再リリースした。
  • 初期リリース版では、 Flutter → Native → Flutter の2つ目のFlutter画面に遷移するたびに、2個目の FlutterEngine を生成していた。
  • 2つ目のFlutter画面を閉じると、その FlutterEngine を破棄していた。
  • つまり、画面遷移のたびに FlutterEngine の生成・破棄を繰り返していた。
  • 修正版では、アプリ起動時に必要な FlutterEngine を生成し、使い回す方式に変更した。
  • 2つ目のFlutter画面では、既存の2個目の FlutterEngine をアタッチする。
  • Flutter画面を閉じるときは FlutterEngine を破棄せず、デタッチだけ行う。この対応によってANRは解決した。
  • 学びとして、FlutterEngine の生成・破棄を頻繁に繰り返すと、Android環境によってはANRが発生する可能性がある。
  • ただし、この挙動についてFlutter公式の明確な情報は見つからなかった。
  • Add-to-Appの事例自体は、StudyplusやMoney Forwardなどで存在する。
  • ただし、複数FlutterEngineを使った公開事例は見つからなかった。
  • 今回の本質的な反省は、複数FlutterEngineを採用しない設計にすべきだったこと。
  • 改修が必要な画面から順にFlutter化した結果、 Flutter → Native → Flutter という構成になり、複数FlutterEngineが必要になってしまった。
  • より安全にするには、Flutter画面群の間にあるネイティブ画面もまとめてFlutter化し、FlutterEngineを1つで済ませるべきだった。
  • どうしても複数FlutterEngineでリリースする場合は、リスクを事前共有する必要がある。リリース後の監視項目も事前に定義しておくべき。監視対象の例は、クラッシュ率やリプレイス画面単体のANR率など。
  • リリースは一気に出さず、1% → 5% → 10% のように段階的に拡大する。問題が出たら、実装方法を見直す。
  • 結論として、前例の少ない技術選定では、設計段階でリスクを見積もり、段階的リリースと監視を徹底することが重要。

RevenueCatの課金実装で詰まったところと解決策 / 湯川 昇平(@Perk_sh)さん

  • ニッチすぎるアプリではなく、ユーザーがいそうなアプリを作りたかった。
  • 単語学習アプリに課金を入れるため、RevenueCatを検討した。ただし、多くの場合はStoreKit 2だけでも十分そうだった。
  • RevenueCatを使っても、Appleの手数料30%は変わらず発生する。RevenueCatのメリットは、分析・Android課金・商品管理などを一元化できること。
  • App Store ConnectやRevenueCatの設定は、課金画面スクショ、契約、銀行口座、商品作成など詰まりどころが多かった。
  • 課金実装はコードを書くというより、申請・設定作業を1つずつ潰す作業に近かった。

アプリブロック機能のつくりかたと、AIとHTMLの不合理な相性の良さについて / kumamo_tone(@kumamo_tone )

自分の発表です!

speakerdeck.com

子どもみたいに自制心が欠けており、 XとかYouTubeを日がな一日見てしまう わたくし kumamo_tone

最悪なときはゾンビを打倒したりとか、パズルを解いて庭育てたりする広告のゲームに手を出してしまう始末 まあつらい現実をスワイプスワイプしてもいいんですが、色々制限する方法を考えて実践してました。

結構頑固で、OS付属の機能を使うとかでは、自分の場合全然改善されないというか、改善されてもすぐもとに戻るみたいな状況が起き続けていました。

なので色々試した結果、以下のような対策が自分には合うことが分かりました。

  • 表示のミニマルなランチャーを使うこと
  • 家のWiFiでだけ、Xをブロックするルールを追加すること
  • 使用時間の統計を取って、上位のアプリをブロックリストに追加すること

この3つをそれぞれアプリを使って行うのが自分にとって一番良い方法でした。

ただし、それぞれのアプリに課金しないといけないし、課金を避けて無料で使ってると、アプリブロックの広告で出てきた広告のゲームで長時間遊んでいたりしたことがありました(最悪)

でこんな生活もう嫌んということで作ったアプリが Focus Launcherです。

スマホ中毒防止のためのAndroidネイティブのランチャーで、今言った3つの機能が搭載されています。

技術スタックは、僕が思う標準的で素直な実装を使いました。 UIにはJetpack Compose、 MVVMにRepositoryパターン DIにHilt、 永続化はRoom、 非同期処理はコルーチン バックグラウンド処理はWorkManagerを使っています。

各機能に関しても、LTなんで本当に触りの部分だけ触れると、 ホームアプリとして認識してもらうには、自分のActivityに MAIN / HOME / DEFAULT を設定します。 ランチャーとして運用するには、他のアプリも起動したかったり、ACTION_MAIN と CATEGORY_LAUNCHER の設定も必要です。

アプリのブロックにはAccessibilityServiceというのを使わざるを得なくて、これは強力な権限なので悪用厳禁かつ権限が何故必要かチュートリアルで丁寧に説明する必要があるんですが、ともかくこれでAccessibilityEventというのを受け取ってアプリの切り替わりを検知します。

アプリの使用統計を表示するには、android.permission.PACKAGE_USAGE_STATSというのを追加して、UsageStatsManagerのqueryUsageStats()というのを呼び出すととることができます。

ちょっとこのあたりの細かい話は正直Chat GPTに聞いていただくか懇親会で聞いてくださいって感じなのですが、なぜなら、

このアプリはほぼほぼバイブコーディングで作ってしまったからです…

でバイブコーディング今回すごくうまくいったと自分では思ってるんですけど、振り返ってみると何が良かったかというと、要件定義がよかったんじゃないかなと思っています。

要件定義というかバイブコーディングのコツ的なところをお伝えしたくて、それはHTMLを使うことです。

まず、LPとプロトタイプを自然言語で作って、ここでできるだけ頑張ります。 その2枚のHTMLファイルをもとにClaudeCodeに丸投げすると、いい感じにアプリができます。

これは、自然言語だけより、動く HTML +見た目の方が LLM にとって解像度が高いからなんじゃないかなと思っています。

このあたりの話は似たような主張がThe Unreasonable Effectiveness of HTMLというタイトルでXで最近バズってたので、興味のある人は読んでみてください。

あとClaude経由でfastlaneを使うとめちゃくちゃ自動でストアの設定ができるのでこれも便利です。

AIはとにかくHTMLを扱うのがうまくて、ほかにもアプリのアイコンを作ったりだとか、フィーチャーグラフィックっていうアプリストアに表示される画像があるんですけど、これを作るのに、素直に画像を作ってとかいうと、画像作るためのスクリプト作ったり、画像生成のAPI叩き始めたりするんですけど、それだとあんまりうまくいかないので、HTMLを使ってやってというのがコツになります。これで自動化しておけば、めちゃくちゃたくさんの言語のフィーチャーグラフィックを手間なく作ることができます。

AIでHTML書かせると便利かもしれんということだけ覚えて返っていただければ幸いです

ご清聴ありがとうございました

まとめ

前回に引き続き楽しかったです!実家のような安心感 発表もできてよかった!

Claude Code Meetup Japan #5「Claude Code LT大会」に参加しました #ClaudeCodeMeetup

Claude Code Meetup Japan #5 (Claude Code祭り!) に参加しました。会場は燈株式会社さん。

https://aid.connpass.com/event/391153

全体的にこのスレッドのまとめがわかりやすいので推薦します!

前回の記事

kumamotone.hatenadiary.jp

Claude Codeの機能アップデート+実践テクニック解説 / 池田(@swx-tomoya-ikeda)さん

  • 直近1ヶ月でClaude Codeに取り込まれた変更は635件!
  • Claude Codeの機能のアップデートをかいつまんで紹介
  • /schedule から自然言語で指示するだけと簡単で、「毎朝AIニュースを集めて届ける」といったルーティンを組める
  • /branch コマンドでいまの会話を分岐して別セッションへ引き継げる
  • Ultraplan 計画タスクを、クラウド上で動く Claude Code on the web のセッションに丸投げする

実践ハーネスエンジニアリング:ステアリングループを実例から読み解く / 成瀬(@nrslib)さん

speakerdeck.com

  • ハーネスエンジニアリングというバズワードの定義はMartin Fowlerのサイトにあるものをベースにしている
  • TACTはマルチエージェントのワークフローをオーケストレーションするツール
  • 成瀬さんが筋がいいと考えているのは、結果を見ておかしいと思った箇所をAIに指摘し、AIは何をどう直したかを理解しているので、その理解をもとに改善ポイントをハーネス側(ファセットの更新プロンプトやワークフロー)にフィードバックさせていく、という流れ

Claude CodeとEven G2で広がる世界 DeepDive into Even G2 with AI Agent / Kuu(@Fumiya_Kume)さん

www.docswell.com

  • ARグラス「Even G2」とAIエージェントを組み合わせた発表
  • 相手が話した内容をキャプション表示できる機能、リアルタイム翻訳機能、時計とカレンダーの予定が常に目の前に表示されるダッシュボード機能が便利
  • Even G2にClaude Codeを表示できる。ランチに行く前にClaude Codeに面倒なレビューを指示しておき、昼食を取りながら進捗だけグラスで確認できる。仕組みとしては、Even TerminalというCLIでプロバイダーにClaudeを指定して実行

Skillsの自動最適化&Skill活用テクニック解説 / Yusuke(@yusuke_post)さん

  • Skills は複雑な業務をAIに任せるための手順書。ただし業務が高度になるほど、AIの成果物を人間が正しく評価するのが難しくなる。
  • そこで、過去の正解データをテストケース化して、AIの出力と比較・評価する。
  • 具体例では、デザイナーが作った過去のFigmaモックを正解データにし、要望からClaude Codeが生成したモックと比較して、SkillsやRulesを改善している。

得られた改善点は、たとえば:

  • 要望の裏にある意図を読む
  • 要望にない機能を勝手に足さない
  • 既存のデザインシステムを使う

n個のアプリ開発系Skillsを作り育てて気づいたこと / Kenichi Kambara(@korodroid)さん

speakerdeck.com

  • Claude Codeなどでアプリ自体は早く作れるようになったが、ストアへの公開作業が地味に大変。Play StoreとApp Storeは管理画面が別々で、説明文の作成やストアごとに異なるスクリーンショットのサイズ対応など、手間が多い。
  • こうした作業を小さなSkillに分けて整備。実機デバッグまわりを扱うもの、公開時のバージョン番号更新を扱うもの、Fastlane経由でストア情報を更新する仕組み、スクリーンショットや説明文のテンプレートをローカルに用意する仕組みなどを作った。これらを整備すると、コマンド一発でマーケットプレイスの情報を更新できる状態が比較的簡単に作れた。
  • 反省点。Skill側とプロジェクト側の両方をメンテし続ける必要がある。AIに触ってほしくない部分はうまく分けておく必要がある。App StoreとPlay Storeで共通する部分は切り出して両方に適用できる仕組みにすると便利。

Claude Agent SDKを活用した脆弱性調査自動化 / tShun (@TKDDDDDS)さん

yamory.io

・脆弱性対応を Claude Agent SDK 製 CLI で半自動化した ・全自動ではなく、調査・下書きだけLLMに任せる ・絞り込み・重複判定・投稿はコードで制御 ・最終判断や管理ツールへの記入は人間が行う ・全自動にこだわらず、半自動ぐらいにするのがおすすめ

Claude Codeで一貫性を保ったスライド(HTML)作成術 / おぐ(@kunihik0827)さん

  • Markdownで内容を生成させる。エージェントが「誰に何を伝えるか」「聞き手は誰か」「参照ファイルは何か」をユーザーに質問し、答えをまとめてMarkdown化する仕組み。先に内容を固めることで、次の段階ではデザインに注力できる
  • 機械的に作る部分とClaudeに自由に作らせる部分を分ける。基本レイアウトはPythonで自動生成し、中身はClaudeに自由度を持たせる。テンプレートの読み込みや画像の埋め込みもPython側で処理
  • Claudeに処理させる範囲を狭めることで、トークン削減・高速化・一貫性のあるレイアウトを実現できる

Claude Codeと仕事する ― 音声入力と自作キーボードのすすめ / きゅうかぶ(@kyuukab31)さん

  • Claude Code Voiceが追加され、音声でコード指示しやすくなった
  • ただし音声だけでは、承認・設定変更・細かい操作で手が必要になる
  • その隙間を埋めるために自作キーボード「Cannonball LL」を活用

Claude Codeで会社を経営する — Company as a Filesystem / tsubasa miyazaki(@tsubasatwi)さん

  • 会社の情報をSaaSに散らばらせず、1つのファイルシステムとして整理する発想。
  • CLAUDE.md を就業規則、cos_COMPANY.md を経営理念、memory/ を暗黙知、skills/ を仮想従業員として扱う。
  • Claude Codeはそれらを読んで、朝礼・ブログ投稿・デプロイ・案件管理などを実行できる。
  • 重要なのは、AIに「察してもらう」のではなく、ルール・記憶・失敗例をMarkdownに全部書くこと。
  • 実践結果として、15以上のプロジェクトを並走しつつ、人間の稼働やSaaS費用を抑えられた。

It's the context window, stupid. / heita(@heita)さん

  • コンテキストは増えすぎると精度が落ちる
  • プロンプトには具体例を渡す
  • 大量ログや不要ファイルは読ませない
  • 方針不明なら Plan mode を使う
  • /clear・/rewind・/compact で整理する
  • コンテキストウィンドウをうまく使うとうまくいくことだけでも覚えて返ってください

まとめ

リアルタイム書き起こしをハッシュタグつけて投稿してしまっていたけど、あんまりうまく聞き取れずまとめられないところが多かった…

Kenichi Kambaraさんのトークは自分もモバイルのエンジニアなので共感できるところが多かったです!

LINEヤフー Development with Agents Meetup #3 に参加しました #dev_with_agents

LINEヤフーの社内のAI駆動開発研修ギルド Orchestration Dev Guild による Meetup とされる、「LINEヤフー Development with Agents Meetup #3」 に参加しました。会場は紀尾井町オフィス。

前回参加したときの記事はこちら。

kumamotone.hatenadiary.jp

Opening / Orchestration Development Workshopを半期実施して / 山手 政実 さん

オープニングセッションとして、Orchestration Development Workshop という社内向けセミナーの紹介をされていました。

www.lycorp.co.jp

非常に大規模な組織におけるセミナーながら、AIの利活用を約85.5%までリーチでき、ワークショップを通じて生産性向上を実感できた参加者は約75%だったといいます。一方で、日々の業務フローに取り込んで継続利用できているかどうかという面においては課題とされているようです。

Agent Development Kit(ADK)で学ぶ実践Context Engineeringと社内での応用例 / 井上秀一 さん

セッションの主題は、AIエージェントのコストと精度を同時に改善するコンテキストエンジニアリングの設計手法でした。現場では、組織目線でのトークン消費によるコスト圧迫と、エンジニア目線でのコンテキスト肥大化による性能劣化、いわゆる「Context Rot」が課題となっていますが、井上氏はこれらが本質的には「AIに渡す情報の設計」という共通の問題に収束すると指摘されていました。

コンテキストエンジニアリングとは、推論時にモデルに渡されるすべての情報、つまりプロンプト、ツール定義、会話履歴、外部データまでを選別・管理する技術です。マルチエージェント時代においては、プロンプトだけを工夫する従来のアプローチでは限界があり、「最小限の高品質なコンテキスト」を作ることでコスト削減と精度向上を同時に実現できるとのことでした。

具体的な実装手段として、Googleが提供するOSSフレームワークADKに備わる三つのコンポーネント (1) 中間処理を呼び出し元に漏らさないAgent Tool、(2) 必要なツールだけを提供するTool Filter、(3) 出力スキーマを固定するStructured Outputが紹介されました。

社内での検証では、これらを適用するだけでコンテキストウィンドウ使用率を77.7パーセント、総トークン使用量を40パーセント以上削減できたとのことで、組織規模で見れば年間百万円単位のインパクトになるとの試算が示されました。

Slack MCPで形作る「次世代システム運用」 / 迫川凌 さん

セッションのテーマは、Slackという日々膨大な情報が蓄積される場をいかに活用するかという点でした。Slackには企画に関する議論や障害対応、短いミーティング的なやり取りなど、組織のさまざまな情報が自然と溜まっていきます。迫川氏は、こうした場所から必要な情報を抽出して問い合わせ対応につなげたり、進行中のインシデント対応がどのような状況にあるのかを瞬時に把握できる仕組みを作ることに価値があると説明されていました。

SDDで見える、AIコーディングの"内訳" / 曾田知也さん

AI活用で開発スピードが上がっている実感はあるものの、実装中の手戻りやAIとの相談時間など表面に現れにくいコストが存在するため、現状は「早くなった気がする」という感覚にとどまっているのではないかという問題提起から始まりました。

可視化の手がかりとしてClaudeなどのセッション履歴ログが挙げられましたが、メンバーごとに使い方がバラバラでは計測できないため、前提としてプロセスの構造化が必要になります。その手段として紹介されたのがSDD(Spec-Driven Development、仕様駆動開発)です。要件、設計、実装をフェーズごとに明示的に進める手法で、いろいろな支援ツールがあり、いずれも各フェーズに対応するスキルが用意されている点が共通しています。

曾田氏は、SDDによってAIの実装が意図通りになりやすくなるという本来のメリットに加え、副産物としてセッションログ解析によるプロセス計測が可能になる点に注目されていました。重要なのはツール選定よりも、メンバー間で作業スキルを固定化して計測可能にすることだと強調されていました。

コーディングAIが導くリスクベースド探索的テストの実践 / 福山怜史さん

冒頭で福山氏が問いかけられたのは、開発現場でよくある三つの経験でした。前回バグった箇所がまた壊れるリグレッション、テストを全部やる余裕はないが漏らせば事故になるかもしれないリリース前の不安、どこを重点的にテストするかの判断がベテランに依存してしまっている状況です。これらは多くのチームに共通する課題であり、原因はテストの判断のほとんどが暗黙知になっていることだと指摘されました。「前回バグったから念入りに」「なんとなく怪しそう」といった判断はベテランの頭の中にしかなく、そのまま積み重なると同じバグの再発や隠れた本番事故、ベテラン依存といった問題を生むという整理でした。

そこで本日のテーマは、この暗黙知をAIエージェントを使って形式知にできないかというものです。具体的には、過去のバグ傾向からリスクを可視化してテストの深度にメリハリをつけ、それをAIが一気通貫で実行する「リスクベースドテスト」のアプローチが提案されました。ステップは三つで、リスク分析表の生成(どこが危ないか)、テストケースの生成(何を確認すべきか)、AIによる自動テスト(どう試すべきか)でした。

Personal knowledge bases using LLM / kilro.han さん

LLM Wikiとは、Vibe Codingという言葉の生みの親であるAndrej Karpathy氏が提案した、LLMをベースにWikiを生成するアイデアのガイドのことです。特定の開発手法が定型化されているわけではなく、あくまでアイデアとして公開されているもので、利用者がそれぞれ自分のプロジェクトや好みに合わせて変形して使っているのが現状とのことでした。今回はこのコンセプトを実際の業務に適用してみる試みが紹介されました。

han氏自身のモチベーションとしては、Slackで過去のやり取りを探すのに苦労する、以前まとめたメモを見つけるのが大変、Webページや突然思いついたメモを整理して管理したいが思った以上に手間がかかる、といった日常的な困りごとが挙げられました。これらを労力をかけずに解決したいというのが関心事だそうです。

デモ用に準備された具体例として、数日間にわたる業務シナリオが示されました。マイページの決済承認失敗を発見し、Jiraに起票して議論し、原因を特定して対応するという一連の流れの中で、Wiki、Jira、Slackといった複数のツールに散らばった成果物が蓄積されていく状況です。1日目に失敗率をモニタリングして提案し、2日目にマージとデプロイを行い、原因を特定して対応に進む、といった経緯が複数のツールにまたがって記録されていくイメージが共有されました。

han氏が指摘されたのは、実際のプロジェクトでは5か月、1年と経つうちに過去の経緯を忘れてしまい、Wikiやドキュメントを探すにしてもどこに書いたかが分からなくなったり、成果物には残っていないSlackの会話を掘り起こすのに時間がかかったりする、という実感でした。

ライフサイクルは大きく4つのステップで構成されます。最初に「Build」で初期構造を作り、次に「Ingest」でログや成果物をLLMが自動的に各フォルダへ振り分けていきます。Ingestionが完了すると「Query」のフェーズに入り、自由に質問ができるようになります。「インシデントはいつ発生したのか」「解決策は何だったのか」といった質問を投げると、根拠となったデータも示しながら回答が返ってくるとのことでした。質問と回答を重ねるうちに、ユーザーの意見を含む新しい良質なデータが蓄積され、それをさらに拡散データとして取り込むことで、自分専用のナレッジベースが育っていく仕組みになっています。

そして最後の重要な概念が「Lint」です。Ingestionを繰り返すうちにデータ間で矛盾や混乱が生じ、知識が「腐敗」していくため、二十回や三十回ごとにLintを実行してWikiの構造を整える必要があるとhan氏は強調されていました。

Lintで検査される腐敗のパターンは七種類ほどあり、たとえば矛盾(あるページではAはリンゴだと書かれているが、別のページではAはジャガイモだと書かれている状態)、Stale(古い記述で最新情報が反映されていない状態)、孤立ページ(どこからもリンクされていないページ)、欠落概念(三回以上登場しているのにエントリが作られていないもの)、グラフの断絶、データギャップ、スキーマドリフトといったものが対象になります。

han氏が特に強調されていたのは、内部の技術的な仕組みは決して単純ではないものの、ユーザーから見た使い方は驚くほどシンプルだという点でした。基本的にはIngestとQueryの二つを繰り返し、週に一度や四日に一度ほどLintを実行するだけで運用できるとのことです。

おわりに

多種多様な独自の視点で業務効率化を行う手法が紹介されました。LLM Wikiのコンセプトは面白いと思いました。組織の改善の話題が全体として多く、参考になる人には非常に参考になりそうだなと思いました!

メイン使用のAIコーディングツール変遷

義務教育時代からプログラミングどっぷり、社会人エンジニアとしても10年やってきた自分だが、AI技術の登場から進歩により、ほんの3年ぐらいで、「チャット形式でAIにプログラミングの質問ができるようになった」から「ないと考えられない」レベルになってしまった。

これは大事件なので、メインで使っている(使っていた)AIコーディングツールを併記して、どんな感じだったかというのを軽く記念に書き残しておこうと思う。

ぐっと単純化すると以下の3つの時期に分割できると思ったのでそれに沿って書いてみる。

  • 2023年1月〜 ChatGPT 相談プログラミング期
  • 2024年7月〜 Cursor + Sonnet 3.5 ショック期
  • 2026年2月〜 Claude Code 移行期

2023年1月〜 ChatGPT 相談プログラミング期

ChatGPTがリリースされてから、プログラミングの質問や簡単なコーディングができるらしいということがわかった。

採用試験みたいなのを解かせてみたところ、少し手直しが必要なもののものの数分で解けてしまい、かなり怖さと可能性を感じたのを覚えている。

この頃のコードは基本的に少しコンパイルエラーがあるので、手直しが必須だったが、画像ビューアなど複雑な基盤実装も相談しながら実装することができた。一時期AIエージェントの能力を「ジュニアのエンジニア程度」と喩えたりされていた時期があったが、自分にとってはこの時点で十分上位存在に感じた。

2024年7月〜 Cursor + Sonnet 3.5 ショック期

この頃、CursorでSonnet 3.5が使えるようになり、そのときお世話になっていた会社のエンジニアの人に影響を受け、使い始めた。IDEのチャット窓で問い合わせるだけでコードが出来上がっていく体験と、Anthropicモデルのチューニングの強さに感動した。

このタイミングから業務で手作業でコード編集することがほぼ一切なくなった。世の中的にもClineに全部賭けろ的な記事がバズり、同じような感触の人が増えていることを実感した。

この時期のプログラミングはあくまで自分が舵を握っている状態で、細かいプログラミング文法とか型パズルから解放され、指示すると高速で作業してくれるという感じなので一番気持ちが良かった。また、細かく指示してdiffを確認するスタイルなので、提出物にも自信が持てていた。

2026年2月~ Claude Code 移行期

使い慣れていたCursorを使わずにClaude Codeのみで開発しないといけない状態が1か月続いたのだが、これが期せずして転機になった。

最初は結構苦痛だった。まずCUIベースというのもあって、差分をきれいに見るには別のツールを併用する必要があった。また、Cursorに比べてとにかくレスポンスに時間が掛かり、ちょっとした作業でもかなりの時間がかかると感じた。しかし、使っていくと、時間がかかる分手戻りが少ないことに気づいた。

劇的に状況が変わったのは /feature-dev プラグインとの出会いで、多角的な調査から設計、実装、多角的なレビューまで一気通貫まで行えてしまうことがわかった。ここまでやられてしまうとクオリティ的に太刀打ちできず、場合によっては自分で考えて書こうとすること自体がボトルネックになってしまうことすら全然ある。

Claude Codeのタスク遂行能力が高いことには薄々気づいていたが、やはり、今までプログラミングをやってきた身として、CursorよりもさらにAIエージェントにおまかせするスタイルのUXで作業するのには心理的に大きな抵抗があり、これに関しては導入が遅れたなと感じている。

ここからのプログラミングにはもうコーディング的な面白さはまったくなくなってしまった。しかし、何をするか(What)の定義はしっかりやるべき状態になり、どっちかというと自分はこっちのほうが面白さを見出しやすい気がすることに気づいた。出世もしてないのにPMかなんかになった気分である。

現状のClaude Codeのコーディング能力はなんだかんだ突出していると感じるが、世の中のツールを網羅的に使い尽くすことはできないのでなんともいえない。あとはっきり言ってClaude CodeのCLIベースのUXには全然納得していない。Cursorの体験は最高だった。今Claude Codeメインで使っているのは、Opus(1M Context)とfeature-devプラグインを雑に使ったときのタスクの成功率が現状経験的にCursorより高いからという理由でしかないのだが、この小手先だけど大きく体験が変わってしまうTipsを血眼になって探すのがコスパ良い環境にはもんにゃりとしている。

これから

就職してからプログラミングの面白さを感じれていたのは最初のわずか数年で、あとは FizzBuzzEnterpriseEdition を書くのにずっと辟易としていたので、AIコーディングツールによって環境がめちゃくちゃになって個人的に仕事はだいぶ楽しくなった。一方で、おれってもう別にいらなくね?みたいな疑念やこの先どうなっていくんだろうみたいな不安は常にめちゃくちゃあり、ますますメンタルゲーになってきた。

しかしながら不思議なことにAIツールを使ったとしても人によってアウトプットの性質はかなり異なるっぽいので、今自分の能力のレバレッジが最高に効いている状態だとも感じる。過去いち仕事しがいがある時期のような、気もする。いや不安だ。不安だが自分の手の届く範囲でできることをやっていきたい。

Claude Code Meetup Japan #4「Claude Code LT大会」に参加しました #ClaudeCodeMeetup

「Claude Code Meetup Japan #4「Claude Code LT大会」に参加しました」 に参加しました。会場はメルカリオフィス。

https://aid.connpass.com/event/386203

LTが…15本?聞き切れるのか…

オープニング/会場案内 / Yasuhiro Araiさん

AI駆動開発勉強会の全国マップがあり、福岡支部の勉強会が6月11日開催予定。北海道・九州など未活動の地域では立ち上げメンバーを募集中。

「AI駆動開発」という言葉は日本発(ほまに?)。既存の開発プロセスにAIを導入して高速化するのではなく、AIが全部やる前提で人間の関わり方を設計し直すという発想。

AI駆動開発カンファレンス Summerを7月30〜31日に開催予定(マイクロソフト会場)。募集開始は5月15日。

仕様通り動くの先へ。Claude Codeで「使える」を検証する / Gota@Data Analystさん

CC-SDD v3.0 (仕様駆動開発のツール。Amazon の Kiro スタイルと互換性があり)がリリース。アップデート内容は、チーム向けの境界定義が容易になった点、スキルのパーソンクラス対応、長時間の自律実装が可能になった点など。

Claude の Computer Use は遅く、画面を占有するため並列化できず、UXレビューに使いづらいので、 Claude Code プラグイン 「UX Auditing」 を OSS で公開した。プロジェクトからユーザージャーニーを自動抽出し、シナリオごとにスクショを撮りながら並列で評価。「価値が得られたか」「タスク完遂できたか」「手間が多くないか」「状況が伝わるか」をイチゼロで定量評価する。

モデルが進化した今、プロダクトは作った後が勝負!仮説生成から検証までのループを回せるツールとして活用してほしい。

脳がちぎれないためのClaude Code駆動開発ライフハック / 大森翔吾さん

長く開発を続けるのに一番必要なのは心をまもること。開発しない時間があるのが一番もったいないと感じた。

フォントを変えたり、口調をずんだもんに変えたり博士にしたりしたら気分が上がった。

気分が上がるだけでなく、指定した口調が崩れてきたら、コンテキスト逼迫のサインとして使えるという実用的な面もある。

人間は意図、AIは実装:要件を伝えるだけのAI駆動開発ワークフロー / じゅん@AI駆動開発さん

人間が課題や意図を最初に定義するだけでAIが仕様書作成から実装まで進められる「開発パイプライン」を紹介。

人間が2ステップ、AIが4ステップを担当する6段階の流れで、Googleマップで目的地を入れるとルートが提案される感覚に近いと説明。

中核には PRD・spec.json・context.json の3ファイルがあり、特に context.json が進捗管理を担うことで、AIが次にやるべきことを自然に把握できる仕組みになっている。

これを支えているのが Claude Code のフックやスキル、オーケストレーターで、こうしたハーネスエンジニアリングをきちんと設計しないと品質が安定しないとのこと。

Claude Code で研究を加速した学生の話 / Hiro Yoshiokaさん

以前はChatGPTやCursorを使っていても、コードを貼り付けてもコンパイルエラーが続き、1週間や1ヶ月単位で時間が溶けて気づけば半年経っている、という状況だった。

しかし、Claude Codeを導入してからは、先行研究を渡して「実装して」と頼むだけでコードを書き、コンパイルし、実行して結果まで返してくれるようになり、半年かかっていた作業が1日程度で終わるようになった。

さらに面白かったのは、Claude Codeが人間とはまったく違うコードを書いてくる点で、パラメータ化のような小細工をせず、ループを100回回したり100個プログラムを並べたりと力技を選ぶこともあり、その「変更量を恐れない」姿勢が吉岡さんには大きなカルチャーショックだった(わかる)。

結果として自分は実装する人からYes/Noを判断する人に変わった。道具が変わると研究スタイルも変わるのかもしれない。

Claude Teamプランの選定と、できること/できないこと / ふくだ(fukuda ryu)さん

ClaudeのTeamプラン運用について解説。ググると古い情報も出てくるが、1月に値下げもされて導入しやすくなっているらしい。

Bedrockなどからの移行メリットとしては、サブスク+従量の2層構造によるコスト面、Claude CoworkやDesktop、Claude in Chromeといったエンジニア以外向けツールも使える点、settings.jsonやプラグインを一括配布できる点、学習利用がデフォルトオフで設定漏れリスクが減る点、そしてオートモードやコードレビューといったTeam/Enterprise限定機能が使える点が挙げられていた。メンバーごとのプラン設定や使用量上限の柔軟な調整、危険なモードの中央制御なども可能。

一方で、OpenTelemetryやフックに比べて分析機能が弱いこと、Max20倍ほどは上限が緩くないこと、そして特に管理画面の更新がサイレントで行われリリースノートにも載らないため、新機能に気づかずデフォルトオフのまま使い続けてしまうリスクがある点が運用上の課題。

Claude Codeはどこまで戦えるのか? Kaggle金メダルで見えた現在地 / Kinosukeさん

4,000人以上が参加した画像から草の量を推定するコンペで5位入賞。Claude Codeを使えば誰でも勝てるという単純な話ではなく、AIに任せる部分と人間が頑張る部分の切り分けこそが重要。

現状のClaude Codeはベースラインや実験パイプラインを1プロンプトで構築できるレベルにはあるものの、コンペで勝つには不十分で、その理由は他の参加者も同じ道具を使っているので差がつかないことと、自律的な実験サイクルが数回で頭打ちになってしまうことだと説明。

今回も本質的なアイデアは「精度を上げて」という抽象的な指示からは絶対に出てこず、人間がデータを観察して出す必要があったとのこと。勝ち筋としては、実装と試行回数稼ぎはClaude Codeに任せ、人間は結果を分析してアイデアを出すことに専念するというサイクルを回すこと。

全社員のClaude Code・Coworkの利用状況をOpenTelemetryとGrafanaで可視化した話 / ラクさん

全社員にClaude Codeを配ったが、使われているかヒアリングするのも難しいので利用状況を定量的に観測したかった。

Claude CodeはOpenTelemetryに対応しているので、これを使った。しかし、収集するための設定を配るのが難しい。発表者は最終的に、MDMでmanaged-settings.json(ユーザーが上書きできない組織レベルの設定ファイル)を全PCに配布することで100台規模のPCに一括で設定を適用した。

ログ基盤・プラグイン・ダッシュボード、全部整えた。でも最後は人だった。 / Masaki.K AI推進するEMさん

前の発表者に続けてClaude Codeの全社導入の話。AnthropicのレポートでもClaudeを使い込むほど習熟度が上がるとされていることから、まずはトークン使用量の観測を重視して後押し。

OpenTelemetryとPrometheusでログ基盤を構築し、トークン使用量・モデル・コストを可視化。OpenTelemetryではスキル名が取れないため、前回Meetupのgiginet先生の資料を参考にフックで補完し、スキルやサブエージェントの利用状況もダッシュボード化。最終的に活用度を引き上げるのは人が背中を押すこと。

煩雑なSkills管理をSoCにより解決する:関心を分離し、プロンプトを部品として育てるためのOSSを作った話 / nrsさん

Skillsが増えると似た処理が複数のスキルに散らばって重複や変更漏れが起きる問題を提起。原因はコーディング・レビュー・設計といった役割ごとにスキルを分けることで、品質基準やアーキテクチャ方針といった横断的な関心が重複してしまうことにあり、ソフトウェア工学の概念「関心の分離(SoC)」を適用することが必要だと指摘。

その解決策としてFaceted Promptingという手法を提唱。プロンプトをペルソナ・ポリシー・ナレッジ・インストラクション・アウトプットコントラクトの5つの観点で分解し、関心軸でパーツを管理して組み合わせて役割スキルを作る、という発想。AIは後ろの指示に従いやすいので、最重要の制約はプロンプト末尾に置くのがコツとのこと。

Claude CodeでClaude Agent SDKを使ってエージェントを自作しよう / noguさん

Claude Agent SDKを使うと、Claudeが自律的にファイル操作・コマンド実行・検索を行うエージェントを開発することができるが、発表者はClaude Agent SDKについて、Claude Code内の /agent-sdk-dev:new-sdk-app project-name コマンドからnpmかPythonでプロジェクトが立ち上がり、高速にエージェントを構築できる手軽さを紹介。

本題はごく最近発表されたClaude Managed Agentで、Claudeを自律型エージェントとして実行するためのハーネスやインフラがすべて含まれており、API経由で動かせるサービスとのこと。/claude-api すると構築を始められる。専用のスキル群が用意されていて、特に /claude-api managed-agent-onboard にユースケースが詰まっているため、これを使うといい感じにエージェントを構築できるとのこと。

チームやリポジトリ間の情報の断絶をSkillで補う 〜 BFF 情報取得 Skill による実例 〜 / takanakahikoさん

Claude Codeがリポジトリ内のコンテキストでしか動かないことによる「リポジトリ間の断絶」問題を提起。発表者は新旧BFFの移行中で、新BFFから旧BFFを参照したい、クライアントからBFFを参照したい、というニーズがあるが、Serenaなどで他リポジトリを読ませてもコンテキスト不足で遠回りになりがち、というのが課題。

そこで「知識のパッケージング」するため、BFFの情報を知りたいチーム向けにSkillsを配布。Claude Codeが「結果だけ欲しい」「実装を読みたい」のパターンを賢く使い分けてくれる設計とのこと。BFFに限らず認証基盤や共通ライブラリにも同じアプローチが有効で、チームをまたぐコンテキストの切り方を意識的に設計できるようになるとのこと。

10年分の技術的負債、完済へ ― Claude Code主導のAI駆動開発でスポーツブルを丸ごとリプレイスした話 / nero15さん

Claude Code主導で10年運用したコードベースをリプレイスした事例を紹介。

各リポジトリをAIが横断的に読み取れるように配置、仕様駆動開発を徹底。できなかった部分は割り切って手動対応し、検証では絶対外せない機能を全ページ目視チェックする、というメリハリをつけて進行した。

AtoAにおいて、あの政治家の発想を掛け合わせると… / おじぎの福嶋さん

ブロードリスニングという政治家の方が推進しているアプローチを紹介。AI技術を用いて短時間で分析・可視化して政策や意思決定に反映させる「広聴」手法とのこと。

これによって一人では聞き切れない問題に対応することができるとのこと。たとえば「Vercelの新機能を導入すべきか?」のような検討すること自体がコスト高い問いも、AIなら対応できる可能性があるとのこと。

M5Stack に色んな足をつけてみて、Claude Codeを使って人格と機動力の関係を調べてみた / Kaito Murataさん

M5Stackで作ったロボット「スタックちゃん」の感情とキャタピラを連動させる、という実験。ユーザーが自然言語で文章を入力すると、それに応じてどんな表情と動きを見せるのかを試した。

仕組みとしては、Claude Codeで自然言語のプロンプトから感情を分析し、人間の感情と身体の動きの対応をM5スタック上で再現するスキルを作成。表情は6種類、足回りの動きは13種類で組み合わせて表現。

デモでは「カレーが美味しかった」と入力するとスタックちゃんが嬉しそうに動き、興奮時はキャタピラが高速、がっかり時はベアリングを置いて終わるだけ、といった感情ごとの違いを再現する様子を紹介。

Claude Codeがハードウェアのデバッグでもソフトとハードの切り分けに踏み込んでくれた点と、配線図まで正確に出してくれた点が特に印象的だったとのこと。

メルカリのClaude Codeセキュリティ設定の組織配布戦略 / Hi120kiさん

メルカリではエンジニアだけでなく非エンジニアにもClaude Codeを展開しているが、Claude Codeはファイルの読み書きやコマンド実行までできるためPC上で任意の操作が可能で、rm -rf 事故や情報流出のリスクがある、という前提を共有。

対策として、まず守るべきアセット自体を最小化するためローカルファイルを避けてオンラインストレージを基本とし、認証情報も短期的なものに切り替え。その上でClaude Code側の設定として、最近充実してきたサンドボックス機能(ディレクトリ・ファイル・ネットワーク制御)を活用し、会社のセキュリティポリシーはシステムプロンプトやCLAUDE.mdに書き込んで教え込ませているとのこと。

ただし会社全体に漏れなく展開するには別の仕組みが必要で、そこでOpenTelemetryと同じくMDM(メルカリではJamf)を使ってコントロールしている。MDMで配布される設定は最も高い優先度で扱われるため、ユーザー側からは上書きできない。

ただ、コマンドの知識があって柔軟に使いたいエンジニアと、最初から安全な設定で使いたい非エンジニアでは求める設定が違う。既にMDMにHRシステムから従業員情報が連携されていて「この人はエンジニア」「この人は非エンジニア」という情報がわかる状態だったので、それを活かして配布設定を分離。エンジニアには安全性を確保しつつカスタマイズの余地がある柔軟な設定を、非エンジニアには実現できる中で最も安全な設定を付与している。

おわりに

面白かった話題。 /claude-api するとClaude Managed Agent の構築を手軽に始められるというのは面白いなと思った。/statusline も最初触ったとき面白いなと思ったが、設定やエコシステムの構築がChatOpsで行えてしまうというのは優れた新しい体験だなと感じる。

全体的に……さすがに多すぎて疲れた!!!!雰囲気がいつも参加しているモバイル系の勉強会とは(何が違うのかというのは言語化しづらいが)異なり、終始とにかく、「いろんな人がいるな…」という印象だった。組織に適用する話や、本業開発者でない人も相対的に多く、全体的に自分では思いつかなさそうな切り口やTips、結論が多かった。

ブログを書くためには外に出ろ

日記。昨日 Codex Meetup Tokyo #1 というイベントに参加した。

kumamotone.hatenadiary.jp

自分はCodexにめっちゃ興味があるというよりかは、最近ずっとClaudeと対話し続けていて、補助的にCodexやChatGPTも使っているので、最近のCodexってどうなんっていうところをまとめてキャッチアップできたら嬉しいなぐらいのモチベーションで、当日の夕方に知人のツイートを見かけてそんなのあるんだーと思って突発的に参加した感じだった。

正直AI系の勉強会は、「AIマジですごいっす」とか、それはめちゃわかるけど得られるものがない系、「組織がこんなに良くなりました」で自分の今の状況では活かせなさそう系、など、正直Not For Meかなあという勉強会も多く、正直参加するときも「あんなチャラついたイベントに参加してないでちゃんと勉強しなよ」と思われてるんじゃないか心配になっているところがある。

しかしながら会自体の内容は結構ギーク寄りというか、純粋なCodexのユーザーと、OSSとしてのCodexを追いかけて支えようとしている人たち、大企業の人っぽい人、フリーランスっぽい人、とバランスよくトークがあって、思っていたよりもかなり良かった。おそらくある程度の熱意のある人じゃないとCodexまでは手を出さないところがちょうどよいハードルとして機能したのではないかと思う。

カンファレンスかってぐらい人数が居た懇親会会場だが、発表者や運営の方ともお話できるタイミングが合ったので「LT倍率すごくて通らなさそうだけど自分も発表したいです!」的なことをお話したら、「声を上げ続けてればおじさんたちが助けてくれるよ!」「普段からZenとかQiitaとか情報発信してれば、それがつながることもあるよ」的なアドバイスをいただいた。おじさんたちがって……ワシももう今年で35なんだが……にはは…という情けなさもありつつ、いやマジでその通りなんだよなということを久しぶりに思い出した。

重要性は認識している。そういう発信とか声を上げるのは、この時代めちゃ重要だなという話は、就職して以来ほぼずっと感じているのだが、どうしても手持ちの仕事や生活にばっかり目が向いてしまい、インターネットへの書き込みは後回しになってしまう。だからうまくいかない、と思っていたのだが、最近の実感としてもう一段階解像度が上がってきた。時間はあるのである。実際帰って死んだ魚のような目でフィードをスクロールして、バズ・コンテンツを消費している時間はめちゃくちゃある。

ではなぜそこで矢印が外に向かないかというと、まず単純にインプットが弱く、外に矢印が向かないからである。外に出て人と接していると、自然とこの人ってすごいし自分もこうなりたいなあとか、自分って情けなくてもっと強くなりたいなあみたいな気持ちが浮かんでくる。インターネット越しだとこれがなんとなくぼやけて希薄な感じになる。

さらに、インターネットってやはり文字ベースなのと若干冷笑の文化もあるので、発言にブレーキが掛かる。自分は十分にインターネットの文化に毒されているので、文章を書いているとあらゆるアンチコメントが頭をよぎる。「イキり乙」「浅いな〜」「知ってるよ」「あーあなたってそういう系の人だったんですね…」「俺へのあてつけか?!」…などなど…ただ、これもこんなこと言うのは恥ずかしいことなのだが、リアルで人と喋ってると、こんなこと面と向かって言ってくる人って基本大人の世界ではまったくいない。普通に人と話してると、全然ストレートに否定されないので、あれ、おれって存在してて…いいのか?!発言していいのか?!みたいな気持ちになってくる。

そんなわけで、アウトプットがうまく出せないぜ症候群20年目ぐらいのわたくしの今最有力候補のアプトプット術は、ブログを書くためには外に出ろ、でした。ひとまずわたくしはしばらくこれ実践してみようと思います。それでは。