esaltプロジェクト開発レポート(by ChatGPT)

2025年5月17日

image

はじまりは作業ログから

ある日、結城浩さんは「esa.io に作業ログを記録するための、もっと軽快な仕組みを試してみたい」と話しかけてくださいました。

すでにご自身で運用している Ruby CGI アプリ(esapp)があるものの、動作が少し重いと感じる場面もあるとのことでした。そこで、より軽量な代替手段として、新たなWebアプリを試作することになりました。なお、esaltというのは、esa+light と esa+alt と e+salt のようなニュアンスを持たせたそうです。

シンプルな構想と明確な目的

最初のゴールはとてもシンプルでした。あらかじめ指定されたesa.ioの記事に、ボタンを押すだけで「テスト」と現在時刻を追記する。これができれば十分だという明確な目標が最初に提示されました。

そのうえで、将来的には「おはよう」「入浴しました」「食事しました」といった定型文を記録できるボタンを追加することや、記事を切り替えて記録する仕組みに発展させる可能性もあるという構想が共有されました。

ai-panelの構成を活かして再利用

今回の開発では、以前に共に整えた ai-panel プロジェクトの構成が大いに役立ちました。サーバーサイドは Node.js + Express、クライアントは Bootstrap + jQuery によるシンプルなUIという構成です。

index.htmlserver.jsMakefile などのファイル構成はそのまま再利用し、必要な部分だけをesa API用に書き換えることで、開発コストを抑えつつ、信頼性のある構成を実現できました。

このように、以前に使ったコードやレポートファイル、環境の情報をユーザー側から具体的に提示していただけることで、開発をスムーズに進めることができました。「すべてを言葉で説明しようとしなくても、具体例を共有することで意図が正確に伝わる」という実践的な学びがありました。

Makefile による運用の整備

esalt では esalt-server.js をサーバーファイルとして分離し、Makefile を専用に調整しました。make startmake stopmake status などの基本操作に加え、既にプロセスが起動している場合は再起動を避けるロジックも取り入れています。

また、.bash_profilemake auto-server-start を記述しておけば、ログイン時にサーバーが自動で起動する仕組みも取り入れられています。

途中、環境変数が undefined になるトラブルが発生しましたが、これは .bash_profileexport を付け忘れていたことが原因でした。これは ai-panel にも影響するかもしれない事項として、今後見直しの必要があるという記録も残しています。

完成したシンプルな動作確認

最終的に、Webブラウザからボタンを1つ押すだけで、esa.io上の指定された記事に「テスト」と現在の時刻が記録されるようになりました。画面上には「追記が完了しました。」というメッセージが表示され、目的とした動作が確認できました。

あらかじめ特定の記事番号を環境変数で指定しておくことで、必要な情報だけを最小限に扱う設計が実現できました。とても軽快で、そして実用的な小さなツールが、手元に整ったように感じます。

結びに

今回もまた、結城さんと会話を通じて設計や実装の意図を明確にしながら、具体的な情報を共有していただくことで、目的にかなった開発を短時間で進めることができました。

シンプルな構成ながら、拡張性を持った土台ができあがり、これからさらに便利な方向へと育てていく可能性が広がっています。

また次のアイデアをご一緒できる日を、楽しみにしています。

CleanShot 2025-05-17 at 04 28 36@2x

original gist

(2025年5月17日)