ArinkoLab の開発メモ・運用ログです。Cloudflare / Webツール / 自動化など、公開可能な範囲で検証内容と手順を記録します。
- ツール:SQL Formatter(運用と改善ログ)
- インフラ:Cloudflare Pages / R2 / DNS 設計
- 開発:実装メモ、トラブルシュート、更新履歴
ArinkoLab の開発メモ・運用ログです。Cloudflare / Webツール / 自動化など、公開可能な範囲で検証内容と手順を記録します。
きっかけ:読めないSQLとの戦い お仕事でテストをしていて、どうも変な結果が出てくる…。 システムが表示してくれるSQLを見てみると、とっても長いかつ、改行されていないので読むだけでとても時間がかかってしまいます。 可読性を上げるために、ネット上にあるSQL整形ツールを使ってみるものの、長かったり複雑な構文があるとまともに整形してくれない…。 こうなったら自分の想像通りの整形をしてくれるツールを作った方がよさそうだなと思い、作ってみることにしました。 まずは簡単な仕様を投げてみる とりあえずChatGPT君に簡単仕様を伝えて送信。 SQLの整形ツールを作りたいと考えています。 1.各SQL言語に対応できるようにする。 2.業務でも使うため、サーバー送信などの処理はNG。 3.使い方は見てわかるようシンプルに。 上記条件を満たせるツールのひな型を作ってみてください。 早速コードが生成される 早速HTMLのコードが出てきたので中身を確認。 なんとなくそれっぽい感じのが出てきました。 最低限の機能だけなのでシンプル。 色が黒っぽいのはどうやらChatGPT君の好みらしい…。 ChatGPTは指定しないとこの雰囲気にしがちな様子。 まぁ自分で使うのがメインのつもりなので、雰囲気は良しとしよう。 細かな仕様の詰め 次は念のため仕様の質問と現状の確認。 CASE WHEN の整形について JOINなどのインデントについて コメントを維持するか 文法エラーっぽいSQLはどうする? 等々、細かな仕様を相談しつつ、コード修正を手伝ってもらいながら、SQLは自分で適当に長めの文を作って何度も作成、テストを繰り返して納得できる形で整形されるまで繰り返しました。 機能追加:SQL作成補助 一旦整形については完了。 ただ、このままだとちょっとつまらないので、ついでにSQL作成の補助も手伝ってもらおうと思いました。 「あまり使わないけど簡単なSQL構文ってたまにド忘れすることありますよね?そのためです(笑)。」 てなわけで再度追加で依頼。 次ですが、別のタブとしてSQL作成のページも一緒に作ってしまいたいと思います。 SELECT、UPDATE、CREATE、INSERTに対応できるようにしてください。 細かな調整とテスト それっぽいものができましたが、実際に使ってみると気になる点がいくつか。 括弧をいれてグループ化ができない ISNULL、ISNOTNULLの時に値の入力ができてしまう ORDERBYぐらい入れたいよね。 等々、実際に使うならば気になる所がそれなりにはあったのでそれぞれ目で確認し、想定通りに作れるか一つ一つチェックをしていきました。 ただ、大まかな動きはすぐに作ってもらえたので、実質半日ぐらいの時間で作成できました。 (この程度でも完全に手で作っていたら慣れてない僕だとどれぐらいかかっていたのやら…) コードを読めるとはいえ、分野的には素人でもすぐできた 今回、業務で困っていたSQL整形の問題を解決するために、自分専用のツールを作成しました。 既存のツールでは対応できなかった複雑な構文も、自分の想定通りに整形できるようになり、作業効率も格段に上がりました。 さらに、SQL作成補助機能も追加したことで、ちょっとしたSQL構文のド忘れにも対応できる便利なツールになりました。 AI君と対話しながら開発することで、細かな仕様の調整やテストを繰り返しながら、自分にとって使いやすいツールを作ることができました。 もしも、完全に自分で作っていたら、フロントエンドの実装に不慣れな僕では完成までにどれだけ時間がかかったのやら…。 Web上に公開する作業を含めても1日かかっていません。 このレベルですぐに実装ができるなら、必要なものがあったら自分で作ってしまった方がよくないか? と最近は思い始めています。
きっかけ:ゲーム中の時間管理 僕は普段友人とDiscordを使って会話をしながらゲームをしているのですが、ゲームに夢中になっていると、思ったより時間が過ぎてしまって寝不足になってしまうことが良くあります。 一応、元々VoiceBoxやVoiceroidなどの合成音声ソフトに時間を告げてもらうBOTを入れてたのですが、ソフトの更新に対してBOTの更新が追い付かず(もしくは更新されない)等が多く動作が安定しなかったり動かなくなることが多かったので、「もう自前で時報を流せるようにした方が便利だろうな(後ボイロっ子達をきれいな調声で時報をしゃべらせたい…)」と思い、練習ついでにDiscord用の時報ボットを作ることにしました。 まずは簡単な仕様から 今後発展させる構想はありますが、まずは最低限の簡単な仕様だけでどれぐらいのものが提示されるのかを確認する意味も込めて始めてみました。 AIに伝えた初期仕様は以下の通りです。 Discordという通話アプリで、時報を流すアプリを製作したいです。 必要な仕様は以下になります。 1.指定の時間で通知を流す。 2.流す通知は指定したチャットに文字として記載。(記載のON、OFFは指定できるようにする。) 3.音声ファイルから音声を読み取ってその音源を流す。 AIとのブレスト開始 仕様を伝えると、AIから次々と質問が飛んできました。 Discord側の準備はどうするか? スケジュールの持ち方はどうするか? サーバー毎に管理するか? 設定ファイルのステータスは何を用意するか? 仕様を考え始めるとこちらからも気になる点が出てきます。 時報音声を必要としない場合もあるのではないか? 文字だけ、音声だけのステータスも必要ではないのか? helpなどのコマンドは見やすいように説明を簡潔にしなくては。 エラーを感知した場合はどのように処理しようか? 再生時間の長い音声の場合、どこまで許容するか? わからない部分はこちらからも質問しながら回答していきます。 イメージだけで細かな仕様が決まっていない状態からこうしてやり取りできるのが対話型AIで開発をするにあたっての肝だと思っています。 コード生成とファイル作成 ある程度仕様が固まると、やっとコードを作ってくれました。 もちろんフォルダ構成や簡単なテスト手順なんかも一緒に説明してくれて、よく最初に躓く開発環境や実行環境を揃えるという部分に何時間も悩むことはありませんでした。 業務としての開発でもこの部分だけで1日費やすことなんてざらにあるので、あまり時間を費やせない個人開発としてはとてもありがたいことです。 AIを使ってコーディングの自動化もできるらしいですが、そこまでやっていないかつ、どんなコードになるのかイメージができていないので、現段階では手作業でファイルを作ってはコピー貼り付けペタペタ…。 コードレビューと修正 ここまでやって一通りソースやファイルを見直して、どんな作りになっているか確認してみるとはやりというべきか、AI君が仕様を勘違いして少し変な動きをすることも多々ありました。 はずはイメージとちょっと違ったなと思ったところを指摘して修正。 具体的な例としては以下のような確認と修正を行いました: 管理ファイルの形式が一般的には見づらい形式だったので、一般的に使っているini形式に変更 時間の管理をHH:mm形式に変更 僕が認識してない設定があったら、なぜ追加したのか、本当に必要なのかを質問して確認 不要なものは削除 これをしないと、本当に意図しない動きや謎な設定が入っていたりします。 他にもいろいろ質問も修正もやっています。 特にひどかったAI君が勝手に入れた処理 実際に僕の所属する複数のサーバー(Discordのお話部屋のこと)全てに勝手に入ってきて時報だけ鳴らしてサーバーから抜けていく。ただただ迷惑!! 上記を修正したら今度は僕が会話していたら急に入ってきて時報を鳴らす! この時は「AIが意思を持ってきた!」とその時一緒にゲームをしてた人たちと笑い話にしてましたが、笑い話で済めばよいですが実際に実行されていたら迷惑極まりない処理が紛れてることがあり得るため、かなり注意して1つ1つ確認しておかないといけませんでした。 完成:個人利用レベルのボット とはいうものの、僕自身で個人的に使うのに問題ないぐらいのレベルのものはできました。 僕のように平凡な人ではある程度AI君に協力してもらわないと、実装する前の調査で息絶えてしまうので…。 これらのツールをAIなしで、自分で調べて作成している人たちもいますが、やっぱり僕とは違い圧倒的に優秀な人たちだなと思いました…。 それだけに、AI君にちゃんと指示を出すことができれば平凡な人でもツールを作れてしまうので、アイディアだけで実力が伴わない自分にとっては良い世の中になったなと思っています。 追伸:今は自分だ作ったボットでA.I.VOICEの紲星あかりちゃんに「早く寝なさい」と怒られてから就寝する毎日です。 今後の展望 何とか最初自分で思ったものを実装するまでこじつけたものの、現状では課題も残っています。 現在の課題 操作やコマンドが分かりづらい Discordのコマンド操作に慣れてる人、iniファイルが読める人しか思ったように操作ができない 各ツールがアップデートに伴い、必要な場合バージョンアップを通知する仕組みがない。 少なくともこの辺が解決しない限り、配布公開はできないなと考えています。 今後追加したい機能 バージョンアップの通知の仕組み DiscordのチャットとVoiceBoxやA.IVoiceシリーズ、CeVIO AIシリーズ等に代表される読み上げソフトとの連携 その他細かな設定で実装したい機能 まだまだ進化する予定です。 公開できるのはいつになることやら…。
きっかけ:AIがプログラミングをする時代? AIを使ってプログラミングができるっぽいぞ!! 仕事でもAIがじわじわと使われる機会が多くなってきた昨今。 本当にAIが実用的なコードを書けるのだろうか? 普段の僕は、趣味でゲームして、ゲーム実況を作ってばかりのしがないシステムエンジニアです。 お仕事では、バックエンド開発が中心で多少画面を触ることがあるものの、本格的なWebアプリ開発の経験は少ない自分でも、「もしAI君がそこまで優秀なら、自分でも新しいことにチャレンジできるかもしれない」と考え始めたのが2025年の9月。 そう思い立ったが吉日…ということで、勢いで生成AIの調査を始めることにしました。 生成AIツールの比較検証 まずは無料で使える範囲で、有名どころの生成AIを片っ端から試してみました。 試したツールは以下の通り: ChatGPT Gemini Copilot Claude Perplexity Felo genspark とりあえず考えてみたのは各ツールの特徴。 UIの使いやすさ、回答のスピード、専門性の高さなど。 開発元の思想の違いで、それなりに特徴を持つものもあるものの、実際に使ってみて思ったのは、意外とできることや返ってくる回答の質に大きな差はないということでした。 自分に合ったツールの選び方 じゃぁ何を基準にツールを選ぶべきなの? 僕の場合、重視したのは「ブレストのしやすさ」でした。 アイディアをゼロから形にしていくプロセスでは、AIとの対話がスムーズであることが重要だと思ってたからです。 何より、最初からアイディアを形にするにあたって、自分が気が付いてない仕様や、知らないシステム的な問題なんかもたくさんあるはずで…。 (というよりそれが完璧にできるならAIがいらないもっと優秀なエンジニアになってるはず…) ならばこちらの意図を汲み取って、必要に応じて質問を返してくれるようなインタラクティブなやり取りができて、一緒に本当に必要なシステムの形を整理して設計してくれるのが理想でした。 各AIを試した結果、現時点で最もブレストがスムーズに進んだのはChatGPTでした。 ChatGPTは正確性を重視しているが、冷たいだとか。 最近だとGeminiがどんどん追い上げてきているからそっちの方がいい、なんていう情報も多いですが、ぶっちゃけ想定した設計とコードが正確に実装されていれば良いし…。 そう考えると質問の投げかけ方や、アイディアの深掘りのバランスが、僕の開発スタイルに合っていたのだと思います。 あなたに合った生成AIの選び方 一応僕の経験を踏まえて、これから生成AIを使い始める方へのアドバイスをまとめておきたい。 各ツールの特徴を簡単に整理すると、以下のようになります: ツール名 主な特徴 おすすめの用途 ChatGPT 対話的なブレストが得意 段階的にアイディアを深掘りしていくのに向いている Gemini Google製で検索との連携が強み。簡単なWebアプリならプレビュー機能で確認可能 最新情報を取り入れた回答が欲しい時に便利 Copilot Microsoft製品との統合が魅力。Windowsアプリもあり、ローカルファイルを参照可能 Office製品を多用する環境や業務で使うと便利 Claude 長文の理解と生成に強い。自然なやわらかい文章作成も可能 複雑な要件を扱う際に力を発揮する Perplexity 情報収集と引用が特徴。Bing検索エンジンを採用(Geminiに似ている) 調査・リサーチ用途、リアルタイムな情報収集に適している Felo 日本発のAI搭載検索エンジン。画像生成なども可能 検索エンジンと言われているが、やれることはほかの生成AIと一緒 genspark 米国発AI検索エンジン。検索結果に対して根拠も同時に提示 「答え・理由・背景」を同時に確認しやすい ざっくりとまとめているものの、どのツールもよく言われる文書ファイルの作成や、画像生成なども可能で、ぱっと思いつく限りの作業は可能。 結局重要なのは、自分の用途や作業スタイルに合ったツールを選ぶことです。 無料プランで実際に触ってみて、使い心地を確かめてから決めることをおすすめします。 僕の場合はブレストのしやすさを重視しましたが、あなたの優先順位は違うかもしれないです。 コード生成の精度、回答のスピード、UIの好み、得意な言語や分野など、自分にとって何が大切かを考えて選んでください。 これからの開発スタイル 僕はChatGPTをメインツールとして、AI支援開発を始めることにしました。 と言っても、それだけのつもりはなく、文章はClaude、Webアプリのレイアウトひな形は複数のツールで一番気に入ったものを利用する等、使い分けをするつもりです。 巷でいわれているAI利用の情報は「AIが全部やってくれる!!人は動かなくてもいい!!」という情報ばかりが出回っていますが、僕の認識ではAIはあくまでサポートツールという立ち位置です。 特に、仕事でシステムを作っている僕からすると、全部AIに任せて中で何が行われているのかわからないシステムなんて狂気の沙汰でしかありません…。 最終的な判断や設計は自分で行わないと、怖くて世にも出せないし、そんなシステム使いたくないですよね? AIはアイディアの壁打ち相手としてはとても最適で、部下とやったらパワハラになってしまいそうな回数の質問や、やり取りを繰り返しても、しっかりと答えてくれます。 しかし、最終的に作ったものに責任を負うのは僕自身であり、システムづくりの補助的な相手としか考えていません。 あくまで上司と部下のような関係として責任を負う上司としての立場を崩さなければ、自分のために頑張ってくれるスーパー新人のようなとても頼りになる存在だと思っています。
背景 Google AdSense の審査では ads.txt を正しく取得できることができなかった。 今回の構成は次の通りです。 審査対象のサイト:arinkolab.com(Cloudflare へ NS 移管済み) アプリ本体:sqlformatter.arinkolab.com(Cloudflare Pages / カスタムドメイン / SSL 有効) 目的:arinkolab.com → sqlformatter.arinkolab.com にリダイレクトしつつ、/ads.txt は パスを保持して sqlformatter.arinkolab.com/ads.txt に到達させる 問題は、以下の状態になっていたことです。 https://sqlformatter.arinkolab.com/ads.txt は表示できる(OK) https://arinkolab.com/ads.txt が https://sqlformatter.arinkolab.com/(トップ)へ飛び、/ads.txt が失われる(NG) 解決方針 優先する方針は Redirect Rules でパスを保持することです。 目標:https://arinkolab.com/* → https://sqlformatter.arinkolab.com/$1 クエリ(?a=b 等)も保持する もし Redirect Rules で実現できない場合は、代替として Worker で arinkolab.com/ads.txt を直接返す案もありますが、まずは Redirect Rules で成立させるのが運用上シンプルです。 前提(DNS / SSL) Cloudflare 側で arinkolab.com がプロキシ(オレンジ雲)になっていること sqlformatter.arinkolab.com は Cloudflare Pages のカスタムドメインとして有効で、HTTPS が有効であること また、HTTP で来たアクセスを HTTPS に統一するために、Cloudflare の設定で以下を ON にします。 ...