2025年12月13日土曜日

Yet another なガントチャート生成ツールを作った

CSV からガントチャートを生成する CLI ツール「ganttgen」を作りました。 この記事では、細かい仕様説明は省いて、実際に動かすところまでを紹介します。

始め方

実行バイナリのダウンロード

以下、 ganttgen の最新リリースページから、ご利用の OS に合わせた実行バイナリをダウンロードしてください。

https://github.com/mikoto2000/gantt-generator/releases/latest

CSV ファイルの準備

以下のような CSV ファイルを用意してください。ファイル名は sample.csv とします。

タスク名,開始,終了,期間,依存,実績開始,実績終了,実績期間,備考
#要件定義,,,,,,,,
タスク1,2025/12/1,,2d,,2025/12/11,2025/12/15,,"12/22 mikoto2000
まいった、終わらん
12/2 mikoto2000
病欠のため着手不能"
#設計,,,,,,,,要件定義は終わっていないが、決まったところから設計していく
タスク2,,,3d,タスク1,,,,"12/22 mikoto2000
テスト
12/2 mikoto2000
テテスト"
#製造,,,,,,,,着手未定
タスク3,,,4d,タスク2,,,,
#テスト,,,,,,,,着手未定
タスク4,,,5d,タスク3,,,,
タスク5,,,,,,,,着手未定

Excel 等の表計算ソフトで編集するのを推奨します。

See: https://github.com/mikoto2000/gantt-generator/blob/main/sample/sample.csv

祝日定義ファイルの準備

以下のような YAML ファイルを用意してください。ファイル名は sample_holiday.yaml とします。

# YAML で祝日を指定するサンプル。
# YYYY-MM-DD の文字列を配列で記述してください。
holidays:
  - 2024-06-10
  - 2024-09-16
  - 2024-09-23

See: https://github.com/mikoto2000/gantt-generator/blob/main/sample/sample_holiday.yaml

ガントチャートの生成・監視・再描画

前述の工程で用意した CSV ファイルと祝日定義ファイルを指定して、 ganttgen コマンドを実行してください。

ganttgen --livereload --holidays ./sample_holiday.yaml ./sample.csv -o sample.html

生成されたガントチャートは sample.html という名前で出力されます。ブラウザで開いて確認してください。

--livereload オプションを指定すると、CSV ファイルや祝日定義ファイルに変更があった場合に自動的にガントチャートが再生成されます。ブラウザのリロードは不要です。

参考資料

2025年12月8日月曜日

Vim のマクロで気持ち良くなった話 - Java POJO から SQL の INSERT 文を作る

SQL の INSERT 分の作成

こんな SQL を作りたい

MyBatis の書き方ですね。

INSERT INTO
TodoEntity
(
  id,
  title,
  done
)
VALUES
(
  #{id},
  #{title},
  #{done}
)

これに対応する Entity クラスが以下。

package dev.mikoto2000.todo.entity;

import lombok.AllArgsConstructor;
import lombok.Data;

/**
 * TodoEntity
 */
@Data
@AllArgsConstructor
public class TodoEntity {
  private long id;
  private String title;
  private boolean done;
}

フィールドとカラムが 1 対 1 で対応しているので、マクロでどうとでもできるはず!

やってみた

という事でやってみた。頑張って動画からキーストロークを読み取ってください…(キーストロークを文章でまとめる気力が無かった…)

第 1 フェーズ: カラムの作成

次のようにカーソルを配置したうえで、

^WWvey<C-w><C-w>pa,<C-w><C-w>j をマクロで記録、 @q で繰り返し、最終行のカンマを消す。

第 2 フェーズ: 値の作成

次のようにカーソルを配置したうえで、

^WWvey<C-w><C-w>a#{<C-r>"}<C-w><C-w>j をマクロで記録、 @q で繰り返し、最終行のカンマを消す。

第 3 フェーズ: フォーマット

後は ggVG= でフォーマットを書ければ終了。

以下、同じようなことをしている動画。

こんな形でウィンドウをまたいだマクロでファイルを作っていくのも便利ですよ!

以上!