Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
[Go Reject Con 2021] go-taskでストレスフリーな開発体験
Search
T.YAMASHITA
November 24, 2021
Technology
0
2.9k
[Go Reject Con 2021] go-taskでストレスフリーな開発体験
Go Reject Con 2021で発表した資料です。
スライドの中で使っているサンプルは
https://github.com/pyama2000/samle-go-task
に上がっています。
T.YAMASHITA
November 24, 2021
Tweet
Share
Other Decks in Technology
See All in Technology
APIのドキュメント化何使ってますか?
miu_crescent
2
160
New Relicで実践する外形監視
aeonpeople
1
120
株式会社M2X エンジニアチーム紹介資料
m2xsoftware
0
330
[RSJ24] Object Retrieval in Large-Scale Indoor Environments Using Dense Text with a Multi-Modal Large Language Model
keio_smilab
PRO
0
220
Oracle Base Database Service:サービス概要のご紹介
oracle4engineer
PRO
0
13k
Dive Deep in Cloud Run: Automatic Base Image update
aoto
PRO
0
900
技術力あげたい
hisaichi5518
2
2.8k
SHIFTの課題と目指したい組織像 / 20240827 Rinto Ikenoue
shift_evolve
0
150
ことばをそろえる / Bridging the Terminology Gap
amaotone
5
1k
LLMに日本語テキストを学習させる意義
ksaito
13
3.5k
トレタO/X アーキテクチャ移行記 Next.js App Router化への道のり / TORETA TECH UPDATE 1
okunokentaro
2
590
「名前解決」から振り返るAmazon VPC
yuki_ink
0
320
Featured
See All Featured
Refactoring Trust on Your Teams (GOTO; Chicago 2020)
rmw
29
2.5k
Optimizing for Happiness
mojombo
375
69k
Into the Great Unknown - MozCon
thekraken
28
1.4k
Debugging Ruby Performance
tmm1
72
12k
Docker and Python
trallard
39
3k
Build your cross-platform service in a week with App Engine
jlugia
228
18k
10 Git Anti Patterns You Should be Aware of
lemiorhan
653
58k
GraphQLとの向き合い方2022年版
quramy
43
13k
In The Pink: A Labor of Love
frogandcode
139
22k
Art, The Web, and Tiny UX
lynnandtonic
294
20k
Six Lessons from altMBA
skipperchong
26
3.3k
Exploring the Power of Turbo Streams & Action Cable | RailsConf2023
kevinliebholz
22
3.9k
Transcript
go-taskでストレスフリーな 開発体験 Retty株式会社 山下 尚彦 2021/11/24
自己紹介 山下 尚彦(やました たかひこ) • バックエンド • 自動化 pyama2000 https://user.retty.me/4986330/
開発する上での体験 開発する上で実行するコマンド多すぎてツラい 😇 シェルスクリプトで開発に必要なコマンドを自動化して 開発体験よくしよう!
シェルスクリプトのデメリット • シェルスクリプトでゴリゴリやるの大変じゃないですか?🤔 ◦ 属人化しやすい ◦ 修正しようにも処理が複雑で、本人さえ手が入れられない ⇒ これらの問題 go-task
で解決できます! (行数多いし、処理が複雑だし、メンテナンス大変だなぁ…)
go-taskの特徴 • 各パッケージマネージャーでインストールできる • YAMLで変数やタスクを定義できるのでメンテナンスしやすい • 依存しているタスクを呼び出せる ◦ 各タスクが独立している場合、並列に実行できる •
ホットリロードがデフォルトで利用できる • ドキュメントが充実している
Taskfile.ymlの書き方(version 3) タスクについて • task コマンドでタスク名を指定して実行する • default タスクは taskコマンドでタスク名を
指定しなかったときに呼ばれる • タスク内で desc を定義すると、task --list 実行時に説 明を表示できる 変数について • vars と env で変数を定義できる ◦ vars の値は Taskfile.yml 内で利用する ◦ env の値は Taskfile.yml 内とタスクの コマンド内で利用する
別タスクを実行する データベースを初期化するタスク sql-migrateでデータベースを用意するタスク • task: タスク名 で別タスクを実行できる データベースを準備するタスク
ホットリロード機能を利用する • go-taskには -w オプションを付けることでファイルの変更を検知してタスクを再実行す る機能(ホットリロード)が利用できる ◦ 変更を検知したいファイルをsourcesに指定するか、コマンドによって生成される ファイルをgeneratesに指定する必要がある •
タスクの再実行は別プロセスで実行されるので注意が必要 タスク定義 ホットリロード機能を有効にしたとき
RettyOrderの開発ではどう使われているか? • google/wire(DIライブラリ)のコードを生成する • GraphQLのスキーマからGoのコードを生成する • golangci-lintによるコードの静的解析 & コードの自動修正をする •
開発に必要なデータベースを用意する • sql-migrateを利用してマイグレートする • データベースからGORMの構造体を生成する
まとめ go-taskのメリット • シェルスクリプトで実現しようとすると複雑な処理になる機能がgo-taskを使うと簡単に 利用できる ◦ タスクを指定して実行できる ◦ タスク内で別タスクを呼び出せる ◦
ホットリロード機能が使える • YAMLでタスクを定義できるのでメンテナンスがしやすい Rettyでの使われ方 • Rettyではgo-taskをRettyOrderの開発で使っている • ホットリロードで再実行したタスクは別プロセスで起動されるので、 多重起動を防ぐために前のプロセスを落としてからタスクを実行している • GraphQL用の構造体やデータベースからGORMの構造体を生成する サンプルコード: https://github.com/pyama2000/samle-go-task