-- Views
September 25, 25
スライド概要
toranoana.deno#22での発表資料です。
https://yumenosora.connpass.com/event/366823/
虎の穴ラボ株式会社は、主にとらのあな関連サービスのシステム開発を専門に担う、エンジニアの会社です。
AIと一緒に色々作ってみた 虎の穴ラボ株式会社 藤原佳顕 Copyright (C) 2025 Toranoana Lab Inc. All Rights Reserved. 1
目次 1. 自己紹介 2. 概要 3. libmysqlのラッパーを完成させる 4. 過去作ってあった Webアプリを Denoに移植する 5. DenoでPostGISを扱う(地理情報、間に合えば ) 6. まとめ Copyright (C) 2025 Toranoana Lab Inc. All Rights Reserved. 2
自己紹介ページ (藤原) 藤原 佳顕(ふじわら よしあき) : yoshiaki fujiwara、7年目 ‣ ‣ 新規事業担当( Fantia、Creatia)、アーキテクトチーム (CSIRTも)、AI推進チーム 出身 ‣ 大学:情報系(数学より) ‣ 前職:独立系ソフトウェア会社、主に GISとWeb、ライブラリ開発 ‣ TypeScript、Ruby on Rails、C#、C++、React、Vue、Angular ‣ 入社理由 ‣ ‣ 自分がスキルアップできそうな場所に行きたい オタク系の話ができるところに行きたい 好きなモノ ‣ ‣ ‣ シューティングゲーム、格闘ゲーム、アトラスのゲーム SF小説 プログラミング Copyright (C) 2025 Toranoana Lab Inc. All Rights Reserved. 3
概要 皆さん AI使ってますか? Copyright (C) 2025 Toranoana Lab Inc. All Rights Reserved. 4
概要 私は使ってます! Copyright (C) 2025 Toranoana Lab Inc. All Rights Reserved. 5
概要 ● 使ってるもの ○ cli系ツール ■ gemini cli、codex cli、claude code(あんまり) ○ エディタ統合されているタイプ ■ Roo Code、GitHub Copilot、Junie(JetBrainsのやつ) ○ エージェント系 ■ Devin、GitHub Copilot Coding Agent、codex Copyright (C) 2025 Toranoana Lab Inc. All Rights Reserved. 6
概要 ● ● ● AI使うと実装が早くできる ○ やれるのはわかってたけど面倒くさがってやってなかったものに取り組もう! 作ったもの3選 ○ libmysqlのラッパー ■ 結構前に発表したものの続き。FFIを使うやつ ■ https://toranoana-lab.hatenablog.com/entry/2021/12/04/120000 ○ プライベートで作っていたWebアプリのDeno移植 ■ 地図上で天気とか見れたりチャットとか出来たりログイン機能があるやつ ○ PostGISを扱う ■ 地理空間情報、GIS関連のクエリをDenoから使いたい それぞれどんな感じでやってどういう物ができたのか紹介します Copyright (C) 2025 Toranoana Lab Inc. All Rights Reserved. 7
libmysqlのラッパー ● ● ● 以前(2021くらい)発表した、FFIを使ってlibmysqlをDenoから扱うライブラリを完成まで持って いく 現状:クエリの発行はできる程度 手順(基本他も似たような手順) ○ 現状のプロジェクトをgemini cliやcodex cliで読み込んでREADME.mdを更新 ○ 完成に至るまでに必要な作業をTODO.mdとしてチェックボックスのタスクリストとして書 き出し ○ チェックボックスを一つずつ実行させる ○ コンテキスト上限やモデルが下位のものへ変わってしまったら別のAIツールへ移行(GitHub Copilotなど) ○ テストは書かせるように指示 Copyright (C) 2025 Toranoana Lab Inc. All Rights Reserved. 8
libmysqlのラッパー ● FFI部分→DenoはFFIでDLL等呼べる Copyright (C) 2025 Toranoana Lab Inc. All Rights Reserved. 9
libmysqlのラッパー ● 作ってもらったREADME.md Copyright (C) 2025 Toranoana Lab Inc. All Rights Reserved. 10
libmysqlのラッパー ● 作ってもらったTODO.md→一度完了したあと作り直しているので少なめ Copyright (C) 2025 Toranoana Lab Inc. All Rights Reserved. 11
libmysqlのラッパー ● 作ってもらったコード(Deno部分) Copyright (C) 2025 Toranoana Lab Inc. All Rights Reserved. 12
libmysqlのラッパー ● 作ってもらったコード(C部分) Copyright (C) 2025 Toranoana Lab Inc. All Rights Reserved. 13
libmysqlのラッパー ● 感想 ○ Deno本体ではなくC言語とかも書いてくれるので楽 ○ 今回のケースだとC言語部分は割と複雑になるので把握は大変 ○ TODOそのものを提案させると割と優秀 ■ あまりやる気が無かったプーリングとかの処理も提案してくれたり ■ プリペアドステートメントも同じく ○ 環境周りも作らせた(Makefile周り) ○ あまりDeno特有な部分がなかったかも?(FFIくらい?) ○ こっちはバージョンの違いもないし、mysqlのインターフェースという既知の情報があるの で割と間違えなかった Copyright (C) 2025 Toranoana Lab Inc. All Rights Reserved. 14
プライベートで作っていたWebアプリのDeno移植 ● ● ● ● 昔趣味で作っていたWebアプリを(Clojure製)をDenoに移植する Webアプリの機能 ○ 地図表示とその上に天気情報のレイヤーを乗せる ○ 地域検索とブックマーク機能(ログイン時のみ) ○ ユーザー登録、ログイン機能 ○ チャット機能 自分が興味ある機能を全部のせていたようなアプリ これをDeno2.5、Fresh2.xで移植することを考える Copyright (C) 2025 Toranoana Lab Inc. All Rights Reserved. 15
プライベートで作っていたWebアプリのDeno移植 ● ● 基本の実施フローはMySQLの方と同様 追加で、今のコードベースの要約や取りまとめをAIに実施させる ○ 概要を取りまとめ ○ 更に詳細部分(個々のコードの個別説明を書かせる) ○ 移行計画のTODO.mdに、上記を参考にどのファイルを参照すればよいかを合わ せて記載させる ○ Fresh2など新し目の情報は別途ChatGPTなどに調べさせてコンテキストに情報 を入れられるようにする ○ 最終的には個別のTODOを作らせて実行する ■ USER_AUTH_TODO.mdとかUI_TODO.mdとか Copyright (C) 2025 Toranoana Lab Inc. All Rights Reserved. 16
プライベートで作っていたWebアプリのDeno移植 ● 出来たもの Copyright (C) 2025 Toranoana Lab Inc. All Rights Reserved. 17
プライベートで作っていたWebアプリのDeno移植 ● 使ったもの(UIだけ齟齬あり→実際はdaisyUI)、先に要素技術の洗い出しをAIに書かせる形 Copyright (C) 2025 Toranoana Lab Inc. All Rights Reserved. 18
プライベートで作っていたWebアプリのDeno移植 ● ● ● ● まだFresh2ぽくない部分をFresh2ぽくさせたい API部分をファイルベースルーティングから、Fresh2で入ったルーティングに切り替える ビュー(JSXのレンダリング)部分は1からあるファイルベールルーティングのまま これも情報不足なので以下でやる(Copilot with gpt5) ○ 一部だけ手で置き換え ○ 置き換えた行を指示して、似たような形で変換せよとする Copyright (C) 2025 Toranoana Lab Inc. All Rights Reserved. 19
プライベートで作っていたWebアプリのDeno移植 ● 完成物 赤枠が最初に作った部分 Copyright (C) 2025 Toranoana Lab Inc. All Rights Reserved. 20
プライベートで作っていたWebアプリのDeno移植 ● ● ● 大変だったこと(うまくいかなかったこと) ○ Fresh2新しすぎて情報がない=古い方法で書いてくる ■ プロジェクトは2.xで初期化するのに追加されるソースは古いみたいな形になりがち ■ 先述した通り、ChatGPTなどにWeb検索→マークダウンでまとめさせてそれをファイルとして読み 込ませることで解消 良かったこと ○ 要素技術の提案をさせたところ割といい感じだった ■ oakを提案してきた部分をFresh2にしてくれといった程度の修正 ○ FreshとHonoを組み合わせるのはどうか?など聞いたら割と現実的な回答 ■ 今回のアプリだと大仰すぎる ■ 採用しなかったが、自己研鑽用にはやりたいのでTODOに記載しておいてもらう 残件 ○ セッション周りはCookieベースにしておきたい ○ 微妙に未完成な部分を対応(ユーザー登録など) ○ 元がポスグレだったのでそのままだが、Denoで使うにはKVのほうが良いかも? Copyright (C) 2025 Toranoana Lab Inc. All Rights Reserved. 21
まとめ ● ● ● やれるけどちょっと面倒だなというものへの取っ掛かりになってよかった 一方で作られたコードのチェックはそこそこ大変 ○ AIにある程度までやらせてリファクタリングを手でやるとか必要 Deno周りの更新ある程度早いのでAI単独だと難しいが今回のやり方であれ ば有効活用できそう ○ gemini cliとかcodex cliに検索機能あるが、ドキュメントとして起こ して渡すなら通常のGeminiとかChatGPTが良かった Copyright (C) 2025 Toranoana Lab Inc. All Rights Reserved. 22