Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
生成AIの使いどころ
Search
kanayannet
March 15, 2025
Programming
260
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
生成AIの使いどころ
kanayannet
March 15, 2025
More Decks by kanayannet
See All by kanayannet
厳密な定義
kanayannet
0
110
Mcp Training
kanayannet
0
210
MCP で「こいつ動くぞ」
kanayannet
0
150
無関心の谷
kanayannet
0
1.2k
github copilot と 心理的安全性
kanayannet
0
280
FW と ライブラリ の考え方
kanayannet
0
280
TDDと今まで
kanayannet
0
690
個人開発 稼げなくてもいいアプリ
kanayannet
0
610
システムの堅牢性
kanayannet
0
340
Other Decks in Programming
See All in Programming
はてなアカウント基盤 State of the Union
cockscomb
1
1.3k
エンジニア向け会社紹介/Findy Company Profile
findyinc
6
360k
「なぜそう決めたのか」を残し続ける仕組み ― Notion AI カスタムエージェント × Slack連携による設計判断の自動記録 - NIKKEI Tech Talk #47
niftycorp
PRO
0
260
Signal Forms: Details & Live Coding @enterJS 2026 in Mannheim
manfredsteyer
PRO
0
220
Webフレームワークの ベンチマークについて
yusukebe
0
200
自作OSでスライド発表する
uyuki234
1
3.7k
音楽のための関数型プログラミング言語mimiumにおける多段階計算の活用
tomoyanonymous
1
300
AI時代の仕事技芸論〜ソフトウェア開発で「遊ぶように働く」職人的熟達のすすめ(スクフェス仙台 2026バージョン)
kuranuki
0
540
スマートグラスで並列バイブコーディング
hyshu
0
280
20260623_Loop Engineeringで自分の分身の問い合わせBotを作る
ryugen04
0
190
LLM本来の能力を解き放つサンドボックス技術とAI民主化への適用
yukukotani
3
4.9k
Even G2とAWSで推しのエージェントを召喚しよう!
har1101
1
140
Featured
See All Featured
brightonSEO & MeasureFest 2025 - Christian Goodrich - Winning strategies for Black Friday CRO & PPC
cargoodrich
3
750
How to Get Subject Matter Experts Bought In and Actively Contributing to SEO & PR Initiatives.
livdayseo
0
150
Paper Plane (Part 1)
katiecoart
PRO
0
9.5k
Site-Speed That Sticks
csswizardry
13
1.2k
A designer walks into a library…
pauljervisheath
211
24k
Darren the Foodie - Storyboard
khoart
PRO
3
3.4k
Paper Plane
katiecoart
PRO
1
52k
How to Ace a Technical Interview
jacobian
281
24k
Accessibility Awareness
sabderemane
1
150
Keith and Marios Guide to Fast Websites
keithpitt
413
23k
Speed Design
sergeychernyshev
33
1.9k
Taking LLMs out of the black box: A practical guide to human-in-the-loop distillation
inesmontani
PRO
3
2.3k
Transcript
生成AI の使いどころ @kanazawa
生成AI ってどんなのがある chatGPT AWS Bedrock github copilot Gemini etc...
大きくこんな感じに分類される考え方
AAAA Automaton(オートメーション) Advice(アドバイス) Augment(拡張) Agent(代行)
Automaton DeepL 翻訳サービス Suno AI 歌詞付きの楽曲を自動生成
Advice ChatGPT Gemini
Augment GitHub Copilot IntelliCode
Agent ChatGPT Gemini
被っているものもあるね
何となくAIつかうよりも 意識して使った方が効果が高い
じゃあ
丸投げ あえて、アンチパターン 素数を 1-100まで作るrubyプログラムのコードを提出して ただし素数を作る部分は関数にして
def prime?(n) return false if n < 2 (2..Math.sqrt(n)).none? {
|i| n % i == 0 } end primes = (1..100).select { |num| prime?(num) } puts primes.join(", ")
厳密に言葉に出来れば、明確にコードが返ってくるね
丸投げパート2 BBSをwebアプリケーションで作りたい。 ruby で作ってみて。
gem install sinatra sinatra-contrib
require 'sinatra' require 'sinatra/reloader' require 'json' set :messages, [] get
'/' do @messages = settings.messages erb :index end post '/post' do content = params[:content] unless content.strip.empty? settings.messages << { id: settings.messages.size + 1, content: content } end redirect '/' end __END__ @@ layout <!DOCTYPE html> <html> <head> <title>Simple BBS</title> </head> <body> <h1>掲示板</h1> <%= yield %> </body> </html> @@ index <form action="/post" method="post"> <input type="text" name="content" required> <button type="submit">投稿</button> </form> <ul> <% @messages.each do |msg| %> <li><%= msg[:content] %></li> <% end %> </ul>
重要なリプレイ post '/post' do content = params[:content] unless content.strip.empty? settings.messages
<< { id: settings.messages.size + 1, content: content } end redirect '/' end
シャットダウンしたら消える!! メモリーにしか残してない
もうちょっと詳しく伝える textファイルに保存したい
# 一部抜粋 FILE_PATH = 'messages.txt' # ファイルからメッセージを読み込む def load_messages return
[] unless File.exist?(FILE_PATH) File.read(FILE_PATH).split("\n").map.with_index(1) { |msg, idx| { id: idx, content: msg } } end # ファイルにメッセージを保存 def save_message(content) File.open(FILE_PATH, 'a') { |file| file.puts(content) } end set :messages, load_messages get '/' do @messages = settings.messages erb :index end post '/post' do content = params[:content].strip unless content.empty? save_message(content) settings.messages = load_messages end redirect '/' end
ここまではOK
機能を拡張させる 編集・削除機能もつけたいです
# ... # 投稿処理 post '/post' do content = params[:content].strip
unless content.empty? new_message = { id: settings.messages.size + 1, content: content } settings.messages << new_message save_messages(settings.messages) end redirect '/' end # 編集ページ get '/edit/:id' do @message = settings.messages.find { |msg| msg[:id] == params[:id].to_i } halt 404, "Not Found" unless @message erb :edit end # 編集処理 post '/update/:id' do id = params[:id].to_i new_content = params[:content].strip message = settings.messages.find { |msg| msg[:id] == id } halt 404, "Not Found" unless message message[:content] = new_content save_messages(settings.messages) redirect '/' end
重要なリプレイ # 投稿処理 post '/post' do content = params[:content].strip unless
content.empty? new_message = { id: settings.messages.size + 1, content: content } settings.messages << new_message save_messages(settings.messages) end redirect '/' end
レコード数+1 = ID ブラウザ開いたままの人がいると関係ない記事が消える
もう少し詳しく指定 これじゃ、削除と投稿を繰り返すとIDが重複して関係ない記事を削除してしまうことがあり得るのでIDを一意にしてもらいたい
# 投稿処理 post '/post' do content = params[:content].strip unless content.empty?
new_message = { id: SecureRandom.uuid, content: content } settings.messages << new_message save_messages(settings.messages) end redirect '/' end
UUID !! オートインクリメントになると思いきや ややオーバースペックだが、どうにかか?
ここまでで学んだ(味わった)こと 細かく指定しないと「察してくれない」 コードを見抜ける目がないと ミスリードされる
細かく指定して、見抜ける目があればいいのでは?
細かく指定 = 各個撃破 見抜ける目 = 慣れながら、進めば養われる
TDD Github Copilot Augment(強化)
まずは新規データ書き込み require './lib/bbs' require 'minitest/autorun' require 'minitest/spec' require 'minitest-spec-context' require
'minitest/reporters' Minitest::Reporters.use! describe '掲示板のデータ' do before do @bbs = BBS.new end context '記事を書き込む' do it '記事が追加される' do @bbs.name = 'test' @bbs.title = 'test' @bbs.article = 'test' res = @bbs.add assert_equal true, res end end end
Product code class BBS def initialize @article_path = './data/article.dat' @id_path
= './data/id.dat' @name = '' @title = '' @article = '' end attr_accessor :name, :title, :article # 記事を追加する(デリミタはタブ) # id は自動採番で削除されても重複しないuniqな値 end
デモを見せます
0:00/ 1:10
さっきよりはずっと上手くいきましたね。 あとは、読み込みや編集を同じ要領で行えばいいだけ
まとめ 丸投げは打率低め 細かく少しづつ足すと良い 打率が上がる TDD は効果的 インクリメンタルに進める
それでも... 最後は解る人が見ないと責任持てるコードにならない
予想できる未来 コードを打ってるだけの人は仕事が減る コーダー: ジュニアプログラマ的な人にはきつい話 コードを見抜ける人は必須 コードが解る人でなければ、ならない AI は補助ツールとして使うのが良い
仕様や命令を厳密に組めて... コードを打つ手が足りない人には鬼に金棒
ご清聴ありがとうございました