以前このブログでも紹介した、自作のCommon Lispライブラリ「cl-jquants-api」と「cl-talib-api」。今回はこれらを活用して、本格的なデータパイプラインを構築してみました。
「そもそもDagsterって何?」という方に向けて、ChatGPTに聞いてみた結果をそのまま引用します。
Dagsterは、データパイプラインやETL、機械学習ワークフローを構築・実行・監視するためのオーケストレーション基盤です。
要点だけ言うと:
- Python中心で、データ処理ジョブを「資産(assets)」や「ジョブ(jobs)」として定義できる
- スケジュール実行、依存関係管理、再実行、失敗時のリカバリがしやすい
- UI(Dagster UI)で実行状況・ログ・系譜(lineage)を見える化できる
- ローカル開発から本番運用まで同じ考え方で扱える イメージとしては「Airflow系の役割を、よりソフトウェア開発っぽく型安全/テストしやすくしたもの」です。
なぜDagsterを選んだのか
以前業務で、Apache SparkとApache Airflowを使ったデータパイプラインを構築した経験がありました。今回も個人開発で似たような仕組みを作りたいと考えていたところ、Airflowの後発としてモダンな設計思想を持つDagsterの存在を知り、こちらを試してみることにしました。
Dagster自体はPythonで実装されています。しかし今回やりたいのは、「自作のCommon Lispプログラムとの統合」と「スケジュール実行環境の構築」です。 私自身、Dagsterを触るのは今回が初めてで、Pythonの経験も少し触ったことがある程度でしたので「Claude Opus 4.6」に頼ることにしました。 作りたいものの仕様をAIに伝え、生成されたコードを手元で検証し、エラーが出れば修正してもらう……というサイクルを繰り返しながら実装を進めました。
不慣れな技術スタックだったこともあり、完了までには想定より少し時間がかかってしまいました。Claudeのトークンも予定より多く消費してしまいましたが、結果的には大満足です。データパイプラインのようなインフラ部分は、最初に時間をかけて丁寧に構築しておくと、後々の運用や拡張が圧倒的に楽になります。 多少の苦労やトークン消費は先行投資として十分お釣りが来るでしょう。

データは、全てParquet形式で保存されているので、様々なプログラミング言語で分析することができます。Parquetの読み書きはDuckDBを使用しています。
興味を持った方は、是非試してみてください。日本株20年分の時系列データの構築、およびテクニカル分析のデータを生成するのに丸4日ほどかかってしまいました。 不測の事態に備え、急遽バックアップのSSDを購入することにしました。😅😅😅