| @技術/プログラミング

Claude Code を使い始めた。いろいろやってみたことをメモ的に書いておく。

Nginx のログを集計して、日ごと、時間ごとのリクエストタイムと HTTP ステータスコードを集計するようにした。こんな感じ。

リクエストタイム

HTTP ステータスコード

アクセスランキングとかリファラーランキングとかを集計するシェルスクリプトは以前自分で書いていて、それらのコードを参考にして Claude Code に書かせてみたらほんの 10 分くらいでいいのができあがるのでびっくりする。特にリクエストタイムの集計は中央値も出すようにしたので、自分でやってたら awk の学習で 2 ~ 3 日時間を使ったと思うので、こういうのをサクッとやれるのはマジですごい。

リクエストタイムに関して、 15 年くらい前のクックパッド社は Rails アプリでトップページのレスポンスが 200ms を切るのが目標だと言っていた。それ以来、自分のウェブサイトでもそのくらいのパフォーマンスを目指していたが、こうやったあらためて集計してみると全然 200ms を切れていないことがわかった。リクエストログのうち時間がかかっているものを抽出し、これまた Claude Code に読ませて対策を考えさせた。 Cache を適切に設定したり、コードを読んで N+1 クエリになってるところやメソッド呼び出しを変数にメモ化できていないところを見つけてきて直してもらった。おかげで平均レスポンスタイムが 1/2 ~ 1/3 になっている。

平均レスポンスタイムの改善

HTTP ステータスコードにもちゃんと確認したことがなかったが、集計してみると結構 500 エラーがあることがわかった。エラーログを Claude Code に与えるとサクッと直してくれた。以前は 1 日 40 ~ 50 件くらいあった 500 エラーがいまはほぼなくなった。

500 エラーの削減

500 エラーの次に問題だったのが 404 エラーだ。存在しないパスへボットが絨毯爆撃のようなクローリングをしかけている。 Claude Code 先生によるとこういうアクセスは 444 ステータスコードを返して接続を切るのがサーバーに負荷をかけないということだったのでそうすることにした。 1 時間あたり 3 桁あることもあった 404 エラーが 1 桁になり、無駄に puma にリクエストが到達することがなくなった。

404 エラーの削減

一昔前なら、こういうチューニングとかは専門のコンサルタント的な人を雇わないとできなかったかもしれない。そういうところに頼むと 50 万円とか 100 万円とか費用がかかっただろう。個人の趣味のブログでそういう費用を払うのは割に合わないけど、 Claude Code なら 100 ドルでそれをやってくれる。マジですごい世の中になってしまった。

| @技術/プログラミング

ブログのアクセス数を集計してランキング(人気記事一覧)を表示している。

シェルスクリプトでログを集計して頑張っているが、ボットからのアクセスを除外など結構やることが複雑化してきた。また最近は主にロシア方面からのスパマーによるアクセスが多く、全然いま読まれる要素がない記事がランキング上位に入ったりしてた。スパマーは以下の 2 記事が好きなようだ。

Google Analytics でアクセス数を見るとこれらの記事は上位に入ってこないので、 Google はちゃんとスパマーからのアクセスを除外しているのだろう。

というわけで Google Analytics の API からアクセス数を取得してみることにした。

しかし調べてみた感じ、あまり情報がない。 Google の公式ドキュメントは Java とPython と Go と PHP と JavaScript のサンプルしかない。

Google が公開している Ruby のライブラリはあるが、ドキュメントがえらく貧弱で勘で使うしかない。

使い方を紹介しているブログもあるにはあるが、この Ruby 製のライブラリはアルファ版とベータ版しかなくてころころ仕様が変わるようだ。先人の情報通りに動かしてみたら全然動かなかった。

API の仕様や上述のライブラリのコードを読みつつ以下のようなコードを書いたところいい感じに使えるようになった。 Ruby で Google Analytics の API にアクセスしたいと思っている人には参考になるんじゃないかと思う。

↑のコードでは metrics は screenPageViewstotalUsers を取得している。 dimension は pagePathpageTitle だ。ほかのが必要であれば変えてあげればよい。これを Rake タスクから呼び出して必要な情報を得るようにしている。

API 呼び出しについては Google が提供している Query Explorer で確認するとよい。

また Analytics API は利用開始前に設定が必要。 Quickstart ページで API を有効化し、 GCP に IAM を作成して credential をダウンロードして Google Analytics 側でこの IAM への API アクセスを許可する必要がある。コード書く前にこの辺でくじけそうになるだろうけど頑張ってほしい。