Slide 1

Slide 1 text

go-taskでストレスフリーな
 開発体験
 Retty株式会社
 山下 尚彦
 2021/11/24 


Slide 2

Slide 2 text

自己紹介
 山下 尚彦(やました たかひこ) ● バックエンド ● 自動化 pyama2000 https://user.retty.me/4986330/

Slide 3

Slide 3 text

開発する上での体験
 開発する上で実行するコマンド多すぎてツラい 😇 シェルスクリプトで開発に必要なコマンドを自動化して 開発体験よくしよう!

Slide 4

Slide 4 text

シェルスクリプトのデメリット
 ● シェルスクリプトでゴリゴリやるの大変じゃないですか?🤔 ○ 属人化しやすい ○ 修正しようにも処理が複雑で、本人さえ手が入れられない ⇒ これらの問題 go-task で解決できます! (行数多いし、処理が複雑だし、メンテナンス大変だなぁ…)

Slide 5

Slide 5 text

go-taskの特徴
 ● 各パッケージマネージャーでインストールできる ● YAMLで変数やタスクを定義できるのでメンテナンスしやすい ● 依存しているタスクを呼び出せる ○ 各タスクが独立している場合、並列に実行できる ● ホットリロードがデフォルトで利用できる ● ドキュメントが充実している

Slide 6

Slide 6 text

Taskfile.ymlの書き方(version 3)
 タスクについて ● task コマンドでタスク名を指定して実行する ● default タスクは taskコマンドでタスク名を 指定しなかったときに呼ばれる ● タスク内で desc を定義すると、task --list 実行時に説 明を表示できる 変数について ● vars と env で変数を定義できる ○ vars の値は Taskfile.yml 内で利用する ○ env の値は Taskfile.yml 内とタスクの コマンド内で利用する

Slide 7

Slide 7 text

別タスクを実行する
 データベースを初期化するタスク sql-migrateでデータベースを用意するタスク ● task: タスク名 で別タスクを実行できる データベースを準備するタスク

Slide 8

Slide 8 text

ホットリロード機能を利用する
 ● go-taskには -w オプションを付けることでファイルの変更を検知してタスクを再実行す る機能(ホットリロード)が利用できる ○ 変更を検知したいファイルをsourcesに指定するか、コマンドによって生成される ファイルをgeneratesに指定する必要がある ● タスクの再実行は別プロセスで実行されるので注意が必要 タスク定義 ホットリロード機能を有効にしたとき

Slide 9

Slide 9 text

RettyOrderの開発ではどう使われているか?
 ● google/wire(DIライブラリ)のコードを生成する ● GraphQLのスキーマからGoのコードを生成する ● golangci-lintによるコードの静的解析 & コードの自動修正をする ● 開発に必要なデータベースを用意する ● sql-migrateを利用してマイグレートする ● データベースからGORMの構造体を生成する

Slide 10

Slide 10 text

まとめ
 go-taskのメリット ● シェルスクリプトで実現しようとすると複雑な処理になる機能がgo-taskを使うと簡単に 利用できる ○ タスクを指定して実行できる ○ タスク内で別タスクを呼び出せる ○ ホットリロード機能が使える ● YAMLでタスクを定義できるのでメンテナンスがしやすい Rettyでの使われ方 ● Rettyではgo-taskをRettyOrderの開発で使っている ● ホットリロードで再実行したタスクは別プロセスで起動されるので、 多重起動を防ぐために前のプロセスを落としてからタスクを実行している ● GraphQL用の構造体やデータベースからGORMの構造体を生成する サンプルコード: https://github.com/pyama2000/samle-go-task