Upgrade to Pro — share decks privately, control downloads, hide ads and more …

[Go Reject Con 2021] go-taskでストレスフリーな開発体験

T.YAMASHITA
November 24, 2021

[Go Reject Con 2021] go-taskでストレスフリーな開発体験

Go Reject Con 2021で発表した資料です。
スライドの中で使っているサンプルは https://github.com/pyama2000/samle-go-task に上がっています。

T.YAMASHITA

November 24, 2021
Tweet

Other Decks in Technology

Transcript

  1. go-taskでストレスフリーな

    開発体験

    Retty株式会社

    山下 尚彦

    2021/11/24 


    View Slide

  2. 自己紹介

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

    View Slide

  3. 開発する上での体験

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

    View Slide

  4. シェルスクリプトのデメリット

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

    View Slide

  5. go-taskの特徴

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

    View Slide

  6. Taskfile.ymlの書き方(version 3)

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

    View Slide

  7. 別タスクを実行する

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

    View Slide

  8. ホットリロード機能を利用する

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

    View Slide

  9. RettyOrderの開発ではどう使われているか?

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

    View Slide

  10. まとめ

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

    View Slide