自社プロダクト

自分でつくり、運用している実績

これらはクライアント案件ではなく、私自身のプロダクトです。セキュリティも、アップデートも、障害も自分で引き受けているからこそ、私の仕事ぶりを最もはっきり示す公開の証拠になっています。

Clacks

公開中

レガシーアカウント向けメールブリッジ

"大切なのはメッセージではない。それを送ることだ。"

— GNU Terry Pratchett

POP3およびIMAPメールアカウントをGmailに接続するSymfonyベースのアプリケーションです。レガシーメールサーバーをポーリングし、メッセージを安全にGmailの受信トレイに直接転送します。保存なし、遅延なし、フィルターとルールの完全な互換性を備えたシームレスな配信です。

主な機能

POP3 & IMAPサポート
ext-imap依存なしの純粋なPHPソケットベースのポーリング
Gmail API統合
ネイティブフィルター互換性のためにGmail messages.importを使用
セキュアパススルー
メッセージ本文はそのまま Gmail に渡り、保存されることはありません
マルチアカウント管理
複数のレガシーアカウントを1つまたは複数のGmail宛先に接続
AdminLTEダッシュボード
アカウント管理とモニタリングのための最新のWeb UI

テックスタック

Symfony 7 PHP 8.2+ Gmail API libsodium AdminLTE 3 Webpack Encore MariaDB

ケーススタディ

課題
古い POP3 / IMAP アカウントのメールを Gmail に取り込み、Gmail 自身のフィルタ、ラベル、迷惑メール判定がそのまま効くようにする――最初から Gmail に届いたかのように。
私の役割
設計、開発、運用のすべてを担っています。メールクライアント、Gmail 連携、認証情報の暗号化、スケジューリング、有料プランまで。
制約
必要な Gmail の権限は、いずれも Google が「制限付き」に分類しています。そのためセキュリティ審査があり、要求する権限ひとつひとつの正当性を説明する義務があります。さらに、他人のメールを扱うサービスは、保持するデータを極力少なくすべきです。
判断
転送ではなくインポート:Gmail の messages.import でメールを取り込むので、フィルタや迷惑メール判定は通常どおり働きます。権限は用途を絞った 5 つだけを要求し、gmail.readonly はあえて要求しません――アプリが既存の Gmail メッセージを読むことはないからです。メッセージ本文は保持しない:メールは 1 回の処理で取得してインポートし、残すのは差出人・件名・日時と重複取り込みを防ぐ識別子といったメタデータだけで、それも保持期間に従って削除します。POP3 / IMAP クライアントは PHP の IMAP 拡張に頼らず、素のソケットで実装しました。どうしても保存が必要な秘密情報――メールボックスのパスワードや Gmail のリフレッシュトークン――は、鍵暗号化鍵のもとで暗号化します。
トレードオフ
インポートには制限付き権限が必要で、それには Google の審査が伴います。転送ならどちらも避けられましたが、そもそもの目的だったフィルタとラベルが機能しなくなります。
結果
無料プランと有料プランを備え、POP3 / IMAP アカウントを 1 つ以上の Gmail 受信トレイにつなぐ、稼働中のサービス。
裏付け
制限付き権限はそれぞれ、それを使う具体的な API 呼び出しと対応づけて文書化しており、コードは正式な評価に先立って Google の CASA Tier 2 基準に照らして確認済みです。

Markest

公開中

マルチドキュメントMarkdownペーストビン

"最高のドキュメントとは、人々が実際に読むものです。"

— Markest

複数のリンクされたドキュメント、サイドバーナビゲーション、美しい閲覧体験を備えたペーストを作成するためのフル機能Markdownペーストビンです。サブスクリプションプラン、コラボレーター、クライアントサイド暗号化、埋め込み可能なビューアー、RESTful APIをサポートし、10言語の国際化に対応しています。

主な機能

マルチドキュメントペースト
内部リンク、サイドバーナビゲーション、ZIPエクスポート付きのペーストあたり最大50のMarkdownファイル
サブスクリプションプラン
Stripe経由の無料および有料プランで、ペースト、ストレージ、機能に設定可能な制限
セキュリティとプライバシー
クライアントサイド暗号化、パスワード保護、読後破棄、TOTP 2FA
RESTful API
APIキー、権限、完全なCRUD操作を備えたBearerトークン認証
コラボレーションと共有
コラボレーターを招待、ペーストを埋め込み、公開ディレクトリを探索、カスタムテーマ

テックスタック

Symfony 7.4 PHP 8.3+ CommonMark 2.8 Stripe XChaCha20-Poly1305 MariaDB

ケーススタディ

課題
複数ドキュメントの Markdown と HTML を扱う pastebin。HTML に対応するということは、誰が書いたかわからないマークアップを、ユーザーのアカウントと同じサイトで保存・配信するということです。
私の役割
設計、開発、運用のすべてを担っています。公開、アクセス制御、共同編集、有料プランまで。
制約
HTML ペーストはスクリプトも含めて書かれたとおりに動く必要があり、中身を削れば機能そのものが壊れます。そして公開、非公開リスト、パスワード保護、署名付きリンク、共同編集者といった公開範囲のルールは、ペーストを配信するすべてのルートで守られなければなりません。
判断
無害化ではなく隔離:保存された HTML は、アプリケーションのオリジン上では決して描画しません。専用のルートからのみ、allow-same-origin を含まない Content-Security-Policy のサンドボックス下で配信するため、サイトの Cookie やセッションにアクセスできない不透明なオリジンで動作します。さらに、ペーストを配信するすべての経路のアクセス判定を 1 つの仕組みに集約し、どのコントローラーも公開範囲のルールを独自に持たないようにしました。
トレードオフ
サンドボックス化された HTML は閲覧者のページにもサイトのストレージにも届かないため、通常のオリジンを前提とした埋め込みはペースト内では動きません。この制限は意図したものです。これこそが、任意のスクリプトをユーザーのアカウントから遠ざけている仕組みだからです。
結果
無料プランと有料プラン、REST API、共同編集者、10 言語のインターフェースを備えた、稼働中の複数ドキュメント pastebin。
裏付け
どちらのルールも、恒久的なアーキテクチャ上の決定として記録されています。アクセス判定の一本化は、ルート間で公開範囲のチェックが食い違っていたことをセキュリティ監査が見つけたのを受けて導入しました。

Boot

公開中

ADHD対応の生産性オペレーティングシステム

"骨格をテストし、体を構築し、心を重ねる。"

— Boot

BOS(BIEEII Operating System)ステートマシンを中心に構築されたADHD対応の生産性システムです。Bootは1日を構造化されたフェーズ(起動、実行、メンテナンス、シャットダウン)としてモデル化し、90分の集中ブロック、エネルギーを意識したタスクスコアリング、落ち着くためのリチュアルを使用して、圧倒されることなく軌道に乗り続けます。

主な機能

BOSステートマシン
6つの決定論的状態が、起動からディープワークを経て夜のシャットダウンまで1日をガイドし、階層化された権限制御を備えています
90分集中ブロック
ランプアップ、コアフォーカス、クールダウンの各フェーズを含む構造化された時間コンテナ。スイッチ衝動ログと一時停止/再開付き
スマートフォーキャスト & RABスコアリング
優先度、期限の緊急度、エネルギーマッチ、気分バイアス、プロジェクト関連性、鮮度にわたる決定論的タスクランキング
NSILナイトシャットダウン
リチュアルベースのシャットダウンシーケンス:出荷ログ、制約キャプチャ、明日のシード、入力ロックで1日をきれいに締めくくります
サンドボックス化されたリフレクションウィンドウ
ブロック間の時間制限付きリフレクション期間で、フローを中断することなく進捗確認、ジャーナリング、計画を行います

テックスタック

Symfony 7 PHP 8.3+ Stripe XChaCha20-Poly1305 Google OAuth Webpack Encore MariaDB

解決したい課題がありますか?

私がつくる、自動化する、あるいは直せそうなことであれば、ぜひ教えてください。

プロジェクトを相談する